MoreRSS

site iconAlan Hsu修改

博客名:X·myLog,个人纪录向博客。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Alan Hsu的 RSS 预览

评测任务&评测集

2025-01-19 08:00:00

📌

评测任务

1. 自然语言处理

  1. 特征提取Feature Extraction:https://huggingface.co/tasks/feature-extraction
  1. 掩码Fill-Mask:https://huggingface.co/tasks/fill-mask
  1. 问答Question Answering:https://huggingface.co/tasks/question-answering
  1. 句子相似度Sentence Similarity:https://huggingface.co/tasks/sentence-similarity
  1. 摘要(Summarization):https://huggingface.co/tasks/summarization
  1. 表格问答(Table Question Answering):https://huggingface.co/tasks/table-question-answering
  1. 文本分类(Text Classification):https://huggingface.co/tasks/text-classification
  1. 文本生成(Text Generation):https://huggingface.co/tasks/text-generation
  1. 令牌分类(Token Classification):https://huggingface.co/tasks/token-classification
  1. 翻译(Translation):https://huggingface.co/tasks/translation
  1. 零样本分类(Zero-Shot Classification):https://huggingface.co/tasks/zero-shot-classification

2. 多模态

  1. 文档视觉问答(Document Question Answering,简称DQA)https://huggingface.co/tasks/document-question-answering
  1. 图像-文本到文本(Image-Text-to-Text):https://huggingface.co/tasks/image-text-to-text
  1. 视频-文本到文本(Video-Text-to-Text):https://huggingface.co/tasks/video-text-to-text
  1. 视觉问答(Visual Question Answering,简称VQA):https://huggingface.co/tasks/visual-question-answering

