论文阅读:Fast Lexically Constrained Decoding with Dynamic Beam Allocation for Neural Machine Translation

内容简介:

 

1.引言

词法约束机器翻译:

词约束又叫做引导解码,修改beam search 强迫输出必须包含指定的词或者短语。

虽然这个方法在理论上可行,但现有方法对于约束数量有线性(Hokamp和Liu,2017)或指数(Anderson等,2017)的计算复杂性。 这篇文章提出了一种用于词约束解码的算法,其约束数量为O(1)的复杂度。并在sockeye上有实现。

词法约束解码实质上是对beam search的修改,允许用户指定单词翻译。

 

两种算法:网格波束搜索(Hokamp和Liu,2017)和约束波束搜索(Anderson等,2017);这些算法可以很好的自动设置约束并改善模拟后编辑,域适应和字幕生成;缺点是运算时复杂度:约束数量的线性(GBS)或指数(CBS)。

 

本论文提出一种新的算法动态波束分配(DBA),给定约束数量他的算法复杂度是恒定的。  算法将假设按满足约束数量分组成bank,并在每个时间步将一个固定大小的波束(beam)分配给各个bank。结果,该算法能够容易的缩放并扩展到使用例如BPE等技术处理产生的大词或短语约束集。

 

2.背景介绍:波束搜索和网格波束搜索

Hokamp和Liu(2017)引入了一种算法,用于强制某些单词出现在输出中,称为网格波束搜索(GBS)。该算法采用一组约束,这些约束必须出现在输出中,并确保假设在被认为完成之前满足所有约束。

对于C个约束,这是通过保持C + 1个单独的bank存储B0,B1,...Bi...,BC,bank是按照满足约束数分的组。 解码与标准波束解码一样进行,但是添加了记录,跟踪每个假设所满足的约束的数量,并确保生成新的候选, 使得每个bank在每个时间步得到填充。 当波束搜索完成时,返回的假设是BC(也就是最后的bank)中得分最高的假设。 从概念上讲,这可以被认为是为光束添加一个额外的维度。

但是GBS存在两个问题:

  1. 解码复杂度在约束数量上是线性的:k·(C + 1)随约束数量而变化。
  2. 这是不切实际的。每个句子的波束大小都会发生变化,而大多数解码器会在模型加载时指定波束大小,以便优化计算图形,特别是在GPU上运行时。它还使增加吞吐量的波束搜索优化变得复杂。

 

3.DBA dynamic beam allocation

    算法:

4.分配beam

                                                    

任务是在C+1个bank上分配一个大小为k的波束,C可能大于k。但是每个bank最多分到  k/c取下整 数量的beam

 

理解:

这篇文章出发点是限制beam中总的候选数目为k改进GBS算法, 在每一步搜索的时候, 对不同类型的beam分布不同的容量,将t时刻的所有的beam合并起来, 还是按照GBS的方式扩展下一个时刻, 得到可能的所有候选在分配的时候, 每个约束对应的beam分配k/C的容量, 如果某个数目的约束中没有候选, 将容量分配给其他beam

 一,怎么选出候选词?

 二,选词规则:

     1.矩阵中top-k,所以选出标星的:5个

     2.选出所有还能通过再加约束进步的词,所以就选出了 —> 的:7

     3.选出在当前约束词下,每行的打分最高的:即标◇的:5

     4.因为设置了长度为2短语约束,且约束执行只能从左到右,(2,3), (4,4),都是只满足了左约束,按规则下个词的约束应该是右约束,但是下个词约束是三角形,所以必须释放:2个

 

因为第一行和第二行分数最高同时也是top-5中词,所以重复两个;最后5+5+7-2-2=13

 

 

代码:sockye代码链接: https://awslabs.github.io/sockeye/inference.html#lexical-constraints

 

猜你喜欢

转载自blog.csdn.net/qq_36533552/article/details/106317720#comments_24574876