宋純花
(上海建橋?qū)W院,上海 201306)
機(jī)器翻譯[1]是自然語(yǔ)言處理中早期和最迷人的領(lǐng)域之一,旨在開(kāi)發(fā)能夠?qū)⒁环N人類語(yǔ)言翻譯成另一種語(yǔ)言的系統(tǒng),消除語(yǔ)言障礙。文獻(xiàn)[2]提出了一種使用統(tǒng)計(jì)機(jī)器翻譯方法的雙向機(jī)器翻譯系統(tǒng),該系統(tǒng)在調(diào)整后的BLEU 分?jǐn)?shù)為37.10。文獻(xiàn)[3]提出了序列到序列的卷積英語(yǔ)機(jī)器翻譯模型,該模型的BLEU 分?jǐn)?shù)為29.94??梢?jiàn),研究人員大多將統(tǒng)計(jì)學(xué)、基于規(guī)則和基于知識(shí)的方法用于機(jī)器翻譯,而B(niǎo)LEU 得分被認(rèn)為是訪問(wèn)高質(zhì)量的機(jī)器翻譯系統(tǒng)的唯一指標(biāo)。本文使用基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)[4-5]技術(shù)用于英語(yǔ)機(jī)器翻譯模型。與現(xiàn)有的方法相比,這種方法提供了一個(gè)良好的BLEU 分?jǐn)?shù),同時(shí)還使用了其他幾個(gè)指標(biāo)來(lái)評(píng)估系統(tǒng)的質(zhì)量。
神經(jīng)機(jī)器翻譯[6]基本上由兩個(gè)神經(jīng)網(wǎng)絡(luò)[5]組成:一個(gè)是編碼器[4],另一個(gè)是解碼器。
編碼器將源句子S作為一系列向量S=(x1,x2,…)進(jìn)行編碼,也被稱為“思想”。在數(shù)學(xué)上可以表示為:
式中:W和U是權(quán)重;xt是當(dāng)前輸入;ht-1是前一個(gè)隱藏狀態(tài)。
循環(huán)神經(jīng)網(wǎng)絡(luò)[7-8]學(xué)習(xí)將變長(zhǎng)的輸入序列編碼為固定向量,然后將向量解碼為變長(zhǎng)序列。模型學(xué)習(xí)根據(jù)給定的序列p(y1,y2,…,|yT x1,x2,…,xT)進(jìn)行預(yù)測(cè)。數(shù)學(xué)建模如下:
從編碼器的角度來(lái)看:
式中:ht是時(shí)間t的隱藏狀態(tài)和向量;c是隱藏狀態(tài)的綜合。
解碼器根據(jù)上下文詞預(yù)測(cè)下一個(gè)詞。從方程(2)中可以得到解碼器端的P(yi,yi-1,…,y1,x,c)表示為:
式中:yi-1是之前預(yù)測(cè)的目標(biāo);si-1是解碼器的前一個(gè)隱藏狀態(tài);ci是詞的上下文,并且可以用以下數(shù)學(xué)式表示:
標(biāo)準(zhǔn)英語(yǔ)文本翻譯包括以下不同階段:源語(yǔ)言[9]和目標(biāo)語(yǔ)言的預(yù)處理、詞嵌入[9]、編碼、解碼,然后生成目標(biāo)文本。工作流程如圖1 所示。
圖1 工作流程
1)預(yù)處理。語(yǔ)料預(yù)處理是開(kāi)發(fā)任何神經(jīng)機(jī)器翻譯系統(tǒng)中最重要的任務(wù),并行語(yǔ)料的預(yù)處理對(duì)于神經(jīng)或統(tǒng)計(jì)模型的開(kāi)發(fā)至關(guān)重要。其具體步驟包括大小寫轉(zhuǎn)換、分詞和清理。
2)填充句子。預(yù)處理之后,在將文本作為輸入傳遞給循環(huán)神經(jīng)網(wǎng)絡(luò)[10]或LSTM[11]時(shí),某些句子自然會(huì)更長(zhǎng)或更短,它們的長(zhǎng)度不一致,故需要填充句子保證長(zhǎng)度一致。
3)詞嵌入。本文使用GloVe(用于單詞表示的全局向量)有效地學(xué)習(xí)單詞向量,并結(jié)合LSA[12]等矩陣分解技術(shù)和基于局部上下文的學(xué)習(xí),類似于word2vec[13]。
4)編碼器。編碼器負(fù)責(zé)生成代表源語(yǔ)言意義的思考向量或上下文向量。編碼過(guò)程中使用了一些符號(hào)表示:xt是時(shí)間步t的輸入;ht和ct是時(shí)間步t的LSTM 內(nèi)部狀態(tài);yt是時(shí)間步t產(chǎn)生的輸出。
以一個(gè)簡(jiǎn)單句子“How are you,sir?”為例。這個(gè)序列可以被視為由4 個(gè)單詞組成的句子。在這里:x1是“How”,x2是“are”,x3是“you”,x4是“sir”。
該序列將在4 個(gè)時(shí)間步中被讀取,如圖2 所示。
圖2 由LSTM 編碼器讀取的句子
在t=1時(shí),它記住了LSTM 單元讀取了“How”;在t=2時(shí),它回憶起LSTM 讀取了“How are”;在t=4時(shí),最終的狀態(tài)h4和c4記住了完整的序列“How are you,sir?”。
初始狀態(tài)h0和c0被初始化為零向量。編碼器接收上述形式的單詞序列xs=作為輸入,并計(jì)算出思考向量v={hc,vc},其中hc表示最終的外部隱藏狀態(tài),在處理完最后一個(gè)輸入序列后獲得,vc是最終的細(xì)胞狀態(tài)。可以用數(shù)學(xué)表示為vc=cL和vh=hL。
5)上下文向量。上下文向量成為解碼器的起始狀態(tài),LSTM 解碼器不以零作為初始狀態(tài),而是將上下文向量作為初始狀態(tài)。
6)解碼器。編碼器-解碼器的架構(gòu)如圖3 所示。
圖3 編碼器-解碼器的架構(gòu)
解碼器狀態(tài)使用上下文向量v={vh,vc}作為初始化,其中h0=vh和c0=vc,h0和c0∈LSTMdec。上下文向量是連接編碼器和解碼器的重要紐帶,形成端到端學(xué)習(xí)的端到端計(jì)算鏈。
編碼器和解碼器之間唯一共享的是上下文向量v,因?yàn)樗墙獯a器關(guān)于源語(yǔ)言句子的唯一可用信息。通過(guò)以下方程計(jì)算出翻譯句子的第m個(gè)預(yù)測(cè):
所提出的系統(tǒng)訓(xùn)練算法如下:
1)對(duì)源語(yǔ)言和目標(biāo)語(yǔ)言的句子對(duì)進(jìn)行預(yù)處理,xs=x1,x2,…,xL和yt=y1,y2,…,yL,如預(yù)處理部分所述。
2)使用GloVe 嵌入矩陣進(jìn)行詞嵌入。創(chuàng)建一個(gè)嵌入層對(duì)象,embedding_layer=Embedding(num_words,EMBEDDING_SIZE,weights=embedding_matrix)。
3)將源語(yǔ)句xs=x1,x2,…,xLs輸入編碼器,并通過(guò)注意力層在xs的條件下獲取上下文向量v。
4)將解碼器的初始狀態(tài)(h0,c0)設(shè)置為上下文向量v。
5)使用解碼器預(yù)測(cè)與輸入句子xs相對(duì)應(yīng)的目標(biāo)句子使用softmax 函數(shù)計(jì)算第m個(gè)預(yù)測(cè):
式中是詞匯表中第m個(gè)位置的argmax 詞匯。
6)使用分類交叉熵計(jì)算預(yù)測(cè)詞和實(shí)際詞在第m個(gè)位置的損失。損失函數(shù)在時(shí)間t上對(duì)整個(gè)詞匯表進(jìn)行計(jì)算:
式中:j表示詞匯表V中的單詞索引;(yt,j)表示時(shí)間t上單詞j的預(yù)測(cè)概率。
7)通過(guò)更新權(quán)重矩陣(W,U,V)和softmax[14]層來(lái)優(yōu)化編碼器和解碼器,使其損失最小化,可以使用梯度下降或適當(dāng)?shù)膬?yōu)化算法進(jìn)行優(yōu)化。
從概念上講,注意力被視為一個(gè)單獨(dú)的層,它的責(zé)任是為解碼過(guò)程的第i個(gè)時(shí)間步產(chǎn)生ci。ci的計(jì)算過(guò)程如下所示:
式中eij是計(jì)算si時(shí)編碼器的第j個(gè)隱藏狀態(tài)和解碼器的上一個(gè)狀態(tài)的重要性或貢獻(xiàn)因子,其表達(dá)式如下:
1)batch_size:批處理大小應(yīng)該選擇得非常謹(jǐn)慎,因?yàn)樯窠?jīng)機(jī)器翻譯在運(yùn)行時(shí)需要相當(dāng)大的內(nèi)存。
2)num_nodes:表示LSTM 中隱藏節(jié)點(diǎn)的數(shù)量。
3)embedding_size:向量的維度。
1)BLEU 得分
BLEU 得分是通過(guò)計(jì)算機(jī)翻譯輸出與參考翻譯相對(duì)應(yīng)的單詞數(shù)來(lái)計(jì)算的。BLEU 得分在0~1 或0~100 之間,0 表示沒(méi)有匹配,1 表示完全匹配,這對(duì)于所有測(cè)試句子來(lái)說(shuō)是不可能的。BLEU 得分的計(jì)算公式如下:
精度通常偏好較短的句子。這在評(píng)估中引發(fā)了一個(gè)問(wèn)題,即機(jī)器翻譯可能會(huì)為較長(zhǎng)的參考句子生成較短的句子,但仍具有較高的精度。為了避免這種情況,引入了簡(jiǎn)潔度懲罰,其中,Wn是修改后的n-gram 精度pn的權(quán)重。簡(jiǎn)潔度懲罰(bp)的計(jì)算公式如下:
式中:c是候選句子的長(zhǎng)度;r是參考句子的長(zhǎng)度。
2)NIST
NIST 的計(jì)算公式如下:
式中:β是短句懲罰因子的權(quán)重表示所有參考翻譯中的平均詞數(shù);Lsys表示候選句子中的平均詞數(shù)。
3)詞錯(cuò)誤率
詞錯(cuò)誤率是基于Levenshtein 距離的計(jì)算方法[15]。
4)Meteor
首先計(jì)算單字精確率(Unigram Precision),然后計(jì)算單字召回率(Unigram Recall),最后使用調(diào)和平均值將這兩個(gè)值結(jié)合起來(lái)。
對(duì)于較長(zhǎng)的匹配部分,使用懲罰值(penalty):
最終得分計(jì)算如下:
模型經(jīng)過(guò)多次模擬以獲取多個(gè)評(píng)估指標(biāo)的值,如表1 所示,平均BLEU 分?jǐn)?shù)為45.83。
表1 多個(gè)評(píng)估指標(biāo)的數(shù)值
表1 值的圖形表示如圖4 所示。從圖中可以明顯看出,當(dāng)詞錯(cuò)誤率增加時(shí),BLEU 分?jǐn)?shù)下降;而當(dāng)詞錯(cuò)誤率減少時(shí),BLEU 分?jǐn)?shù)增加。這是因?yàn)殄e(cuò)誤越多,詞錯(cuò)誤率越高,BLEU 分?jǐn)?shù)越低;當(dāng)詞錯(cuò)誤率較低時(shí),表示翻譯質(zhì)量較好,所以BLEU 分?jǐn)?shù)較高。
圖4 圖表化各種指標(biāo)
神經(jīng)機(jī)器翻譯是機(jī)器翻譯研究中的一種新范式。本文提出了一種基于LSTM 的深度學(xué)習(xí)編碼-解碼模型。研究中使用了Bahdanau 注意機(jī)制[16]。為了評(píng)估所提出系統(tǒng)的效率,本文使用了多個(gè)自動(dòng)評(píng)估指標(biāo),如BLEU、F-measure、NIST、WER 等。經(jīng)過(guò)大量模擬得出,所提出的系統(tǒng)平均BLEU 分?jǐn)?shù)為45.83。