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

FDE知识库

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


收藏

解锁RAG应用:利用FastRAG中的Dense Retrievers优化开放域问答

发布日期:2024-08-30 12:47:46 浏览次数: 2707
作者:AI技术研习社

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

检索增强生成是一种在自然语言处理领域的前沿技术,结合了信息检索和生成模型的优势。其核心目标是通过检索相关段落或文档,生成信息更丰富、上下文更切合用户查询的响应。

这项技术在诸多应用中展现了巨大的潜力,尤其是在开放域问答领域。开放域问答的研究重点在于开发能够理解并回答用户多样化问题的系统,这通常涉及利用信息检索技术从海量非结构化数据中提取相关信息。

信息检索过去主要依赖于基于单词统计的稀疏技术。在传统方法中,文档通常使用词袋模型进行表示,文档与查询的相关性取决于特定词语的存在与否。

评分函数(如 BM25 和 TF-IDF)根据词频对文档进行评分,通过平衡关键字在文档中的出现频率与其在一般语境中的流行程度来判断相关性。一个常用的数据库是 Elasticsearch,它使用 Lucene 文本搜索引擎,结合单词统计与编辑距离(一种基于语法的计算方法)进行文本搜索。

下面是一个基于单词统计的稀疏技术的简单示例代码,使用 Python 的 Elasticsearch 库来执行基于 TF-IDF 和 BM25 的查询:

from elasticsearch import Elasticsearch# 初始化Elasticsearch客户端es = Elasticsearch()# 索引名称index_name = "example_index"
# 查询语句query = "sample query"
# 使用BM25的查询示例bm25_query = {"query": {"match": {"content": {"query": query,"operator": "and"}}}}
# 执行BM25查询bm25_response = es.search(index=index_name, body=bm25_query)
print("BM25 Query Results:")for hit in bm25_response['hits']['hits']:print(hit['_source'])
# 使用TF-IDF的查询示例tfidf_query = {"query": {"match": {"content": {"query": query,"operator": "and"}}},"similarity": {"default": {"type": "classic"# classic相当于TF-IDF}}}
# 执行TF-IDF查询tfidf_response = es.search(index=index_name, body=tfidf_query)
print("TF-IDF Query Results:")for hit in tfidf_response['hits']['hits']:    print(hit['_source'])

随着自然语言处理和机器学习领域的飞速发展,信息检索已经迎来了一场革命性的变革,转向采用更为密集的嵌入表示。这些嵌入技术能够精准捕捉单词和短语的深层语义,从而实现对内容的细致理解。

相较于传统的单词统计方法,嵌入表示在匹配查询与相关文档时展现出更高的准确性,因为它能够揭示那些微妙的语义相似性,这些相似性往往在传统方法下难以被发现。

从稀疏表示到密集表示的这一跃进,不仅显著提升了检索系统的整体性能,也极大增强了检索结果的精确度。

对于那些渴望深入了解神经信息检索(Neural IR)的读者,我们推荐阅读Mitra和Craswell在2018年的开创性工作;而对于希望探索信息检索问答领域的研究者,Abbasiantaeb和Momtazi在2021年的综述文章将是一个宝贵的资源。

这篇博客介绍了密集检索,我们重点介绍了两种密集文档检索模型:密集段落检索(DPR, Karpukhin et al. 2020)和 BERT 上的情境化后期交互 (ColBERT, Khattab and Zaharia 2020)。两种模型都使用语义搜索来查找相关文档。

语义搜索意味着我们使用文本的密集表示来衡量给定查询与潜在相关文档之间的相似性。这两种模型使用不同的方法来存储文档的向量并测量查询和文档之间的相似性。

我们将通过在称为自然问题(NQ、Kwiatkowski 等人,2019 年)的已知基准上测量准确性和延迟来比较模型,该基准是用户提交的问题的集合,可以在维基百科文章中找到答案。

