编者按: 随着大语言模型(LLM)在 Chatbots 领域的广泛应用,如何有效评估这些基于 LLM 的 Chatbots 的质量变得日益重要,这也是一个极具挑战性的问题。
本文作者认为可以从质性评估(qualitative)和通过程序评估(programmatic)这两个维度对基于 LLM 的 Chatbots 进行评估。
作者详细探讨了以下几个方面的内容:(1) 质性评估可以通过主观判断和用户打分反馈两种方式进行;(2) 通过程序进行评估现市面上存在多种工具,但也存在固有的主观性问题,评价标准和题库质量能够直接影响评估结果;(3) 作者基于 Legal Tech Bot 项目详细描述了结合上述两种评价方式的具体实践流程。
评估 Chatbots 仍然面临许多挑战,需要不断探索更科学合理的方法。本文分享了作者的实践、探索历程,能够为 Chatbots 相关从业人员后续研究提供参考。
作者 | Matt Ambrogi
编译 | 岳扬
🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~
01 我为什么关心 Chatbots 的评估?
目前我正在探索一种能够提升 Chatbots 性能的可靠方法,并试图改进我开发的 Legal Tech Bot[2],以期从该过程中找到适用于更广泛场景的策略。
首先,我要澄清几点。本文的重点是建立在 LLM / GPT 基础上的 Chatbots。当本文提到数据连接(data-connected)时,指的是 Chatbots 能够从我们选择的数据集向 GPT 传递上下文(context)。在我看来,有许多博文可以讨论和研究这种情况。LlamaIndex[3]是用于此目的的热门工具之一。
我之前概述过,我认为 data-supported chatbots 很难处理的四种问题类型[4]包括:
● 需要从数据中提供最新回答的问题;
● 主观性问题;
● 对某一主题或领域的基础性问题或概念性问题;
● 需要将数据中的各种事实或信息进行整合和汇总来回答的问题。
我计划逐一解决这些问题,目标是找到一种可靠的方法来缓解它们。但在开始解决问题之前,我需要回答一个问题:如何评估 Chatbots 的性能是否有所提升呢?
过去几周,我一直在探索这个问题。撰写本文的目的是分享我对使用 LlamaIndex 构建的 data-supported chatbots 输出进行评估所学到的经验。
首先,我将分享一些关于此评估过程的总体概述,介绍我们可考虑对 Chatbots 进行 qualitative 和 programmatic 评估(译者注:qualitative evaluation 指的是基于质性数据和观察的评估方法,而 programmatic evaluation 指的是基于程序和技术指标的评估方法)的各种方法。接下来,我将详细介绍我对该项目进行评估的过程。
下文讨论的所有内容都将以 Legal Tech Bot 为背景,该 Chatbots 是使用 LlamaIndex 和 GPT 构建的。这篇文章对于使用这一技术栈的人最有用,但也不仅仅适用于单一场景,还包括了其他常规性的考虑,可以帮助任何开发基于聊天的产品的人。
在深入探讨如何评估 Chatbots 的回答之前,我要提醒读者,使用 LlamaIndex 和 GPT 构建的 Chatbots 的工作原理大致如下。工程师们收集一套他们想要使用的文档,然后使用 LlamaIndex 创建一种快速检索这些文档的方式。当用户提出问题时,LlamaIndex 会尝试在所有源文档(source documents)中找到最相关的上下文。然后,它会将上下文和问题一起传递给 GPT,由 GPT 生成最终的回答。
02 评估 Chatbots 的概括性讨论
2.1 Chatbots 的优秀回答应是什么样子的呢?
Legal Tech Bot 的设计初衷是成为该行业的专家,它能够智能地回答与行业趋势、融资轮次、特定产品以及相关领域的任何问题。
我之所以选择这个领域,是因为我可以获得这个领域的大量优质数据来给 Chatbots 使用,而且这个行业的规模也相对有限。但更重要的是,我对这个行业有足够的了解,可以轻松评估 Chatbots 的回答。在使用 Legal Tech Bot 的第一个版本时,我很快就能够判断哪些回答是出色的,哪些是不足的,并发现了一些 Chatbots 有待改进的地方。和大多数在这一领域开发应用的人一样,我根据直觉对 Chatbots 的性能做出了初步判断。我称之为质性评估(qualitative evaluation)。
2.2 如何进行质性评估?
如果不深入评估细节,总体上,我们可以对输出进行质性评估,也可以通过程序对输出进行评估。在传统的机器学习中,人们通常只专注于后者。但当涉及生成式机器学习(generative machine learning)时,通过程序进行评估的方法可能并不会带来显著的优势。关于这一点,我稍后会详细论述。目前,我们可以考虑这两种质性策略(译者注:”质性策略“即基于质性数据和主观感受进行评估的方法)。
策略一:通过直觉和主观感受进行评估
这种方法很简单,就是问 Chatbots 很多问题,然后判断一下 Chatbots 的回答是好还是坏。可以更进一步,通过提出大量问题,并手动跟踪你认为是“好”回复的比率。这听起来不太科学,但我们稍后会看到,通过程序进行评估的方法实际上也在做同样的事情。如果你正在构建 Chatbots ,相信无论如何你都会形成这种直觉。因此,我认为值得关注你的主观感受和直觉形成的评价随时间的变化过程。
策略二:点赞 thumbs up
如果你正在构建 Chatbots 并有一定数量的用户在使用,那么设置一种获取他人意见的途径是非常有意义的。如果你使用的是ChatGPT,你可能会发现在每个 GPT 的回答旁边有点赞(thumbs up) / 点踩(thumbs down)的选项,允许用户报告该回答是否对他们有帮助。
如果要选择一个关键指标,这是一个很好的候选指标。但我还是不建议完全依赖它。在解释哪些类型的回答会导致用户点赞或点踩时,存在很多偏见需要剔除。更直接有用的信号可能是每个用户每次会话的问题数量或平均会话持续时间。
2.3 通过程序进行评估
我具有传统的分析和机器学习(analytics and ML)技术背景,很早就想知道如何通过程序的方式评估机器学习模型或其他技术的质量。我不确定这是否可行。这肯定不像传统机器学习中的评估那样黑白分明,因为传统机器学习可以依赖于准确率和精确率等明确的指标。
在传统机器学习中,我们通常通过编写程序来评估一个相对简单的问题:预测的标签(predicted label)是否与真实标签(true label)匹配。对于生成式 AI,我们并不完全清楚我们想要程序为我们评估什么样的问题。对于 Chatbots ,我认为大致是这样的:在给定的上下文(context)中, Chatbots 的回复是否是对用户问题的合理回答?是还是不是。
一个公平的程序化质量估计方法(programmatic estimate of quality)是提出一系列问题,并跟踪通过这一测试的回答的百分比。然而,这并非一个完美的策略。
通过程序进行评估的这种方法本身具有很强的主观性。例如,我上面概述的这个测试:在给定的上下文中, Chatbots 的回复是否是对问题的合理回答,是还是不是。那么,什么样的上下文呢?我们是基于最终由 LlamaIndex 传递给 Chatbots 的上下文来进行评判吗?还是基于整个索引和所有可能传递的上下文来进行评估?作者列举了一些问题,阐述了在评估 Chatbots 的回复时可能存在多种不同的方式:
● 如何根据问题和上下文判断答案是否合理?
● 评估过程中需要考虑上下文吗?是否希望 Chatbots 也能使用上下文之外的知识?
● 在评估过程中,我们是否需要考虑用户提出的问题?如果我们想衡量 Chatbots 编造、虚构或捏造事实的程度,可能只会关心 Chatbots 的回答与上下文的相关性,而不太在意用户提出的具体问题。
● 如何生成测试问题来进行这个测试?是否需要担心创建一个本身带有偏见的问题集合?
如何解决这些问题都取决于工程师。没有标准答案,不过我想随着时间的推移,我们会找到一些标准处理方式。好奇心强的程序员可能会尝试亲自编写代码来进行这些评估。这可能是一个很好的锻炼机会,但幸运的是,这并非必需的。LlamaIndex为我们提供了一整套工具来探索所有选项,我将在下面详细介绍。
03 Chatbots 评估实践细节分享
在前文我已经概述了评估 Chatbots 输出内容的总体性、抽象性的思考。现在我将与大家分享我计划如何对 Chatbots 进行评估。简而言之,我打算依靠既有的程序化的 baseline,同时也会进行有针对性的主观感受评估。我会在处理每个问题之前和之后进行这两项分析。
3.1 通过程序进行评估具体流程
我不会提供代码片段或实现细节。如果你感兴趣,我建议去查阅 LlamaIndex 的文档[5]、访问 GitHub[6] 和 Discord[7] 获取支持。我将参考 LlamaIndex 提供的评估工具,解释我所采用的评估方式。
LlamaIndex 提供了至少四种不同的 Chatbots 评估方式,这些方式都可以混合使用。我使用的是 LlamaIndex 所称的查询(query)、响应(response)和源上下文(source context)的二元评估。文档指出,”如果 Chatbots 的响应与查询和任何源上下文相匹配,这种评估模式将返回”YES”,否则返回”NO”。(译者注:这样的目的是确定 Chatbots 的响应是否与查询和上下文相关)
正如我之前所述,我真正感兴趣的是:对于给出的上下文应该能够回答的问题,我的 Chatbots 提供的回答是否合乎逻辑?这种评估模式让我们更加接近这一目标。然而,我们仍然需要确保我们进行测试的问题是理论上可以由源文件回答的问题。要做到这一点,一种方法是按照上述方式进行评估,然后针对每个回答失败的问题,检查所有源文件中的每个文本块,看看是否能够回答这个问题。这样做的速度会非常慢,LlamaIndex 提供了一个更好的解决方案::DatasetGenerator 类[8],该类帮助我们从上下文中生成问题。因为问题是直接从我们的数据中生成的,所以我们可以合理地假设它们应该可以由上下文来回答。
然而,依赖这些问题进行测试存在一个问题——这些问题可能过于理想化了。如果这些问题是直接从上下文中生成的, Chatbots 可能会在这些问题上表现得很好。用户可能提出一些泛泛而谈、出乎意料或晦涩难懂的问题。为了解决这个问题,我创建了第二个测试集,只需给GPT-4一些关于我的 bot 的上下文,然后要求它生成一系列问题。
综上所述,我的评估过程是这样的:
1. 使用 LlamaIndex 的数据集生成器直接从我的数据集中生成100多个问题。
2. 循环对上述每个问题进行上文所定义的YES/NO测试。跟踪成功率,即[YES的数量] / [总问题数],这是我用来评估性能的参考指标。
3. 使用 GPT-4 生成 100 多个问题。
4. 对这些问题重复步骤 2 。
在每个循环中,我还会建立一个有四列组成的 data-frame :问题、回答、上下文(通过索引找到的源上下文)、评估(是/否)。每个问题都对应着一行。这样我就可以直观地查看具体效果。我将这个 data-frame 保存到 Google sheet 中,以备将来参考。再次强调,我的核心参考指标是得到“Yes”评估的问题的百分比,也就是与查询+源上下文匹配的回答的百分比。在我进行的第一次测试中,对于由 LlamaIndex 生成的问题,该指标值为78%,而由GPT生成的问题为79%。我计划在对我的 Chatbots 进行重大更新后再次进行这个测试。
这个过程中也存在许多不完美之处。例如,我希望我的 Chatbots 能够尝试回答一些在源数据中无法直接找到的通用法律科技(legal tech)问题。我发现 GPT-4 在像“人工智能在法律科技(legal tech)中的应用是怎样的?”这样的问题上表现不错。然而,对于使用索引技术的情况,这些问题可能过于笼统,难以找到一个较好的上下文片段。即使存在这些不完美之处,这些工具仍然非常有用。我现在已经有办法对我的 Chatbots 质量进行程序化评估,现在的目标是提高评估分数。同样重要的是,这个评估得分也可以作为一个参照,用来与我对 Chatbots 表现的直觉进行对比。
这个评估过程中还有一个很大的问题:评估每个问题都需要调用所选择的 LLM 的API。这意味着评估过程是缓慢且昂贵的。这还不算生成问题时需要消耗的大量资源。因此,我建议评估使用的问题数量不宜过多(本文中为100)。如果您计划将此流程用于生产环境,建议使用更多的问题进行评估。对于较小的项目,100 个问题应该足以对质量做出有意义的评估。但是,试想一下,如果生成 1000 个问题,并将其分成 10 组,每组 100 个问题。每组问题的评估得分都会不同,而且很难说会相差多少。我期望未来通过巧妙的工程方法能够解决这个问题。因此,我认为明智的做法是利用诸如 LlamaIndex 之类的工具,而不是自行构建数据连接工具(data connection tools)。
3.2 质性评估具体流程
我之前概述了我的 Legal Tech Bot 表现不佳的四类具体问题[9]。还解释了为什么我认为这些是使用像 LlamaIndex 这样的工具构建的 data-supported bots 普遍存在的问题。我计划逐一解决这些问题。在这个过程中,我将密切关注通过程序进行评估的具体流程。但我也将遵循以下流程来质性评估性能:
1. 在尝试解决 issue 之前,先收集该 issue 的各种实例。例如无法考虑到最新情况。可以通过试错的方式找到这些实例,也可以请一些测试用户帮忙。很多用户喜欢挑出产品中的漏洞。
2. 对问题进行深入调查研究,尝试不同的方法和实验,最终实施解决方案来解决问题。
3. 再次测试第(1)部分的 issue 。请测试用户进行相同的操作。
4. Bonus:搜索程序评估的输出结果,查看是否有以前评估为 ‘NO’ 而现在为 ‘YES’ 的例子。
我会对我所处理的每一个问题都遵循这个确切的流程。结合详细的前后记录,我就能清楚地知道我的 Chatbots 是否在进步。这与有效地将评估转移到 GPT 的程序化方法一样,远非完美的科学。质性方法(qualitative approach)是检测性能变化的重要方式,这种变化可能被程序化评估所忽略。
04 总结 Conclusion
构建基于 LLM 的高质量 Chatbot 仍然是一门玄学。将 Chatbot 与我们的数据连接起来,能够显著提高它们提供事实信息的能力。但目前还不清楚我们应该如何评判 Chatbot 的质量。本文旨在分享我的思考过程和我所得出的解决方案,我相信这是在现有工具条件下最合理的解决方案。如果您对如何更好地评估 data-supported chatbots 有任何问题或想法,请与我联系[10],我很乐意与您交流。
Thanks for reading!
END
文中链接
[2]legal-tech-bot.up.railway.app/
[4]www.mattambrogi.com/posts/chat-…
[5]gpt-index.readthedocs.io/en/latest/h…
[9]www.mattambrogi.com/posts/chat-…
本文经原作者授权,由Baihai IDP编译。如需转载译文,请联系获取授权。
原文链接:
www.mattambrogi.com/posts/evalu…
🚢🚢🚢欢迎小伙伴们加入AI技术软件及技术交流群,追踪前沿热点,共探技术难题~