Cherche
神经搜索
Cherche 使得可以开发一个使用检索器和预训练语言模型作为检索器和排序器的神经搜索管道。Cherche 的主要优势在于它能够构建端到端的管道。此外,由于其与批处理计算的兼容性,Cherche 非常适合离线语义搜索。
以下是 Cherche 提供的一些功能:
安装 🤖
要在 CPU 上使用简单的检索器,例如 TfIdf、Flash、Lunr、Fuzz,请使用以下命令安装 Cherche:
pip install cherche
要在 CPU 上使用任意语义检索器或排序器,请使用以下命令安装 Cherche:
pip install "cherche[cpu]"
最后,如果您计划在 GPU 上使用任意语义检索器或排序器,请使用以下命令:
pip install "cherche[gpu]"
按照这些安装说明操作,您将能够根据您的需求使用 Cherche。
文档
文档可在此处查阅,其中提供了关于检索器、排序器、管道和示例的详细信息。
快速开始 📑
文献
Cherche 允许在对象列表中找到正确的文档。以下是一个语料库的示例。
from cherche import data
documents = data.load_towns()
documents[:3]
[{'id': 0,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'article': '巴黎是法国的首都和人口最多的城市。'},
{'id': 1,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'article': "自17世纪以来,巴黎一直是欧洲主要的科学和艺术中心之一。"},
{'id': 2,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'article': '巴黎市是该地区和省的中心和政府所在地。'
}]
检索器排序器
以下是由 TF-IDF 组成的神经搜索管道示例,它快速检索文档,然后是一个排序模型。排序模型根据查询和文档之间的语义相似性对检索器生成的文档进行排序。我们可以使用查询列表调用管道并获得每个查询的相关文档。
from cherche import data, retrieve, rank
from sentence_transformers import SentenceTransformer
# 字典列表
documents = data.load_towns()
# 在标题和文章字段上检索
retriever = retrieve.BM25(
key="id",
on=["title", "article"],
documents=documents,
k=30
)
# 在标题和文章字段上排序
ranker = rank.Encoder(
key="id",
on=["title", "article"],
encoder=SentenceTransformer("sentence-transformers/all-mpnet-base-v2").encode,
k=3,
)
# 创建管道
search = retriever + ranker
search.add(documents=documents)
# 为3个查询搜索文档。
search(["Bordeaux", "Paris", "Toulouse"])
[[{'id': 57, 'similarity': 0.69513524},
{'id': 63, 'similarity': 0.6214994},
{'id': 65, 'similarity': 0.61809087}],
[{'id': 16, 'similarity': 0.59158516},
{'id': 0, 'similarity': 0.58217555},
{'id': 1, 'similarity': 0.57944715}],
[{'id': 26, 'similarity': 0.6925601},
{'id': 37, 'similarity': 0.63977146},
{'id': 28, 'similarity': 0.62772334}]]
我们可以映射索引到文档以使用管道访问其内容:
search += documents
search(["Bordeaux", "Paris", "Toulouse"])
[[{'id': 57,
'title': 'Bordeaux',
'url': 'https://en.wikipedia.org/wiki/Bordeaux',
'similarity': 0.69513524},
{'id': 63,
'title': 'Bordeaux',
'similarity': 0.6214994},
{'id': 65,
'title': 'Bordeaux',
'url': 'https://en.wikipedia.org/wiki/Bordeaux',
'similarity': 0.61809087}],
[{'id': 16,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'article': '巴黎接待了12。',
'similarity': 0.59158516},
{'id': 0,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'similarity': 0.58217555},
{'id': 1,
'title': 'Paris',
'url': 'https://en.wikipedia.org/wiki/Paris',
'similarity': 0.57944715}],
[{'id': 26,
'title': 'Toulouse',
'url': 'https://en.wikipedia.org/wiki/Toulouse',
'similarity': 0.6925601},
{'id': 37,
'title': 'Toulouse',
'url': 'https://en.wikipedia.org/wiki/Toulouse',
'similarity': 0.63977146},
{'id': 28,
'title': 'Toulouse',
'url': 'https://en.wikipedia.org/wiki/Toulouse',
'similarity': 0.62772334}]]
检索
Cherche 提供的检索器基于查询过滤输入文档。
- retrieve.TfIdf
- retrieve.BM25
- retrieve.Lunr
- retrieve.Flash
- retrieve.Encoder
- retrieve.DPR
- retrieve.Fuzz
- retrieve.Embedding
排序
Cherche 提供的排序器过滤检索器生成的输出文档。
Cherche 排序器兼容 SentenceTransformers 模型,这些模型在 Hugging Face hub 上提供。
- rank.Encoder
- rank.DPR
- rank.CrossEncoder
- rank.Embedding
问答
Cherche 提供的模块专门用于问答。这些模块与 Hugging Face 的预训练模型兼容,并完全集成到神经搜索管道中。
贡献者 🤝
Cherche 是为雷诺公司创建的,现在可供所有人使用。我们欢迎所有贡献。
致谢 👏
Lunr 检索器是 Lunr.py 的包装器。Flash 检索器是 FlashText 的包装器。DPR、Encoder 和 CrossEncoder 排序器是专门用于在神经搜索管道中使用 SentenceTransformers 预训练模型的包装器。
引用
如果您使用 Cherche 生成科学出版物的结果,请参考我们的 SIGIR 论文:
@inproceedings{Sourty2022sigir,
author = {Raphael Sourty 和 Jose G. Moreno 和 Lynda Tamine 和 Francois-Paul Servant},
title = {CHERCHE: 一种快速实现信息检索管道的新工具},
booktitle = {SIGIR 2022 会议论文集},
year = {2022}
}
开发团队 💾
Cherche 开发团队由 Raphaël Sourty、Francois-Paul Servant、Nicolas Bizzozzero、Jose G Moreno 组成。 🥳