当前位置: 曲轴 >> 曲轴优势 >> 提升RAG性能的关键技术从数据清理到混合
年,ChatGPT以及其他大型语言模型纷纷涌现。与此同时,大型语言模型的微调变得也越来越简单。各行各业,对个性化和完全运作的RAG(检索增强生成)的需求也迅速增加,每个客户都渴望拥有自己量身定制的解决方案。
这篇论文推荐大家读一下《Retrieval-AugmentedGenerationforLargeLanguageModels:ASurvey》(文末有链接)。
它涵盖了关于RAG框架及其局限性的所有信息。它还列举了提高其在检索、增强和生成方面性能的最新技术。这些技术使得这个框架在可扩展性和生产使用方面很出色。
以下内容是根据论文提炼出来的一些关键内容,我认为会使你的RAG更高效。
让RAG更高效的9种方法1、提升索引数据的质量索引的数据决定了RAG答案的质量,因此首要任务是在摄取数据之前尽可能对其进行整理。(垃圾输入,垃圾输出仍然适用于此)
通过删除重复/冗余信息,识别不相关的文档,检查事实的准确性(如果可能的话)来实现这一点。
使用过程中,对RAG的维护也很重要,还需要添加机制来更新过时的文档。
在构建RAG时,清理数据是一个经常被忽视的步骤,因为我们通常倾向于倒入所有文档而不验证它们的质量。
以下我建议可以快速解决一些问题:
通过清理特殊字符、奇怪的编码、不必要的HTML标签来消除文本噪音……还记得使用正则表达式的老的NLP技术吗?可以把他们重复使用起来。
通过实施一些主题提取、降维技术和数据可视化,发现与主题无关的文档,删除它们。
通过使用相似性度量删除冗余文档
2、化索引结构构建RAG时,块大小是一个关键参数。它决定了我们从向量存储中检索的文档的长度。小块可能导致文档缺失一些关键信息,而大块可能引入无关的噪音。
找到最佳块大小是要找到正确的平衡。
如何高效地做到这一点?试错法(反复验证)。
然而,这并不是让你对每一次尝试进行一些随机猜测,并对每一次经验进行定性评估。
你可以通过在测试集上运行评估并计算指标来找到最佳块大小。LlamaIndex有一些功能可以做到这一点。可以在他们的博客中了解更多。
3、添加元数据将元数据与索引向量结合使用有助于更好地构建它们,同时提高搜索相关性。
以下是一些元数据有用的情景:
如果你搜索的项目中,时间是一个维度,你可以根据日期元数据进行排序
如果你搜索科学论文,并且你事先知道你要找的信息总是位于特定部分,比如实验部分,你可以将文章部分添加为每个块的元数据并对其进行过滤仅匹配实验
元数据很有用,因为它在向量搜索之上增加了一层结构化搜索。
4、输入查询与文档对齐LLMs和RAGs之所以强大,因为它们可以灵活地用自然语言表达查询,从而降低数据探索和更复杂任务的进入门槛。
然而,有时,用户用几个词或短句的形式作为输入查询,查询结果会出现与文档之间存在不一致的情况。
通过一个例子来理解这一点。
这是关于马达引擎的段落(来源:ChatGPT)
发动机堪称工程奇迹,以其复杂的设计和机械性能驱动着无数的车辆和机械。其核心是,发动机通过一系列精确协调的燃烧事件将燃料转化为机械能。这个过程涉及活塞、曲轴和复杂的阀门网络的同步运动,所有这些都经过仔细校准,以优化效率和功率输出。现代发动机有多种类型,例如内燃机和电动机,每种都有其独特的优点和应用。对创新的不懈追求不断增强汽车发动机技术,突破性能、燃油效率和环境可持续性的界限。无论是在开阔的道路上为汽车提供动力还是驱动工业机械,电机仍然是现代世界动态运动的驱动力。
在这个例子中,我们制定一个简单的查询,“你能简要介绍一下马达引擎的工作原理吗?”,与段落的余弦相似性为0.72。
其实已经不错了,但还能做得更好吗?
为了做到这一点,我们将不再通过段落的嵌入来索引该段落,而是通过其回答的问题的嵌入来索引该段落。
考虑这三个问题,段落分别回答了这些问题:
发动机的基本功能是什么?
发动机如何将燃料转化为机械能?
发动机运行涉及哪些关键部件,它们如何提高发动机的效率?
通过计算得出,它们与输入查询的相似性分别为:
0.
0.
0.
这些值更高,表明输入查询与问题匹配得更精确。
将块与它们回答的问题一起索引,略微改变了问题,但有助于解决对齐问题并提高搜索相关性:我们不是优化与文档的相似性,而是优化与底层问题的相似性。
5、混合检索虽然向量搜索有助于检索与给定查询相关的语义相关块,但有时在匹配特定关键词方面缺乏精度。
根据用例,有时可能需要精确匹配。
想象一下,搜索包含数百万电子商务产品的矢量数据库,对于查询“阿迪达斯参考XYZ运动鞋白色”,最上面的结果包括白色阿迪达斯运动鞋,但没有一个与确切的XYZ参考相匹配。
相信大家都不能接受这个结果。
为了解决这个问题,混合检索是一种解决方案。该策略利用了矢量搜索和关键词搜索等不同检索技术的优势,并将它们智能地结合起来。
通过这种混合方法,您仍然可以匹配相关关键字,同时保持对查询意图的控制。
查看Pinecone的入门指南,了解更多关于混合搜索的信息(文末附链接)。
6、重新排名当查询向量存储时,前K个结果不一定按最相关的方式排序。当然,它们都是相关的,但在这些相关块中,最相关的块可能是第5或第7个,而不是第1或第2个。
这就是重新排名的用武之地。
重新排名的简单概念是将最相关的信息重新定位到提示的边缘,这一概念已在各种框架中成功实现,包括LlamaIndex、LangChain和HayStack。
例如,DiversityRanker专注于根据文档的多样性进行重新排序,而LostInTheMiddleRanker在上下文窗口的开始和结束之间交替放置最佳文档。
7、提示压缩研究表明,在检索上下文中的噪声会对RAG性能产生不利影响,更精确地说,对由LLM生成的答案产生不利影响。
一些方案建议在检索后再应用一个后处理步骤,以压缩无关上下文,突出重要段落,并减少总体上下文长度。
选择性上下文等方法和LLMLingua使用小型LLM来计算即时互信息或困惑度,从而估计元素重要性。(文末付论文链接)
8、HyDE这个方法来自论文《PreciseZero-ShotDenseRetrievalwithoutRelevanceLabels》,它代表HypotheticalDocumentEmbedding。
当进行查询时,HyDE会为LLM生成一个假设的答案。
该文档虽然捕获了相关性模式,但并不真实,并且可能包含不准确之处。随后,无监督对比学习编码器(例如Contriever)将文档转换为嵌入向量。
该向量用于精确定位语料库嵌入空间中的邻域,从而能够基于向量相似性检索相似的真实文档。在第二步中,生成的文档锚定到实际语料库,编码器的密集瓶颈有效地过滤掉不正确的细节。
实验证明,HyDE始终优于最先进的无监督密集检索器Contriever,并在各种任务(如Web搜索、QA和事实验证)和语言中表现出色。
9、查询重写和扩展当用户与RAG交互时,查询结果不一定能获得最佳的回答,并且不能充分表达与向量存储中的文档匹配的结果。
为了解决这个问题,在送到RAG之前,我们先发生给LLM重写此查询。
这可以通过添加中间LLM调用轻松实现,但需要继续了解其他的技术实现(参考论文《QueryExpansionbyPromptingLargeLanguageModels》)。
结论RAG并不是灵丹妙药。它们可能对你的用例有70-80%的工作效率。但为了让它们真正正常工作*,你*需要正确调整它们;这需要时间、工程技能和一点黑魔法。
希望你学到了有用的技术来提高基于RAG的解决方案的质量。
参考链接:Retrieval-AugmentedGenerationforLargeLanguageModels:ASurvey:
转载请注明:http://www.aideyishus.com/lkgx/9120.html