3. 声音处理

  1. 音频分类(Audio Classification),这项任务用于识别用户给出的命令、语句中的情感,以及识别说话者是谁。https://huggingface.co/tasks/audio-classification
  1. 音频生音频(Audio-to-Audio ):https://huggingface.co/tasks/audio-to-audio
  1. 自动语音识别(Automatic Speech Recognition,简称ASR)也被称为语音转文本(Speech to Text,简称STT)https://huggingface.co/tasks/automatic-speech-recognition
  1. 文本转语音(Text-to-Speech (TTS)https://huggingface.co/tasks/text-to-speech

4. 表格处理

  1. 表格分类(Tabular Classification)它根据有限数量的属性给定一个标签或类别,本质是分类任务https://huggingface.co/tasks/tabular-classification
  1. 表格回归(Tabular Regression)根据一组属性(attributes)来预测一个数值(numerical value)。https://huggingface.co/tasks/tabular-regression

5. 计算机视觉

  1. 深度估计(Depth Estimation),https://huggingface.co/tasks/depth-estimation
  1. 图像分类(Image Classification),https://huggingface.co/tasks/image-classification
  1. 图像特征提取(Image Feature Extraction),https://huggingface.co/tasks/image-feature-extraction
  1. 图像分割(Image Segmentation)https://huggingface.co/tasks/image-segmentation
  1. 图生图(Image-to-Image)https://huggingface.co/tasks/image-to-image
  1. 图生文(Image-to-Text)https://huggingface.co/tasks/image-to-text
  1. 关键点检测(Keypoint Detection)https://huggingface.co/tasks/keypoint-detection
  1. 掩码生成(Mask Generation)https://huggingface.co/tasks/mask-generation
  1. 目标检测(Object Detection)https://huggingface.co/tasks/object-detection
  1. 视频分类(Video Classification)https://huggingface.co/tasks/video-classification
  1. 文本到图像(Text-to-Image)https://huggingface.co/tasks/text-to-image
  1. 文生视频(Text-to-Video)https://huggingface.co/tasks/text-to-video
  1. 无条件图像生成(Unconditional Image Generation)https://huggingface.co/tasks/unconditional-image-generation
  1. 零样本图像分类(Zero-Shot Image Classification)https://huggingface.co/tasks/zero-shot-image-classification
  1. 零样本目标检测(Zero-Shot Object Detection)https://huggingface.co/tasks/zero-shot-object-detection
  1. 文本到3D(Text-to-3D)https://huggingface.co/tasks/text-to-3d
  1. 图像到3D(Image-to-3D)https://huggingface.co/tasks/image-to-3d

6. 强化学习

 

评测集

评测集是为有效评估基础模型及其微调算法在不同场景、不同任务上的综合效果,所构建的单任务或多任务的统一基准数据集,有公开和封闭两种形态。
这些评测集就像针对不同领域的考卷,通过测试大模型在这些“考卷”中的得分,人们可以更直观地比较大模型的性能高低。

1. 评测集社区

在小模型时代,大多数模型机构都会使用学术类评测集效果来作为评判模型好坏的依据。现在,大模型厂商也开始更加主动地参与到学术界基准测试框架中来,视其为权威背书与营销依据。
市面上已出现不少大模型的评测集,例如国际上用的较多的大模型评测集MMLU、中文评估模型C-Eval、SuperCLUE等。
大部分公开数据集可以从Hugging Face上获取https://huggingface.co/datasets。

2. 典型评测集解读

LLMs:MMLU基准(大规模多任务语言理解)的简介(MMLU-ZS/MMLU-FS)、安装、使用方法之详细攻略-CSDN博客
  1. MMLU(Massive Multitask Language Understanding,大规模多任务语言理解)
是一个由Hendrycks等人在《Measuring Massive Multitask Language Understanding》中提出的新基准,旨在通过仅在零样本和少样本设置下评估模型来衡量预训练期间获得的知识。这使得基准更具挑战性,更类似于我们评估人类的方式。该基准涵盖了57个科目,包括STEM(科学、技术、工程、数学)、人文科学、社会科学等领域。它的难度从初级水平到高级专业水平不等,测试的内容既涵盖世界知识,又涉及问题解决能力。科目涵盖传统领域(如数学和历史)以及更专业的领域,如法律和伦理学。基准的细粒度和广度使其能够发现模型的盲点。
在MMLU基准中,涉及到了两种特定的测试设置,即mmlu-zs(zero-shot)和mmlu-fs(few-shot)。这些测试设置旨在模拟零样本学习和少样本学习的情况,更接近人类学习的方式。通过使用MMLU-ZS和MMLU-FS进行评估,可以更好地了解模型在没有大量训练数据的情况下的泛化能力和适应能力。这使得评估更加接近真实世界的应用场景,并揭示了模型的弱点和改进的方向。
MMLU-ZS
"MMLU-ZS"代表"Massive Multitask Language Understanding - Zero-Shot"(零样本)。在MMLU基准中,MMLU-ZS是指在没有进行任何额外训练的情况下,通过零样本学习来评估模型的性能。在这种设置下,模型需要在没有之前见过的任务或领域的情况下进行推理和理解。MMLU-ZS(Zero-Shot MMLU)是指零样本MMLU。这意味着模型在训练阶段没有接触过MMLU-ZS数据集中的示例。通过在这个子集上评估模型的性能,可以测试模型在新领域或未知主题下的语言生成和理解能力。
MMLU-FS
"MMLU-FS"代表"Massive Multitask Language Understanding - Few-Shot"(少样本)。在MMLU基准中,MMLU-FS是指通过少量样本进行学习来评估模型的性能。模型在这种设置下需要在只有极少数量的训练示例的情况下进行推理和理解。MMLU-FS(Five-Shot MMLU)是指五样本MMLU。这意味着模型在训练阶段接触了MMLU-FS数据集中的少量示例(通常是五个示例)。通过在这个子集上评估模型的性能,可以测试模型对少量训练样本的学习和泛化能力。
  • CEVAL评测集
全面的中文基础模型评估套件。包含了13948个多项选择题,涵盖了52个不同学科和四个难度等级。主要用来评估模型的知识和推理能力。
notion image
  • MT-Bench数据集
尽管我们认为人类偏好是黄金标准,但收集人类偏好非常缓慢且昂贵。
MT-Bench的目的是提供一个自动化的、可扩展的方法来评估LLM与人类偏好的一致性,具体是使用GPT-4作为裁判员,将Prompt输入给各个大模型,对他们的输出进行打分。包含80个高质量多轮问题的测试,旨在测试模型的对话和遵循指令的能力。这些问题分布在8个类别中,包括写作、角色扮演、提取信息、推理、数学、编程以及STEM和人文/社会科学知识领域。您可以在这里查看MT-bench的示例问题和回答。
使用方法:
  • AlignBench数据集
针对中文大模型的评测基准,能够在多维度上细致评测模型和人类意图的对齐水平。数据集来自于真实的使用场景,经过初步构造、敏感性筛查、参考答案生成和难度筛选等步骤,确保具有真实性和挑战性。数据集分为8个大类,包括知识问答、写作生成、角色扮演等多种类型的问题。https://paperswithcode.com/dataset/alignbench
整个评估过程包含三个步骤:获取待评测模型的生成结果、调用评价模型获取分析和打分,最终计算结果。
  • SuperCLUE中文通用大模型综合性基准
\[1] CLUE官网:www.CLUEBenchmarks.com
\[2] SuperCLUE排行榜网站:www.superclueai.com
  • HumanEval
HumanEval 是 OpenAI 用来评估大语言模型生成代码能力的工具,包括手写的 164 个 python 编程问题及解答的 jsonl 格式数据,以及执行评估的脚本。
该工具采用使用pass@k指标评估功能正确性,"pass@k"是一个特定的评估指标,通常用于衡量在给定k个可能的输出中,程序输出是否至少有一个是正确的。这种方法在评估编程任务的自动完成或代码生成任务时特别有用,因为它允许一定程度的灵活性,而不是要求完全精确的输出匹配。
  • AlpacaEval
AlpacaEval 是一种用于评估大语言模型性能的指标,它被设计用于对抗生成式预训练(GPT)模型的弱点,并更全面地反映模型的真实能力。这一指标由 OpenAI 提出,旨在解决以往评估指标的一些局限性,特别是在理解和生成多样性方面存在的问题。
AlpacaEval 的名称中,“Alpaca” 代表一种动物,是一种灵活而多才多艺的动物,象征着模型在不同任务和语境中的灵活性和多功能性。而“Eval” 则是 evaluation 的缩写,表示评估。因此,AlpacaEval 旨在通过更全面的评估,更准确地捕捉模型的综合表现。
它基于AlpacaFarm评估集,测试模型遵循一般用户指令的能力。然后,这些响应与参考响应(AlpacaEval使用Davinci003,AlpacaEval 2.0使用GPT-4预览版)通过提供的基于GPT-4的自动注释器进行比较,从而得出上述的胜率。
AlpacaEval 主要关注以下几个方面:
  1. 多样性(Diversity): 衡量模型生成文本的多样性,避免单一或刻板的输出。多样性是指模型在生成不同样本时的差异程度。在实际应用中,我们期望模型不仅能够生成准确的内容,还能够呈现出多样的表达方式,以适应不同场景和需求。
  1. 一致性(Consistency): 评估模型在处理相似输入时生成的输出是否一致。一致性是指当模型面对相似的问题或请求时,其回应应该是稳定和一致的。这有助于确保模型在类似场景下能够提供可靠的结果。
  1. 相关性(Relevance): 衡量生成文本与输入之间的语义相关性。相关性是指模型生成的文本是否与给定的输入有明确的关联,以及是否符合预期的语境。这有助于确保模型的输出在语境上是合理的,而不是简单地生成无关或荒谬的内容。
二、评估指标
alpaca\_eval评估方法主要采用了以下指标:
1.BLEU:一种基于n-gram重叠度的评估指标,用于衡量生成文本与参考文本的相似度。
2.ROUGE:一种基于召回率的评估指标,用于衡量生成文本中覆盖参考文本的信息量。
3.METEOR:一种结合了词汇匹配、句法匹配和词汇覆盖度的评估指标,用于衡量生成文本与参考文本的语义相似度。
4.CIDEr:一种基于共识度的评估指标,用于衡量生成文本在多个参考文本中的共识程度。
5.SPICE:一种基于语义解析的评估指标,用于衡量生成文本与参考文本在语义上的相似度。
三、评估流程
1.准备数据:使用alpaca数据集,将数据分为训练集、验证集和测试集。
2.训练模型:使用训练集对文本生成模型进行训练。
3.生成文本:使用验证集对模型进行验证,生成预测文本。
4.评估性能:使用alpaca\_eval评估方法,计算生成文本与参考文本在各个指标上的得分。
5.分析结果:根据评估结果,分析模型在各个方面的优缺点,为进一步优化模型提供依据。

3. 构建评测集

 
 
 
 
🎒
离开乏味的皮囊,自由的灵魂在路上
  • Name: Alan Hsu
  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
  • Email:xulanzhong521gmail.com
  • WeChat: Alan_Hsu_521
notion image
notion image
 
 
 

评测Prompt

2025-01-19 08:00:00

📌

模型评测第一步也是使用模型进行推理,推理时Prompt质量影响模型的输出。因此在模型评测的时候,也非常重视Prompt的质量。
大量的实验表明,即便测试的原始题目相同,对于 prompt 的不同构造方式会对模型的表现产生影响。可能影响的因素包括:
  • Prompt 本身的构成方式,包括指令、in-context example、题目的写法;
  • in-context example 的选择,包括了选择的数量和方式;
  • 对 prompt 的使用方式。是让模型基于 prompt 进行补全,还是从候选的 prompt 中选择一个最好的作为答案?
通常使用两种Prompt策略:Few-short Prompt和COT Prompt。
notion image
通常,我们会在 prompt 开头放入指令,几个 in-context example(上下文样例),再在最后放入题目。例如:
 
 
 
 
 
 
 
🎒
离开乏味的皮囊,自由的灵魂在路上
  • Name: Alan Hsu
  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
  • Email:xulanzhong521gmail.com
  • WeChat: Alan_Hsu_521
notion image
notion image
 
 
 

大模型评测指标

2025-01-19 08:00:00

📌

 
评测指标可以分为通用指标、任务特定指标和数据集特定指标。
  • 通用指标(Generic metrics):可以应用于多种任务和数据集的指标,如评估有标签的(监督式)数据集的精确度(precision)和准确度(accuracy)这样的指标,以及用于评估生成任务(无监督)的困惑度(perplexity)指标。
  • 任务特定指标(Task-specific metrics):这类指标限定于特定的任务。例如,机器翻译任务(Machine Translation)通常使用BLEU或ROUGE这样的指标进行评估,而命名实体识别(Named Entity Recognition)任务则常用seqeval指标进行评估。
  • 数据集特定指标(Dataset-specific metrics):某些数据集,例如GLUE和SQuAD有与之相关的特定评估指标。

1. 通用指标

Precision 精确度https://huggingface.co/spaces/evaluate-metric/precision
Recall召回率https://huggingface.co/spaces/evaluate-metric/recall
F1分数https://huggingface.co/spaces/evaluate-metric/f1

2. 任务特定指标

BLEU指标应用场景、计算方法https://huggingface.co/spaces/evaluate-metric/bleu
GoogleBLEUhttps://huggingface.co/spaces/evaluate-metric/google\_bleu
seqevalhttps://github.com/huggingface/evaluate/blob/main/metrics/seqeval/
CodeEvalhttps://huggingface.co/spaces/evaluate-metric/code\_eval

3. 数据集特定指标

4. 选择合适的指标

参考https://huggingface.co/docs/evaluate/choosing\_a\_metric
在选择评估指标时,需要考虑任务的特定需求。下面是寻找和选择合适指标的方法。这些方法包括查看任务相关的资源、参考排行榜、阅读指标卡片以及查阅最新的研究文献。
  • 查看排行榜:你可以在像Papers With Code这样的网站上查看排行榜,这些网站允许你按任务和数据集进行搜索。在论文中,通常会有说明用到的评估指标。
  • 阅读指标卡片:你可以阅读相关指标的指标卡片,看看哪些指标适合你的用例。例如,可以查看BLEU指标卡片SQuAD指标卡片。 或者查阅Github网站https://github.com/huggingface/evaluate/tree/main/metrics
  • 查阅论文和博客文章:还可以查看发表的相关论文和博客文章,了解它们报告了哪些指标。由于指标可能会随时间变化,因此尽量挑选近几年的论文。
 

选择合适的指标

Pass@K

论文地址:https://arxiv.org/abs/2107.03374

研究论文

《Evaluating Large Language Models Trained on Code》介绍了HumanEval数据集的构建方法和评估标准,以及如何使用这个数据集来测试和比较不同代码生成模型的性能。

评估工具

CodeEval工具可以方便地使用HumanEval数据集来评估和比较不同代码生成模型的性能。使用方法:
注意:国内需要配置链接huggingface的代理,否则会得到下面的报错。
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /api/spaces?filter=measurement (Caused by NewConnectionError('\<urllib3.connection.HTTPSConnection object at 0x7feea0e84190>: Failed to establish a new connection: \[Errno 60] Operation timed out'))
如果没有代理服务器,则需要将相关的metric script下载到本地。打开https://github.com/huggingface/evaluate/,下载 metrics 文件夹,放在测试脚本的目录下,并将evaluate.load()的参数由’code\_eval' 改为 本地的目录’./metrics/code\_eval’
具体步骤如下:
  1. 加载评估工具:从 evaluate 库中加载 code_eval 评估工具。将会从huggingface下载,因此需要配置代理。
  1. 定义测试用例:指定一个或多个测试用例,用于验证候选代码片段的正确性。
  1. 定义候选代码:指定一个或多个候选代码片段,这些代码片段将被评估。
  1. 计算评估结果:调用 code_eval.compute 方法,传入测试用例和候选代码片段,计算 pass@k 评估结果。
  1. 打印评估结果:输出 pass@k 的评估结果,显示候选代码片段通过测试用例的情况。
code_eval.compute 方法的参数包括:
  • predictions:要评估的候选预测列表。每个候选预测应该是一个字符串列表,包含多个代码候选项。
  • references:每个预测对应的测试用例列表。每个测试应该评估一个代码候选项的正确性。
  • k:在评估中要考虑的代码候选项数量。默认值是\[1, 10, 100]。
  • num\_workers:用于评估候选程序的工作线程数(默认值是4)。
  • timeout:在被认为是“超时”之前,产生一个预测的最大时间。默认值是3.0(即3秒)。
注意:因为CodeEval工具会执行predictions中的代码,因此,强烈建议用户不要在没有强大安全沙箱的情况下这样做,避免带来安全风险。
\#############################################################################
!!!WARNING!!!
\#############################################################################
The "code\_eval" metric executes untrusted model-generated code in Python.
Although it is highly unlikely that model-generated code will do something
overtly malicious in response to this test suite, model-generated code may act
destructively due to a lack of model capability or alignment.
Users are strongly encouraged to sandbox this evaluation suite so that it
does not perform destructive actions on their host or network. For more
information on how OpenAI sandboxes its code, see the paper "Evaluating Large
Language Models Trained on Code" (https://arxiv.org/abs/2107.03374).
Once you have read this disclaimer and taken appropriate precautions,
set the environment variable HF\_ALLOW\_CODE\_EVAL="1". Within Python you can to this
with:
\>>> import os
\>>> os.environ\["HF\_ALLOW\_CODE\_EVAL"] = "1"
\#############################################################################
上面代码将会输出pass\_at\_k:{'pass@1': 0.5, 'pass@2': 1.0},这是因为:
  • pass@1 为 0.5:这意味着在前 1 个候选代码片段中,只有 50% 的代码片段通过了测试用例。具体来说,def add(a, b): return a+b 通过了测试用例 assert add(2,3)==5,而 def add(a, b): return a*b 没有通过。
  • pass@2 为 1.0:这意味着在前 2 个候选代码片段中,有 100% 的代码片段通过了测试用例。具体来说,虽然 def add(a, b): return a*b 没有通过,但 def add(a, b): return a+b 通过了,所以整体上 100% 的候选代码片段通过了测试用例。
上面代码将会输出results:
 

F1

https://huggingface.co/spaces/evaluate-metric/f1
 

Bleu

https://huggingface.co/spaces/evaluate-metric/bleu
BLEU(Bilingual Evaluation Understudy)是一种用于评估机器将一种自然语言翻译成另一种自然语言后文本质量的算法。“机器翻译越接近专业人类翻译,质量就越好”。

BLEU的评分方式

  1. BLEU分数是针对单个翻译片段(通常是句子)计算的,通过将它们与一组高质量的参考翻译进行比较得出。
  1. 然后,这些分数在整个语料库上平均,以估计翻译的整体质量。
  1. BLEU不考虑可理解性或语法正确性。

网页版计算工具

可以用HuggingFace网站提供的网页版计算工具:https://huggingface.co/spaces/evaluate-metric/bleu
notion image
  1. 输入数据
    • predictions:这是一个包含预测句子的列表,这些句子是机器翻译系统生成的。
    • references:这是一个包含参考译文列表的列表,每个预测句子可以对应多个参考译文。
    1. 输出结果
      • bleu:BLEU分数,这是一个介于0和1之间的值,值越高表示翻译质量越好。
      • precisions:n-gram精确度的几何平均值,这是一个列表,包含了不同n-gram顺序下的精确度。
      • brevity_penalty:简洁性惩罚,用于处理预测句子比参考译文短的情况。
      • length_ratio:长度比,即预测句子长度与参考译文长度的比值。
      • translation_length:翻译长度,即预测句子的长度。
      • reference_length:参考长度,即参考句子的长度。

      用Evaluate包计算

      需要安装evaluate包。
      计算代码:
      📢注意:evaluate.load需要重huggingface下载脚本,所以一定要配置proxy,否则会连不上huggingface.co
      requests.exceptions.ConnectionError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /api/spaces?filter=measurement (Caused by NewConnectionError('\<urllib3.connection.HTTPSConnection object at 0x7feea0e84190>: Failed to establish a new connection: \[Errno 60] Operation timed out'))
      另外解决办法:
      将相关的metric script下载到本地。具体方法是打开https://github.com/huggingface/evaluate/,下载 metrics 文件夹,放在测试脚本的目录下,并将evaluate.load()的参数改为本地的测试脚本目录,例如’./metrics/bleu’
      1. 参数
      • tokenizer:用于标准化预测句子和参考句子的方法。默认是tokenizer_13a,这是一种相对简单的标记化方法,但等同于WMT(Workshop on Machine Translation)使用的mteval-v13a。可以替换为其他标记化方法,例如NLTK的word_tokenize()或Tokenizers库的预训练标记器。
      • max_order:计算BLEU分数时使用的最大n-gram顺序,默认为4。
      • smooth:是否应用Lin et al.2004平滑方法,默认为False。
      1. 输出
      输出的BLEU分数计算结果,包括BLEU分数、精确度、简洁性惩罚、长度比、翻译长度和参考长度。
      • bleu(float):BLEU得分是一个浮点数,表示翻译文本与参考文本的相似度。BLEU得分总是在0到1之间,0表示完全不相似,1表示完全相同。
      • precisions(list of float s):n-gram精确度的几何平均值,这里n-gram指的是文本中的连续n个词的组合。
      • brevity\_penalty(float):简短性惩罚,用于处理翻译文本比参考文本短的情况。
      • length\_ratio(float):长度比,即翻译文本长度与参考文本长度的比值。
      • translation\_length(int):翻译文本的长度,以词为单位。
      • reference\_length(int):参考文本的长度,以词为单位。

      相关知识

      tokenizer的作用是什么

      Tokenizer的主要作用是将文本数据分解成基本的单元,这些单元可以是单词、子单词、字符或者更小的片段,以便机器学习模型能够处理和理解文本。以下是tokenizer的一些主要功能和目的:
      1. 文本分割:将整个文本字符串分割成更小的单元,如单词、短语或符号,这些单元称为tokens。
      1. 标准化:确保tokens的一致性,例如,将所有英文单词转换为小写,以消除大小写的差异。
      1. 去除噪声:删除文本中的无关字符,如标点符号、特殊字符或停用词(stop words),这些通常不携带对模型有用的信息。
      1. 词汇表构建:在训练数据上构建一个词汇表,这个词汇表包含了所有唯一的tokens,用于后续将文本映射到数值表示。
      1. 序列化:将文本转换为固定长度的序列,这对于某些模型(如循环神经网络)是必要的。
      1. 子词分割:在处理未知单词或词汇外(out-of-vocabulary, OOV)的单词时,tokenizer可以将它们分割成子词(subword)或字符,以提高模型的泛化能力。
      1. 支持多语言:在多语言环境中,tokenizer需要能够处理不同语言的特定规则和结构。
      1. 预处理:执行其他预处理步骤,如词干提取(stemming)和词形还原(lemmatization),这些步骤有助于进一步规范化tokens。
      1. 编码:将tokens转换为模型可以理解的数值表示,如one-hot编码或词嵌入(word embeddings)。
      1. 保持语义:尽管tokenizer将文本分割成更小的单元,但它需要确保这些单元能够尽可能地保留原始文本的语义信息。
      在自然语言处理(NLP)任务中,如文本分类、情感分析、机器翻译等,tokenizer是文本预处理的重要步骤,它直接影响到模型的性能和结果的准确性。不同的任务和模型可能需要不同类型的tokenizer,例如,基于字符的tokenizer、基于单词的tokenizer或基于子词的tokenizer。

      Tokenizer库是什么

      Tokenizers库(https://huggingface.co/docs/tokenizers/index)是由Hugging Face开发的一个用于文本分词(tokenization)的Python库。它提供了多种分词器的实现,特别注重性能和通用性。以下是Tokenizers库的一些主要特点和功能:
      1. 多种分词器:支持多种流行的预制分词器,包括BERT WordPiece和三种最常见的Byte Pair Encoding(BPE)版本。
      1. 性能:由于基于Rust语言实现,Tokenizers库在训练和分词上都非常快速。它能够在服务器的CPU上在不到20秒的时间内对GB级的文本进行分词。
      1. 易用性与灵活性:Tokenizers库易于使用,同时也非常灵活,可以满足研究和生产的需求。
      1. 预处理功能:支持所有预处理操作,包括截断(Truncate)、填充(Pad)以及添加模型所需的特殊标记(如开始标记、结束标记等)。
      1. 规范化与对齐跟踪:在规范化过程中,Tokenizers库会跟踪对齐信息,使得用户可以获取原始句子中对应于给定标记的部分。
      1. 训练新词汇表:用户可以使用Tokenizers库来训练新的词汇表,并使用这些词汇表进行分词。
      1. 保存和加载分词器:可以轻松地保存训练好的分词器到文件,并在需要时加载它们。
      1. 与Hugging Face Hub集成:Tokenizers库可以与Hugging Face Hub集成,方便地加载预训练的分词器。
      1. 支持自定义分词器:如果预制的分词器不能满足需求,用户可以构建自己的分词器,通过组合不同的组件来满足特定的需求。
      Tokenizers库通过提供这些功能,成为了NLP任务中文本预处理的重要工具,特别是在需要高性能和高效率处理大量文本数据的场景中。它与Hugging Face的Transformers库一起使用,可以为各种NLP模型提供强大的文本处理能力。

      NTLK是什么

      NLTK(Natural Language Toolkit)是一个用于自然语言处理(NLP)的开源Python库。它提供了一系列强大的工具和资源,帮助用户处理和分析人类语言数据。以下是NLTK的主要特点和功能:
      1. 功能丰富
        • NLTK包含了多种文本处理功能,如分词、词性标注、命名实体识别、句法分析、情感分析等。
        • 提供了对多种语料库和词汇资源的访问,例如WordNet。
        1. 易于使用
          • NLTK提供了简单易用的API,适合初学者和研究人员使用。
          • 包含大量的示例和教程,帮助用户快速上手。
          1. 多种语料库
            • NLTK内置了超过50种语料库,用户可以直接使用这些语料库进行实验和研究。
            • 这些语料库涵盖了多种文本类型,如新闻、文学作品、社交媒体等。
            1. 教育和研究用途
              • NLTK被广泛用于教学和研究,尤其是在计算语言学和自然语言处理领域。
              • 提供了关于语言处理任务的基本概念和理论背景的学习材料。
              1. 跨平台支持
                • NLTK可以在Windows、Mac OS X和Linux等多个操作系统上运行。
                1. 社区驱动
                  • NLTK是一个社区驱动的项目,用户可以参与开发和贡献代码。

                  常见应用

                  • 文本预处理:分词、去除停用词、词干提取等。
                  • 文本分析:词频统计、情感分析、主题建模等。
                  • 信息提取:从文本中提取特定信息,如人名、地名等。
                  • 机器学习:用于训练和评估自然语言处理模型。

                  示例代码

                  以下是一些使用NLTK的简单示例:
                  1. 分词
                  1. 词性标注
                  1. 命名实体识别
                  NLTK是一个强大的工具,适合用于各种自然语言处理任务,是学习和研究NLP的理想选择。
                  计算BLEU分数时,使用NLTK的word_tokenize()作为分词器。

                  什么是Lin et al.2004平滑方法

                  Lin et al.2004平滑方法是Chin-Yew Lin和Franz Josef Och在2004年提出的用于计算BLEU分数时的一种平滑技术。这种平滑方法旨在解决机器翻译评估中的一个问题:当机器翻译输出中没有某个n-gram时,会导致该n-gram的精确度为零,从而可能对整体BLEU分数产生不利影响。Lin et al.2004平滑方法通过在计算中添加一个小的常数(epsilon),来避免零精确度的问题,使得BLEU分数更加稳定和可靠。
                  具体来说,Lin et al.2004平滑方法有两种主要的形式:
                  1. 方法1:在每个n-gram的精确度计算中,如果分母(即参考翻译中n-gram的数量)不为零而分子(即机器翻译输出中匹配的n-gram数量)为零时,就在分子上加上一个很小的常数epsilon。这样,即使没有匹配的n-gram,也能获得一个非零的精确度值,从而避免对BLEU分数产生过大的负面影响。
                  1. 方法2:在计算每个n-gram的精确度时,不仅在分子上加上一个小的常数,还在分母上加上同样的常数。这种方法受到Chin-Yew Lin和Franz Josef Och在2004年发表的论文"ORANGE: a Method for Evaluating Automatic Evaluation Metrics for Machine Translation"的影响。
                  这两种方法都旨在通过引入一个小的调整来平滑BLEU分数的计算,减少由于偶然缺少特定n-gram而导致的评分波动,使得评分结果更加稳定和可靠。

                  什么是n-gram

                  n-gram 是一种统计语言模型,用于预测文本中连续出现的项目(如字母、音节或单词)的概率。它基于这样的假设:一个项目的出现倾向于依赖于前面几个项目。n-gram 模型通过统计和利用这些连续项目的出现频率来预测下一个项目。
                  具体来说:
                  1. 1-gram(一元模型):只考虑单个项目(如单词或字母)出现的频率,不考虑上下文。
                  1. 2-gram(二元模型):考虑两个连续项目(如两个连续单词或字母)同时出现的概率。
                  1. 3-gram(三元模型):考虑三个连续项目同时出现的概率,以此类推。
                  n-gram 模型中的 "n" 表示连续项目的数量。例如:
                  • 对于句子 "I have a dream":
                    • 1-gram: I, have, a, dream
                    • 2-gram: (I, have), (have, a), (a, dream)
                    • 3-gram: (I, have, a), (have, a, dream)
                  n-gram 模型广泛应用于自然语言处理领域,包括:
                  1. 文本生成:根据已有的文本生成新的文本。
                  1. 语言模型评估:评估机器翻译、语音识别等系统的性能。
                  1. 信息检索:提高搜索引擎的准确性和相关性。
                  n-gram 模型的优点是简单、易于实现,但缺点是随着n的增加,模型需要处理的数据量呈指数级增长,可能导致数据稀疏问题。此外,n-gram 模型通常忽略了项目之间更长距离的依赖关系。尽管如此,n-gram 模型仍然是许多自然语言处理任务中的基础工具。

                  什么是数据稀疏问题

                  数据稀疏问题(Sparse Data Problem)是指在数据分析和机器学习中,由于数据量不足或者特征维度过高导致的数据中大部分值都是零或者缺失的现象。这种情况会给模型的训练和预测带来挑战,具体表现在以下几个方面:
                  1. 模型训练困难:当数据集中的大部分条目都是零或缺失时,模型可能无法有效地学习到数据中的模式和关系,因为有效的信息太少。
                  1. 过拟合风险:数据稀疏可能导致模型在有限的数据上过度拟合,即模型在训练数据上表现良好,但在未见过的测试数据上表现差。
                  1. 特征选择问题:在高维数据中,很多特征可能是不相关的或者冗余的,这使得特征选择变得困难。
                  1. 计算效率低下:稀疏数据可能导致计算效率降低,因为存储和处理大量的零值是不必要的。
                  1. 统计分析问题:在统计分析中,数据稀疏可能导致估计的参数不准确,因为样本量不足以支撑统计推断。
                  为了解决数据稀疏问题,可以采取以下几种策略:
                  • 数据增强:通过生成合成数据或者对现有数据进行变换来增加数据量。
                  • 特征工程:通过特征选择或特征提取减少维度,去除不相关的特征。
                  • 正则化:在模型训练中使用正则化技术,如L1或L2正则化,以减少过拟合的风险。
                  • 降维:使用主成分分析(PCA)或其他降维技术减少特征空间的维度。
                  • 迁移学习:利用预训练模型的知识,将其应用到数据稀疏的问题上。
                  • 集成学习:通过集成多个模型的预测来提高模型的稳定性和准确性。
                  • 使用稀疏表示:在模型和算法中直接利用稀疏表示,例如在神经网络中使用稀疏连接。
                  数据稀疏问题是机器学习和数据科学中常见的挑战,需要根据具体情况选择合适的方法来解决。

                  什么是简短性惩罚?

                  简短性惩罚(Brevity Penalty,简称BP)是BLEU评分系统中的一个重要组成部分,用于避免机器翻译系统通过生成过短的翻译来不正当地提高其BLEU得分。这种惩罚是必要的,因为如果机器翻译的输出比参考翻译短,那么它在n-gram匹配上的表现可能会更好,即使翻译的质量并不高。
                  简短性惩罚的计算公式如下:
                  notion image
                  • 当机器翻译输出的长度大于或等于参考翻译的长度时,简短性惩罚BP为1,这意味着不对得分进行惩罚。
                  • 当机器翻译输出的长度小于参考翻译的长度时,BP的值会小于1,这会降低BLEU得分,以反映翻译输出的简短性。
                  简而言之,简短性惩罚确保了BLEU评分系统能够更公正地评估机器翻译的质量,防止因翻译过短而获得不应有的高分。

                  相关论文

                  BLEU: a Method for Automatic Evaluation of Machine Translation
                   

                  recall

                  https://huggingface.co/spaces/evaluate-metric/recall
                   

                  precision

                   

                  accuracy

                   

                  roc_auc

                   

                  ROUGE

                  https://github.com/huggingface/evaluate/blob/v0.4.3/metrics/rouge/README.md
                  ROUGE(Recall-Oriented Understudy for Gisting Evaluation)是一种广泛使用的评估自动文摘和机器翻译质量的指标,它通过比较自动生成的摘要或翻译与一组参考摘要(通常是人工生成的)之间的重叠度来评估质量。ROUGE 的不同变体(如 ROUGE-N、ROUGE-L、ROUGE-S 等)针对不同的评估需求和场景进行了优化,使得 ROUGE 成为一个灵活且强大的评估工具。
                  需要注意的是,ROUGE 是不区分大小写的,意味着大写字母和对应的小写字母被视为相同。

                  应用场景

                  以下是 ROUGE 的一些具体应用场景:
                  1. 自动文摘
                  评估生成的摘要与原文的相关性和完整性。ROUGE 指标可以帮助确定自动文摘系统是否能够捕捉到原文的关键信息,并以简洁的方式表达出来。
                  1. 机器翻译
                  比较机器翻译的输出与源语言原文的贴切程度,帮助提升翻译系统的性能。ROUGE 可以量化翻译结果与原文之间的相似度,尤其是在保持原文主旨和关键信息方面。
                  1. 文本生成
                  在 AI 创作领域,ROUGE 可用于评估模型生成的文本质量。这包括但不限于聊天机器人的回复生成、内容创作等场景,以确保生成的文本与预期的输出具有较高的一致性。
                  1. 信息检索
                  衡量搜索引擎的检索结果与用户的查询语句的相关性。ROUGE 可以帮助评估搜索引擎返回的结果是否与用户的查询意图高度相关。
                  1. 单文档摘要
                  对于从单一文档中生成的摘要,ROUGE 可以评估摘要是否包含了文档中的关键信息,并且是否与文档内容保持一致。
                  1. 多文档摘要
                  在处理多个文档并生成一个综合摘要的场景中,ROUGE 可以用来评估摘要是否综合了多个文档的关键信息,尤其是在去停用词条件下。
                  1. 短摘要评估
                  对于短摘要,ROUGE 可以评估摘要是否简洁且有效地传达了主要信息。
                  ROUGE 的不同变体(如 ROUGE-N、ROUGE-L、ROUGE-S 等)针对不同的评估需求和场景进行了优化,使得 ROUGE 成为一个灵活且强大的评估工具。

                  使用 Evaluate 包计算

                  Evaluate 包的这个指标是基于 Google Research 对 ROUGE 的重新实现的一个包装器。Google Research 对 ROUGE 的重新实现在这里 https://github.com/google-research/google-research/tree/master/rouge

                  最简模式

                  输入一组预测结果和一组参考值即可。
                  • predictions(list):预测结果的列表,每个预测是一个由空格分隔的字符串。
                  • references(list or list[list]):每个预测的参考文本列表,或者每个预测有多个参考文本的列表,每个参考文本也是一个由空格分隔的字符串。
                  📢注意:evaluate.load 需要重 huggingface 下载脚本,所以一定要配置 proxy,否则会连不上 huggingface.co
                  requests.exceptions.ConnectionError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /api/spaces?filter=measurement (Caused by NewConnectionError('\<urllib3.connection.HTTPSConnection object at 0x7feea0e84190>: Failed to establish a new connection: \[Errno 60] Operation timed out'))
                  另外解决办法:
                  将相关的 metric script 下载到本地。具体方法是打开 https://github.com/huggingface/evaluate/,下载 metrics 文件夹,放在测试脚本的目录下,并将 evaluate.load()的参数改为本地的测试脚本目录,例如’。/metrics/bleu’
                  结果会返回一个字典,包含了 rouge1、rouge2、rougeL 和 rougeLsum 四种不同的 rouge 分数。ROUGE 值范围为 0 到 1。

                  自定义分词器

                  还可以传递一个自定义的分词器,这对于非拉丁语系的语言尤其有用。
                  这里的“分词器”(tokenizer)是指一种将文本分割成单词、短语或其他有意义的部分的程序或函数。在处理自然语言时,分词是文本预处理的一个重要步骤。对于非拉丁语系的语言,比如中文、阿拉伯语等,由于它们的文字系统和语言结构与拉丁语系(如英语、西班牙语等)不同,因此可能需要特定的分词器来正确处理文本。自定义分词器可以针对这些语言的特点进行优化,以提高分词的准确性和效率。例如,使用中文的 jieba 分词器。

                  多个参考文本

                  rouge 评估器可以处理每个预测对应多个参考文本的情况。在这种情况下,references 是一个二维列表,每个子列表对应一个预测的多个参考文本。
                  • rouge_types(list):要计算的 ROUGE 类型列表,默认为['rouge1','rouge2','rougeL','rougeLsum']
                    • "rouge1":字词级别,基于 1-gram(单字)的评分。
                    • "rouge2":字词级别,基于 2-gram(双字)的评分。
                    • "rougeL":句子级别,\<font style="color:rgba(0, 0, 0, 0.85);">ROUGE 计算两段文本之间的最长公共子序列(LCS),忽略换行符。\</font>
                    • "rougeLSum":摘要级别,使用"\n"换行符分割文本。\<font style="color:rgba(0, 0, 0, 0.85);">ROUGE 会计算每对参考段落和候选锻炼之间的最长公共子序列(LCS),并且计算所谓的联合最长公共子序列(union-LCS)。\</font>
                  • use_aggregator(boolean):默认为 True。
                    • 如果use_aggregator=False,输出是一个字典,每个 ROUGE 类型对应一个分数列表,每个句子对应一个分数。
                    • 如果use_aggregator=True,输出是一个字典,每个 ROUGE 类型对应一个聚合分数。
                  • use_stemmer(boolean):如果为 True,则使用 Porter 词干提取器去除单词后缀,默认为 False。
                  举个例子,如果rouge_types=['rouge1', 'rouge2']use_aggregator=False,输出将是:
                  这意味着对于rouge1类型,两个句子的评分分别是 0.6666 和 1.0;对于rouge2类型,两个句子的评分分别是 0.0 和 1.0。
                  use_aggregator=True时,输出格式与上面不同,不再是列表,而是直接给出每个 ROUGE 类型的聚合分数。例如,如果rouge_types=['rouge1', 'rouge2']use_aggregator=True,输出将是:
                  这意味着对于rouge1rouge2类型,聚合后的评分都是 1.0。
                  最后,这段话还提到 ROUGE 值的范围是 0 到 1,其中 0 表示没有重叠,1 表示完全匹配。

                  相关资料

                  ROUGE 存在一些局限性

                  Schluter (2017)The limits of automatic summarisation according to ROUGE.pdf 对 ROUGE 评估指标在自动文摘中的局限性进行了深入讨论。
                  根据提供的文档内容,ROUGE(Recall-Oriented Understudy for Gisting Evaluation)作为自动文摘评估的常用指标,存在以下几点局限:
                  1. NP-hard 问题:文档提供了第一个证明,表明针对 ROUGE 优化的提取式文摘是 NP-hard 问题。这意味着在理论上,要达到完美的 ROUGE 分数在计算上是非常困难的。
                  1. 完美分数难以实现:文档指出,对于提取式文摘,理论上很难达到完美的 ROUGE 分数。即使在最佳情况下,贪婪算法和精确全局解码方法的表现在 ROUGE 指标上也是相似的。
                  1. 高质量数据集的 100%完美分数不可能:由于 ROUGE 指标是通过多个参考文摘的平均分数来避免偏见,除非参考文摘包含完全相同的 n-grams,否则不可能获得 100%的 ROUGE-n 分数。
                  1. 相对完美分数高度多样化且难以达到:ROUGE 分数通常对于短文摘较低,对于长文摘分数似乎更高,即使文档长度也大幅增加。文档指出,即使拥有参考文摘的句子,也不可能达到相对完美的分数,甚至人类也无法实现 ROUGE 所描述的最优文摘。
                  1. 最先进的自动文摘是无监督的:尽管在神经网络的帮助下,监督式文摘取得了一些进展,但由于数据规模的要求,这些系统仅限于标题生成系统,因此不在本文的讨论范围内。
                  1. 评估指标的上限问题:文档提出,对于自动文摘评估指标,存在一个上限问题,即没有自然的上限来界定文摘系统的质量,甚至人类也无法进行最优的文摘。
                  1. ROUGE 分数与人类评价的相关性:尽管之前的研究表明 ROUGE 分数与人类评价之间存在相关性,但这并没有解决上限问题。文档中提到,即使在参考文摘之间进行评估,ROUGE 分数也远低于最优性能,这表明人类作为抽象式文摘者,根据 ROUGE 的标准,其性能也是有限的。
                  这些局限指出了 ROUGE 作为评估自动文摘质量的指标时存在的问题,特别是在理论上的困难、完美分数的不可达性以及与人类评价的不一致性。

                  中文文本使用什么分词器?

                  对于中文文本处理,特别是 ROUGE 评估时,选择合适的分词器非常重要。以下是一些常用的中文分词器:
                  1. 结巴分词(jieba)
                    • 简介:结巴分词是一个流行的 Python 中文分词库,支持三种分词模式:精确模式、全模式和搜索引擎模式。它还支持用户自定义词典,并且可以进行词性标注和关键词提取。
                    • 特点:安装简单,功能丰富,社区活跃。
                    1. 清华大学 THULAC
                      • 简介:THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制,具有中文分词和词性标注功能。它集成了大规模的人工分词和词性标注中文语料库,模型标注能力强大。
                      • 特点:准确率高,速度快。
                      1. HanLP
                        • 简介:HanLP 是一个大规模的自然语言处理库,包含了丰富的中文处理功能,如分词、词性标注、命名实体识别等。
                        • 特点:功能全面,性能优良。
                        1. SnowNLP
                          • 简介:SnowNLP 是一个 Python 库,可以方便地处理中文文本内容,包括中文分词、词性标注、情感分析等功能。
                          • 特点:易于上手,功能实用。
                          1. PKUSeg(北京大学词法分析工具包)
                            • 简介:PKUSeg 是由北京大学语言计算与机器学习研究组开发的中文分词工具包,支持多种领域模型。
                            • 特点:领域适应性强。
                            1. FoolNLTK
                              • 简介:FoolNLTK 是一个使用双向 LSTM(BiLSTM)模型构建的中文处理工具包,支持中文分词、词性标注、命名实体识别等。
                              • 特点:准确率高,但可能速度较慢。
                              选择分词器时,需要根据具体需求和场景来决定。例如,如果需要高准确率和快速处理,THULAC 可能是一个好选择;如果需要一个功能全面且易于使用的库,HanLP 和 jieba 分词可能更适合。

                              相关论文

                               
                               
                               
                               
                               
                               
                              🎒
                              离开乏味的皮囊,自由的灵魂在路上
                              • Name: Alan Hsu
                              • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
                              • Email:xulanzhong521gmail.com
                              • WeChat: Alan_Hsu_521
                              notion image
                              notion image
                               
                               
                               

                              评测方法

                              2025-01-19 08:00:00

                              📌

                               
                              评测方法主要有人工评测、自动化评测两大类。

                              1. 自动化评测

                              对于封闭式问题,也就是有标准答案的问题,比较适合使用脚本自动完成模型评测,这是一种客观评测方法。例如:通过大模型进行电商评论分析,分析电商评论是正向还是负向的。
                              大模型使用的Promp
                              将如下语料输入给大模型后,得出大模型的答案,并与标准的结果进行对比。
                              notion image
                              小技巧:让模型预测的输出是个json格式,方便提取结果。
                              获取Kimi大模型输出的代码:
                              得到大模型输出,并和语料中的lable进行合并,结果片段如下:
                              在这个场景中,基于输出的结果中的sentiment和label两个字段,可以通过计算准确率、召回率等指标评估大模型的能力。
                              由于大语言模型输出自由度较高,在评测阶段,我们需要对其输入和输出作一定的规范和设计,尽可能减少噪声输出在评测阶段的影响,才能对模型的能力有更加完整和客观的评价。
                              在客观评测的具体实践中,我们通常采用下列两种方式进行模型输出结果的评测:
                              • 判别式评测:该评测方式基于将问题与候选答案组合在一起,计算模型在所有组合上的困惑度(perplexity),并选择困惑度最小的答案作为模型的最终输出。例如,若模型在 问题? 答案1 上的困惑度为 0.1,在 问题? 答案2 上的困惑度为 0.2,最终我们会选择 答案1 作为模型的输出。
                              • 生成式评测:该评测方式主要用于生成类任务,如语言翻译、程序生成、逻辑分析题等。具体实践时,使用问题作为模型的原始输入,并留白答案区域待模型进行后续补全。我们通常还需要对其输出进行后处理,以保证输出满足数据集的要求。

                              2. 人工评测

                              针对开放式问题,通过制定规则进行人工打分是最靠谱的,这是一种主观评测方法。根据业务制定打分规则,根据规则进行人工打分。打分时,尽量屏蔽掉预测结果的来源,防止人为引入偏见。
                              评分标准制定:
                              以角色扮演大模型评估标准制定为例,评估的维度更看重人设遵循能力和回答质量。
                              • 人设遵循:言行是否符合角色设定的身份、特色和语气等。
                              • 场景符合:文风是否符合场景需求。
                              • 回答质量:回答是否与上下文对话相符,内容丰富、恰当。
                              计分方法有两类,打分方式有GSB打分和绝对分值:
                              • GSB(Good、Same、Bad)计分:用于评判针对同一评估集的两份预测结果之间的好坏。例如对比两个预测结果A和B,Good代表A比B好、Same代表两者质量相当,Bad代表A不如B。最后得到A和B的GSB打分比值。例如10:20:30,代表60条评估结果集中,有10条A比B好,20条A和B相当,30条A比B差。GSB适用于直接对比两个模型(或两组超参数)之间的好坏。
                              • 绝对分值:按照一定的评分标准直接对大模型进行结果评分。用于横向比较多个模型的效果。

                              3. 裁判员模型评测

                              A Survey on LLM-as-a-Judge
                              人工打分成本高昂,使用更强大的大模型对待评价大模型进行打分,即通过裁判员模型打分成为严重的一个重要课题。例如使用GPT-4作为裁判员评估其他模型的效果,从而降低人工打分成本。·
                              具体方法是:使用更强大的大模型作为裁判,对其他大模型的效果进行评分。例如使用GPT-4作为裁判,对Ernie speed和微调后的Ernie speed进行打分。裁判员模型的Prompt:
                              注意:为了确保评估结果有效性,自动打分结果也需要经过人工复查。
                              我们首先承认LLM评委可能存在的局限性:
                              • 位置偏见,LLM评委可能偏向比较中的第一个回答
                              • 冗长偏见,LLM评委可能偏向更长的回答,不考虑质量
                              • 自我增强偏见,LLM评委可能偏向自己的回答
                              • 有限的推理能力,指LLM评委在评判数学和推理问题时的可能缺陷
                              然后我们探索了如何通过少射判断、思路评判、基准评判和微调评判来缓解这些局限性。
                              在实施部分解决方案后,我们发现尽管存在局限性,强大的LLM评委如GPT-4可以与受控和众包的人类偏好实现非常好的一致性,达到80%以上的一致率。这一程度的一致性与两个不同人类评委之间的一致性相当。因此,如果谨慎使用,LLM评委可以作为人类偏好的一个可扩展和可解释的近似。
                               
                               
                               
                               
                               
                               
                              🎒
                              离开乏味的皮囊,自由的灵魂在路上
                              • Name: Alan Hsu
                              • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
                              • Email:xulanzhong521gmail.com
                              • WeChat: Alan_Hsu_521
                              notion image
                              notion image
                               
                               
                               

                              OpenCompass评测框架

                              2025-01-19 08:00:00

                              📌

                               
                              https://opencompass.org.cn/home
                              OpenCompass 由 上海人工智能实验室 研发的开源、高效、全面的大模型评测体系及开放平台。作为大模型标准测试工具被Meta AI官方推荐,点击 Llama 的 Standard Evaluation tools 获取更多信息。在魔塔社区上,司南评测功能,就是基于OpenCompass的实现。
                              截止2024年7月,OpenCompass支持语言理解、知识准确度、逻辑推理、创意生成、数学解题、代码编写、长篇文本处理及智能体交互等8大能力,29项核心任务的评测,评测集实际超过100个。
                              notion image
                              8大重点通用能力
                              29项核心任务
                              100+评测数据集
                              语言理解
                              信息抽取、意图识别、情感分析、内容总结、内容评价、多语言翻译、中华传统文化理解、中文语义理解、多轮对话
                              知识准确度
                              生活常识、自然科学(理科)、自然科学(工科)、社会科学、人文科学
                              逻辑推理
                              逻辑推理、常识推理
                              创意生成
                              内容扩写、内容续写、内容改写
                              数学解题
                              初等数学、中等数学、高等数学
                              代码编写
                              代码生成、代码分析
                              长文本处理
                              长文本理解与推理、长文本创作
                              智能体交互
                              任务规划、工具调用、反思能力、任务执行总结、多轮交互
                              除了以上这些,OpenCompass还基于 VLMEvalKit 开源评测框架,以纯生成类的方式评估多模态大模型在数十个开源评测集上的综合表现。
                              OpenCompass由三大组件组成,分别是评测工具CompassKit和VLMEvalKit、评测集社区CompassHub、评测榜单CompassRank。
                              • 评测工具CompassKit,以开源工具库的形式提供丰富的评测集和模型模板,支持灵活扩展,以满足各种模型评测实际业务需求。
                              • 评测工具VLMEvalKit,一个全新的开源多模态评测框架,旨在提供可靠、可复现的评测结果,助力社区更准确地比较不同多模态模型在各种任务上的性能。
                              • 评测集社区CompassHub,在社区内发布和分享评测集,包括了学科类、语言类、知识类、代码、数学、创作等多种任务类型的评测集。
                              • 评测榜单CompassRank,基于司南 OpenCompass 官方评测规则,对行业领先大模型进行评测,根据评测结果发布榜单

                              1. 工具架构

                              notion image
                              • 模型层:大模型评测所涉及的主要模型种类,OpenCompass以基座模型和对话模型作为重点评测对象。
                                • 基座模型:一般是经过海量的文本数据以自监督学习的方式进行训练获得的模型(如OpenAI的GPT-3,Meta的LLaMA),往往具有强大的文字续写能力。
                                • 对话模型:一般是在的基座模型的基础上,经过指令微调或人类偏好对齐获得的模型(如OpenAI的ChatGPT、上海人工智能实验室的书生·浦语),能理解人类指令,具有较强的对话能力。
                              • 能力层:OpenCompass从通用能力和特色能力两个方面来进行评测维度设计。在模型通用能力方面,从语言、知识、理解、推理、安全等多个能力维度进行评测。在特色能力方面,从长文本、代码、工具、知识增强等维度进行评测。
                              • 方法层:OpenCompass采用客观评测主观评测两种评测方式。客观评测能便捷地评估模型在具有确定答案(如选择,填空,封闭式问答等)的任务上的能力,主观评测能评估用户对模型回复的真实满意度,OpenCompass采用基于模型辅助的主观评测和基于人类反馈的主观评测两种方式。
                              • 工具层:支持自动化地开展大语言模型的高效评测。包括分布式评测技术,提示词工程,对接评测数据库,评测榜单发布,评测报告生成等诸多功能。

                              2. 评估指标

                              目前 OpenCompass 中,常用的 Evaluator 主要放在 opencompass/openicl/icl_evaluator文件夹下, 还有部分数据集特有指标的放在 opencompass/datasets 的部分文件中,具体参考这里
                              评估标准配置一般放在数据集配置文件中,即 xxdataset\_eval\_cfg 的evaluator参数。

                              3. 评测流程

                              在 OpenCompass 中评估一个模型通常包括以下几个阶段:配置 -> 推理 -> 评估 -> 可视化
                              notion image
                              配置:这是整个工作流的起点。您需要配置整个评估过程,选择要评估的模型和数据集。此外,还可以选择评估策略、计算后端等,并定义显示结果的方式。
                              推理与评估:在这个阶段,OpenCompass 将会开始对模型和数据集进行并行推理和评估。推理阶段主要是让模型从数据集产生输出,而评估阶段则是衡量这些输出与标准答案的匹配程度。这两个过程会被拆分为多个同时运行的“任务”以提高效率,但请注意,如果计算资源有限,需要调整 --max-partition-size 的设置。
                              可视化:评估完成后,OpenCompass 将结果整理成易读的表格,并将其保存为 CSV 和 TXT 文件。你也可以激活飞书状态上报功能,此后可以在飞书客户端中及时获得评测状态报告。

                              4. 准备评测环境

                              需要先安装conda:
                              M1 mac安装conda:
                              安装面向开源模型的GPU环境:
                              或者,安装面向API模型的CPU环境:
                              安装 OpenCompass
                              如果需要评测API模型,请 pip install -r requirements/api.txt 安装API模型的相关依赖。

                              5. 准备评测集

                              OpenCompass 支持的数据集主要包括三个部分:
                              1. Huggingface 数据集: Huggingface Dataset 提供了大量的数据集,这部分数据集运行时会自动下载
                              1. ModelScope 数据集:ModelScope OpenCompass Dataset 支持从 ModelScope 自动下载数据集,需要设置环境变量:export DATASET_SOURCE=ModelScope
                              1. OpenCompass 还提供了一些第三方数据集及自建中文数据集。在 OpenCompass 项目根目录下运行下面命令,将数据集准备至 ${OpenCompass}/data 目录下:
                              如果需要使用 OpenCompass 提供的更加完整的数据集 (\~1.79G),可以使用下述命令进行下载和解压:
                              configs/datasets 目录下的结构,如下所示:
                              数据集配置文件名由以下命名方式构成 {数据集名称}_{评测方式}_{prompt版本号}.pyconfigs/datasets/ceval/ceval_gen_2daf24.py为例,配置文件则为全面的中文基础模型评估套件的 C-Eval 数据集,对应的评测方式为 gen,即生成式评测,对应的prompt版本号为 2daf24
                              同样的, ceval_ppl_1cd8bf.py指评测方式为ppl即判别式评测,prompt版本号为 1cd8bf
                              除此之外,不带版本号的文件,例如: ceval_gen.py 则指向该评测方式最新的prompt配置文件,通常来说会是精度最高的prompt。
                              以 PIQA 数据集配置文件configs/datasets/piqa/piqa_gen_1194eb.py为示例,展示数据集配置文件中各个字段的含义。

                              6. 评测开源模型

                              OpenCompass 初体验,新手如何跑通第一个模型评测-CSDN博客
                              对于开源模型,OpenCompass 默认直接使用 HuggingFace model ID 从 hf 上下载开源模型和权重,对于一些无法访问外网的机器,这里很容易网络连接失败。这种情况下,可以先通过 ModelScope 下载待评测的模型。
                              这里以基座模型 InternLM2-1.8B 和对话模型 Qwen2-1.5B-InstructGSM8K 数据集上的评估为例。
                              1. 基座模型 InternLM2-1.8BGSM8K 数据集上进行评估
                              从huggingface下载模型:
                              或者从 ModelScope 下载模型:
                              修改模型配置文件configs/models/hf_internlm/hf_internlm2_1_8b.py
                              将 path 替换为本地模型目录即可。并设置 tokenizer\_path 和path参数一样。
                              创建评估文件configs/eval_internlm2_1_8b.py,其中设置好datasetsmodels
                              运行评估:
                              更多参数参考这里。从输出看internlm2-1.8b模型在gsm8k数据集的得分为29.80分,最终的评测结果会保存在 outputs/default/下面:
                              要想同时评估多个数据集,则可以在read_base同时导入多个数据集,并通过+将多个数据集拼接起来传给datasets参数。同理要想同时评估多个模型,也是在read_base同时导入多个模型,并通过+将多个模型拼接起来传给models参数。
                              可能得报错Error: mkl-service + Intel(R) MKL: MKL\_THREADING\_LAYER=INTEL is incompatible with libgomp.so.1 library.
                              下载模型
                              修改模型配置文件configs/models/qwen/hf_qwen2_1_5b_instruct.py
                              创建评估文件configs/eval_qwen2_1_5b_instruct.py,其中设置好datasetsmodels
                              demo_gsm8k_chat_gen的内容:
                              demo_math_chat_gen的内容
                              执行评测python run.py configs/eval_qwen2_1_5b_instruct.py --debug,输出:

                              7. 评测基于API的模型

                              OpenCompass内置支持的API大模型可以从这里看到。OpenCompass将支持的API模型在opencompass.models进行了封装了。
                              这里以评估qwen大模型API为例,学习如何使用opencompass调用模型API进行评测。QWen的API已经封装在了opencompass/models/qwen_api.py里面,我们只需要配置QWen API评测文件configs/api_examples/eval_api_qwen.py即可,修改其中如下参数:
                              • path表示的是qwen系列大模型的名称。
                              • key是调用qwen大模型API的api-key
                              • datasets配置评测数据集。
                              • work_dir 配置推理和评估的结果存储路径。
                              然后执行评估命令:
                              在正常模式下,评估任务将在后台执行。
                              • -mode all:指定任务的特定阶段。
                              评测进行大概执行了1个小时10分钟,其中推理花了1个半小时,评估花了10分钟。花了我40块钱\~\~\~。
                              推理过程的输出:
                              评估过程的输出:
                              评估之后的输出为:
                              评估结果保存至configs/api_examples/eval_api_qwen.py配置的work_dir里面。结构如下:
                              如果在 {WORKDIR} 中已经有模型输出,则指定为 eval 仅运行评测,获得评测结果;如果在 results/ 中已有单项评测结果,则指定为 viz 仅运行可视化;
                              • r: 重用已有的推理结果。如果后面跟有时间戳,则会复用工作路径下该时间戳的结果;否则则复用指定工作路径下的最新结果。

                              8. 评测自定义API模型

                              参考::https://mp.weixin.qq.com/s/rpvV0PeHVueiPITVCIzJjg
                              目前OpenCompass已经支持的模型有 HF 模型、部分模型 API 、部分第三方模型。如果想支持更多的模型需要自定义扩展,OpenCompass提供了两种自定义的方式:
                              • 新增API模型
                              • 新增开源模型
                              NIOGPT平台作为蔚来大模型服务平台,上面部署了很多大模型,并通过API的方式对外提供服务。我们这里就以新增NIOGPT平台上的API模型为例,看下如何对OpenCompass进行扩展。
                              根据NIOGPT平台的接口定义,调用NIOGPT模型的方法如下:
                              第一步,根据上述方法定义API模型opencompass/models/niogpt_api.py,这一步我们可以参考OpenCompass已经支持的API模型,例如参考opencompass/models/qwen_api.py文件。继承 BaseAPIModel,并实现 generate 方法来进行推理,推理方法参考askChatGPTAgent
                              同时修改opencompass/models/__init__.py,在文件中增加刚刚新增的NIOGPT的导出,新增代码如下:
                              这样一个自定义的API模型就完成了。
                              第二步,定义配置文件,在configs/api_examples目录下新建eval\_api\_niogpt.py,文件内容如下:
                              在配置文件中,我们可以设置它的测试集datasets,models的path参数设置相应的大模型名称,key参数设置成大模型调用的API的API-KEY,同时还可以通过work\_dir来设置测试结果输出的目录。
                              这样,在项目根目录下执行如下命令就可以开始评测了:
                              当query\_per\_second=1时,评测:100%|██████████| 165/165 \[36:38<00:00, 13.32s/it]
                              当query\_per\_second=2时,评测:100%|██████████| 165/165 \[29:04<00:00, 10.57s/it]

                              9. 基于LLM的主观评测

                              前面主要介绍了大模型的客观评测,但是客观评测面临以下几个重要问题:
                              • 题型固化,以选择题、填空题为主,与模型的真实应用场景有差异;
                              • 评测使用的测试集会可能被下一代模型的预训练或者微调,导致客观评测失真
                              • 各数据集的数据分布相对固定,导致结果和排名的差异
                              • 中心化的评测导致评测结果的透明度、可信度相对较低
                              为了解决客观评测的这些问题,主观评测具有以下优点:
                              • 评测数据形式多样
                              • 评测数据来自真实用户
                              • 评测是分布式的,评测结果相对可信
                               
                              notion image
                              流行的评估方法主要有:
                              • Compare模式:将模型的回答进行两两比较,以计算对战其胜率。
                              • Score模式:针对单模型的回答进行打分(例如:Chatbot Arena)。
                              主观评测旨在评估模型在符合人类偏好的能力上的表现。这种评估的黄金准则是人类喜好,但标注成本很高。
                              为了探究模型的主观能力,OpenCompass采用了JudgeLLM作为人类评估者的替代品(LLM-as-a-Judge)。基于以上方法支持了JudgeLLM用于模型的主观能力评估。
                              主观评测的具体流程包括:
                              1. 评测数据集准备
                              1. 使用API模型或者开源模型进行问题答案的推理
                              1. 使用选定的评价模型(JudgeLLM)对模型输出进行评估
                              1. 对评价模型返回的预测结果进行解析并计算数值指标
                              类似于已有的客观评测方式,可以在configs/eval_subjective.py中进行相关配置。
                              第一步,配置数据集,目前默认支持的数据集有:
                              第二步,设置待评测模型,需要设置do_sample的方式进行推理而不是greedy
                              这里介绍一下do_samplegreedy两种不同的解码或生成策略:
                              1. Greedy Decoding(贪婪解码):
                                • 在贪婪解码中,模型在每个时间步都会选择概率最高的输出。换句话说,它在生成序列时总是选择当前最有可能的下一个元素。
                                • 这种方法简单且计算效率高,但可能会导致结果缺乏多样性,有时也可能会陷入局部最优,而不是全局最优。
                                1. Sampling(采样):
                                  • 采样是一种更灵活的生成策略,它在每个时间步都会根据概率分布进行随机选择。"do\_sample"通常是一个参数,当设置为True时,指示模型使用采样方法进行生成。
                                  • 采样可以增加结果的多样性,有时能够避免贪婪解码中的一些问题,如生成过于单调或重复的模式。
                                  • 采样方法通常包括:
                                    • 均匀采样:从概率分布中均匀地选择下一个元素。
                                    • 类别采样:根据类别的概率分布进行采样,常用于处理类别不平衡的数据集。
                                    • Top-k采样:只考虑概率最高的k个元素进行采样。
                                    • Top-p采样(Nucleus Sampling):从累积概率超过某个阈值p的最小集合中采样,这个集合称为核(nucleus)。
                                  在进行主观评测时,可能需要模型生成更多样化和创造性的结果,因此使用采样方法而不是贪婪解码。而在客观评测中,可能会使用贪婪解码,因为它生成的结果是确定性的,便于评估和比较。
                                  例如,在自然语言处理中,使用采样方法可以生成更自然、更少重复的文本;而在机器翻译或文本摘要任务中,贪婪解码可能会生成更流畅但可能缺乏创造性的文本。
                                  第三步,配置judgemodel,通常被设置为GPT4等强力模型,可以直接按照config文件中的配置填入自己的API key,或使用自定义的模型作为judgemodel
                                  除了基本参数以外,还可以在config中修改infereval字段里的partitioner,从而设置更合适的分片方式,目前支持的分片方式主要有三种:NaivePartitoner, SizePartitioner和NumberWorkPartitioner 以及可以指定自己的workdir用以保存相关文件。
                                  最后,启动评测
                                  自定义主观评测集

                                  10. 支持新数据集

                                  1. opencompass/datasets 文件夹新增数据集脚本 mydataset.py, 该脚本需要包含:数据集及其加载方式,需要定义一个 MyDataset 类,实现数据集加载方法 load,该方法为静态方法,需要返回 datasets.Dataset 类型的数据。参考:opencompass/datasets/ceval.py
                                  1. (可选)定义评测器类 MyDatasetlEvaluator ,实现评分方法 score,需要根据输入的 predictionsreferences 列表,得到需要的字典。参考opencompass/openicl/icl_evaluator/
                                  1. (可选)定义后处理方法 mydataset_postprocess 方法,根据输入的字符串得到相应后处理的结果。
                                  1. 配置文件中应用自定义数据集、评估器和数据后处理方法。参考configs/datasets/ceval/ceval_gen_5f30c7.py

                                  11. 探究评测提示词

                                  在 OpenCompass 中,数据集需要转换为一系列的提示词输入给大模型,这个过程是由模板 (template) 来定义的。 template 拆分为两部分:数据侧的 template 和模型侧的 template。在测评模型时,数据会先后经过数据和模型侧的 template,最终转化为模型所需的输入。
                                  数据侧的 template 被称为 prompt\_template,它表示了把数据集的字段转化成提示词的过程。
                                  模型侧的 template 被称为 meta\_template,它表示了模型将这些提示词转化为自身期望的输入的过程。
                                  我们另外还提供了一些 思维链 的 prompt 示例。
                                  1. Prompt构建策略
                                  OpenCompass 将 prompt 的构建策略定义在了数据集配置中的 infer_cfg 部分。以configs/datasets/mmlu/mmlu_gen_4d595a.py中的mmlu_infer_cfg为例,如下所示:
                                  运行时,花括号{}内的字段会被替换成数据样本内的对应字段。如果数据样本中没有对应的字段,则会保持原样输出。
                                  在 OpenCompass 中,对于 0-shot 的评测,我们通常只需要定义 prompt_template 字段,即可完成 prompt 的构造。但对于 few shot 的评测,我们还需要定义 ice_template 字段,管理上下文学习中样例所对应的 prompt 模板。
                                  • Prompt模板
                                  mmlu\_infer\_cfg是对话式模板,其中prompt 是以不同角色 role 的对话为形式进行组织的。在当前 OpenCompass 的预定义数据集配置中,一个 prompt 中常有的角色有:
                                  • HUMAN:人类,通常为提问的一方
                                  • BOT:语言模型,通常为回答的一方
                                  • SYSTEM:系统,通常用在提示词的开头,负责下达指令。
                                  对话式模板更加灵活(相对于字符串模板),它可以结合模型侧不同的 meta\_template 生成不同对话形式的提示词,同时适用于基座和对话模型。更多的对话式模板的例子可以参考这里
                                  • 推理方式不同Prompt模板不同
                                  OpenCompass 中主要支持了两种 Infernecer:GenInferencerPPLInferencer,它们对应着两种不同的推理方式。
                                  GenInferencer 对应生成式的推理。在推理时,模型被要求以输入的提示词为基准,继续往下续写。此时,template 则单一地表示这一句话对应的模板,例如:configs/datasets/gsm8k/gsm8k_gen_1d7fe4.py
                                  PPLInferencer 对应判别式推理。在推理时,模型被要求计算多个输入字符串各自的混淆度 (PerPLexity / ppl),并将其中 ppl 最小的项作为模型的推理结果。此时 template 是一个 dict,表示每一句话所对应的模板,例如configs/datasets/ceval/ceval_ppl_1cd8bf.py
                                  此时模型的推理结果将会是 template 的四个 key 之一 (“A” / “B” / “C” / “D”)
                                  • Meta Template
                                  Meta Template 与模型的配置相绑定,在运行时与数据集的对话式模板相结合,最终产生最适合当前模型的 prompt。
                                  下图展示了在语言模型上,数据从数据集中经过 prompt template 和 meta template,最终构建出 prompt 的几种情况。
                                  在对话开始或结束时嵌入其它字符串,如系统指令,可以在meta\_template中通过指定 beginend 参数指定这些字符串。
                                  如果数据集中引入 SYSTEM 级别的角色,且模型同样接受 SYSTEM 这个角色,可以把 SYSTEM 角色的定义放进 meta\_template的reserved_roles 中。
                                  meta\_template 是一个字典,该字典可以包含以下数个字段:
                                  • beginend :(str,可选) prompt 的开头和结尾,通常是一些系统级别的指令。
                                  • round:(list) 每一轮对话的模板格式。每轮对话的 prompt 内容由数据集配置的对话式模板控制。
                                  • reserved_roles:(list,可选)指定 round 中并未出现,但有可能在数据集配置中用到的的预留角色,例如 SYSTEM 角色。
                                  • eos_token_id:(int, 可选):指定了该模型的 eos token 的 id。如果不设置,则默认为 tokenizer 中的 eos token id。它的主要作用是在生成式任务中,截取模型的输出结果,因此一般应该被设置为 generate=True 的项所对应的 end 的第一个 token id。
                                  meta\_template 的 round 指定了一轮对话中每个角色说话的格式,接受一个字典组成的列表,每个字典的关键字如下:
                                  • role(str): 参与对话的角色名,该字符串并不影响实际的 prompt。
                                  • begin, end (str): 指定该角色在说话时的固定开头或结尾。
                                  • prompt (str):角色的 prompt。在 meta template 中允许留空,但此时必须在数据集配置的 prompt 中指定。
                                  • generate (bool): 指定为 True 时,该角色即为模型扮演的角色。在生成任务中,模型接收到的 prompt 会截止到该角色的 begin 处,剩下的内容由模型补全。
                                  在某些情况下(例如对基座的测试),我们并不需要在正常对话中注入任何的指令,此时我们可以将 meta template 置空。在这种情况下,模型接收到的 prompt 仅由数据集配置定义,是一个普通的字符串。若数据集配置使用的是对话式模板,不同角色的发言将会由 \n 拼接而成。
                                  API 模型的 meta template 与普通模型的 meta template 类似,但配置更为简单。用户可以根据情况,直接使用下面的两种配置之一,即可以多轮对话的方式评测 API 模型:
                                  下图展示了 API 模型接受的输入与 Prompt Template 、Meta Template 之间的关系。 OpenCompass 为 API 模型预设了三个 api_roleHUMAN, BOT, SYSTEM,API 模型会将对话重新以多轮对话格式打包,发送至后端。但要激活此功能,需要用户使用上面的 meta template 中把数据集 prompt 模板中的角色 role 映射到对应的 api_role 中。
                                  如果需要调试 prompt,建议在准备好配置文件后,使用 tools/prompt_viewer.py 脚本预览模型实际接收到的 prompt。

                                  12. 视频课程

                                   
                                   
                                   
                                   
                                   
                                   
                                  🎒
                                  离开乏味的皮囊,自由的灵魂在路上
                                  • Name: Alan Hsu
                                  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
                                  • Email:xulanzhong521gmail.com
                                  • WeChat: Alan_Hsu_521
                                  notion image
                                  notion image
                                   
                                   
                                   

                                  AI应用评测工具

                                  2025-01-19 08:00:00

                                  📌

                                  1. Ragas

                                  2. TruLens

                                  评估 RAG 的神器来啦!TruLens + Milvus=?TruLens 是一个用于评估语言模型应用(如 RAG)的性能的开源库。

                                  3. LlamaIndex

                                  评估 RAG?只要 LlamaIndex 就足够了 LlamaIndex 内置了评估工具,可以帮助你快速评估 RAG 应用
                                  Response评估

                                  4. Trulens-Eval

                                  5. DeepEval

                                  6. Phoenix

                                  https://docs.arize.com/phoenix/)有许多评估 LLM 的功能,比如评估 Embedding 效果、评估 LLM 本身。在评估 RAG 这个能力上,也留出接口

                                  7. LangSmith

                                  • 如何使用LangSmith进行评估
                                   
                                   

                                  Trulens

                                  https://www.trulens.org/
                                  TruLens 1.0 是一款用于评估和跟踪基于大型语言模型(LLM)应用的软件工具。它通过反馈函数客观衡量应用的质量和效果,帮助开发者快速迭代和选择最佳应用。TruLens 支持多种用例,如问答、摘要、检索增强生成和基于代理的应用。其反馈函数涵盖上下文相关性、安全性等多个维度,能够与任何基于 Python 的 LLM 应用兼容,助力开发者在成本、延迟和响应质量之间做出明智的权衡。
                                  • 核心功能与优势
                                    • 快速集成与使用: TruLens 可以轻松集成到 LLM 应用开发流程中,只需通过 pip 安装并添加几行代码即可开始使用。它能够跟踪任何应用,并使用开发者选择的模型进行评估,极大地简化了验证 LLM 应用的过程.
                                    • 高效迭代与反馈: 与传统的人工反馈相比,TruLens 提供的程序化反馈能够以更高的效率和规模帮助开发者识别问题所在,从而快速迭代。它通过反馈函数对输入、输出和中间结果进行质量评估,使实验评估更加高效.
                                    • 全面的反馈函数: TruLens 支持多种反馈函数,包括上下文相关性、真实性、回答相关性、全面性、有害或有毒语言、用户情感、语言不匹配、公平性和偏见等,开发者还可以提供自定义的反馈函数。这些反馈函数能够全面评估应用性能,帮助开发者在不同维度上提升应用质量并降低风险.
                                  • 应用场景与兼容性
                                    • 广泛的应用场景: TruLens 适用于多种基于 LLM 的应用,如检索增强生成(RAG)、摘要、辅助工具(如 Co-pilots)和代理等。它能够帮助开发者在这些场景中快速构建和优化应用,提高应用的可靠性和有效性.
                                    • 与 Python LLM 应用的兼容性: TruLens 可以与任何使用 Python 构建的基于 LLM 的应用兼容,这意味着开发者可以在各种基于 Python 的 LLM 应用项目中使用 TruLens,无需担心兼容性问题,从而扩大了其应用范围和使用场景.
                                  • 社区与支持
                                    • 社区参与与反馈: TruLens 鼓励用户积极参与社区,提供反馈以帮助其不断改进。用户可以通过 AI Quality Forum 的 Slack 社区加入 TruLens 社区,与其他开发者交流经验、分享最佳实践,并参与到 TruLens 的持续改进过程中.
                                    • 由 TruEra 和 Snowflake 支持: TruLens 最初由 TruEra 创建,是一个社区驱动的开源项目,已被数千名开发者使用。自 TruEra 被 Snowflake 收购后,Snowflake 积极监督和支持 TruLens 的开源开发,致力于推动 TruLens 的持续成长和创新.
                                   

                                  RAGChecker
                                  amazon-scienceUpdated Jan 17, 2025
                                   
                                  Ragas
                                   
                                   
                                   
                                   
                                   
                                   
                                   
                                   
                                  🎒
                                  离开乏味的皮囊,自由的灵魂在路上
                                  • Name: Alan Hsu
                                  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
                                  • Email:xulanzhong521gmail.com
                                  • WeChat: Alan_Hsu_521
                                  notion image
                                  notion image