福建网站开发有限开发公司,wordpress 504,网站建设的费用包括,镇江网站优化推广 检索增强生成应用程序的调优策略
没有一种放之四海而皆准的算法能够最好地解决所有问题。
本文通过数据科学家的视角审视检索增强生成#xff08;RAG#xff09;管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似#xff0c;例如RAG管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似例如数据增强技术不是超参数而是可以调整和实验的旋钮本文还将介绍您可以应用的不同策略这些策略本身不是超参数。
本文涵盖以下按相关阶段排序的“超参数”。在RAG 管道的
摄取阶段您可以通过以下方式实现性能改进
数据清洗分块嵌入模型元数据多重索引索引算法
在推理阶段检索和生成您可以调整
查询转换检索参数高级检索策略重新排序模型LLM及时工程
请注意本文涵盖了 RAG 的文本用例。对于多模式 RAG 应用可能需要考虑不同的因素。
摄取阶段
摄取阶段是构建 RAG 管道的准备步骤类似于 ML 管道中的数据清理和预处理步骤。通常摄取阶段包括以下步骤
收集数据块数据生成块的向量嵌入将向量嵌入和块存储在向量数据库中 RAG 管道的摄取阶段
本节讨论有影响力的技术和超参数您可以应用和调整这些技术和超参数以提高推理阶段检索到的上下文的相关性。
数据清洗
与任何数据科学管道一样数据质量会严重影响 RAG 管道中的结果 。在继续执行以下任何步骤之前请确保您的数据满足以下条件
清洗至少应用自然语言处理中常用的一些基本数据清理技术例如确保所有特殊字符都正确编码。准确确保您的信息一致且事实准确以避免信息冲突使您的LLM感到困惑。
分块
对文档进行分块是 RAG 管道中外部知识源的重要准备步骤这可能会影响性能 。它是一种生成逻辑上连贯的信息片段的技术通常是将长文档分解成较小的部分但它也可以将较小的片段组合成连贯的段落。
您需要考虑的一项是分块技术的选择。例如在LangChain中不同的文本拆分器通过不同的逻辑来拆分文档例如按字符、令牌等。这取决于您拥有的数据类型。例如如果您的输入数据是代码则您将需要使用不同的分块技术如果它是 Markdown 文件您将需要使用不同的分块技术。
块 ( chunk_size)的理想长度取决于您的用例如果您的用例是问答您可能需要较短的特定块但如果您的用例是摘要您可能需要更长的块。此外如果块太短它可能无法包含足够的上下文。另一方面如果块太长它可能包含太多不相关的信息。
此外您需要考虑块之间的“滚动窗口”( overlap)以引入一些额外的上下文。
嵌入模型
嵌入模型是检索的核心。嵌入的质量会严重影响您的检索结果。通常生成的嵌入的维数越高嵌入的精度就越高。
要了解可用的替代嵌入模型您可以查看大规模文本嵌入基准 (MTEB) 排行榜其中涵盖 164 个文本嵌入模型在撰写本文时。
虽然您可以开箱即用地使用通用嵌入模型但在某些情况下根据您的特定用例微调嵌入模型可能是有意义的以避免稍后出现域外问题 。根据 LlamaIndex 进行的实验微调嵌入模型可以使检索评估指标的性能提高 5-10% 。
请注意您无法微调所有嵌入模型例如OpenAItext-ebmedding-ada-002目前无法微调。
元数据
当您将矢量嵌入存储在矢量数据库中时某些矢量数据库允许您将它们与元数据或未矢量化的数据存储在一起。使用元数据注释向量嵌入有助于对搜索结果进行额外的后处理例如元数据过滤[1,3,8,9]。例如您可以添加元数据例如日期、章节或子章节参考。
多重索引
如果元数据不足以提供附加信息来逻辑地分隔不同类型的上下文您可能需要尝试使用多个索引。例如您可以对不同类型的文档使用不同的索引。请注意您必须在检索时合并一些索引路由。
索引算法
为了实现大规模快速相似性搜索矢量数据库和矢量索引库使用近似最近邻 (ANN) 搜索而不是 k 最近邻 (kNN) 搜索。顾名思义ANN 算法近似最近邻因此可能不如 kNN 算法精确。。
您可以尝试不同的 ANN 算法例如Facebook Faiss聚类、Spotify Annoy树、Google ScaNN矢量压缩和HNSWLIB邻近图。此外许多 ANN 算法都有一些您可以调整的参数例如HNSW的ef、efConstruction和maxConnections。
此外您可以为这些索引算法启用矢量压缩。与 ANN 算法类似矢量压缩会损失一些精度。但是根据矢量压缩算法的选择及其调整您也可以对此进行优化。
然而在实践中这些参数已经由向量数据库和向量索引库的研究团队在基准测试过程中调整而不是由 RAG 系统的开发人员调整。但是如果您想尝试使用这些参数来发挥最后的性能我建议您从这篇文章开始
推理阶段检索和生成
RAG 管道的主要组件是检索组件和生成组件。本节主要讨论改进检索的策略查询转换、检索参数、高级检索策略和重新排序模型因为这是两者中影响更大的部分。但它也简要介绍了一些提高生成的策略LLM和即时工程 RAG 管道的推理阶段
查询转换
由于在 RAG 管道中检索附加上下文的搜索查询也嵌入到向量空间中因此其措辞也会影响搜索结果。因此如果您的搜索查询没有产生令人满意的搜索结果您可以尝试各种查询转换技术例如
重新措辞使用LLM重新措辞查询并重试。假设文档嵌入 (HyDE)使用 LLM 生成对搜索查询的假设响应并将两者用于检索。子查询将较长的查询分解为多个较短的查询。
检索参数
检索是 RAG 管道的重要组成部分。首先要考虑的是语义搜索是否足以满足您的用例或者您是否想尝试混合搜索。
在后一种情况下您需要在混合搜索中尝试对稀疏和密集检索方法的聚合进行加权。因此调整参数alpha来控制语义 (alpha 1 ) 和基于关键字的搜索 (alpha 0 )之间的权重将变得必要。
此外要检索的搜索结果的数量也将发挥重要作用。检索到的上下文数量将影响所使用的上下文窗口的长度。此外如果您使用重新排名模型则需要考虑向模型输入多少上下文。
请注意虽然语义搜索使用的相似性度量是一个可以更改的参数但您不应该对其进行实验而是根据使用的嵌入模型进行设置例如text-embedding-ada-002支持余弦相似性或multi-qa-MiniLM-l6-cos-v1支持余弦相似性、点积和欧几里得距离 。
高级检索策略
从技术上讲本节可以单独成一篇文章。对于本概述我们将尽可能保持简洁。
本节的基本思想是用于检索的块不一定与用于生成的块相同。理想情况下您可以嵌入较小的块进行检索但检索更大的上下文。
句子窗口检索不只是检索相关句子而是检索检索到的句子之前和之后的适当句子的窗口。自动合并检索文档以树状结构组织。在查询时独立但相关的较小块可以合并到更大的上下文中。
重新排列模型
虽然语义搜索根据与搜索查询的语义相似性来检索上下文但“最相似”并不一定意味着“最相关”。重新排序模型例如Cohere的重新排序模型可以通过计算每个检索到的上下文的查询相关性的分数来帮助消除不相关的搜索结果 。 “最相似”并不一定意味着“最相关” 如果您使用重新排序模型您可能需要重新调整重新排序输入的搜索结果数量以及您想要输入 LLM 的重新排序结果数量。
与嵌入模型一样您可能需要尝试根据您的特定用例微调重新排序器。
LLM
LLM是生成回复的核心组件。与嵌入模型类似您可以根据自己的要求选择多种 LLM例如开放模型与专有模型、推理成本、上下文长度等。
与嵌入模型或重新排序模型一样您可能需要尝试根据您的特定用例对LLM 进行微调以纳入特定的措辞或语气。
及时工程
你如何表达或设计你的提示将显着影响LLM完成。 请仅根据搜索结果给出您的答案不要考虑其他任何内容 很重要您的答案必须基于所提供的搜索结果。
请解释为什么您的答案基于搜索结果 此外在提示中使用少量示例可以提高完成的质量。
正如检索参数中提到的输入到提示中的上下文数量是您应该尝试的一个参数 。虽然 RAG 管道的性能可以随着相关上下文的增加而提高但您也可能会遇到“迷失在中间”的效果即如果将相关上下文放置在许多上下文的中间LLM 就无法识别相关上下文。上下文。
概括
随着越来越多的开发人员获得 RAG 管道原型设计的经验讨论将 RAG 管道引入生产就绪性能的策略变得更加重要。本文讨论了不同的“超参数”以及您可以根据相关阶段在 RAG 管道中调整的其他旋钮
本文涵盖了摄取截断的以下策略
数据清理确保数据干净且正确。分块选择分块技术、块大小 ( chunk_size) 和块重叠 ( overlap)。嵌入模型嵌入模型的选择包括。维度以及是否对其进行微调。元数据是否使用元数据以及元数据的选择。多重索引决定是否针对不同的数据集合使用多个索引。索引算法可以调整 ANN 和矢量压缩算法的选择和调整但通常不由从业者进行调整。
以及推理截断检索和生成的以下策略
查询转换尝试改写、HyDE 或子查询。检索参数搜索技术的选择alpha如果启用了混合搜索和检索的搜索结果的数量。高级检索策略是否使用高级检索策略例如句子窗口或自动合并检索。重新排序模型是否使用重排序模型、重排序模型的选择、输入重排序模型的搜索结果数量以及是否微调重排序模型。LLMLLM 的选择以及是否对其进行微调。及时工程尝试不同的措辞和少量示例。