你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在此阶段,你将通过检查包含检索到的基础数据的预期的用户提示,来评估检索增强生成(RAG)解决方案与语言模型的表现。 在达到此阶段之前,你应完成前面的阶段。 必须收集测试文档和查询、对测试文档进行分块、扩充区块、嵌入区块、创建搜索索引并实现搜索策略。 然后,你应评估每个阶段,确保结果符合预期。 至此,应该可以确信,解决方案可以为用户查询返回相关的基础数据。
这些基础数据构成了向语言模型发送提示的上下文,以处理用户的查询。 提示工程策略超出了本文的范围。 本文从基础数据的角度对工程调用语言模型进行了评估。 本文介绍公共语言模型评估指标以及可在模型评估计算中或作为独立指标使用的特定相似性和评估指标。
本文并未尝试详尽列举语言模型指标或相似性和评估指标。 关键要点是,不同的指标提供特定的用例。 只有你对工作负荷有全面了解。 你和数据科学家必须确定要度量的内容以及哪些指标最合适。
本文是一系列文章的其中一篇。 首先阅读 简介 。
语言模型评估指标
应使用多个指标来评估语言模型的响应,包括基础性、完整性、利用率、相关性和正确性。 由于 RAG 模式的总体目标是在生成响应时将相关数据作为语言模型的上下文提供,因此,其中每个指标都应获得较高的分数。 但根据工作负荷,你可能需要优先考虑一个因素而不是另一个。
重要
语言模型响应是不确定的,这意味着对语言模型的相同提示通常会返回不同的结果。 作为评估过程的一部分,在使用语言模型时了解此概念非常重要。 评估语言模型的使用情况时,请考虑使用目标范围而不是单个目标。
了解基础性
基础性(有时称为 忠实性)衡量响应是否完全基于上下文。 它会验证响应未使用上下文中存在的信息之外的其他信息。 低基度指标表示语言模型可能会发出不准确或不敏感的响应。
计算基础性
使用以下方法计算响应的合理性:
- 基于 Azure AI 内容安全的真实性是一款自定义模型,它使用自然语言推理来确定声明(或本例中的区块)是否基于源文档中的上下文。
- 基于大型语言模型的扎根性 通过使用语言模型来确定响应的扎根性水平。
- Ragas 忠实度库。
- MLflow 忠实度计算。
评估基础性
低基础性计算表明语言模型认为这些区块并不相关。 应该评估是否需要在集合中添加数据、调整分块策略或区块大小,或者对提示进行微调。
了解完整性
完整性 度量响应是否回答查询的所有部分。 完整性有助于了解上下文中的区块是否依赖于查询并直接与查询相关,同时提供完整的答案。
计算完整性
可以使用以下方法来计算响应的完整性:
使用 人工智能辅助的检索评分提示。
使用语言模型来帮助衡量语言模型响应的质量。 为了进行此度量,您需要问题、上下文和生成的答案。 以下步骤概述了高级过程:
- 使用语言模型来重新表述、总结或简化问题。 此步骤将确定意图。
- 让模型检查是否在检索到的文档中找到了或者是否可以从中获得意图或意图的答案。 对于每个文档,答案可能是“是”或“否”。 以“是”开头的答案表示检索的文档与意图或意图的答案相关。
- 计算答案以“是”开头的意图的比例。
- 将分数平方以突出显示错误。
评估完整性
如果完整性较低,请通过评估你的嵌入模型来提高完整性。 将内容中的词汇与嵌入模型中的词汇进行比较。 确定是需要特定领域的嵌入模型,还是应该对现有模型进行微调。 下一步是评估分块策略。 如果你使用固定大小的分块,请考虑增加区块大小。 还可以评估测试数据是否有足以彻底解决问题。
了解利用率
使用情况 衡量响应在多大程度上包含上下文中的区块信息。 目标是确定每个区块在多大程度上属于响应的一部分。 如果利用率低,则表明结果可能与查询不相关。 你应与完整性一起评估利用率。
计算利用率
使用语言模型计算利用率。 可以将响应和包含区块的上下文传递给语言模型。 可以要求语言模型确定包含答案的区块数。
评估利用率
下表提供了关于如何评估完整性和利用率的指导。
| 高利用率 | 低利用率 | |
|---|---|---|
| 高完整性 | 无需执行任何操作。 | 返回的数据解决了问题,但也返回不相关的区块。 考虑降低 top-k 参数值,以获得更可能或更确定的结果。 |
| 低完整性 | 语言模型使用你提供的区块,但它们无法完全解决问题。 请考虑进行以下步骤:
|
返回的数据未完全回答问题,并且提供的区块未完全利用。 请考虑进行以下步骤:
|
相关性
相关性 度量语言模型响应与查询相关的程度。
计算相关性
可以使用以下方法来计算响应的相关性:
注意
可以使用 Microsoft Foundry 门户 执行计算或使用本文中的指南自行计算相关性。
评估相关性
相关性较低时,请执行以下任务:
确保提供给语言模型的情况是相关的。
- 确定是否未返回任何相关的可行区块。 如果发现这些区块,请评估嵌入模型。
- 如果没有可行的区块,则查看是否存在相关数据。 如果是这样,请评估您的分块策略。
如果返回了相关区块,请评估提示。
评估方法(如 完整性 输出)的分数应产生类似于相关性分数的结果。
了解正确性
正确性 度量响应准确程度和事实性。
计算正确性
可以使用以下方法来评估正确性:
- 语言模型: 使用语言模型计算正确性。 可以将响应传递给语言模型,理想情况下不同于用于生成结果的语言模型。 可以要求语言模型确定响应是否为事实。
- 外部受信任的源: 使用外部受信任的源验证响应的正确性。 根据受信任的源的 API,可以单独使用受信任的源,也可以将其与语言模型结合使用。
评估正确性
正确性较低时,请执行以下任务:
- 确保提供给语言模型的区块是事实正确的,并且没有数据偏差。 可能需要更正源文档或内容中的任何问题。
- 如果区块实际上是正确的,请评估你的提示。
- 评估模型中是否存在固有不准确之处,这些不准确之处需要通过更具事实依据的数据或微调来克服。
了解相似性和评估指标
你可以在数据科学中使用数百个相似性和评估指标。 有些算法针对特定领域,如语音到文本或语言到语言的翻译。 每种算法都有独特的指标计算策略。
数据科学家可确定要衡量的内容,以及可以用来衡量它的指标或指标组合。 例如,对于语言翻译,双语评估替补 (BLEU) 指标会检查机器翻译和人工翻译中出现了多少个 n-gram,以根据翻译是否使用相同的单词来衡量相似度。 而余弦相似性可使用机器翻译和人工翻译之间的嵌入来衡量语义相似性。 如果你的目标是让翻译具有较高的语义相似性,并使用与人工翻译相似的词汇,那么你会希望BLEU分数和余弦相似性都很高。 如果只关心语义相似性,请关注余弦相似性。
下面列出了一些常见的相似性和评估指标的示例。 列出的相似性指标描述为基于令牌、基于序列或基于编辑的指标。 这些说明说明了指标用于计算相似性的方法。 列表还包含三种用于评估从一种语言翻译成另一种语言的文本质量的算法。
- 最长的常见子字符串 是基于序列的算法,可查找两个字符串之间最长的常见子字符串。 最长的常见子字符串百分比用最长的常见子字符串除以较小或较大输入字符串的字符数。
- 最长的常见子序列(LCS) 是一种基于序列的算法,用于查找两个字符串之间的最长子序列。 LCS 并不要求子序列按连续顺序排列。
- 余弦相似性 是一种基于标记的算法,用于计算两个向量之间角度的余弦值。
- Jaro-Winkler 距离 是基于编辑的算法,用于计算将一个字符串转换为另一个字符串的最小步骤数。
- 哈明距离 是基于编辑的算法,用于测量将一个字符串转换为另一个字符串所需的最小替换数。
- Jaccard 索引 是基于令牌的算法,它通过将两个字符串的交集除以这些字符串的并集来计算相似性。
- Levenshtein 距离 是一种基于编辑的算法,它通过确定将一个字符串转换为另一个字符串所需的最小字符编辑数来计算相似性。
- BLEU 评估机器从一种语言翻译到另一种语言的结果的文本质量。 BLEU 通过计算机器翻译和人工翻译之间的 n-grams 重叠来进行评估。
- ROUGE 是一个指标,用于将一种语言的机器翻译与人工创建的翻译进行比较。 有几种 ROUGE 变体使用 n-grams、skip-bigrams 或最长常见子序列的重叠。
- METEOR 通过查看完全匹配、词干后匹配、同义词、解释和对齐方式来评估机器翻译结果的文本质量。
关于常见相似性和评估指标的详细信息,请参阅以下资源:
结合使用多个评估指标
应结合使用语言模型评估指标来更好地了解 RAG 解决方案的性能。 以下示例介绍如何同时使用多个评估指标。
基础性和正确性
基础性和正确性指标共同有助于确定系统是否准确解释和使用上下文。 如果基础性很高,但正确性较低,则表示语言模型正在使用上下文,但提供不正确的响应。 对上下文的不当使用或源数据的问题可能会导致不正确的响应。 例如,如果基础性为 0.9,但正确性为 0.4,则表示系统引用正确的源材料,但得出了不正确的结论。 例如,响应可能表明 爱因斯坦 基于单独提及爱因斯坦和量子力学的上下文开发量子力学。 此响应有根据,但事实上不正确。
此指标组合可能需要将一个指标优先于另一个指标,具体取决于特定的工作负荷。 例如,如果源数据按设计包含潜在的虚假信息,则系统在响应中保留该虚假信息可能至关重要。 在这种情况下,你需要将地面响应优先于正确的响应。 在其他情况下,你可能希望任务参考上下文数据,但仍以正确性为优先。
利用率和完整性
利用率和完整性指标共同有助于评估检索系统的有效性。 高利用率(0.9)且完整性低(0.3)表示系统检索准确但不完整的信息。 例如,当用户询问系统关于二战原因时,它可能会检索有关波兰入侵的正确信息,但错过了其他关键因素。 此情景可能表明有一些块中包含的相关信息未被用作上下文的一部分。 若要解决此问题,请考虑返回更多区块、评估您的区块排序策略以及评估您的提示信息。
扎根性、利用率和相似性
基础性、利用率和相似性指标一起有助于确定系统在转换信息时保持真相的方式。 高基础性 (0.9) 和利用率 (.9) 与低相似性 (0.3) 表明系统正在使用准确的基础数据,但但释义较差。 若要解决此情况,请评估提示。 修改提示并测试结果。
文档、报告和聚合
应该记录下实验所选择的超参数以及由此产生的评估指标,以便了解超参数对实验结果的具体影响。 应记录嵌入或搜索评估等精细级别的超参数和结果,以及端到端测试整个系统等宏观级别的超参数和结果。
在设计和开发过程中,可以手动跟踪超参数和结果。 但是,针对整个测试文档和测试查询集合执行多个评估可能涉及数百个评估运行和数千个结果。 应自动执行评估的参数和结果的持久化。
保存超参数和结果后,你应考虑制作图表和图形,以帮助你直观显示超参数对指标的影响。 可视化效果有助于确定哪些选择会导致性能下降或峰值。
必须明白设计和评估 RAG 解决方案并非一劳永逸的工作。 您的文档集合会随着时间不断变化。 随着时间的推移,客户提出的问题会发生变化,而你对这些问题类型的理解也会随着从生产的学习而演变。 因此应该反复重温这一过程。 维护过去的评估文档对未来的设计和评估工作至关重要。
负责任的 AI、内容安全和安全评估
随着 RAG 系统更深入地集成到企业工作流中,评估必须超越传统指标,如基础性和完整性。 负责任的 AI 做法需要评估检索和生成的内容如何与安全、隐私和道德标准保持一致。 本部分概述了负责任的评估的关键维度,有助于确保 RAG 解决方案有效,同时保持安全且可信。
内容安全评估
RAG 系统可能会从知识库中检索或生成有害内容,这可能会带来心理、社会或身体风险。 评估应包括以下类型的内容的检测和缓解:
基于种族、民族、国籍、性别、性取向、宗教、移民身份、能力、外貌或身体大小,对个人或群体的仇恨言论和偏见。
暴力内容,包括武器的描绘、身体伤害或意图伤害或死亡
涉及自我伤害,例如自杀或身体伤害的描述
性内容,包括明确的解剖参考、色情行为、性骚扰、色情或虐待
使用 内容安全 等工具标记和评分有害元素的检索内容。 将这些评分合并到评估流程中,以确保安全输出。
知识产权保护
必须评估 RAG 系统,以评估其是否无意中检索或生成受版权保护的材料,其中包括:
文本作品 ,如歌曲歌词、文章、食谱和专有文档。
视觉对象作品 包括徽标、品牌资产、艺术品、虚构字符和其他受保护的图像。
实现内容筛选器和版权检测模型,以识别和排除检索源和生成的响应中的受保护材料。
安全和对抗威胁
RAG 系统容易受到间接提示注入攻击,其中恶意指令嵌入到检索的文档中。 这些攻击可能导致:
来自知识库的未经授权的数据泄露。
由于文档损坏,响应被操控。
通过泄露的检索源绕过安全控制。
安全评估应包括对抗测试、文档清理和监视异常检索模式。
隐私和数据保护
当 RAG 系统与包含敏感数据或个人数据的存储库交互时,评估隐私风险至关重要。 此类数据包括:
直接标识符: 姓名、社会保障号码、护照号码和国民身份证号码。
联系人信息: 电子邮件地址、电话号码、物理地址和 IP 地址。
财务数据: 信用卡号、银行帐户详细信息和交易记录。
生物识别数据: 指纹、面部识别、语音打印和雷丁扫描。
健康信息: 医疗记录、保险信息和治疗历史,如受保护的健康信息(PHI)和健康保险流通与责任法案(HIPAA)。
就业数据: 员工 ID、工资和绩效评估。
凭据: 用户名、密码、API 密钥和访问令牌。
使用自动化个人数据检测工具并强制实施严格的访问控制,以防止在检索和生成过程中违反隐私行为。
关键注意事项
源质量至关重要: 特选和审查的文档可降低有害或不当内容的风险。
检索可以放大风险: 检索策略可能比随机机会更频繁地呈现不安全的内容。
文档损坏是一种独特的威胁: 恶意参与者可以将有害内容注入知识库。
上下文窗口很重要: 混合合法和恶意内容会使检测和评估复杂化。
需要持续监视: 对文档存储库和检索模式的定期审核对于维护安全和信任至关重要。
RAG 试验加速器存储库
本系列文章将指导你完成设计和评估 RAG 解决方案所涉及的所有阶段和设计选择。 他们专注于你应该做什么,而不是如何做到这一点。 与Microsoft顶级客户合作的工程团队开发了一个名为 RAG 试验加速器的工具。 RAG 试验加速器是基于代码的自定义试验框架。 它优化并增强 RAG 解决方案的开发。 该框架使研究人员和开发人员能够有效地探索和微调驱动 RAG 性能的关键组件。 这种创新最终会生成更准确、更连贯的文本。
存储库中的实现使用命令行接口(CLI),因此可以轻松试验各种嵌入模型,优化分块策略,并评估不同的搜索方法,以解锁 RAG 系统的全部潜力。 它通过使用简单的配置来优化超参数,帮助你专注于 RAG 开发的核心方面。
该框架还全面支持语言模型配置。 此支持有助于在模型复杂性和生成质量之间实现完美平衡。 该工具简化了试验、节省时间和改进 RAG 模型的性能。
具有视觉应用程序框架的 RAG
本文中有关在 RAG 解决方案中使用媒体的大部分指导来自与 Microsoft 顶级客户合作的另一个工程团队。 该团队编写了一个名为 RAG 的框架,其中包含视觉应用程序框架。 该框架提供基于 Python 的 RAG 管道,用于处理 MHTML 文档中的文本和图像内容。
框架从 MHTML 文件对文本和图像进行加载、分块和扩充。 然后,它将区块引入 Azure AI 搜索。 该框架实现图像增强的缓存,以提高处理效率并降低成本。 它还将评估纳入工作流程的一部分。
贡献者
Microsoft维护本文。 以下参与者撰写了本文。
- Raouf Aliouat |软件工程师 II
- Rob Bagby | 首席内容开发人员 - Azure 模式和实践
- 保罗·巴特勒 |软件工程师
- Prabal Deb |首席软件工程师
- 苏比·哈德里 |高级数据科学家
- Ritesh Modi |首席工程师
- 瑞安·普法尔茨 |高级技术项目经理
- Mahdi Setayesh |首席软件工程师
- 兰迪·瑟曼 |首席 AI 云解决方案架构师
若要查看非公开的LinkedIn个人资料,请登录LinkedIn。