Keras自然语言处理(二十四)

第二十一章 如何使用BLEU分数评估生成的文本

BLEU或双语评估是用于将文本的候选翻译与一个或多个参考翻译进行比较的分数。虽然是为翻译而开发,但他可以用于评估一系列自然语言处理任务生成的文本。在本章中,你将了解使用Python的NLTK库评估和评分候选文本的BLE分数,接下来你将了解:

  • 引入BLEU分数和直观上 理解其计算方法
  • 在Python的NLTK库中计算句子和文档的BLEU分数
  • 用一个小示例直观的了解候选文本和参考文本之间的差异,并且如何影响BLEU分数

21.1 概述

本章分为以下几个部分:

  1. 双语评估得分
  2. 计算BLEU分数
  3. 累计和单个BLEU分数
  4. 示例

21.2 双语评估得分

双语评估得分或简称BLEU,是用与评估生成的句子到参考句子的度量,完美匹配得分是1.0,完全不匹得分是0.0 。这个分数是用来评估自动机器翻译系统所做的预测指标,它并不完美,但是提供了5个引人注目的好处:

  1. 计算速度快,成本低廉
  2. 容易理解
  3. 与语言无关
  4. 和人类的评估高度相关
  5. 被广泛采用
    BLRU评分由Kishore Papineni等人提出来的,在他们2002年的论文BLEU:一种自动评估机器翻译的方法,该方法通过匹配候选翻译中的n-gram和参考文本中的n-gram的计数来进行工作,其中1-gram或unigram将是每个标记,并且bigram比较将是每个单词对,这种比较不考虑词序。

BLEU实现者的主要任务是将候选者的n-gram与参考翻译的n-gram进行比较并且计算匹配数。这些匹配与位置无关。匹配越多,候选翻译就越好。

修改匹配的n-gram计数,以确保它考虑到参考文本中出现的单词,而不会对产生的大量合理词汇的候选翻译计分,这才文章中被称为修改的n-gram精度。
改分数用于比较句子,但是为了更好地对多个句子进行评分,我们还提出了一种改进的方法,即根据n-gram出现的次数对其进行规范化。

我们首先逐句计算n-gram匹配,接下来,我们为所有候选句子添加剪切的n-gram计数,并除以测试语料库中的候选n-gram的数量,以计算整个测试语料库的修改的精确度分数pm

因为翻译必须与参考不可能完全匹配,在实践中,不可能获得满分,人类翻译甚至无法做到这一点。用于计算BLEU分数的参考文献的数量和质量参差不齐意味着比较数据集之间的分数是一个不容易处理的问题。

BLEU度量范围为0~1,极少数翻译可以得到1分,除非他们与参考翻译相同,出于这个原因,即使是一个人类,翻译也不一定能在大约500个句子的测试语料库中得分为1。

除了翻译,我么你还可以通过深度学习方法将BLEU评分用于其他语言生成问题,例如

  • 语言生成
  • 图像字幕生成
  • 文字摘要
  • 语音识别

21.3 计算BLEU分数

NLTK提供sentence_bleu函数,用于针对一个或多个参考句子评估候选句子,引用句子必须作为句子列表,其中每个引用是一个标记列表,候选句子作为标记列表例如:

from nltk.translate.bleu_score import sentence_bleu
reference = [
    ['this','is','a','test'],
    ['this','is','test']
]
candidate = ['this','is','a','test']
score = sentence_bleu(reference,candidate)
print(score)

其结果为:

1.0

21.3.2 语料库BLEU分数

NLTK还提供了一个名为corpus_bleu的函数,用于计算多个句子(例如段落或文档)的BLEU分数,必须将引用指定为文档list,其中每个文档都是引用list,每个备选引用是标记list。例如标记列表的list。必须将候选文档指定为list,其中每个文档是令牌list,例如令牌列表list,这个有点令人困惑,这是一个文档的两个引用的示例。

from nltk.translate.bleu_score import corpus_bleu
reference = [
    [
        ['this','is','a','test'],
        ['this','is','test']
    ]
]
candidate = [
    ['this','is','a','test']
]
score = corpus_bleu(reference,candidate)
print(score)

其结果为:

1.0

21.4 累积和单个BLEU分数

NLTK中的BLEU分数计算允许你在计算BLEU分数时指定不同n-gram的权重,这使得你可以灵活地计算不同类型的BLEU分数。例如单个和累积的n-gram分数,接下来让我们看看他们是怎么样的。

21.4.1 单个n-gram分数

单独的n-gram分数是仅匹配特定顺序的grams的评估,例如单个单词(1-gram)或单词对(2-gram或bigram),权重被指定为元组,其中每个索引参照gram顺序,要仅计算1-gram匹配的BLEU分数,你可以为1-gram指定权重1,2-gram,3-gram,和4-gram的权重为0,权重为(1,0,0,0),例如:

from nltk.translate.bleu_score import sentence_bleu
reference = [
    ['this','is','small','test']
]
candidate = ['this','is','a','test']
score = sentence_bleu(reference,candidate,weights=(1
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值