简洁惩罚定义为
在哪里是参考长度和是输出长度。
但是如果输出长度变为零会发生什么?有没有标准的方法来处理这个问题?
简洁惩罚定义为
在哪里是参考长度和是输出长度。
但是如果输出长度变为零会发生什么?有没有标准的方法来处理这个问题?
除以零在数学上没有定义。
处理此问题的通常或标准方法是引发异常。例如,在 Python 中,如果碰巧被零除,则会在运行时ZeroDivisionError
引发异常。
如果执行以下程序
zero = 0
numerator = 10
numerator / zero
你会得到
Traceback (most recent call last):
File "main.py", line 3, in <module>
numerator / zero
ZeroDivisionError: division by zero
但是,如果您想避免此运行时异常,您可以检查除以零并以适合您的程序的方式处理此问题(无需终止它)。
在论文BLEU: a Method for Automatic Evaluation of Machine Translation中引入了 BLEU(和简洁惩罚)度量,作者将简洁惩罚定义为
该定义没有明确考虑除以零。
Python 包nltk
不会引发异常,但它(显然是任意地)在c == 0
. 请注意,BLEU 指标的范围是从 0 到 1。例如,如果您执行以下程序
from nltk.translate.bleu_score import brevity_penalty, closest_ref_length
reference1 = list("hello") # A human reference translation.
references = [reference1] # You could have more than one human reference translation.
# references = [] Without a reference, you will get a ValueError.
candidate = list() # The machine translation.
c = len(candidate)
r = closest_ref_length(references, c)
print("brevity_penalty =", brevity_penalty(r, c))
你会得到
brevity_penalty = 0
在上面的示例中,唯一的人工参考(翻译)是reference1 = list("hello")
,唯一的候选(机器翻译)是一个空列表。但是,如果references = []
(您没有参考资料),那么您将收到错误ValueError: min() arg is an empty sequence
,其中references
用于查找与 candidate
(机器翻译)最接近的参考资料(最接近的人工翻译),因为可能有多个人工参考资料翻译,并且需要选择一个来计算针对您给定候选人的简洁惩罚。
其实在函数的文档中brevity_penalty
,写了如下注释
# If hypothesis is empty, brevity penalty = 0 should result in BLEU = 0.0.
其中hypothesis
是候选者(机器翻译)的同义词,候选者的长度是在公式(c
在上面的例子中)。
为了更直接地回答您的第二个问题,我认为没有处理该问题的标准方法,但我还没有完全阅读 BLEU 论文。