你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
大型语言模型端到端评估
在此阶段,你将通过检查包含针对语言模型检索到的基础数据的预期用户提示来评估检索增强生成 (RAG) 解决方案。 在达到此阶段之前,你应完成前面的阶段。 你需要收集测试文档和查询、对测试文档进行分块、扩充区块、嵌入区块、创建搜索索引并实施搜索策略。 然后,你应评估每个阶段,确保结果符合预期。 至此,应该可以确信,解决方案可以为用户查询返回相关的基础数据。
这些基础数据构成了向语言模型发送提示的上下文,以处理用户的查询。 提示工程策略不在本文讨论范围之内。 本文从基础数据的角度对工程调用语言模型进行了评估。 本文介绍公共语言模型评估指标以及可在模型评估计算中或作为独立指标使用的特定相似性和评估指标。
本文并未尝试详尽列举语言模型指标或相似性和评估指标。 需要从本文中了解的是,指标有很多种,而每种指标都有独特的用例。 只有你才能全面了解工作负荷。 你和数据科学家必须确定要度量的内容以及哪些指标合适。
本文是一系列文章的其中一篇。 请先阅读简介。
语言模型评估指标
应使用多个指标来评估语言模型的响应,包括基础性、完整性、利用率、相关性和正确性。 由于 RAG 模式的总体目标是在生成响应时将相关数据作为语言模型的上下文提供,理想情况下,上述每个指标都应得分很高。 但是,根据工作负荷,您可能需要优先考虑其中一个。
重要
语言模型响应是不确定的,这意味着对语言模型的相同提示通常会返回不同的结果。 作为评估过程的一部分,在使用语言模型时了解此概念非常重要。 评估语言模型的使用情况时,请考虑使用目标范围而不是单个目标。
真实性
基础性(有时也称为忠实性)可衡量响应是否完全基于上下文。 它会验证响应未使用上下文中存在的信息之外的其他信息。 低基度指标表示语言模型可能会发出不准确或不敏感的响应。
计算基础性
使用以下方法计算响应的合理性:
- 基于 Azure AI 内容安全的依托性 是一种自定义模型,它使用自然语言推理来确定声明或文本片段在本例中是否基于源文档中的上下文。
- 基于大型语言模型的基础性使用大型语言模型来确定响应的基础性水平。
- Ragas 忠实性库。
- MLflow 忠实度计算。
评估基础性
低基础性计算表明语言模型认为这些区块并不相关。 应该评估是否需要在集合中添加数据、调整分块策略或区块大小,或者对提示进行微调。
完整性
完整性衡量的是响应是否回答了查询的所有部分。 完整性有助于了解上下文中的区块是否依赖于查询并直接与查询相关,同时提供完整的答案。
计算完整性
使用以下方法来计算响应的完整性:
- AI 辅助检索分数提示。
- 语言模型有助于衡量语言模型的响应质量。 为了进行此度量,您需要问题、上下文和生成的答案。 以下步骤概述了高级别流程:
- 使用语言模型来重新表述、总结或简化问题。 此步骤将确定意图。
- 让模型检查是否在检索到的文档中找到了或者是否可以从中获得意图或意图的答案。 对于每个文档,答案可能是“是”或“否”。 以“是”开头的答案表示检索的文档与意图或意图的答案相关。
- 计算答案以“是”开头的意图的比例。
- 将分数平方以突出显示错误。
评估完整性
如果完整性较低,请通过评估你的嵌入模型来提高完整性。 将内容中的词汇与嵌入模型中的词汇进行比较。 确定是需要特定领域的嵌入模型,还是应该对现有模型进行微调。 下一步是评估分块策略。 如果你使用固定大小的分块,请考虑增加区块大小。 还可以评估测试数据是否有足以彻底解决问题。
利用率
利用率衡量的是响应在多大程度上是由上下文中的信息区块组成的。 目标是确定每个区块在多大程度上属于响应的一部分。 如果利用率低,则表明结果可能与查询不相关。 你应与完整性一起评估利用率。
计算利用率
使用语言模型计算利用率。 可以将响应和包含区块的上下文传递给语言模型。 可以要求语言模型确定包含答案的区块数量。
评估利用率
下表提供了关于如何评估完整性和利用率的指导。
高利用率 | 低利用率 | |
---|---|---|
高完整性 | 无需执行任何操作。 | 在这种情况下,返回的数据解决了问题,但也返回不相关的区块。 考虑降低 top-k 参数值,以获得更可能或更确定的结果。 |
低完整性 | 在这种情况下,语言模型使用你提供的区块,但这些区块无法完全解决问题。 请考虑进行以下步骤:
|
在这种情况下,返回的数据不完全回答问题,而且你提供的区块没有被完全利用。 请考虑进行以下步骤:
|
相关性
相关性衡量语言模型的响应与查询的相关度。
计算相关性
使用以下方法来计算响应的相关性:
注意
你可以使用 Azure AI Foundry 门户执行计算或使用本文中的指南自行计算相关性。
评估相关性
相关性较低时,请执行以下任务:
- 确保提供给语言模型的情况是相关的。
- 确定是否未返回任何相关的可行区块。 如果发现这些区块,请评估嵌入模型。
- 如果没有可行的区块,则查看是否存在相关数据。 如果是这样,请评估您的分块策略。
- 如果返回了相关区块,请评估提示。
评估方法(如完整性)输出的分数所产生的结果应该与相关性分数的结果相似。
正确性
正确性 衡量响应准确程度和事实性。
计算正确性
可通过多种方式评估正确性,包括:
- 语言模型 - 使用语言模型计算正确性。 可以将响应传递给语言模型,理想情况下不同于用于生成结果的语言模型。 可以要求语言模型确定响应是否为事实。
- 外部受信任的源 - 使用外部受信任源验证响应的正确性。 根据您所信任来源的 API,您可以单独使用该来源,或与语言模型结合使用。
评估正确性
正确性较低时,请执行以下任务:
- 确保提供给语言模型的区块是事实正确的,并且没有数据偏差。 可能需要更正源文档或内容中的任何问题。
- 如果区块实际上是正确的,请评估你的提示。
- 评估模型中是否存在需要通过其他事实基础数据或微调来克服的不精确性。
相似性和评估指标
你可以在数据科学中使用数百个相似性和评估指标。 有些算法针对特定领域,如语音到文本或语言到语言的翻译。 每种算法都有独特的指标计算策略。
数据科学家可确定要衡量的内容,以及可以用来衡量它的指标或指标组合。 例如,对于语言翻译,双语评估替补 (BLEU) 指标会检查机器翻译和人工翻译中出现了多少个 n-gram,以根据翻译是否使用相同的单词来衡量相似度。 而余弦相似性可使用机器翻译和人工翻译之间的嵌入来衡量语义相似性。 如果你的目标是让翻译具有较高的语义相似性,并使用与人工翻译相似的词汇,那么你会希望BLEU分数和余弦相似性都很高。 如果只关心语义相似性,请关注余弦相似性。
下面列出了一些常见的相似性和评估指标的示例。 请注意,列出的相似性指标描述为基于令牌、基于序列或基于编辑的指标。 这些说明说明了指标用于计算相似性的方法。 列表还包含三种用于评估从一种语言翻译成另一种语言的文本质量的算法。
- 最长常见子字符串是基于序列的算法,用于查找两个字符串之间最长的常见子字符串。 最长的常见子字符串百分比用最长的常见子字符串除以较小或较大输入字符串的字符数。
- 最长的常见子序列 (LCS) 是基于序列的算法,用于查找两个字符串之间的最长子序列。 LCS 并不要求子序列按连续顺序排列。
- 余弦相似性是基于标记的算法,用于计算两个矢量之间的夹角余弦值。
- Jaro-Winkler distance 是基于编辑的算法,用于计算将一个字符串转换成另一个字符串的最少步骤数。
- 汉明距离是基于编辑的算法,用于衡量将一个字符串转换为另一个字符串所需的最少替换次数。
- 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 解决方案并非一劳永逸的工作。 您的文档集合会随着时间不断变化。 随着时间的推移,客户提出的问题会发生变化,而你对这些问题类型的理解也会随着从生产的学习而演变。 因此应该反复重温这一过程。 维护过去的评估文档对未来的设计和评估工作至关重要。
RAG 试验加速器
这些文章将引导完成设计和评估 RAG 解决方案所涉及的所有阶段和设计选择。 这些文章的重点是应该做什么,而不是如何做。 一个与 Microsoft 顶级客户合作的工程团队开发了一个名为 RAG 试验加速器的工具。 RAG 试验加速器是一种最先进的试验框架。 它旨在优化和增强 RAG 解决方案的开发。 RAG 试验加速器使研究人员和开发人员能够有效地探索和微调提高 RAG 性能的关键组件。 这种创新最终会生成更准确、更连贯的文本。
RAG 试验加速器使用命令行接口,因此你可以轻松试验各种嵌入模型、优化分块策略并评估不同的搜索方法,以释放 RAG 系统的全部潜力。 它允许你使用简单的配置进行超参数优化,从而专注于 RAG 开发的核心方面。
该框架还全面支持语言模型配置。 此支持有助于在模型复杂性和生成质量之间实现完美平衡。 该工具可以帮助你简化实验过程,节省时间,并显著提高 RAG 模型的性能。
具有视觉应用程序框架的 RAG
本文中有关在 RAG 解决方案中使用媒体的大部分指导来自与 Microsoft 顶级客户合作的另一个工程团队。 此团队编写了一个名为具有视觉应用程序框架的 RAG的框架。 该框架提供了基于 Python 的管道,用于处理来自 MHTML 文档的文本和图像内容。
框架从 MHTML 文件对文本和图像进行加载、分块和扩充。 然后,它将区块引入 Azure AI 搜索。 该框架实现图像增强的缓存,以提高处理效率并降低成本。 该框架还将评估作为流程的一部分。
贡献者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
- Raouf Aliouat | 软件工程师 II
- Rob Bagby | 主体体系结构中心内容主管
- Paul Butler | 软件工程师
- Prabal Deb | 首席软件工程师
- Soubhi Hadri | 高级数据科学家
- Ritesh Modi | 首席工程师
- Ryan Pfalz | 高级技术项目经理
- Mahdi Setayesh | 首席软件工程师
- Randy Thurman | 首席 AI 云解决方案架构师