• datawhale动手学大模型应用开发-第五章-系统评估与优化


    一、如何评估LLM应用

    1.1 验证评估的一般思路

    •   一到三个样本的小样本中调整 Prompt ,尝试使其在这些样本上起效
    • 解决Bad Case:当你对系统进行进一步测试时,可能会遇到一些棘手的例子,这些例子无法通过 Prompt 或者算法解决
    • 自动评估:你可以将这些额外的几个例子添加到你正在测试的集合中,有机地添加其他难以处理的例子。最终,你会将足够多的这些例子添加到你逐步扩大的开发集中,以至于手动运行每一个例子以测试 Prompt 变得有些不便。然后,你开始开发一些用于衡量这些小样本集性能的指标,例如平均准确度。这个过程的有趣之处在于,如果你觉得你的系统已经足够好了,你可以随时停止,不再进行改进

    1.2 大模型评估方法

    1.2.1 人工评估的一般思路
    准则一 量化评估

    为保证很好地比较不同版本的系统性能,量化评估指标是非常必要的。我们应该对每一个验证案例的回答都给出打分,最后计算所有验证案例的平均分得到本版本系统的得分。量化的量纲可以是0-5分,也可以是0-100,可以根据个人风格和业务实际情况而定。

    量化后的评估指标应当有一定的评估规范,例如在满足条件 A 的情况下可以打分为 y 分,以保证不同评估员之间评估的相对一致。

    准则二 多维评估
    1. 知识查找正确性:评估系统从向量数据库中检索到的知识片段是否能够对问题作出回答。评分范围是0到1,0表示检索到的知识片段无法回答问题,1表示可以。

    2. 回答一致性:评估系统的回答是否针对用户问题,是否存在偏题或错误理解题意的情况。评分范围也是0到1,0表示完全偏题,1表示完全切题。

    3. 回答幻觉比例:评估系统回答中出现的幻觉内容的比例,即回答与检索到的知识片段之间的一致性。评分同样是0到1,0表示全部是模型生成的幻觉,1表示没有幻觉。

    4. 回答正确性:评估系统回答是否正确,是否充分解答了用户的问题,是核心评估指标之一。评分可以在0到1之间任意给定。

    5. 逻辑性:评估系统回答是否逻辑连贯,是否存在前后冲突或逻辑混乱。评分范围是0到1。

    6. 通顺性:评估系统回答的语言是否通顺,语法是否正确。评分可以在0到1之间任意给定。

    7. 智能性:评估系统回答是否拟人化、智能化,是否能让用户难以区分是人工回答还是智能回答。评分可以在0到1之间任意给定。

    这些维度不仅关注回答的知识内容和准确性,还包括了回答的逻辑性、语言通顺性以及智能性,旨在全面评估问答系统的性能。每个维度的评分标准都旨在量化评估,以便于比较和改进系统。

     1.2.2 自动评估

    方法一:构造客观题

    主观题的评估是非常困难的,但是客观题可以直接对比系统答案与标准答案是否一致,从而实现简单评估。我们可以将部分主观题构造为多项或单项选择的客观题,进而实现简单评估。例如,对于问题:

    【问答题】南瓜书的作者是谁?

    我们可以将该主观题构造为如下客观题:

    【多项选择题】南瓜书的作者是谁?   A 周志明 B 谢文睿 C 秦州 D 贾彬彬

    方法二:计算答案相似度

    生成问题的答案评估在 NLP 中实则也不是一个新问题了,不管是机器翻译、自动文摘等任务,其实都需要评估生成答案的质量。NLP 一般对生成问题采用人工构造标准答案并计算回答与标准答案相似度的方法来实现自动评估。

    例如,对问题:

    南瓜书的目标是什么?

    我们可以首先人工构造一个标准回答:

    周志华老师的《机器学习》(西瓜书)是机器学习领域的经典入门教材之一,周老师为了使尽可能多的读者通过西瓜书对机器学习有所了解, 所以在书中对部分公式的推导细节没有详述,但是这对那些想深究公式推导细节的读者来说可能“不太友好”,本书旨在对西瓜书里比较难理解的公式加以解析,以及对部分公式补充具体的推导细节。

    接着对模型回答计算其与该标准回答的相似程度,越相似则我们认为答案正确程度越高

    二、评估并优化生成部分

    2.1  提升直观回答质量

    寻找 Bad Case 的思路有很多,最直观也最简单的就是评估直观回答的质量,结合原有资料内容,判断在什么方面有所不足。例如,上述的测试我们可以构造成一个 Bad Case:

    1. 问题:什么是南瓜书
    2. 初始回答:南瓜书是对《机器学习》(西瓜书)中难以理解的公式进行解析和补充推导细节的一本书。谢谢你的提问!
    3. 存在不足:回答太简略,需要回答更具体;谢谢你的提问感觉比较死板,可以去掉

    我们再针对性地修改 Prompt 模板,加入要求其回答具体,并去掉“谢谢你的提问”的部分。

    1. 问题:使用大模型时,构造 Prompt 的原则有哪些
    2. 初始回答:略
    3. 存在不足:没有重点,模糊不清

    针对该 Bad Case,我们可以改进 Prompt,要求其对有几点的答案进行分点标号,让答案清晰具体

    2.2 标明知识来源,提高可信度


    由于大模型存在幻觉问题,有时我们会怀疑模型回答并非源于已有知识库内容,这对一些需要保证真实性的场景来说尤为重要,我们可以要求模型在生成回答时注明知识来源,这样可以避免模型杜撰并不存在于给定资料的知识,同时,也可以提高我们对模型生成答案的可信度

    1. 使用以下上下文来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答
    2. 案。你应该使答案尽可能详细具体,但不要偏题。如果答案比较长,请酌情进行分段,以提高答案的阅读体验。
    3. 如果答案有几点,你应该分点标号回答,让答案清晰具体。
    4. 请你附上回答的来源原文,以保证回答的正确性。
    5. {context}
    6. 问题: {question}
    7. 有用的回答:

    2.3  构造思维链

    大模型往往可以很好地理解并执行指令,但模型本身还存在一些能力的限制,例如大模型的幻觉、无法理解较为复杂的指令、无法执行复杂步骤等。我们可以通过构造思维链,将 Prompt 构造成一系列步骤来尽量减少其能力限制,例如,我们可以构造一个两步的思维链,要求模型在第二步做出反思,以尽可能消除大模型的幻觉问题。

    1. ① 使用以下上下文来回答最后的问题。如果你不知道答案,就说你不知道,不要试图编造答案。
    2. 你应该使答案尽可能详细具体,但不要偏题。如果答案比较长,请酌情进行分段,以提高答案的阅读体验。
    3. 如果答案有几点,你应该分点标号回答,让答案清晰具体。
    4. 上下文:
    5. {context}
    6. 问题:
    7. {question}
    8. 有用的回答:
    9. ② 基于提供的上下文,反思回答中有没有不正确或不是基于上下文得到的内容,如果有,回答你不知道
    10. 确保你执行了每一个步骤,不要跳过任意一个步骤。

    2.4 增加一个指令解析

    我们往往会面临一个需求,即我们需要模型以我们指定的格式进行输出。但是,由于我们使用了 Prompt Template 来填充用户问题,用户问题中存在的格式要求往往会被忽略

    三、评估检索效果

    1. 知识片段割裂

      • 问题:检索到的知识片段将正确答案分割开,导致无法形成完整答案。
      • 优化思路:优化文本切割方式,考虑语义和主题,使用专用模型进行文本分割。
    2. 长上下文概括回答

      • 问题:部分问题需要跨越多个知识片段进行概括性回答,但模型上下文限制导致难以实现。
      • 优化思路:优化知识库构建方式,使用大型语言模型(LLM)对长文档进行概括总结,预先填入知识库。
    3. 关键词误导

      • 问题:检索到的知识片段含有与查询强相关的关键词,但并非正确答案。
      • 优化思路:对用户查询进行改写,去除次要关键词的影响,提炼或扩写查询。
    4. 匹配关系不合理

      • 问题:匹配到的文本段强相关但不包含答案。
      • 优化思路:优化向量模型或构建倒排索引,提高匹配准确性。

  • 相关阅读:
    自动驾驶专题介绍 ———— 动力传动系统
    从事前端真的没有后端工资高?
    如何选择适合企业的ERP管理系统
    过滤器和拦截器的基本知识
    万字总结 MySQL核心知识,赠送25连环炮
    sql:SQL优化知识点记录(十三)
    source insight context window不能显示上下文的问题
    洛谷P2486 lct做法
    每日一题——
    一些常见的Windows命令
  • 原文地址:https://blog.csdn.net/fan_fan_feng/article/details/138200957