劍橋大學:SGNMT—一個用於新模型和搜索策略快速原型設計的靈活NMT解碼平台
你和「懂AI」之間,只差了一篇論文
很多讀者給芯君後台留言,說看多了相對簡單的AI科普和AI方法論,想看點有深度、有厚度、有眼界……以及重口味的專業論文。
為此,在多位AI領域的專家學者的幫助下,我們解讀翻譯了一組頂會論文。每一篇論文翻譯校對完成,芯君和編輯部的老師們都會一起笑到崩潰,當然有的論文我們看得抱頭痛哭。
同學們現在看不看得懂沒關係,但芯君敢保證,你終有一天會因此愛上一個AI的新世界。
這是讀芯術解讀的第72篇論文
EMNLP 2017 System Demonstrations
SGNMT—一個用於新模型和搜索策略快速原型設計的靈活NMT解碼平台
SGNMT – A Flexible NMT Decoding Platform for Quick Prototyping of New Models and Search Strategies
劍橋大學
University of Cambridge
【摘要】本文介紹了SGNMT,我們用於機器翻譯研究的實驗平台。SGNMT提供了具有從左到右語義的神經和符號評分模塊(預測器)的通用界面,如NMT,語言模型,翻譯網格,n最佳列表或其他類型的評分和約束等翻譯模型。預測器可以與其他預測器組合形成複雜的解碼任務。SGNMT也實現了一些搜索策略,用於遍歷由預測變數跨越的適合於不同預測器的空間。添加新的預測變數或解碼策略非常簡單,使其成為探索原型開發新研究思路非常有效的工具。SGNMT正在劍橋大學中的機器學習、語音和語言技術的碩士學位課程中積極使用,用於課程工作和論文,此外,也用於我們團隊的大部分研究工作。
1 引言
我們正在開發一個稱為SGNMT的開源解碼框架,全稱為語法導航神經機器翻譯【http://ucam-smt.github.io/sgnmt/html/】。該軟體包支持許多知名框架,包括TensorFlow【SGNMT依賴於TensorFlow https://github.com/ehasler/tensorflow】(Abadi et al., 2016),OpenFST (Allauzen et al., 2007),Block/Theano(Bastien et al., 2012; van Merrienboer et al.,2015)和NPLM (Vaswani et al., 2013)。SGNMT工具中的兩個中心概念是預測器和解碼器。預測器是評分模塊,在給定當前內部預測器狀態、歷史、源語句和外部信息等情況下,定義目標語言辭彙的分數。來自多個不同預測器的評分可以組合用於解碼。
解碼器是跨越預測器張成空間的搜索策略。SGNMT提供了常用的搜索樹遍歷演算法(例如集束搜索beam search)。由於解碼器的運行時間複雜度和他們所做的搜索錯誤的種類不同,所以不同的解碼器適用於不同的預測器排列。
評分模塊和搜索策略的嚴格分離以及評分模塊之間的分離使SGNMT成為神經和符號模型的非常靈活的解碼工具,不僅僅適用於機器翻譯。SGNMT基於OpenFST-based的劍橋SMT系統(Allauzenet al., 2014)。雖然系統開發出來還不到一年,但我們認為這個系統對於新研究者來說是非常靈活和容易使用的。我們團隊已將SGNMT投入到大部分研究工作當中。
我們還發現,SGNMT非常適合教學和學生研究項目。在2015-16學年,劍橋大學的兩名學生在機器學習、語音和語言技術上使用了SGNMT作為他們的論文項目【http://www.mlsalt.eng.cam.ac.uk/Main/CurrentMPhils】,第一個項目涉及到使用SGNMT與OpenFST在SMT中應用子詞模型(Gao,2016))。第二個項目由LSTM開發自動音樂作品,其中使用WFSAs來定義「巴赫」合唱團(Tomczak, 2016)中允許和弦空間。LSTM提供了「創造力」,WFSA強制執行合唱團必須遵守的限制。這個第二個項目特別表明了這種方法的多功能性。對於當前的2016-17學年,SGNMT正在這兩門課程中大量使用。
2預測器
因此,SGNMT通過為機器翻譯研究中使用的廣泛的約束或模型提供通用介面來強調靈活性和可擴展性。該概念有助於快速構建新的研究思路。我們的平台旨在盡量減少實施所需的努力;一旦在SGNMT框架中成功證明了一個想法,生產系統的優化代碼就可以生成,相對來說,解碼速度是次要的。在SGNMT中,評分通過一個或多個預測器分配給部分假設。一個預測器通常具有單一的責任,因為它代表單一的模型或類型的約束。預測器需要實現以下方法:
1.initialize(src sentence)使用源語句初始化預測變數狀態。
2. get state( )獲取內部預測器狀態。
3.set state( )設置內部預測器狀態。
4.predict next( )給定內部預測器狀態,為下一個位置的目標標記生成後驗。
5.consume(token)通過向當前歷史記錄添加令牌來更新內部預測器狀態。
預測器狀態的結構和這些方法的實現在預測器之間有很大差異。表2列出了目前實施的所有預測器。表1總結了三種非常常見的預測器的介面語義:神經機器翻譯(NMT)預測器,(確定性的)有限狀態轉換器(FST)用于格點求值的預測器,以及用於應用n-gram語言模型的n-gram預測器。我們還包括兩個例子(字數和UNK數),它們沒有一個自然的從左到右的語義,但仍然可以作為預測器。
表1 用於NMT,FST,n元LM和計數模塊的預測器操作
表2 當前實施的預測器
2.1 示例預測器排列
SGNMT允許組合任意數量的預測器,甚至同一預測器類型的多個實例。在多預測器的情況下,我們將預測器分數結合到線性模型中。以下列表說明了各種有趣的解碼任務可以被制定為預測器組合。
nmt:單個NMT預測器代表純粹的NMT解碼。
nmt,nmt,nmt:在我們的框架中,使用多個NMT預測器是一種自然的方式表示集成解碼(Hansen和Salamon,1990; Sutskever等,2014)。
fst,nmt:NMT解碼受限於FST。例如,在MT(Hasler等,2016)的源端簡化或「Bach」(Tomczak)中的和弦進行的情況下,這可以用於神經網格再分類(Stahlberg等,2016)或其他類型的限制條件。fst預測器也可用於將基於字元或基於子詞單元的NMT的輸出限制為編碼為FSA的大型單詞辭彙表。
nmt,rnnlm,srilm,nplm:將NMT與三種語言模型相結合:RNNLM(Zaremba et al。,2014),Kneser-Ney n-gram LM(Heafield et al。,2013; Stolcke et al。 2002)和前饋神經網路LM(Vaswani等,2013)。
nmt,ngramc,wc:Stahlberg等人之後的基於MBR的NMT (2017)。用(ngramc)和簡單的單詞懲罰(simple word penalty)(wc)提取n-gram後件。
3 解碼器
解碼是搜索最高得分假設的演算法。預測器列表通過實現方法initialize(·),getstate(),set state(·),predict next()和consume(·)來確定如何評估(部分)假設。解碼器類實現了適用於列表中所有預測器的這些方法的版本。initialize(·)總是在解碼一個新的句子之前被調用。許多流行的搜索策略可以通過剩下的方法get state(),set state(·),predict next()和consume(·)來描述。演算法1和演算法2展示了如何用這種方法來定義貪婪和波束解碼【形式上,演算法1和演算法2中的predict next()返回標記項和他們的成本對;字元串連接表示為·】。
表3包含當前實施的解碼器列表。圖1中的UML類圖解釋了解碼器和預測器之間的關係。
表3 當前實施的解碼器
圖1 簡化的UML類圖
3.1 NMT批量解碼
預測器框架的靈活性伴隨著解碼時間的下降而下降。SGNMT提供了兩種加速純NMT解碼的方法,特別是在GPU上。Vanilla解碼策略揭示了在Block(van Merrienboer et al. ¨ , 2015)中並行處理集束中所有有效假設的集束搜索實現。我們還實現了一次解碼多個句子(批量解碼)而不是按順序解碼的集束解碼器版本。批量解碼可能更有效,因為較大批量可以更好地利用GPU並行性。批量解碼器實現的關鍵是:
1. 我們使用運行在單獨的CPU線程上的調度器來從多個句子構建大批量的計算(GPU作業)並將它們提供給作業隊列。
2. GPU由單個線程操作,通過包含作業的隊列與CPU調度程序線程進行通信。這個線程只負責檢索作業隊列中的作業,計算它們並將它們放入作業結果隊列中,從而最大限度地減少GPU計算的停機時間。
3. 另一個CPU線程負責處理在作業結果隊列中的GPU上計算的結果,例如,從後驗得到n個做好的詞。處理後的作業被發送回CPU調度程序,在那裡它們被重新組裝成新的作業。
這個解碼器能夠在Stanlberg等人(2016)【Theano 0.9.0, cuDNN 5.1, Cuda 8 with CNMeM, Intel RCore i7-6700 CPU】描述的基於字的NMT模型中,將WMT英語 - 法語測試集news-test2012翻譯成Titan X GPU上的newstest2014,每秒911.6字。這種解碼速度似乎比用Marian-NMT(Junczys-Dowmunt et al.,2016)等高性能NMT解碼器進行順序解碼的速度要快,解碼速度為每秒865個字【注意,可比性相當有限,因為即使我們使用相同的梁尺寸(5)和辭彙量的大小(30k),我們使用(a)稍微慢GPU(泰坦X和GTX 1080),(b)不同的訓練集和測試集,(c)一個稍微不同的網路架構,和(d)的單詞而不是子字單位】。然而,批量使用Marian-NMT進行解碼要快得多,達到每秒4500字以上【https://marian-nmt.github.io/features/】。我們認為這些差異主要是由於Python中有限的多線程支持和性能,特別是在使用外部庫時,與Marian-NMT中高度優化的C++代碼相反。由於速度不是SGNMT的主要設計目標,所以我們沒有推動更快的解碼。請注意,批量解碼繞過預測器框架,只能用於純NMT解碼。
與多個標記化級別的模型進行組合
SGNMT允許使用替代的建模單元組來掩蓋預測器。不同預測器的標記化方案之間的轉換由FST定義。這使得可以通過將來自基於子詞單元(BPE)的NMT(Sennrich等人,2016)和基於字元的NMT的基於單詞的NMT模型的分數相結合來解碼,用FSTs轉換字元序列到BPE或單詞序列掩蓋了基於BPE和基於詞的NMT預測器。掩碼對解碼策略是透明的,因為預測器被一個特殊的包裝器(fsttok)替代,該包裝器使用掩蔽FST將predict_next()和consume()調用轉換為(一系列)具有替代標記項的預測器調用。集束搜索的同步波束變化僅在消耗特殊的字邊界符號之後,而不是在每個令牌之後比較競爭假設。這使得即使在使用具有多個級別的標記化模型時,也可以在單詞級別組合分數。使用不同的標記化方案進行聯合解碼有可能結合不同方案的優點:基於字元和BPE的模型能夠解決罕見的單詞,而基於單詞的NMT則可以更有效地對長距離依賴性進行建模。
系統級組合
我們在2.1節中展示如何將NMT集合作為一組NMT預測器來制定。在每個解碼步驟中對各個模型評分進行平均。或者,系統級組合將整個句子與每個模型分開解碼,並在所有模型上選擇最佳評分完全假設。在我們的實驗中,系統級組合不如集合有效,但仍然給純NMT帶來適度增益。然而,在單獨的解碼運行之後,在後處理步驟中選擇最佳翻譯的簡單實現,運行比較緩慢。sepbeam解碼策略將系統級組合的運行時間減少到單個系統級別。該策略只應用一個預測器而不是所有預測器的線性組合來擴展假設。單個預測器由父假設聯繫起來。sepbeam中的初始堆棧包含每個預測器(即系統)的假設,而不是像正常集束搜索那樣只有一個假設。我們通過結合Stahlberg等人(2017)使用sepbeam解碼器的三種基於BPE的NMT模型,在日英ASPEC測試集(Nakazawa et al.,2016)上報告了0.5 BLEU的中等增益。
迭代集束搜索
由於運行時間取決於事先未知的目標句子長度,所以在時間受限設置中使用正常的波束搜索比較困難,因為很難事先選擇正確的集束尺寸。桶搜索演算法通過重複執行小集束搜索遍歷來避開設置集束大小的問題,直到固定的計算預算耗盡。桶搜索非常快速地產生初始假設,並保持桶中每個長度的部分假設。隨後的波束搜索通過迭代地更新這些桶來改進初始假設。我們最初的實驗表明,桶搜索通常在與標準集束搜索相似的水平上執行,其能夠支持困難時間約束。與集束搜索不同,桶搜索適用於無風險(即允許)修剪,因為所有比當前最佳完整假設更差的部分假設都可以被丟棄。
4 結論
本文提出了我們的SGNMT平台,用於原型涉及機器翻譯的新方法,涉及神經和符號模型。SGNMT通過一個通用介面(預測器)和各種搜索策略(解碼器)支持許多不同的模型和約束條件。此外,SGNMT的重點在於通過將評分模塊彼此和搜索演算法解耦來最小化添加新的預測器和解碼器的實施工作。SGNMT正在積極地用於教學和研究,我們歡迎對其發展做出貢獻,例如通過實施使用其他框架和工具訓練的新預測器。


※今日芯聲:快看!史上最像人類的機器人來啦!
※科大訊飛:基於中斷循環神經網路的文本分類
TAG:讀芯術 |