问答评测方案
这里或多或少会涉及到RAG 此处会简单介绍 比较详细相关可见此
背景
场景1: 知识库
这里所说的RAG是比较狭义且普遍的用法 将原始文档切片后转换成为向量 存储在数据库中 带着input-query查询的时候 来到同一个向量空间 向量化后计算他们的相似度 然后输入LLM生成etc
场景2:function call
使用一段描述性prompt设定模型的能力、背景、人设相关信息,让大模型可以访问数据源,网络搜索等。获取自己拿不到的数据
评测维度
1、噪声鲁棒性(Noise Robustness)
模型能从噪声文档中提取有用信息。噪声文档定义为与问题相关但不包含任何相关信息的文档。在与”谁获得了2022年诺贝尔文学奖”问题相关的噪声文档包括有关2021年诺贝尔文学奖的报道。为此,噪声鲁棒性测试根据所需的噪声比,将外部文档包含一定数量噪声文档的实例包含在内。
2、否定拒绝(Negative Rejection)
当检索到的文档中不存在所需的知识点时,模型应拒绝回答问题。否定拒绝的测试包含外部文档只有噪声文档的实例。LLM预计会发出”信息不足”或其他拒绝信号。
3、信息整合(information integration)
评估模型能否回答需要整合多个文档信息的复杂问题。对于”ChatGPTiOS应用程序和ChatGPTapi是什么时候推出的?”这个问题,LLMs应提供iOS上ChatGPT应用程序和ChatGPTAPI的推出日期信息。信息集成测试包含只能使用多个外部文件才能回答的问题。
4、反事实鲁棒性(CounterfactualRobustness)
该测试评估当通过指令向LLMs发出关于检索信息中潜在风险的警告时,模型能否识别检索文档中已知事实错误的风险。反事实鲁棒性的测试包括可以由LLM直接回答,但外部文档包含事实错误的实例。
评测指标设计
采用指标分级的设计多维度评估RAG能力 需体现RAG端到端能力
同时需细化帮助产研找到问题所在 —— 提供一定的定位问题能力
所以分为两级指标 分别表示RAG能力和各环节情况
指标分级 | 指标名 | 评估范围 | 指标解释 | 实现方式 | prompt |
---|---|---|---|---|---|
一级指标 | Answer Correctness(答案准确率) | RAG端到端能力 | 回答正确性,可能指示了回答的准确性或正确率,适用于问答系统或者类似的任务中。 | 2.端到端打分 | 问答-限定回答 |
二级指标 | Faithfulness(忠诚度) | 大模型理解总结能力 | 该指标衡量生成的 answer 与给定 context 的事实一致性。它是根据 answer 和检索到的 context 来计算的。迭代改进大模型生成幻觉时,可重点考察此指标,指标越高,代表回答越忠于参考内容,无虚构或误解。 | 实现:通过 LLM 判断 answer 与 contexts 的要点比值。做法:用 LLM 提取 Answer 中的要点,设为 | Sa |
二级指标 | Context Precision(语境精确率) | RAG检索能力 | Context Precision 评估的是检索到的文档是否对 question 有帮助,即有帮助文档与所有检索文档的比例,体现检索精度,惩罚无用文档喂给下游模型。 | 实现:通过 LLM 判断 contexts 与 query 的相关性。做法:用 LLM 判断有帮助的文档数量为 | TP |
二级指标 | Context Recall(语境文召回率) | 知识库的分段能力、RAG检索能力 | Context Recall 评估的是检索到的文档中包含真相(Truths)所需信息的程度。若精确度优化过度删减文档,可能造成召回率下降。 | 实现:用 LLM 提取 Truths 中的要点 | St |
二级指标中的三个值本质上都是不同语句下的一个召回率的体现
生成的answer召回的内容与事实是否一致?是否召回了错误信息?
生成的answer召回了多少检索出来的文档?(文档的一个召回率)
生成的answer召回了多少有效信息?
具体涉及的prompt
faithfullness prompt
1 | 给定一个question、一个answer及与answer相关的sentences,分析'sentences'下每个句子的复杂性,并将每个句子分解为一个或多个完全可以理解的陈述,同时确保每个陈述中不使用代词。要求输出格式化为JSON", |
context_precision prompt
1 | 给定问题、答案和上下文,验证上下文是否有助于答案。如果有用,则将判断结果标记为“1”,则标记为“0”,json输出。 |
contenxt_recall prompt
1 | 给定一个问题、相关上下文及问题的真相,将真相内容拆解为独立的有逻辑的句子,并判断这些句子是否可以从给定的上下文找到对应信息。仅需要回答“是”(1)或“否”(0)作为二元分类。输出带原因的json。 |
再确定对应的prompt之后 便可代入框架代码 或者自建脚本来构建对应的评测集了 这里所使用的是主流框架Ragas
相关的内容见另一文章