当前位置: 首页 > news >正文

论文评价指标之(n-gram、BLEU、MRR、ANLS)

本文将按照顺序介绍 n-gram、BLEU、MRR、ANLS

1. n-gram

n-gram自然语言处理(NLP)中的基础概念,指文本中连续的 n 个词语(或字符)组成的片段。它将文本拆解为固定长度的滑动窗口序列,用于捕捉语言中的局部模式。以下是详细解析:


🧩 一、n-gram 的核心定义

  • n 的含义
    表示片段中连续的词语(或字符)数量。

    • n=1 → 单个词语(称为 unigram,如 ["cat"]
    • n=2 → 两个连续词语(称为 bigram,如 ["cat", "sits"]
    • n=3 → 三个连续词语(称为 trigram,如 ["the", "cat", "sits"]
  • 生成方式:通过滑动窗口按顺序截取文本。
    示例句子"The cat sits on the mat"

    n 值n-gram 序列
    1-gram["The", "cat", "sits", "on", "the", "mat"]
    2-gram["The cat", "cat sits", "sits on", "on the", "the mat"]
    3-gram["The cat sits", "cat sits on", "sits on the", "on the mat"]

🔍 二、为什么需要 n-gram?

  1. 捕捉局部语境
    语言中词语的含义常依赖上下文(如 "strong tea" vs "strong man"),n-gram 能保留相邻词语的关系。

    • Bigram 示例"New York"(整体表示地名,拆开后语义改变)
  2. 简化语言建模
    在统计机器学习中,n-gram 用于计算词语出现的概率
    P(sits∣The cat)="The cat sits" 的出现次数"The cat" 的出现次数P(\text{sits} \mid \text{The cat}) = \frac{\text{"The cat sits" 的出现次数}}{\text{"The cat" 的出现次数}}P(sitsThe cat)="The cat" 的出现次数"The cat sits" 的出现次数
    (即已知前两个词为 “The cat” 时,下一个词是 “sits” 的概率)

  3. 支持文本特征工程
    将文本转为 n-gram 频次向量,供分类/聚类算法使用(如垃圾邮件识别)。


⚙️ 三、在 BLEU 指标中的作用

BLEU 通过 n-gram 精确度评估生成文本的质量:

  1. 分别计算生成文本与参考答案的 1-gram, 2-gram, 3-gram, 4-gram 匹配度;
  2. 若生成文本的 4-gram 序列 "sits on the mat" 与参考答案一致,则匹配计数+1;
  3. 高分要求生成结果在局部片段和参考答案高度一致。

示例对比

生成文本参考答案匹配的 bigramBLEU 得分影响
"sits on mat""sits on the mat""sits on"✅, "on mat"❌ (缺少 "on the")2-gram精度降低
"sits on the mat""sits on the mat"所有 bigram 完全匹配 ✅高分

因此,n 越大,评估越严格(要求更长的连续匹配片段)。


🆚 四、n-gram 的优缺点

优点缺点
计算高效:简单统计即可数据稀疏性:n 越大,组合爆炸(如 4-gram 可能从未在训练集出现)
保留局部顺序:比词袋模型更精细窗口限制:无法捕捉长距离依赖(如段落首尾的关系)
可解释性强:直观的文本片段同义忽略"quick fox""fast fox" 被视为完全不同

💡 五、进阶扩展

  • 字符级 n-gram:用于拼写检查(如 "apl""apple" 的 3-gram 相似度)。
  • 平滑技术:解决零概率问题(如 Add-k 平滑P(wi)=出现次数+kN+k×VP(w_i) = \frac{\text{出现次数} + k}{N + k \times V}P(wi)=N+k×V出现次数+k)。
  • 神经网络替代品:Transformer 模型(如 BERT)通过自注意力机制捕捉全局依赖,减少对 n-gram 的依赖。

✅ 小结

n-gram 是文本的连续片段,通过滑动窗口生成(n=1为词,n>1为词组)。它在 NLP 中用于:

  1. 建模局部语义(如 "machine learning"
  2. 计算概率(语言模型)
  3. 评估生成质量(BLEU 的核心)

理解 n-gram 是掌握词向量、语言模型等高级技术的基础!

2. BLEU

⚙️ BLEU Score详解

功能:评估机器生成文本与参考文本的n-gram匹配度
主要应用于机器翻译文本生成任务,通过统计生成结果与参考答案的词序列重叠程度量化相似性。其核心是衡量「精确度」而非流畅度。


🔍 计算流程(基于NLTK实现)

1. 预处理
import nltkdef preprocess(text):text = text.replace("<PIC>", "")  # 删除图片占位符tokens = nltk.word_tokenize(text.lower())  # 小写化分词return tokens# 示例:
generated = preprocess("A cat<PIC> sits on the mat.")
reference = preprocess("The cat is sitting on the mat.")
2. n-gram匹配计算

对每个n-gram级别(通常n=1~4)单独计算精度:
Pn=∑ngram∈genmin⁡(Countgen(ngram),Countref(ngram))∑ngram∈genCountgen(ngram) P_n = \frac{\sum_{ngram \in \text{gen}} \min(\text{Count}_{\text{gen}}(ngram), \text{Count}_{\text{ref}}(ngram))}{\sum_{ngram \in \text{gen}} \text{Count}_{\text{gen}}(ngram)} Pn=ngramgenCountgen(ngram)ngramgenmin(Countgen(ngram),Countref(ngram))

示例对比

n-gram生成文本计数参考文本计数匹配计数
1-gram[a, cat, sits, on, the, mat][the, cat, is, sitting, on, the, mat]“cat”,“on”,“the”,“mat” → 4/6
2-gram["a cat", "cat sits", ...]无完全匹配 → 0/5
3. 短句惩罚(Brevity Penalty, BP)

防止短文本虚高得分:
BP={1if lengen>lenrefe(1−lenref/lengen)otherwise BP = \begin{cases} 1 & \text{if } len_{\text{gen}} > len_{\text{ref}} \\ e^{(1 - len_{\text{ref}} / len_{\text{gen}})} & \text{otherwise} \end{cases} BP={1e(1lenref/lengen)if lengen>lenrefotherwise

4. 综合BLEU计算

BLEU=BP⋅exp⁡(∑n=1Nwnlog⁡Pn) BLEU = BP \cdot \exp\left( \sum_{n=1}^{N} w_n \log P_n \right) BLEU=BPexp(n=1NwnlogPn)
默认权重 wn=1Nw_n = \frac{1}{N}wn=N1(N通常取4)

NLTK实现代码

from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction# 使用平滑函数解决零匹配问题
smoother = SmoothingFunction().method1  # Chen & Cherry 2014方法
score = sentence_bleu([reference],       # 可传多个参考答案generated,weights=(0.25, 0.25, 0.25, 0.25),  # 1~4gram权重均等smoothing_function=smoother        # 处理短文本零匹配
)

特性与技术创新

  1. 短文本优化

    • 问题:短文本n-gram匹配少,易得零分(如问答题生成)
    • 方案
      # 平滑函数调整零值:
      log(P_n) = log(ε) 当 P_n=0 时 (ε≈0.1
      示例:若所有Pₙ=0,原始BLEU=0,平滑后BLEU≈0.1(避免完全否定)
  2. 权重可控的n-gram平衡

    • 调高1-gram权重:weights=(0.6, 0.2, 0.1, 0.1) → 更关注词汇匹配
    • 调高4-gram权重:weights=(0.1, 0.1, 0.2, 0.6) → 更关注长句结构
  3. 多参考支持

    references = [  ["the", "cat", "is", "sitting", "on", "the", "mat"],  ["a", "cat", "sits", "on", "the", "mat"]  
    ]
    score = sentence_bleu(references, generated)  # 兼容多个合理答案
    

⚖️ 与同类指标对比

指标核心逻辑优势劣势
BLEUn-gram精确度加权计算高效,支持多粒度忽略同义词(“fast"≠"quick”)
ROUGEn-gram召回率适合摘要生成任务无视词序
BERTScore语义向量相似度理解同义表达计算开销大

🔥 关键结论
BLEU在需严格控制术语一致性的场景(如医疗报告生成、法律文本翻译)表现优异,但在需语义理解的任务(如开放域对话)中需结合BERTScore等指标。

3. MRR

MRR(Mean Reciprocal Rank,平均倒数排名)是一种广泛应用于信息检索、推荐系统和知识图谱等领域的排序质量评估指标。它通过衡量首个正确答案在结果列表中的排名位置来量化系统性能,特别强调“排名第一”的重要性。以下从核心原理到应用场景的全面解析:


📊 一、MRR 的核心定义与公式

  1. 核心逻辑
    MRR 关注每个查询中第一个正确答案的排名,计算其倒数(Reciprocal Rank),再对所有查询的倒数取平均值。

    • 若正确答案排名为 rir_iri,则其倒数得分为 1ri\frac{1}{r_i}ri1
    • 若答案未出现在结果中,得分为 0。
  2. 计算公式

MRR=1∣Q∣∑i=1∣Q∣1ri\text{MRR} = \frac{1}{|Q|} \sum_{i=1}^{|Q|} \frac{1}{r_i} MRR=Q1i=1Qri1

  • ∣Q∣|Q|Q:测试集查询总数;
  • rir_iri:第 iii 个查询的首个正确答案排名(从 1 开始计数)。

⚙️ 二、MRR 的计算步骤

以推荐系统为例,流程如下:

  1. 收集数据:准备用户查询及对应的标准答案(如点击/购买的商品)。
  2. 生成排序:系统对每个查询返回排序结果(如商品推荐列表)。
  3. 确定首位排名:找出列表中第一个正确结果的位置 rir_iri(如排名第 3 位,则 ri=3r_i = 3ri=3)。
  4. 计算倒数得分1ri\frac{1}{r_i}ri1(上例为 13≈0.33\frac{1}{3} \approx 0.33310.33)。
  5. 求全局平均:对所有查询的倒数得分取均值。

代码实现(Python)

def calculate_mrr(ranks):reciprocal_ranks = [1 / rank for rank in ranks]return sum(reciprocal_ranks) / len(ranks)# 示例:3个查询的首个正确答案排名分别为 1、2、5
ranks = [1, 2, 5]
mrr = calculate_mrr(ranks)  # 输出 (1 + 0.5 + 0.2)/3 ≈ 0.57

🌐 三、典型应用场景

MRR 适用于需快速定位首个正确答案的任务:

  1. 知识图谱链接预测
    • 任务:预测缺失实体(如给定头实体和关系,预测尾实体)。
    • MRR 作用:评估正确实体是否排在候选列表前列。
  2. 搜索引擎与问答系统
    • 目标:用户问题的最相关结果需排名靠前。
    • 示例:若用户搜索“新冠症状”,首个正确答案排名越前,MRR 越高。
  3. 推荐系统
    • 场景:用户点击/购买的商品是否在推荐列表顶部。
    • 优势:强调首个相关结果的时效性,优于 HR(Hit Rate)等指标。

⚖️ 四、MRR 的优缺点分析

优点缺点
排名敏感性:强调首位结果,符合用户实际需求(如搜索答案时倾向查看前几条)。忽略后续相关结果:仅考虑首个正确答案,若列表含多个相关项(如推荐多款用户喜欢的商品),无法全面评估。
结果唯一性:适用于答案唯一的场景(如知识图谱实体预测)。对低位排名不敏感:倒数得分随排名下降缓慢(如排名 2→3 时得分从 0.5→0.33,变化显著;排名 10→11 时从 0.1→0.09,影响微弱)。
计算高效:公式简单,易于实现和解释。非对称惩罚:未返回正确答案得 0 分,但排名靠后的错误结果(如第 100 位)对得分影响较小。

🆚 五、与其他排序指标的对比

指标核心关注点适用场景
MRR首个正确答案的排名答案唯一、强调时效(搜索、QA)
MAP所有相关结果的平均精度需返回多个相关结果(文档检索)
NDCG结果的相关性强度与位置相关性分级(如强相关>弱相关)
HR相关结果是否在列表中二值判断(是否命中)

💡 对比说明

  • MAP 更适合多答案场景(如“推荐10款手机”需评估所有正确型号的排名);
  • NDCG 适用于结果有相关性权重(如电商推荐中“购买意愿强>弱”);
  • HR 仅判断“是否出现”,不关心排名位置。

📝 六、实例演示

假设推荐系统为 3 个用户生成结果:

用户正确答案推荐列表(按排名)首位正确排名 ri r_i ri倒数得分 1ri \frac{1}{r_i} ri1
用户A商品X[X, Y, Z]11.0
用户B商品Y[A, Y, B]20.5
用户C商品Z[A, B, C, Z]40.25
  • MRR = (1.0+0.5+0.25)/3≈0.58 (1.0 + 0.5 + 0.25) / 3 \approx 0.58 (1.0+0.5+0.25)/30.58

💎 总结

MRR 通过量化首个正确答案的排名质量,在搜索引擎、推荐系统和知识图谱等场景中提供高效评估。其优势在于强调时效性、计算简单,但需注意其忽略后续相关结果的局限。实践中,常与 MAP、NDCG 等指标结合,全面评估排序性能。

4. ANLS

ANLS(Average Normalized Levenshtein Similarity,平均归一化Levenshtein相似度)是一种用于评估开放域问答(QA)或视觉问答(VQA)任务中答案文本相似度的指标。它通过结合编辑距离(Levenshtein距离)和归一化处理,解决传统精确匹配(Exact Match)对答案表述差异过于敏感的问题。以下是其核心原理和应用场景的详细说明:


⚙️ 一、核心算法原理

  1. Levenshtein距离(编辑距离)
    衡量两个字符串之间的差异,定义为将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数(插入、删除、替换)。例如:

    • "cat""car" 的编辑距离 = 1(替换 tr
    • "kitten""sitting" 的编辑距离 = 3(替换 k→se→i,插入 g)。
  2. 归一化Levenshtein相似度(NLS)
    将编辑距离转换为相似度分数,公式为:
    NLS=1−Levenshtein Distance(Apred,Atrue)max⁡(∣Apred∣,∣Atrue∣) \text{NLS} = 1 - \frac{\text{Levenshtein Distance}(A_{\text{pred}}, A_{\text{true}})}{\max(|A_{\text{pred}}|, |A_{\text{true}}|)} NLS=1max(Apred,Atrue)Levenshtein Distance(Apred,Atrue)
    其中:

    • ( A_{\text{pred}} ) 是模型预测的答案,( A_{\text{true}} ) 是标准答案;
    • 分子为编辑距离,分母取两字符串长度的最大值;
    • 结果范围在 [0, 1],值越高表示相似度越高。
  3. ANLS:平均归一化相似度
    对测试集中所有问题计算NLS后取平均值:
    ANLS=1N∑i=1NNLSi \text{ANLS} = \frac{1}{N} \sum_{i=1}^{N} \text{NLS}_i ANLS=N1i=1NNLSi
    其中 ( N ) 为问题总数。


🌐 二、典型应用场景

ANLS 主要适用于答案表述多样但语义一致的任务,例如:

  1. 视觉问答(VQA)
    • 如 ST-VQA(Scene Text VQA)数据集中,答案可能因文本检测或表述差异而不同(例:"Afranti" vs "AFRANTI")。
  2. 视频文本问答
    • 阿里天池竞赛 BDVT-QA 使用 ANLS 评估视频中的文本答案(如品牌名、数量等)。
  3. 开放域生成式问答
    • 当参考答案存在多个合法表述时(如日期格式 "2025-07-06" vs "July 6, 2025")。

⚖️ 三、与其他指标的对比

指标核心原理适用场景对语义一致性的敏感度
ANLS归一化编辑距离开放表述答案(VQA、生成式QA)高(容忍格式差异)
精确匹配全字符一致封闭答案(分类、实体识别)低(要求完全一致)
BLEU/ROUGEN-gram重叠机器翻译、摘要生成中(依赖词序匹配)
F1 Score词级重叠(分词后)抽取式问答中(依赖分词结果)

💡 四、优缺点分析

  • ✅ 优点

    1. 灵活性:允许答案表述差异(如大小写、标点、同义词),更贴近实际应用;
    2. 鲁棒性:对OCR或语音识别中的字符错误(如 "0" vs "O")有容忍性;
    3. 连续评分:提供 [0,1] 的细粒度评估,优于二值化的精确匹配。
  • ❌ 局限性

    1. 不关注语义:仅计算字符差异,无法识别同义替换(如 "fast" vs "quick");
    2. 长度偏差:对长文本的编辑距离惩罚可能过重;
    3. 依赖分词:未显式处理语言结构(需搭配词级指标如F1)。

🔚 五、总结

ANLS 是解决开放域问答评估难题的有效工具,特别适用于需容忍表述差异的场景(如视觉文本问答)。其核心价值在于通过归一化编辑距离平衡字符级差异与语义一致性,但需结合词级指标(如F1)或语义嵌入(如BERTScore)以全面评估答案质量。在实践中的典型应用包括:

  • VQA竞赛(如 ST-VQA、TextVQA);
  • 多模态问答系统(如视频文本解析)。
http://www.dtcms.com/a/268166.html

相关文章:

  • python库 maya 库的各种案例的使用详解(人性化的日期时间处理)
  • 使用Python将PDF转换成word、PPT
  • SSL 终结(SSL Termination)深度解析:从原理到实践的全维度指南
  • 电商系统二次开发找谁做?ZKmall开源商城前后端分离技术更易升级迭代
  • leetcode 每日一题 1865. 找出和为指定值的下标对
  • python学习打卡:DAY 21 常见的降维算法
  • 红宝书学习笔记
  • 多级缓存如何应用
  • YOLO目标检测数据集类别:分类与应用
  • Oracle使用SQL一次性向表中插入多行数据
  • NLP之文本纠错开源大模型:兼看语音大模型总结
  • 李宏毅genai笔记:推理
  • Maven引入第三方JAR包实战指南
  • 支持向量机(SVM)在肝脏CT/MRI图像分类(肝癌检测)中的应用及实现
  • Python11中创建虚拟环境、安装 TensorFlow
  • AI编程:打造炫酷多语倒计时器
  • 【Elasticsearch】自定义评分检索
  • 评论区实现 前端Vue
  • 【openp2p】 学习4: 纳秒级别的时间同步算法及demo
  • 数学建模的一般步骤
  • FastAPI+React19开发ERP系统实战第04期
  • Hadoop YARN 命令行工具完全指南
  • ProCCD复古相机:捕捉复古瞬间
  • uniapp的光标跟随和打字机效果
  • LangChain有中文网可以访问,还有教程可以学
  • 手机FunASR识别SIM卡通话占用内存和运行性能分析
  • Jailer:一款免费的数据库子集化和数据浏览工具
  • ragflow本地部署教程linux Ubuntu系统
  • Android studio在点击运行按钮时执行过程中输出的compileDebugKotlin 这个任务是由gradle执行的吗
  • 《前端路由重构:解锁多语言交互的底层逻辑》