news 2026/4/18 10:52:39

LangChain 的内置 AI 输出评估指标:它们有何不同?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain 的内置 AI 输出评估指标:它们有何不同?

原文:towardsdatascience.com/langchains-built-in-eval-metrics-for-ai-output-how-are-they-different-f9dd75e2de08?source=collection_archive---------9-----------------------#2024-05-22

https://medium.com/@jonathan.bennion?source=post_page---byline--f9dd75e2de08--------------------------------https://towardsdatascience.com/?source=post_page---byline--f9dd75e2de08-------------------------------- Jonathan Bennion

·发表于 Towards Data Science ·5 分钟阅读·2024 年 5 月 22 日

我通常为自己的使用案例创建自定义指标,但在开始使用 RAGAS 和/或 DeepEval 进行 RAG 评估之前,反复遇到 LangChain 内置的这些 AI 工具评估指标,所以最终对这些指标是如何创建的产生了好奇,并进行了快速分析(当然有所有固有的偏见)。

TLDR 来自以下的相关性矩阵:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2934a7023672ad3ffd5a80c6b8bfbe3a.png

内置指标可以在这里找到(移除一个与地面真相相关且更适合在其他地方处理的指标):

# Listing Criteria / LangChain's built-in metricsfromlangchain.evaluationimportCriteria new_criteria_list=[itemfori,iteminenumerate(Criteria)ifi!=2]new_criteria_list

这些指标:

首先,这些意味着什么,为什么要创建这些?

假设是:

在看到这里的源代码后,我得出了这个假设。

第二,一些这些似乎相似和/或模糊——那么它们是如何区分的呢?

我使用了标准的 SQuAD 数据集作为基准,评估 OpenAI 的 GPT-3-Turbo 模型输出与该数据集中的真实值之间的差异(如果有的话),并进行比较。

# Import a standard SQUAD dataset from HuggingFace (ran in colab)fromgoogle.colabimportuserdata HF_TOKEN=userdata.get('HF_TOKEN')dataset=load_dataset("rajpurkar/squad")print(type(dataset))

我获取了一组随机化的行进行评估(由于时间和计算限制,无法对整个数据集进行评估),因此这可能是更多噪音和/或偏差的切入点。

# Slice dataset to randomized selection of 100 rowsvalidation_data=dataset['validation']validation_df=validation_data.to_pandas()sample_df=validation_df.sample(n=100,replace=False)

我定义了一个 LLM,使用了 ChatGPT 3.5 Turbo(为了节省成本,这个过程很快)。

importos# Import OAI API keyOPENAI_API_KEY=userdata.get('OPENAI_API_KEY')os.environ['OPENAI_API_KEY']=userdata.get('OPENAI_API_KEY')# Define llmllm=ChatOpenAI(model_name='gpt-3.5-turbo',openai_api_key=OPENAI_API_KEY)

然后迭代遍历抽样行以进行比较——LangChain 在评估标准中使用了未知的‘评分’阈值,但假设这些阈值在所有度量中是相同的。

# Loop through each question in random sampleforindex,rowinsample_df.iterrows():try:prediction=" ".join(row['answers']['text'])input_text=row['question']# Loop through each criteria\forminnew_criteria_list:evaluator=load_evaluator("criteria",llm=llm,criteria=m)eval_result=evaluator.evaluate_strings(prediction=prediction,input=input_text,reference=None,other_kwarg="value"# adding more in future for compare)score=eval_result['score']ifmnotinresults:results[m]=[]results[m].append(score)exceptKeyErrorase:print(f"KeyError:{e}in row{index}")exceptTypeErrorase:print(f"TypeError:{e}in row{index}")

然后,我计算了均值和 95%置信区间的置信区间。

# Calculate means and confidence intervals at 95%mean_scores={}confidence_intervals={}form,scoresinresults.items():mean_score=np.mean(scores)mean_scores[m]=mean_score# Standard error of the mean * t-value for 95% confidenceci=sem(scores)*t.ppf((1+0.95)/2.,len(scores)-1)confidence_intervals[m]=(mean_score-ci,mean_score+ci)

然后绘制了结果。

# Plotting results by metricfig,ax=plt.subplots()m_labels=list(mean_scores.keys())means=list(mean_scores.values())cis=[confidence_intervals[m]forminm_labels]error=[(mean-ci[0],ci[1]-mean)formean,ciinzip(means,cis)]]ax.bar(m_labels,means,yerr=np.array(error).T,capsize=5,color='lightblue',label='Mean Scores with 95% CI')ax.set_xlabel('Criteria')ax.set_ylabel('Average Score')ax.set_title('Evaluation Scores by Criteria')plt.xticks(rotation=90)plt.legend()plt.show()

