2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

RAG优化神器:rerankers重新排名模型的终极方案,提供轻量级统一API

发布日期:2024-09-15 08:28:26 浏览次数: 3326
作者:AI技术研习社

微信搜一搜,关注“AI技术研习社”

在基于检索的生成(Retrieval-Augmented Generation, RAG)系统中,Reranker 是用于提升检索文档质量的一个关键组件。首先,我们来分解一下 Reranker 的定义及其必要性。

什么是 Reranker?

Reranker 是对初步检索出的候选文档集进行重新排序的模型或算法。它在初始检索(通常基于简单的匹配算法,如 TF-IDF、BM25 或 Dense Embedding)之后,对结果进行二次处理,确保最相关的内容排在前面。Reranker 通常利用更复杂的语义理解和深度模型,比如 BERT 或其他 Transformer 模型,来更好地衡量候选文档与查询之间的相关性。

为什么需要 Reranker?

在大多数检索任务中,初次检索的文档集往往包含了许多相关性较低或不完全匹配的内容。这是因为初步检索模型通常基于词频或简单的向量匹配,难以精准捕捉查询和文档之间的深层次语义关系。因此,即使初始结果能找到一些相关文档,也无法保证这些文档是最优的答案。

引入 Reranker 的好处

提升相关性通过对初步结果进行重新排序,Reranker 可以确保将最相关的文档排在前列,提升用户体验。

减少噪声:Reranker 能有效过滤掉不太相关的文档,减少冗余信息。

增强模型理解能力:相比于初级的词频或稀疏向量模型,Reranker 利用深度语言模型进行更深层次的文本理解。

提升生成质量:在 RAG 系统中,生成部分依赖于检索出的信息。如果检索内容的质量得到提升,生成的回答或文档也会更加准确和丰富。

Reranker 如何应用?

初次检索使用如 TF-IDF 或 Dense Embedding 模型快速从大规模知识库中检索出一组候选文档。这一步需要快速响应,通常优先考虑速度。

二次排序:将初次检索得到的候选文档输入到 Reranker 模型中。Reranker 基于深度模型(如 BERT)重新评估每个文档的相关性,生成一个新的排序。

结果选择:基于 Reranker 生成的新排序,选择前 N 个最相关的文档,提供给下游的生成模型或直接展示给用户。

生成或展示:在 RAG 系统中,最终生成的回答是基于重排序后的文档,因此其质量会更高。如果用于信息检索系统,用户会得到最相关的检索结果。

本文介绍了 rerankers,这是一个 Python 库,它为最常用的重新排序方法提供了一个易于使用的界面。重新排序是许多检索管道不可或缺的组成部分;但是,有许多方法,依赖于不同的实现方法。

rerankers 将这些方法统一到一个用户友好的界面中,允许从业者和研究人员探索不同的方法,同时只需更改一行 Python 代码。此外,rerankers 确保其实现以尽可能少的依赖项完成,并尽可能重用原始实现,从而保证我们的简化界面与更复杂的界面相比不会降低性能。

完整的源代码和支持模型列表会定期更新,并在 https://github.com/answerdotai/rerankers 上提供。

论文地址:https://arxiv.org/pdf/2408.17344

Reranker 是任何检索架构的重要组成部分,但它们通常也比管道的其他部分更模糊。最近的一些方法开始探索使用大型语言模型(LLMs)作为重新排序器,这是一个备受关注的研究方向。

一些方法利用了非常强大的 LLMs,如 GPT-4,来执行零样本的列表重新排序,而另一些方法则通过在大型模型的输出上微调较小模型,达成了一种知识蒸馏的效果,从而创建了更高效的列表重新排序器,如 RankZephyr。

此外,最新的研究还探索了在推理阶段引入模型压缩技术,以便使用像 Gemma2 这样的 LLM 作为重新排序器,大幅降低计算成本的同时保持高性能。

Reranker 类有一个公开的方法 rank,它接受一个查询和一组文档,并返回一个 RankedResults 对象,如 Section 2.2 所示,其中包含重新排名的文档。

在开展这项工作时,没有现成的库能够提供一致的 API 来访问常见的重新排序方法,因此,现有的 reranker 没有直接的等效实现。虽然像 Terrier 和 Anserini 这样的广泛信息检索框架确实集成了重新排序功能,但它们旨在作为功能全面的检索平台,采用的开发方法与轻量级的重新排序器截然不同。

对于大多数 reranker 中集成的单个方法,通常已经有现成的在线 API 或实现可供使用。Reranker 并不与这些实现直接竞争,事实上,如果某个现有库足够成熟且依赖适中,我们的库通常会重用原作者的部分代码,或者作为这些库的封装器。

