孫義棟,擁 措,楊 丹
(1.西藏大學(xué)信息科學(xué)技術(shù)學(xué)院,西藏 拉薩 850000; 2.西藏自治區(qū)藏文信息技術(shù)人工智能重點實驗室,西藏 拉薩 850000;3.藏文信息技術(shù)教育部工程研究中心,西藏 拉薩 850000)
機(jī)器翻譯又被稱為自動翻譯,是利用計算機(jī)將一種自然語言轉(zhuǎn)換為另一種具有相同含義的自然語言的過程,屬于計算機(jī)語言學(xué)的分支之一,具有重要的科學(xué)研究價值[1]。機(jī)器翻譯的發(fā)展經(jīng)歷了萌芽期、受挫期、快速成長期和爆發(fā)期4個階段,其方法已從基于規(guī)則的機(jī)器翻譯、基于實例的機(jī)器翻譯[2]、基于統(tǒng)計的機(jī)器翻譯[3-5]發(fā)展為基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯[6-9]。隨著大數(shù)據(jù)時代的到來,低成本獲取數(shù)據(jù)讓神經(jīng)機(jī)器翻譯系統(tǒng)更快得以實現(xiàn)。因此最近神經(jīng)機(jī)器翻譯憑借其高質(zhì)量的譯文,受到越來越多研究者和開發(fā)者的青睞[10]。在機(jī)器翻譯中,首先要構(gòu)建詞表,即統(tǒng)計文本中的詞匯,然后設(shè)定一個閾值,將出現(xiàn)次數(shù)大于這個閾值的詞匯放入詞匯表中。但是如果不加以限制,機(jī)器翻譯面對的詞表就會很大,而且會出現(xiàn)OOV(Out of Vocabulary)問題。一種解決開放詞表翻譯問題的方法是改造輸出層結(jié)構(gòu)[11-12],但是這種方法仍然無法解決OOV問題,因此并不常用。
目前,字節(jié)對編碼(Byte Pair Encoding, BPE)[13]是一種常用的子詞詞表構(gòu)建方法。BPE方法最早用于數(shù)據(jù)壓縮[14],機(jī)器翻譯通過學(xué)習(xí)這種思想[15]來對源語言和目標(biāo)語言進(jìn)行子詞切分,并且取得了很好的效果[16]。與BPE算法不同,基于Word Piece[17]和1-gram Language Model(ULM)的方法是利用語言模型進(jìn)行子詞詞表的構(gòu)造[18]。但是在這些方法中,詞表的大小并沒有得到充分重視。而有些工作表明詞表大小也會影響下游任務(wù)的表現(xiàn),尤其是在低資源任務(wù)上。近幾年,有研究人員提出融合EMD(Earth Mover’s Distance)最小化雙語詞典的漢-越無監(jiān)督神經(jīng)機(jī)器翻譯方法,首先分別訓(xùn)練單語詞嵌入,再通過最小化它們的EMD訓(xùn)練得到雙語詞表[19]。2021年,Xu等人[20]提出了VOLT(Vocabulary Learning Approach via Optimal Transport)技術(shù)通過同時考慮信息熵和詞匯表大小來探索自動詞匯化,并引入經(jīng)濟(jì)學(xué)中信息邊際效用(MUV)來衡量信息熵和詞匯表規(guī)模的博弈收益,提出最佳運輸理論來最大化MUV(MUV最大化時等同于找到最佳詞匯表)。VOLT的好處在于可以極大縮小詞表規(guī)模、不用人工定義BPE訓(xùn)練時的詞表規(guī)模以及能夠大幅度提高詞表訓(xùn)練速度。
但在藏漢雙向機(jī)器翻譯領(lǐng)域,由于藏語和漢語的基本組成字符不同,二者詞表需要分開構(gòu)建。而藏文是拼音文字,音節(jié)之間的分隔符存在省略現(xiàn)象,有格助詞、助動詞等漢語文法不具有的語法單元,這種語言特點導(dǎo)致藏語中存在緊縮詞和黏著詞、虛詞和實詞的界限難以區(qū)分、詞與詞之間沒有明顯的間隔標(biāo)記等[21],給藏語詞表的構(gòu)建帶來了挑戰(zhàn)。而且無論是傳統(tǒng)的分詞后統(tǒng)計詞頻來構(gòu)建詞表,還是分詞后采用BPE以及直接使用BPE等方式相對于其他大語種翻譯上的提升都略顯不足。因此,本文旨在通過構(gòu)建合適的藏漢詞表來提升藏漢雙向翻譯性能。
字節(jié)對編碼主要思想是將數(shù)據(jù)中常見的連續(xù)字符串替換為一個不存在的字符,之后通過構(gòu)建一個替換關(guān)系的對應(yīng)表,最后再對壓縮后的數(shù)據(jù)進(jìn)行還原。BPE可以有效解決OOV問題,縮小詞表規(guī)模,對低頻詞有很好的健壯性。而對于高頻詞來說,因為其本身在句子中出現(xiàn)頻率較高,應(yīng)該將其作為一個整體去看待,不適合分割成字符級。因此本文采用高頻詞使用直接構(gòu)建詞表,低頻詞使用字節(jié)對編碼詞表的思想,并通過迭代訓(xùn)練找到最佳詞頻閾值進(jìn)行詞表拼接。其中直接構(gòu)建詞表是指對分詞后的語料進(jìn)行詞頻統(tǒng)計,按照單詞在語料中出現(xiàn)的頻率由高到低的順序來構(gòu)建詞表。
本文對2種方法的子詞切分結(jié)果進(jìn)行了差異分析和數(shù)據(jù)統(tǒng)計,結(jié)果如表1所示。
表1 2種方法子詞差異分析和數(shù)據(jù)統(tǒng)計
本文詞表拼接方法的主要思想如圖1所示。
圖1 詞表拼接算法流程圖
在百位詞頻閾值都被取完之后程序終止,記錄最大保留分?jǐn)?shù)以及采用的最佳百位詞頻閾值。
VOLT的核心思想是通過同時考慮語料庫熵和詞匯量大小在多項式時間內(nèi)探索自動詞匯化。主要過程可分為3步:1)引入經(jīng)濟(jì)學(xué)中信息邊際效用(MUV)作為評估方法;2)通過將離散優(yōu)化目標(biāo)重新表述為最優(yōu)轉(zhuǎn)移問題,從而在可處理的時間復(fù)雜度中最大化MUV;3)則是從最佳轉(zhuǎn)移矩陣中生成詞表。
在第一步中,MUV在形式上被定義為熵對詞匯量大小的負(fù)導(dǎo)數(shù),MUV的計算過程如公式(1)所示。
(1)
其中,v(k+m)和v(k)分別表示包含k+m和k個tokens的詞表,Hv表示的是語料庫的熵,具體定義為:
(2)
公式(2)中l(wèi)v表示詞表v中的tokens的平均長度,P(i)則代表tokeni在訓(xùn)練語料庫中的“相對頻次”,計算公式為:
(3)
公式(3)中分子部分c(i)表示tokeni在訓(xùn)練語料庫中出現(xiàn)的次數(shù),分母部分為訓(xùn)練語料庫中單詞總數(shù)。
在第二步中,由于詞表是離散的,搜索空間太大,因此通過從固定大小的詞表中搜索最佳詞表來簡化原始的離散優(yōu)化問題。給定變量S,每個時間步t表示一組數(shù)量為S[t]的詞,對于任意一個詞表,其MUV分?jǐn)?shù)可以基于前一步的時間戳t-1上的詞表遞進(jìn)計算得到。通過這種方式可以正式定義尋找最優(yōu)詞表v(t)的函數(shù)為:
(4)
公式(4)由于是指數(shù)搜索空間,因此需要優(yōu)化上界:
(5)
其中,i是t-1詞表和t詞表size的差值,所以最終最大化MUV分?jǐn)?shù)可以表達(dá)為最大化公式(5)。
具體實現(xiàn)過程總共可分為5步:1)對所有token按頻率從大到小排序,采用BPE生成的token作為候選token;2)使用所有的token候選以及各自概率初始化算法;3)設(shè)置超參數(shù)S的大小,對于雙語翻譯設(shè)置為(1000,…,10000),多語翻譯設(shè)置為(40000,…,160000);4)對于每一個時間步t,基于轉(zhuǎn)移矩陣使用最大熵得到詞表,同時刪除頻率低于0.001的token;5)枚舉出所有時間步,選擇出滿足公式(5)的詞表作為最終詞表。生成詞表后,與BPE類似,VOLT也使用貪婪策略對文本進(jìn)行編碼,即首先將句子切分成字符級,然后合并連續(xù)的2個token,直到?jīng)]有token可以被合并為止。
通過上述方法,VOLT可以找到具有更高BLEU值和更小規(guī)模的詞匯表,避免了人工定義詞表規(guī)模所帶來的缺陷,而且相比傳統(tǒng)詞表訓(xùn)練方法,能夠大幅度減少詞表訓(xùn)練時間。
對于VOLT的正常應(yīng)用方式是在對語料使用分詞和BPE后再使用VOLT。但是對于藏語來說,由于藏文本身存在緊縮詞和黏著詞等特點,現(xiàn)有的藏文分詞系統(tǒng)不能達(dá)到很好的分詞效果。其次,VOLT本身是根據(jù)句子信息熵生成詞表(式(2)、式(5)),藏文進(jìn)行分詞后會導(dǎo)致句子信息熵發(fā)生改變。
因此,本文對藏文采用直接BPE方式加VOLT技術(shù)生成詞表,中文仍使用分詞加BPE再加VOLT技術(shù)生成詞表。最后通過實驗對比所提方法是否有效。
本文所使用的實驗數(shù)據(jù)大部分來源于第十七屆全國機(jī)器翻譯大會(CCMT 2021)所提供的15萬句左右藏漢平行語句,還有一部分來源于實驗室收集到的3萬條語句,共18萬條平行語句。
首先利用規(guī)則的方法進(jìn)行數(shù)據(jù)過濾,具體內(nèi)容包括長度過濾、長度比限制、語種識別、去重。其次進(jìn)行符號標(biāo)準(zhǔn)化,對數(shù)據(jù)中的字符表示或者大小寫等進(jìn)行統(tǒng)一,具體包括全角轉(zhuǎn)半角、大小寫轉(zhuǎn)換和中文的簡繁體轉(zhuǎn)化等。最終得到清洗后的約17萬條語句的數(shù)據(jù)集,再采用隨機(jī)抽樣方法從中隨機(jī)選取1萬條語句的數(shù)據(jù)集劃分為驗證集和測試集(各5千條左右)。這樣做的目的是保證驗證集和測試集的隨機(jī)性以及防止數(shù)據(jù)泄露。之后對剩余16萬條語句的數(shù)據(jù)集通過同義詞替換[22]的方式進(jìn)行數(shù)據(jù)增強(qiáng),得到約50萬條藏漢平行語句。其中基于同義詞替換的數(shù)據(jù)增強(qiáng)方式經(jīng)過實驗證明對藏漢/漢藏翻譯效果都有所提升,因此本文中也采用該方法擴(kuò)充語料。最后進(jìn)行分詞,在本文中,漢文直接構(gòu)建詞表或使用北大pkuseg[23]分詞,并在此基礎(chǔ)上使用BPE。藏文按照實驗需要,分別采用了TIP-LAS分詞[24]以及在TIP-LAS基礎(chǔ)上使用BPE,其中TIP-LAS是李亞超等人[24]提出的基于條件隨機(jī)場模型的藏文分詞系統(tǒng),該系統(tǒng)首先需要訓(xùn)練一個分詞模型,再對需要分詞的藏文語料應(yīng)用分詞模型進(jìn)行切分,詞與詞之間以空格作為分隔符。其中,藏文分詞后使用BPE方式與漢文相同,都是通過先學(xué)習(xí)詞表再對語料進(jìn)行應(yīng)用的方式進(jìn)行,本文所使用的BPE開源地址為https://github.com/rsennrich/subword-nmt。
本文使用近年來神經(jīng)機(jī)器翻譯方法中主流的編碼器-解碼器(Encoder-Decoder)框架,統(tǒng)一采用百度飛漿開源的PaddleNLP中完全基于自注意力機(jī)制的Transformer-big模型訓(xùn)練。模型有16層編碼器和解碼器,每個輸出大小為1024個隱藏單元,使用16個注意頭和正弦位置嵌入,最后前饋網(wǎng)絡(luò)中隱藏層大小為4096。其中Transformer-big的網(wǎng)絡(luò)參數(shù)與文獻(xiàn)[25]中的參數(shù)設(shè)置保持一致,解碼時使用束搜索算法[26]來生成翻譯的目標(biāo)語句,beamsize設(shè)置為5。優(yōu)化策略使用Adam優(yōu)化器[27]。Dropout參數(shù)值設(shè)置為0.1,以防止過擬合。所有實驗均在Ubuntu操作系統(tǒng)下使用RTX 2080Ti顯卡完成。
本文使用BLEU-4[28]值作為評測指標(biāo),其采用n-gram匹配的方式來評定翻譯結(jié)果與參考譯文之間的相似度,即機(jī)器翻譯的結(jié)果越接近人工參考譯文就認(rèn)定它的質(zhì)量越高。n-gram是指n個連續(xù)單詞組成的單元,n越大表示評價時考慮的匹配片段越大,比如本文所使用的BLEU-4值就代表4-gram。BLEU值計算公式為:
(6)
公式(6)中BP代表長度懲罰因子,避免短句子得到更高的值。Pn表示修正后的n-gram精度得分,Wn表示權(quán)重值。
本文主要研究2種藏漢詞表改進(jìn)方法在藏漢雙向翻譯上的改進(jìn)效果,本文方法的總體框架如圖2所示。其中詞表拼接和VOLT部分是本文重點,將在第四章詞表改進(jìn)實驗結(jié)果與分析中詳細(xì)展開說明。
圖2 總體框架流程圖
為了方便后續(xù)實驗對比,分別對分詞后直接構(gòu)建詞表、分詞后采用BPE以及直接使用BPE這3種傳統(tǒng)藏文詞表構(gòu)建方法在藏漢和漢藏上進(jìn)行實驗對比,BPE參數(shù)統(tǒng)一設(shè)置為32 k,從中選擇最優(yōu)作為基線實驗,實驗結(jié)果和詞表大小分別如表2和表3所示。
表2 傳統(tǒng)藏文詞表構(gòu)建方法實驗效果BLEU值對比
表3 傳統(tǒng)藏文詞表構(gòu)建方法詞表大小對比 單位:個
由表2可知直接構(gòu)建方法效果最差,并且詞表規(guī)模也過于龐大,不利于訓(xùn)練。分詞后采用BPE效果最佳。表3表明直接使用BPE可以在一定程度上縮小藏文詞表規(guī)模。詞表規(guī)模越小,詞表中每個單詞所代表的語義更少且易于區(qū)分,出現(xiàn)稀有token的概率也會更低。同時訓(xùn)練和預(yù)測時間也會減少,有利于訓(xùn)練。這是由于藏文本身語言特點所決定的,但是本文既希望達(dá)到最佳實驗效果,又希望能減小詞表大小,從而有利于訓(xùn)練。因此本文以分詞后采用BPE作為基線實驗,分別從詞表拼接和VOLT這2個方面進(jìn)行實驗對比,研究最佳詞匯表的生成。
對于詞表拼接,詞頻閾值每次迭代大小設(shè)置為100。實驗表明,當(dāng)詞頻閾值為4300時,效果提升最明顯。表4展示了當(dāng)詞頻閾值為100、1000、5000、4300(最佳)時的實驗效果,對應(yīng)的詞表大小如表5所示。
表4 不同閾值大小的實驗效果BLEU值對比
表5 不同閾值大小的詞表規(guī)模對比 單位:個
通過表4可以看出,采用高頻正常、低頻BPE拼接詞表的思想是有效果的,采用最佳詞頻閾值相比基線實驗分別在藏漢/漢藏上提升了0.28/0.32個BLEU值。同時表5中對應(yīng)的詞表規(guī)模也小于基線實驗,與表3中藏文只使用BPE方式生成的詞表規(guī)模相近,不僅縮小了藏漢詞表規(guī)模而且提升了藏漢雙向翻譯性能。由于模型訓(xùn)練所產(chǎn)生的開銷較大,無法將迭代閾值位數(shù)繼續(xù)縮小,因此很難找到個、十位數(shù)的最佳閾值。
對于VOLT,實驗參數(shù)與論文中保持一致。本節(jié)分別對藏文傳統(tǒng)分詞策略(分詞+BPE)以及本文專門針對藏文使用VOLT所提的方法(直接BPE)在應(yīng)用VOLT前后進(jìn)行實驗對比。實驗結(jié)果如表6所示,2種方法生成詞表規(guī)模如表7所示。
表6 2種方法使用VOLT前后效果BLEU值對比
表7 2種方法使用VOLT前后生成詞表規(guī)模對比 單位:個
表6和表7的實驗效果驗證了本文方法的有效性。觀察表6最后2行,藏文直接BPE方式相比于分詞加BPE,在藏漢和漢藏上分別提升了0.09/0.11個BLEU值。觀察2種方法在使用VOLT前后效果提升程度,分詞加BPE方式在使用VOLT后在藏漢上提升了0.46個BLEU值,在漢藏上提升了0.43個BLEU值。直接BPE方式在使用VOLT后在藏漢上提升了0.98個BLEU值,在漢藏上提升了1.18個BLEU值。前者提升效果只有后者一半。觀察2種方法在使用VOLT前后詞表大小,因為漢文生成詞表方式未變,所以二者漢文詞表規(guī)模相同,并且相比基線詞表規(guī)模降低了45.8%。而在藏文詞表規(guī)模上,相比使用VOLT前,直接BPE詞表規(guī)模降低了73.3%,分詞加BPE詞表規(guī)模降低了70.2%。
實驗結(jié)果表明,使用VOLT可以在極大縮小詞表規(guī)模的同時提升翻譯效果。雖然直接BPE相比分詞加BPE方式提升幅度較小,平均只有0.1個BLEU值,但直接BPE在使用VOLT后提升幅度是分詞加BPE的一倍多。這主要是由于藏文句子信息熵改變導(dǎo)致的,對于分詞后使用BPE,句子本身經(jīng)過分詞后,信息熵就已經(jīng)發(fā)生了變化,而使用VOLT生成詞表主要依據(jù)之一就是信息熵,因此導(dǎo)致直接BPE方式提升幅度較大。其次是由于目前藏文的分詞系統(tǒng)并不如漢文的分詞系統(tǒng)完善,對藏文虛詞和實詞的劃分并沒有達(dá)到較高的精確度,導(dǎo)致去掉分詞步驟后,經(jīng)過VOLT生成的詞表反而效果更好。對于詞表規(guī)模,表3和表7表明藏文語言特點決定了直接使用BPE方式生成的子詞粒度更小,從而導(dǎo)致詞表規(guī)模更小,而在使用VOLT后將這一差距進(jìn)一步擴(kuò)大。
本文選取在神經(jīng)機(jī)器翻譯中經(jīng)典的Transformer-big模型,通過改進(jìn)字節(jié)對編碼和VOLT的方式探索藏文最佳詞匯表,最終分別通過拼接詞表和根據(jù)藏文自身語言特點合理運用VOLT提升了藏漢雙向翻譯性能。筆者希望本文能對其他低資源語種翻譯有所啟發(fā)。下一步筆者將計劃構(gòu)建相對應(yīng)的藏漢人名、地名詞表,以此提高藏漢翻譯中對專有名詞的識別率。