可能直观地认为‘相关性’比其他指标要高得多,但有趣的是,总体而言它们都很低(可能要感谢 GPT 3.5!),而‘有用性’是下一个最高的指标(可能反映了强化学习技术和优化)。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/06c0aec539a408ad7380c763433a4d69.png

为了回答我关于相关性的问题,我计算了一个简单的相关矩阵,使用了原始的比较数据框。

# Convert results to dataframemin_length=min(len(v)forvinresults.values())dfdata={k.name:v[:min_length]fork,vinresults.items()}df=pd.DataFrame(dfdata)# Filtering out null valuesfiltered_df=df.drop(columns=[colforcolindf.columnsif'MALICIOUSNESS'incolor'MISOGYNY'incol])# Create corr matrixcorrelation_matrix=filtered_df.corr()

然后绘制了结果(p 值是通过我的代码中的进一步部分创建的,且均小于 0.05)

# Plot corr matrixmask=np.triu(np.ones_like(correlation_matrix,dtype=bool))plt.figure(figsize=(10,8))sns.heatmap(correlation_matrix,mask=mask,annot=True,fmt=".2f",cmap='coolwarm',cbar_kws={"shrink":.8})plt.title('Correlation Matrix - Built-in Metrics from LangChain')plt.xticks(rotation=90)plt.yticks(rotation=0)plt.show()

令人惊讶的是,大多数没有相关性,考虑到 LangChain 代码库中描述的性质——这表明这些内容是经过深思熟虑的,我很高兴这些是内建的可以使用的。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2934a7023672ad3ffd5a80c6b8bfbe3a.png

从相关矩阵中,显现出一些显著的关系:

主要结论:

  1. 连贯性与深度在帮助性中的对比:尽管连贯性与帮助性相关,但深度却没有。这可能意味着用户更倾向于简洁明了的答案而非详细的答案,特别是在那些快速解决方案比全面方案更受重视的场景中。

  2. 利用争议性:争议性与犯罪性之间的正相关关系提出了一个有趣的问题:是否可以以非犯罪的方式讨论争议话题?这可能在不牺牲内容质量的情况下增加用户参与度。

  3. 偏见与模型选择的影响:使用 GPT-3.5 Turbo 以及度量设计中固有的偏见可能会影响这些相关性。承认这些偏见对于准确解读和应用这些度量标准至关重要。

除非另有说明,本文中的所有图片均由作者创作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 19:02:37

基于libusb的USB驱动开发完整指南

从零构建USB通信:深入掌握 libusb 的实战艺术 你有没有遇到过这样的场景?手头有一块自定义的嵌入式板子、一个工业传感器,或者一块FPGA开发板,它通过USB与PC相连,但厂商没提供Windows驱动,Linux下又被 us…

作者头像 李华
网站建设 2026/4/15 15:07:27

脑电数据分析神器:5步掌握FieldTrip完整操作流程

脑电数据分析神器:5步掌握FieldTrip完整操作流程 【免费下载链接】fieldtrip The MATLAB toolbox for MEG, EEG and iEEG analysis 项目地址: https://gitcode.com/gh_mirrors/fi/fieldtrip 想要高效处理脑电信号却苦于没有合适的工具?FieldTrip作…

作者头像 李华
网站建设 2026/4/17 13:06:05

出现CUDA内存溢出错误?系统已内置自动优化但仍需人工干预

出现CUDA内存溢出错误?系统已内置自动优化但仍需人工干预 在部署语音识别模型的实践中,你是否曾遇到这样的场景:刚启动服务时一切正常,可一旦上传一段会议录音或连续处理多个音频文件,系统突然报错——CUDA out of me…

作者头像 李华
网站建设 2026/4/18 3:33:45

如何零基础5分钟搭建原神私服?终极GUI服务端使用指南

如何零基础5分钟搭建原神私服?终极GUI服务端使用指南 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 还在为复杂的命令行配置而烦恼吗?想要轻松拥有…

作者头像 李华
网站建设 2026/4/18 3:35:02

Music Tag Web:5分钟搞定音乐标签整理的实用指南

Music Tag Web:5分钟搞定音乐标签整理的实用指南 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/music-tag-w…

作者头像 李华
网站建设 2026/4/18 9:55:39

x64和arm64指令集差异对Linux性能影响全面讲解

x64 与 arm64 指令集差异如何真正影响 Linux 性能? 你有没有遇到过这样的情况:同一段代码,在 Intel 服务器上跑得飞快,换到基于 ARM 的云实例却变慢了?或者你的容器镜像在本地 AMD64 架构下启动顺畅,推送到…

作者头像 李华