IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    【RAG】语义搜索的评测方法

    admin发表于 2023-12-25 07:12:35
    love 0

    在目前进行的项目过程中,客户及其测试同学多次问起如何来确定RAG产品是否可用?是否有标准来进行判断?通过资料的收集,整理如下。建立一个RAG系统在LLM时代变得很简单,但让其能够真正实际运用到业务场景中则非常困难,行业内大多数可能只能做到六七十分的水平。

    本文将部分框架进行解读分析,以便于可以从业务角度出发选择合适的评估框架。还是那句老话——没有最好,只有合适自己的才是最好。


    1 方式1:RAGAs 

    整个RAG流程中涉及两个不同的组件:

    • 检索器组件: 为大语言模型从外部数据库中检索额外的上下文,以便回答查询。
    • 生成器组件: 基于结合了检索信息的提示来生成答案。

    在评估RAG流程时候,可单独对两个组件进行评估,再综合考虑。因此,需要两个关键元素:一组评估指标和 一个评估数据集 。当前领域中其实已经有了一些RAG的评估框架,比如RAG 三元组指标、ROUGE、ARES、BLEU 和 RAGAs 等。

    RAGAs(检索增强生成评估)是一个评估框架,最初是作为一种无需参照标准的评估框架而设计的。这意味着,在评估数据集时,不必依赖人工标注的标准答案,而是通过底层的大语言模型 (LLM) 来进行评估。

    1.1 评估数据

    RAGAs 需要以下几种信息:

    • question:RAG 流程的输入,即用户的查询问题。
    • answer:由 RAG 流程生成的答案,也就是输出结果。
    • contexts:为解答 question 而从外部知识源检索到的相关上下文。
    • ground_truths:question 的标准答案,这是唯一需要人工标注的信息。这个信息仅在评估 context_recall 这一指标时才必须。
    • 框架同时提供了一些需要依赖真实标签的评估指标和范式,比如 context_recall 和 answer_correctness

    1.2 评估指标

    RAGAs 从组件层面和整体流程两个方面评估 RAG 流程的性能。

    1.2.1 组件层次

    RAGAs 提供了评价检索组件(包括 context_relevancy 和 context_recall)和生成组件(涉及 faithfulness和 answer_relevancy)的专门指标 :

    • 上下文精准度 衡量检索出的上下文中有用信息与无用信息的比率。该指标通过分析 question 和 contexts 来计算。
    • 上下文召回率 用来评估是否检索到了解答问题所需的全部相关信息。这一指标依据 ground_truth(此为框架中唯一基于人工标注的真实数据的指标)和 contexts 进行计算。
    • 真实性 用于衡量生成答案的事实准确度。它通过对比给定上下文中正确的陈述与生成答案中总陈述的数量来计算。这一指标结合了 question、contexts 和 answer。
    • 答案相关度 评估生成答案与问题的关联程度。例如,对于问题“法国在哪里及其首都是什么?”,答案“法国位于西欧。”的答案相关度较低,因为它只回答了问题的一部分。

    所有指标的评分范围在 [0, 1] 之间,分数越高表示性能越出色。

    1.2.2 整体流程

    答案的语义相似度 和 答案的正确性


    2 方法2:传统方法跑出最佳实践

    2.1 评估指标

    优化一个基于 LLM 的系统的难点在于,这个系统本质上是一个黑盒,没有一套有效的评估手段。 Stanford 发表的一篇论文将阐述评估生成式搜索引擎的可验证性。这篇论文虽然是用来评测 Generative Search Engine(生成式搜索引擎),但是也可以应用到 RAG 上,本质上 Generative Search Engine 算是 RAG 的一个子集,还有针对于特定领域数据的 RAG 系统。

    论文中提到了一个值得信赖的 Generative Search Engine 的先决条件就是:可验证性(verifiability)。

    理想的 RAG 系统应该是:

    • 高引用召回率(high citation recall),即所有的生成内容都有引用(外部知识)充分支持
    • 高引用精度(high citation precision),即每个引用是否真的支持生成的内容

    实际上这两个指标不可能做到 100%,根据论文中的实验结果,现有的 Generative Search Engine 生成的内容经常包含无据陈述和不准确的引文,这两个数据分别是 51.5% 和 74.5%。

    简单来说,就是生成的内容和外部的知识不匹配。

    于是采用了 4 个指标来进行评估:

    1. fluency,流畅性,生成的文本是否流畅连贯
    2. perceived utility,实用性,生成的内容是否有用
    3. citation recall,引文召回率,所生成的内容完全得到引文支持的比例
    4. citation precision,引文精度,引文中支持生成内容的比例

    一个优秀的 RAG 系统应该在 citation recall 和 citation precision 上获得比较高的评分。

    指标 1 和 2 通常是基本条件,如果连这个都不满足整个 RAG 系统就没什么意义了(话讲不清再准确也没有用)。

    2.2 评估计算方法

    2.2.1 流畅性、实用性

    纯人工打分后计算得来,给评测者对应的评测指标。例如 xxx 算是流畅的,并用 Five-point Likert 量表来进行计算,从 Strongly Disagree 到 Strongly Agree。并且让评测者对「The response is a helpful and informative answer to the query」这个说法的同意程度进行打分。

    2.2.2 引文召回(Citation Recall)

    引文召回率是指:得到引文支持的生成内容 / 值得验证的生成内容

    因此,计算召回率需要:

    1. 识别生成内容中值得验证的部分
    2. 评估每个值得验证的内容是否得到相关引文支持

    什么是「值得验证」,可以简单理解为是生成内容中包含信息的部分,实践中,几乎所有的生成内容都可以看做是值得验证的内容,所以这个召回率可以近似等于:

    召回率 = 引文支持的生成内容 / 总的生成内容

    2.2.3 引文精度(Citation Precision)

    引文精度是指生成的引文中支持其相关陈述的比例。如果生成的内容为每个生成的语句引用了互联网上所有的网页,那么引文召回率就会很高,但是引文精度会很低,因为很多文章都是无关紧要的,并不支持生成的内容。

    精度 = 与特定主题相关的文献数量 / 检索到的内容

    2.3 调和平均数

    有了引文召回率和引文精度之后,我们就可以计算出 Citation F 这个最终指标了(调和平均数)。

    在机器学习中,F1和F2分数是常用的评估指标,它们是基于精确率 (Precision) 和召回率 (Recall) 的调和平均。

    F1分数是精确率和召回率的调和平均数,它为了同时考虑精确率和召回率的影响,是二者之间的一种平衡。F1分数的计算公式为:

    F2分数是一个更为一般化的版本,它允许我们调整精确率和召回率的相对重要性。F2分数通过引入一个参数β,可以对精确率和召回率进行加权。具体来说,当β>1时,召回率的权重大于精确率;当β<1时,精确率的权重大于召回率。F2分数就是在这个公式中设β=2,使得召回率的重要性高于精确率。Fβ分数的计算公式为:

    这两种分数都用于评估模型的性能,特别是在数据不平衡的情况下,它们比单纯的准确率更能反映模型的性能。


    参考文档

    • https://baoyu.io/translations/rag/evaluating-rag-applications-with-ragas
    • https://github.com/explodinggradients/ragas
    • https://twitter.com/Tisoga/status/1736544319199478175
    • https://docs.ragas.io/en/latest/

    The post 【RAG】语义搜索的评测方法 first appeared on PMSOLO.



沪ICP备19023445号-2号
友情链接