機器翻譯 | Grid Beam Search 和 Dynamic Beam Allocation 和 Cube Pruning (網格束搜索和動態束分配和立體剪枝)

介紹

本文介紹三篇文章的大致內容:

  • Lexically Constrained Decoding for Sequence Generation Using Grid Beam Search
    提出了grid beam search (GBS)
  • Fast Lexically Constrained Decoding with Dynamic Beam Allocation for Neural Machine Translation
    改進GBS, 在每一步搜索的時候, 對不同類型的beam分佈不同的容量
  • Speeding Up Neural Machine Translation Decoding by Cube Pruning
    在搜索的時候, 加上減枝策略, 減少計算量

Grid Beam Search

beam search的過程可以用下圖表示
在這裏插入圖片描述
在每個時刻, 有大小爲k的beam, 包含k個長度爲t的部分序列.
不同時刻beam的更新關係: 對第t-1時刻的beam中的每個序列, 產生n個候選, 將得到的k*n個候選排序, 得到的top-k候選作爲t時刻的beam.
最後一個時刻beam中的序列是完成的序列, 可以作爲最終的輸出序列.

GBS的目標: 在beam search的過程中, 添加約束, 要某個詞必須出現在最終輸出序列中.
GBS的應用: 機器翻譯中, 已知某個術語的翻譯, 要求翻譯的結果要包含該術語翻譯, 可以使用.
GBS的search圖示如下:
在這裏插入圖片描述
約束的表示: 爲了簡單起見, 就表示成某個詞, 要求這個詞出現在搜索的結果中.
上面beam擴展到grid的形式, 和beam search相比, 多了約束的維度.
grid(t,c) 表示時刻t, 有c個約束對應的beam.
可以看出beam之間的更新關係爲: 將grid(t-1, c)中的每個候選擴展一個詞, 和grid(t-1, c-1)中的候選擴展一個約束詞和並起來, 選取top-n的候選, 作爲grid(t, c)中的候選.
最終得到的輸出序列爲包含了所有約束的beam(最上面一行).
分析:

  • 不同約束數目的beam之間不能一起比較, 比如有一個約束的beam 和沒有約束的beam相比, 由於約束的存在, 有約束的beam內的候選概率會減小, 如果一起比較, 有約束的beam裏的候選的概率一般較小, 一起比較會被沒有約束的beam的候選篩掉.
  • 不同時刻beam之間不能一起比較, 因爲時刻越長的beam概率也會越小

所以, grid的形式也是有必要的.

Dynamic Beam Allocation

第二篇文章改進了GBS.
GBS的主要缺點是在搜索的時候, beam的數目要擴大C倍, C爲約束的數目.
DBA出發點是限制beam中總的候選數目爲k, 在不同的beam中分配不同的候選數目.
在這裏插入圖片描述
如上圖所示, 將t時刻的所有的beam合併起來, 還是按照GBS的方式擴展下一個時刻, 得到可能的所有候選.
在分配的時候, 每個約束對應的beam分配k/C的容量, 如果某個數目的約束中沒有候選, 將容量分配給其他beam.

Cube Pruning

Beam Search的一個缺點: 在計算的過程中, beam中每個候選的擴展都需要進行計算, 這在beam較大和每次計算比較複雜的時候代價大.
出發點: 將beam中的不同候選根據狀態進行合併, 狀態相同的候選公用一個計算. 文中使用的狀態相同的定義是: 每個候選序列最後一個時刻的token相同.
具體的操作流程見原文.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章