網(wǎng)絡(luò)解碼器采用的技術(shù)特點(diǎn)
點(diǎn)擊次數(shù):1251 更新時(shí)間:2019-05-14
網(wǎng)絡(luò)解碼器是一個(gè)很成功的翻譯模型。這個(gè)模型接受一個(gè)序列作為輸入,并將序列中的信息編碼為中間表示。然后解碼器解碼中間表示為目標(biāo)語(yǔ)言。在我們的這個(gè)項(xiàng)目中,輸入序列是法語(yǔ)句子,輸出是相應(yīng)的英語(yǔ)翻譯。
在我們深入網(wǎng)絡(luò)解碼器如何工作之前,我們需要了解下模型是如何表示我們的數(shù)據(jù)的。在對(duì)模型的工作機(jī)制一無(wú)所知的情況下,我們可以合理地推測(cè)如果我們給模型一個(gè)法語(yǔ)句子,模型能給我們對(duì)應(yīng)的英語(yǔ)句子。也就是說(shuō),輸入一個(gè)單詞序列,模型應(yīng)該輸出另一個(gè)單詞序列。然而,模型只不過(guò)是一組參數(shù),在輸入上進(jìn)行多種運(yùn)算。模型并不知道什么是單詞。類(lèi)似ASCII編碼將字母映射到數(shù)字,我們的單詞也需要轉(zhuǎn)成數(shù)值表是。為此,數(shù)據(jù)集中的每個(gè)的單詞需要有一個(gè)的索引。模型接受的實(shí)際上不是一個(gè)單詞序列,而是一個(gè)索引序列。
一次傳入一個(gè)句子,這沒(méi)什么問(wèn)題。不過(guò),怎樣才能一次傳入多個(gè)句子以加速訓(xùn)練過(guò)程呢?句子長(zhǎng)短不一。這些數(shù)字序列又該如何組織呢?答案是輸入序列將表示為維度等于(batch大小 × 大句子長(zhǎng)度)的張量(矩陣)。這樣就可以一次輸入一組句子,短于數(shù)據(jù)集中長(zhǎng)句的句子可以用事先確定的“補(bǔ)齊索引”補(bǔ)齊。
回顧下編碼器輸出張量,序列維度的每一項(xiàng)保存了RNN輸出的向量。注意力模塊就批次中的每個(gè)樣本在序列維度上取這些向量的加權(quán)和。這樣,每個(gè)樣本得到一個(gè)向量,表示當(dāng)前輸出序列步驟計(jì)算所需的相關(guān)信息。
下面我們將舉一個(gè)具體的例子。如果輸入句子的個(gè)單詞包含了給定輸出單詞所需的所有重要的信息,那么個(gè)單詞分配的權(quán)重是一,其他各項(xiàng)權(quán)重為零。也就是加權(quán)向量等于輸入句子的個(gè)單詞對(duì)應(yīng)的向量。
模型需要學(xué)習(xí)如何分配這些權(quán)重,所以我們使用了一個(gè)全連接層。序列中的每個(gè)單詞對(duì)應(yīng)一個(gè)權(quán)重,所以權(quán)重?cái)?shù)量等于長(zhǎng)句子長(zhǎng)度。權(quán)重之和應(yīng)等于一,所以全連接層將使用softmax激活函數(shù)。注意力模塊將接受網(wǎng)絡(luò)解碼器先前的隱藏狀態(tài)與解碼器前一步輸出的預(yù)測(cè)單詞的詞嵌入的連接作為輸入,從而決定這些權(quán)重的值。