24.9.25学习笔记
BLEU(Bilingual Evaluation Understudy)分数是一种评估机器翻译质量的方法,特别是它如何接近人类翻译的程度。它由IBM在2002年提出,最初是为了机器翻译系统的评估而设计的,但后来也被广泛应用于其他自然语言处理任务,如文本摘要、对话系统等,作为衡量生成文本与参考文本相似度的指标。
BLEU分数主要基于两个主要概念:
-
N-gram精确度:BLEU分数通过比较机器生成的文本(候选文本)与一个或多个参考文本(通常是人类翻译的文本)之间的n-gram匹配程度来计算。n-gram是文本中的连续n个项目的序列,可以是字母、单词或短语。BLEU分数计算候选文本和参考文本之间不同长度n-gram的匹配程度。
-
短句惩罚:为了防止机器生成的文本因为太短而获得高分,BLEU分数还引入了一个短句惩罚因子。如果候选文本比参考文本短,那么分数会受到影响。
束搜索(Beam Search)是一种在序列生成任务中常用的搜索算法,特别是在自然语言处理(NLP)领域,如机器翻译、文本生成等任务中。束搜索通过维护一个候选序列集合(称为“束”),并在每一步扩展这些候选序列,从而找到最有可能的输出序列。
基本思想
在传统的贪心搜索(Greedy Search)中,每次只选择当前步得分最高的单词作为下一个单词。虽然这种方法简单高效,但可能会错过全局最优解,因为局部最优并不总是全局最优。
束搜索通过维护多个候选序列来克服这一问题。具体来说,束搜索在每一步都会保留前 k
个(束宽)得分最高的候选序列,然后在下一步继续扩展这些候选序列。这样可以增加找到全局最优解的机会。
步骤详解
-
初始化
- 从起始标记(如
<SOS>
)开始,生成初始的候选序列集合。 - 通常,初始集合只有一个元素,即
[<SOS>]
。
- 从起始标记(如
-
扩展候选序列
- 对于每个候选序列,生成所有可能的下一个单词。
- 计算每个新生成的候选序列的得分(通常使用概率或对数概率)。
-
选择前 k 个候选序列(k就是束宽)
- 从所有扩展的候选序列中选择得分最高的前
k
个序列,形成新的候选序列集合。 - 这一步是束搜索的核心,通过保留多个候选序列来探索不同的路径。
- 从所有扩展的候选序列中选择得分最高的前
-
终止条件
- 当某个候选序列以结束标记(如
<EOS>
)结尾时,将其从候选序列集合中移出,并记录下来。 - 当所有候选序列都以结束标记结尾,或者达到最大序列长度时,搜索终止。
- 当某个候选序列以结束标记(如
-
返回结果
- 从所有记录的候选序列中选择得分最高的一个作为最终结果。
示例
假设我们有一个简单的例子,目标是从一个给定的输入序列生成一个输出序列。我们使用束搜索来生成最有可能的输出序列。
参数设置
- 束宽(
beam_width
): 2 - 最大序列长度(
max_length
): 5
初始化
- 初始候选序列集合:
[<SOS>]
第一步
- 扩展
[<SOS>]
,生成所有可能的下一个单词:[<SOS>, A]
(得分: 0.7)[<SOS>, B]
(得分: 0.3)
- 选择前 2 个得分最高的候选序列:
[<SOS>, A]
[<SOS>, B]
第二步
- 扩展
[<SOS>, A]
和[<SOS>, B]
,生成所有可能的下一个单词:[<SOS>, A, C]
(得分: 0.7 * 0.8 = 0.56)[<SOS>, A, D]
(得分: 0.7 * 0.2 = 0.14)[<SOS>, B, E]
(得分: 0.3 * 0.9 = 0.27)[<SOS>, B, F]
(得分: 0.3 * 0.1 = 0.03)
- 选择前 2 个得分最高的候选序列:
[<SOS>, A, C]
[<SOS>, B, E]
第三步
- 扩展
[<SOS>, A, C]
和[<SOS>, B, E]
,生成所有可能的下一个单词:[<SOS>, A, C, G]
(得分: 0.56 * 0.6 = 0.336)[<SOS>, A, C, H]
(得分: 0.56 * 0.4 = 0.224)[<SOS>, B, E, I]
(得分: 0.27 * 0.7 = 0.189)[<SOS>, B, E, J]
(得分: 0.27 * 0.3 = 0.081)
- 选择前 2 个得分最高的候选序列:
[<SOS>, A, C, G]
[<SOS>, A, C, H]
终止条件
- 假设
[<SOS>, A, C, G]
以结束标记<EOS>
结尾,记录该序列。 - 继续扩展
[<SOS>, A, C, H]
,直到达到最大序列长度或所有候选序列都以结束标记结尾。
优点和缺点
优点
- 提高搜索质量:通过保留多个候选序列,增加了找到全局最优解的机会。
- 灵活性:可以通过调整束宽来平衡搜索质量和计算复杂度。
缺点
- 计算复杂度高:随着束宽的增加,计算量会显著增加。
- 内存消耗大:需要存储多个候选序列及其得分。
实际应用
在实际应用中,束搜索广泛应用于各种序列生成任务,如机器翻译、语音识别、文本摘要等。通过合理设置束宽,可以在搜索质量和计算效率之间找到平衡。