开始使用rerankers

安装非常简单。核心包只附带两个依赖项,tqdm 和 pydantic,以避免与当前环境发生任何冲突。然后,您可以仅安装要试用的模型所需的依赖项:

# Core package only, will require other dependencies already installedpip install rerankers
# All transformers-based approaches (cross-encoders, t5, colbert)pip install "rerankers[transformers]"
# RankGPTpip install "rerankers[gpt]"
# API-based rerankers (Cohere, Jina, soon MixedBread)pip install "rerankers[api]"
# FlashRank rerankers (ONNX-optimised, very fast on CPU)pip install "rerankers[flashrank]"
# RankLLM rerankers (better RankGPT + support for local models such as RankZephyr and RankVicuna)# Note: RankLLM is only supported on Python 3.10+! This will not work with Python 3.9pip install "rerankers[rankllm]"
# To support LLM-Layerwise rerankers (which need flash-attention installed)pip install "rerankers[llmlayerwise]"
# All of the abovepip install "rerankers[all]"

在一行中加任何受支持的 reranker,无论架构如何:

from rerankers import Reranker
# Cross-encoder default. You can specify a 'lang' parameter to load a multilingual version!ranker = Reranker('cross-encoder')
# Specific cross-encoderranker = Reranker('mixedbread-ai/mxbai-rerank-large-v1', model_type='cross-encoder')
# FlashRank default. You can specify a 'lang' parameter to load a multilingual version!ranker = Reranker('flashrank')
# Specific flashrank model.ranker = Reranker('ce-esci-MiniLM-L12-v2', model_type='flashrank')
# Default T5 Seq2Seq rerankerranker = Reranker("t5")
# Specific T5 Seq2Seq rerankerranker = Reranker("unicamp-dl/InRanker-base", model_type = "t5")
# API (Cohere)ranker = Reranker("cohere", lang='en' (or 'other'), api_key = API_KEY)
# Custom Cohere model? No problem!ranker = Reranker("my_model_name", api_provider = "cohere", api_key = API_KEY)
# API (Jina)ranker = Reranker("jina", api_key = API_KEY)
# RankGPT4-turboranker = Reranker("rankgpt", api_key = API_KEY)
# RankGPT3-turboranker = Reranker("rankgpt3", api_key = API_KEY)
# RankGPT with another LLM providerranker = Reranker("MY_LLM_NAME" (check litellm docs), model_type = "rankgpt", api_key = API_KEY)
# RankLLM with default GPT (GPT-4o)ranker = Reranker("rankllm", api_key = API_KEY)
# RankLLM with specified GPT modelsranker = Reranker('gpt-4-turbo', model_type="rankllm", api_key = API_KEY)
# ColBERTv2 rerankerranker = Reranker("colbert")
# LLM Layerwise Rerankerranker = Reranker('llm-layerwise')
# ... Or a non-default colbert model:ranker = Reranker(model_name_or_path, model_type = "colbert")

Rerankers 将始终尝试根据其名称推断您尝试使用的模型,但如果可以,向其传递 model_type 参数总是更安全的!

然后,无论加载了哪个 reranker,都使用加载的模型对 documents 的查询进行排名:

> results = ranker.rank(query="I love you", docs=["I hate you", "I really like you"], doc_ids=[0,1])> resultsRankedResults(results=[Result(document=Document(text='I really like you', doc_id=1), score=-2.453125, rank=1), Result(document=Document(text='I hate you', doc_id=0), score=-4.14453125, rank=2)], query='I love you', has_scores=True)

所有重新排序器都将返回一个 RankedResults 对象,这是一个 pydantic 对象,其中包含 Result 对象列表和一些其他有用信息,例如原始查询。您可以通过运行 top_k() 从中检索前 k 个结果:

> results.top_k(1)[Result(Document(doc_id=1, text='I really like you', metadata={}), score=0.26170814, rank=1)]

Result 对象在尝试访问它们存储的文档时是透明的,因为 Document 对象只是作为存储 ID 和元数据的一种简单方法而存在。如果要访问给定结果的文本或元数据,可以直接将其作为属性访问:

> results.top_k(1)[0].text'I really like you'

Rerankers,这是一个轻量级的 python 库,支持在各种检索用例中使用各种重新排名方法。Rerankers 提供了一个简单、统一的接口,可以在一个轻量级包中使用几乎所有常见的方法重新排名,而不会对性能造成任何损害。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