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