多語言機器翻譯 2 編解碼器結構

2021-10-21 11:06:00 字數 3393 閱讀 1130

在⾃然語⾔處理的很多應用中,輸⼊和輸出都可以是不定長序列。以機器翻譯為例,輸⼊可以是⼀段不定長的英語文字序列,輸出可以是一段不定長的法語文字序列,例如:

英語輸入:「they」、「are」、「watching」、「.」

法語輸出:「ils」、「regardent」、「.」

輸入和輸出都是不定長序列時,我們可以使用編碼器—解碼器(encoder-decoder)或者 seq2seq模型 。這兩個模型本質上都用到了兩個迴圈神經網路(或transformer),分別叫做編碼器和解碼器。編碼器用來分析輸入序列,解碼器⽤來生成輸出序列。

下圖描述了使用編碼器—解碼器將上述英語句子翻譯成法語句子的一種⽅法。在訓練資料集中,我們可以在每個句子後附上特殊符號「」(end of sequence)以表示序列的終止。編碼器每個時間步的輸⼊依次為英語句子中的單詞、標點和特殊符號「」。下圖中使用了編碼器在最終時間步的隱藏狀態作為輸入句子的表徵或編碼資訊。解碼器在各個時間步中使用輸入句子的編碼資訊和上個時間步的輸出以及隱藏狀態作為輸⼊。我們希望解碼器在各個時間步能正確依次輸出翻譯後的法語單詞、標點和特殊符號""。需要注意的是,解碼器在最初時間步的輸⼊⽤到了乙個表示序列開始的特殊符號" "(beginning of sequence)。 (訓練的時候,解碼器的輸入右移一位,前面新增開始符號,也可以上一時刻的輸出作為下一時刻的輸入;測試的時候是上一時刻的輸出作為下一時刻的輸入)。

編碼器的作用是把⼀個不定長的輸入序列變換成乙個定長的上下文變數c(context vector) ,並在該上下文向量中編碼輸⼊序列資訊。常用的編碼器是迴圈神經網路(或 transformer encoder)。

讓我們考慮batch_size=1的時序資料樣本。假設輸入序列是x1,

...,

xtx_1,...,x_t

x1​,..

.,xt

​,例如x

ix_i

xi​是輸入句子中的第i個詞。在時間步t,迴圈神經⽹絡將輸⼊x

tx_t

xt​的特徵向量和上個時間步的隱藏狀態ht−

1h_ht−1

​變換為當前時間步的隱藏狀態h

th_t

ht​.我們可以⽤函式f表達迴圈神經網路隱藏層的變換:

接下來,編碼器通過⾃定義函式q將各個時間步的隱藏狀態變換為上下文向量:

例如,當選擇q(h

1,..

.,ht

)=ht

q(h_1,...,h_t)=h_t

q(h1​,

...,

ht​)

=ht​

, 上下文向量是輸入序列最終時間步的隱藏狀態h

th_t

ht​。

以上描述的編碼器是⼀個單向的迴圈神經網路,每個時間步的隱藏狀態只取決於該時間步及之前的輸⼊⼦序列。我們也可以使⽤雙向迴圈神經網路構造編碼器(可以是多層)。在這種情況下,編碼器每個時間步的隱藏狀態同時取決於該時間步之前和之後的⼦序列(包括當前時間步的輸入),並編碼了整個序列的資訊。

剛剛已經介紹,編碼器輸出的上下文向量c編碼了整個輸入序列x1,

...,

xtx_1,...,x_t

x1​,..

.,xt

​的資訊。給定訓練樣本中的輸出序列y1,

...,

yt′y_1,...,y_

y1​,..

.,yt

′​, 對於每個時間步t′t'

t′(符號與輸入序列或編碼器的時間步t有區別),解碼器輸出yt′

y_yt

′​的條件概率將基於之前的輸出序列y1,

...,

yt′−

1y_1,...,y_

y1​,..

.,yt

′−1​

和上下文向量c, 即p(y

t′∣y

1,..

.,yt

′−1,

c)p(y_|y_1,...,y_,c)

p(yt′​

∣y1​

,...

,yt′

−1​,

c).為此,我們可以使用另乙個迴圈神經網路作為解碼器。在輸出序列的時間步t′t'

t′,解碼器將上一時間步的輸出yt′

−1y_yt

′−1​

、上下文向量c,以及上一時間步的隱藏狀態st′

−1s_st

′−1​

作為輸入得到當前時間步的隱藏狀態st′

s_st

′​. 因此,我們可以用函式g表達解碼器隱藏層的變換(**階段):

有了解碼器的隱藏狀態後 ,我們可以使用自定義的輸出層和softmax運算來計算p(y

t′∣y

1,..

.,yt

′−1,

c)p(y_|y_1,...,y_,c)

p(yt′​

∣y1​

,...

,yt′

−1​,

c), 例如,基於當前時間步的解碼器隱藏狀態st′

s_st

′​來計算當前時間步輸出yt′

y_yt

′​的概率分布(輸出層 softmax)。

根據最大似然估計,我們可以最大化輸出序列基於輸入序列的條件概率:

並得到該輸出序列的損失:

在模型訓練中,所有輸出序列損失的均值通常作為需要最⼩化的損失函式。在上圖所描述的模型**過程中,我們需要將解碼器在上乙個時間步的輸出作為當前時間步的輸入。與此不同,在訓練過程中我們也可以將標籤序列(訓練集的真實輸出序列)在上乙個時間步的標籤作為解碼器在當前時間步的輸入。這叫作強制教學(teacher forcing)(訓練階段強制教學:解碼器的輸入為真實標籤序列右移一位,前面加上起始符)。

1)編碼器-解碼器(seq2seq)可以輸⼊並輸出不定長的序列。

2)編碼器—解碼器可以使⽤兩個迴圈神經⽹絡實現。

3)在編碼器—解碼器的訓練過程中,可以採⽤強制教學也可以採用**階段的方式。

php gettext 多語言翻譯

1 在window與linux下的多語言切換有些區別,主要putenv的設定區別。在window下echo setlocale lang zh cn 而在linux下如果支援該語言,則會輸出設定的內容 windows的php translate include once include setlan...

Qt多語言翻譯示例

乙個基礎的翻譯示例和一些注意事項 示例目錄 qttranslation languages en.qm en.ts languages.qrc zh cn.qm zh cn.ts main.cpp qttranslation.promain.cpp include include include i...

機器翻譯的前世今生(2)

在 機器翻譯的前世今生 1 中我們提到,基於例項的機器翻譯 embt 給機器翻譯界帶來了新的希望 我們將不再需要自己構建規則,我們只需要將已有的翻譯交給機器。然而,在革命的第一步邁出短短5年後,統計機器翻譯 smt 出現了。90年代早期,ibm研究中心研發出一種機器翻譯系統,它在大量雙語平行語料基礎...