password
URL
type
status
date
slug
summary
tags
category
icon
周起始
标签
是否汉化
📌

 
评测指标可以分为通用指标、任务特定指标和数据集特定指标。
  • 通用指标(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
 
 
 
评测方法评测Prompt
Loading...
Alan_Hsu
Alan_Hsu
许心志我在 蓝湛阔天海 中定自主宰
统计
文章数:
197
Latest posts
AI应用评测工具
2025-4-2
OpenCompass评测框架
2025-4-2
评测方法
2025-4-2
大模型评测指标
2025-4-2
评测Prompt
2025-4-2
评测任务&评测集
2025-4-2