FastRAG,这是一个由英特尔实验室开发的框架,最近作为开源软件发布。该框架的目标是实现检索增强生成式人工智能应用的快速研究和开发。这些可用于生成任务,如问答、总结、对话系统和内容创建,同时利用信息检索组件来使用外部知识锚定LLM输出。

应用程序由管道表示,该管道通常由知识库 (KB)、检索器、排名器和读取器组成,通常为 LLM“读取”查询和检索的文档,并生成输出。人们可以尝试不同的架构、模型,对性能和延迟的结果进行基准测试。我们提供的几种型号更适合英特尔硬件,以实现更低的延迟和相当的精度。

在信息检索领域,近期的更新推动了基于Transformer的编码器模型的应用。这些模型在检索中表现出了显著的优势:知识库中的文档被转换为向量并存储在索引中。

在查询时,查询内容同样被编码为向量,然后通过向量相似性搜索找到最相关的文档。这个过程不仅可以有效地筛选出相关文档,还可以用于对检索结果进行重新排序,尤其是对已检索到的文档进行进一步优化。这样,在运行时能够实现更精准的即时检索和排序。

在密集检索中,有几种常见的方法。其中一种方法是使用单个令牌的嵌入作为整个文档的代表。DPR(由 Karpukhin 等人在 2020 年提出)就是这种方法的一个典型例子。

在 DPR 中,编码器被训练为将整个文档的内容“总结”到第一个令牌的嵌入中。这个方法属于双编码器架构的一种形式,因为它使用了两个独立的编码器,一个用于查询,另一个用于文档。通过这种方式,查询和文档分别被编码为向量,随后进行匹配以检索最相关的内容。

另一种方法称为后期互动,如 ColBERT 中首次定义的那样(Khattab 和 Zaharia 2020)。这个想法是保存(并索引)文档中所有单词的编码向量。在运行时,查询向量将与所有文档单词的向量进行比较(因此在后期交互中为“延迟”),从而检索比 DPR 更相关的文档。请注意,为每个标记编制索引(而不仅仅是每个文档的第一个标记)可以增加索引大小。

这项工作的后期改进,即 ColBERT v2 和 PLAID(Santhanam、Khattab、Saad-Falcon 等人,2022 年;Santhanam, Khattab, Potts, et al. 2022) 帮助减少了索引大小和延迟时间,这要归功于两个主要改进:首先是索引中向量的量化和压缩。

其次是一组启发式方法,使用 K-means 算法对向量进行聚类,根据聚类的质心分层选择相关文档的标记进行查询标记。带有 PLAID 索引的 ColBERT v2 以低延迟实现了最先进的检索性能,接近稀疏检索(BM25、Lucene、Elasticsearch 等)的顺序,但精度要高得多。

使用FastARG之前,先进行安装。

pip install fastrag

在 FastRAG 中使用 ColBERT。一旦我们有了所有的成分,我们就初始化文档存储。

from fastrag.stores import PLAIDDocumentStore
document_store = PLAIDDocumentStore(index_path="data-index/",checkpoint_path="ColBERT-model/",collection_path="my-documents.tsv")py

from fastrag.retrievers.colbert import ColBERTRetriever
retriever = ColBERTRetriever(document_store=document_store)

我们使用我们刚刚定义的文档存储来定义一个检索器。我们可以使用 Haystack 流水线 API 来连接外部组件。在此示例中,管道仅包含检索器:

from haystack import Pipeline
p = Pipeline()p.add_node(component=retriever, name="Retriever", inputs=["Query"])
p.run(query, params={"Retriever": {"top_k": k}})

结果是一个哈希映射,其中包含包含结果列表的文档键:具有相关性分数的文档。


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

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

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

联系我们

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

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

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

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

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

一、 定义

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

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

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

二、 账号注册与登录

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

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

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

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

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

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

三、 服务内容与规范

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

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

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

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

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

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

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

四、 知识产权声明

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

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

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

五、 个人信息保护

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

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

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

六、 免责声明

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

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

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

七、 违约责任

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

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

八、 法律适用与争议解决

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

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

九、 其他

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

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

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


已查阅