精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

PaddlePaddle深度學(xué)習(xí)實(shí)戰(zhàn)——英法文翻譯機(jī)

人工智能 深度學(xué)習(xí)
自然語言處理[1]是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的另一個(gè)重要方向,其中很重要的一點(diǎn)就是語音識(shí)別(speech recognition)、機(jī)器翻譯、智能機(jī)器人。

自然語言處理[1]是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域中的另一個(gè)重要方向,其中很重要的一點(diǎn)就是語音識(shí)別(speech recognition)、機(jī)器翻譯、智能機(jī)器人。
與語言相關(guān)的技術(shù)可以應(yīng)用在很多地方。例如,日本的富國生命保險(xiǎn)公司花費(fèi)170萬美元安裝人工智能系統(tǒng),把客戶的語言轉(zhuǎn)換為文本,并分析這些詞是正面的還是負(fù)面的。這些自動(dòng)化工作將幫助人類更快地處理保險(xiǎn)業(yè)務(wù)。除此之外,現(xiàn)在的人工智能公司也在把智能客服作為重點(diǎn)的研究方向。

與圖像識(shí)別不同,在自然語言處理中輸入的往往是一段語音或者一段文字,輸入數(shù)據(jù)的長短是不確定的,并且它與上下文有很密切的關(guān)系,所以常用的是循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)模型。

在本節(jié)里,我們將分別介紹自然語言模型的選擇、神經(jīng)機(jī)器翻譯的原理,最后,用200余行PaddlePaddle代碼手把手帶領(lǐng)大家做一個(gè)英法翻譯機(jī)。

自然語言處理模型的選擇

下面我們就來介紹使用不同輸入和不同數(shù)據(jù)時(shí),分別適用哪種模型以及如何應(yīng)用。

在下圖中,每一個(gè)矩形是一個(gè)向量,箭頭則表示函數(shù)(如矩陣相乘)。最下面一行為輸入向量,最上面一行為輸出向量,中間一行是RNN的狀態(tài)。

圖中從左到右分別表示以下幾種情況。

(1)一對(duì)一:沒有使用RNN,如Vanilla模型,從固定大小的輸入得到固定大小輸出(應(yīng)用在圖像分類)。

(2)一對(duì)多:以序列輸出(應(yīng)用在圖片描述,輸入一張圖片輸出一段文字序列,這種往往需要CNN和RNN相結(jié)合,也就是圖像和語言相結(jié)合,詳見第12章)。

 

(3)多對(duì)一:以序列輸入(應(yīng)用在情感分析,輸入一段文字,然后將它分類成積極或者消極情感,如淘寶下某件商品的評(píng)論分類),如使用LSTM。

(4)多對(duì)多:異步的序列輸入和序列輸出(應(yīng)用在機(jī)器翻譯,如一個(gè)RNN讀取一條英文語句,然后將它以法語形式輸出)。

(5)多對(duì)多:同步的序列輸入和序列輸出(應(yīng)用在視頻分類,對(duì)視頻中每一幀打標(biāo)記)。

我們注意到,在上述講解中,因?yàn)橹虚gRNN的狀態(tài)的部分是固定的,可以多次使用,所以不需要對(duì)序列長度進(jìn)行預(yù)先特定約束。更詳細(xì)的討論參見Andrej Karpathy的文章《The Unreasonable Effectiveness of Recurrent Neural Networks》[2]。

自然語言處理通常包括語音合成(將文字生成語音)、語音識(shí)別、聲紋識(shí)別(聲紋鑒權(quán)),以及它們的一些擴(kuò)展應(yīng)用,以及文本處理,如分詞、情感分析、文本挖掘等。

神經(jīng)機(jī)器翻譯原理

機(jī)器翻譯的作用就是將一個(gè)源語言的序列(如英文Economic growth has slowed down in recent years)轉(zhuǎn)化成目標(biāo)語言序列(如法文La croissance economique sest ralentie ces dernieres annees)。其中翻譯機(jī)器是需要利用已有的語料庫(Corpora)來進(jìn)行訓(xùn)練。

所謂的神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯就是利用神經(jīng)網(wǎng)絡(luò)來實(shí)現(xiàn)上述的翻譯機(jī)器。基于神經(jīng)網(wǎng)絡(luò)的很多技術(shù)都是從Bengio的那篇開創(chuàng)性論文[3]衍生出來的。這里我們介紹在機(jī)器翻譯中最常用的重要技術(shù)及演進(jìn)。

自然語言處理模型演進(jìn)概覽

我們知道正如卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural network,CNN)的演進(jìn)從LeNet到AlexNet,再到VggNet、GoogLeNet,最后到ResNet,演進(jìn)的方式有一定規(guī)律,并且也在ImageNet LSVRC競(jìng)賽上用120萬張圖片、1000類標(biāo)記上取得了很好的成績。循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural networks,RNN)的演進(jìn)從vanilla RNN到隱藏層結(jié)構(gòu)精巧的GRU和LSTM,再到雙向和多層的Deep Bidirectional RNN,都有一些結(jié)構(gòu)和演化脈絡(luò),下面我們就首先來探討。

Original LSTM

1997年Hochreiter和Schmidhuber首先提出了LSTM的網(wǎng)絡(luò)結(jié)構(gòu),解決了傳統(tǒng)RNN對(duì)于較長的序列數(shù)據(jù),訓(xùn)練過程中容易出現(xiàn)梯度消失或爆炸的現(xiàn)象。Original LSTM的結(jié)構(gòu)如下:

 

Standard LSTM

但是,傳統(tǒng)的LSTM存在一個(gè)問題:隨著時(shí)間序列的增多,LSTM網(wǎng)絡(luò)沒有重置機(jī)制(比如兩句話合成一句話作為輸入的話,希望是在第一句話結(jié)束的時(shí)候進(jìn)行重置),從而導(dǎo)致cell state容易發(fā)生飽和;另一方面輸出h趨近于1,導(dǎo)致cell的輸出近似等于output gate的輸出,意味著網(wǎng)絡(luò)喪失了memory的功能。相比于簡單的循環(huán)神經(jīng)網(wǎng)絡(luò),LSTM增加了記憶單元、輸入門、遺忘門及輸出門。這些門及記憶單元組合起來大大提升了循環(huán)神經(jīng)網(wǎng)絡(luò)處理長序列數(shù)據(jù)的能力。

Standard LSTM的結(jié)構(gòu)如下:

 

圖[4]

GRU[5]

相比于簡單的RNN,LSTM增加了記憶單元(memory cell)、輸入門(input gate)、遺忘門(forget gate)及輸出門(output gate),這些門及記憶單元組合起來大大提升了RNN處理遠(yuǎn)距離依賴問題的能力。

GRU是Cho等人在LSTM上提出的簡化版本,也是RNN的一種擴(kuò)展,如下圖所示。GRU單元只有兩個(gè)門:

- 重置門(reset gate):如果重置門關(guān)閉,會(huì)忽略掉歷史信息,即歷史不相干的信息不會(huì)影響未來的輸出。

- 更新門(update gate):將LSTM的輸入門和遺忘門合并,用于控制歷史信息對(duì)當(dāng)前時(shí)刻隱層輸出的影響。如果更新門接近1,會(huì)把歷史信息傳遞下去。

 

 

GRU(門控循環(huán)單元)

一般來說,具有短距離依賴屬性的序列,其重置門比較活躍;相反,具有長距離依賴屬性的序列,其更新門比較活躍。GRU雖然參數(shù)更少,但是在多個(gè)任務(wù)上都和LSTM有相近的表現(xiàn)。

雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

雙向循環(huán)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的目的是輸入一個(gè)序列,得到其在每個(gè)時(shí)刻的特征表示,即輸出的每個(gè)時(shí)刻都用定長向量表示到該時(shí)刻的上下文語義信息。

具體來說,該雙向循環(huán)神經(jīng)網(wǎng)絡(luò)分別在時(shí)間維以順序和逆序——即前向(forward)和后向(backward)——依次處理輸入序列,并將每個(gè)時(shí)間步RNN的輸出拼接成為最終的輸出層。這樣每個(gè)時(shí)間步的輸出節(jié)點(diǎn),都包含了輸入序列中當(dāng)前時(shí)刻完整的過去和未來的上下文信息。

下圖展示的是一個(gè)按時(shí)間步展開的雙向循環(huán)神經(jīng)網(wǎng)絡(luò)。該網(wǎng)絡(luò)包含一個(gè)前向和一個(gè)后向RNN,其中有六個(gè)權(quán)重矩陣:輸入到前向隱層和后向隱層的權(quán)重矩陣(W1,W3W1,W3),隱層到隱層自己的權(quán)重矩陣(W2,W5W2,W5),前向隱層和后向隱層到輸出層的權(quán)重矩陣(W4,W6W4,W6)。注意,該網(wǎng)絡(luò)的前向隱層和后向隱層之間沒有連接。

 

 

圖 按時(shí)間步展開的雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

seq2seq+Attention

seq2seq模型是一個(gè)翻譯模型,主要是把一個(gè)序列翻譯成另一個(gè)序列。它的基本思想是用兩個(gè)RNNLM,一個(gè)作為編碼器,另一個(gè)作為解碼器,組成RNN編碼器-解碼器。

在文本處理領(lǐng)域,我們常用編碼器-解碼器(encoder-decoder)框架,如圖所示。

 

這是一種適合處理由一個(gè)上下文(context)生成一個(gè)目標(biāo)(target)的通用處理模型。因此,對(duì)于一個(gè)句子對(duì)<X, Y>,當(dāng)輸入給定的句子X,通過編碼器-解碼器框架來生成目標(biāo)句子Y。X和Y可以是不同語言,這就是機(jī)器翻譯;X和Y可以是對(duì)話的問句和答句,這就是聊天機(jī)器人;X和Y可以是圖片和這個(gè)圖片的對(duì)應(yīng)描述(看圖說話)。

X由x1、x2等單詞序列組成,Y也由y1、y2等單詞序列組成。編碼器對(duì)輸入的X進(jìn)行編碼,生成中間語義編碼C,然后解碼器對(duì)中間語義編碼C進(jìn)行解碼,在每個(gè)i時(shí)刻,結(jié)合已經(jīng)生成的y1, y2,…, yi-1的歷史信息生成Yi。但是,這個(gè)框架有一個(gè)缺點(diǎn),就是生成的句子中每一個(gè)詞采用的中間語義編碼是相同的,都是C。因此,在句子比較短的時(shí)候,還能比較貼切,句子長時(shí),就明顯不合語義了。

在實(shí)際實(shí)現(xiàn)聊天系統(tǒng)的時(shí)候,一般編碼器和解碼器都采用RNN模型以及RNN模型的改進(jìn)模型LSTM。當(dāng)句子長度超過30以后,LSTM模型的效果會(huì)急劇下降,一般此時(shí)會(huì)引入Attention模型,對(duì)長句子來說能夠明顯提升系統(tǒng)效果。

Attention機(jī)制是認(rèn)知心理學(xué)層面的一個(gè)概念,它是指當(dāng)人在做一件事情的時(shí)候,會(huì)專注地做這件事而忽略周圍的其他事。例如,人在專注地看這本書,會(huì)忽略旁邊人說話的聲音。這種機(jī)制應(yīng)用在聊天機(jī)器人、機(jī)器翻譯等領(lǐng)域,就把源句子中對(duì)生成句子重要的關(guān)鍵詞的權(quán)重提高,產(chǎn)生出更準(zhǔn)確的應(yīng)答。

增加了Attention模型的編碼器-解碼器框架如下圖所示。

現(xiàn)在的中間語義編碼變成了不斷變化的Ci,能夠生產(chǎn)更準(zhǔn)確的目標(biāo)Yi。

 

目標(biāo)結(jié)果展示[6]

以中英翻譯(中文翻譯到英文)的模型為例,當(dāng)模型訓(xùn)練完畢時(shí),如果輸入如下已分詞的中文句子:

這些 是 希望 的 曙光 和 解脫 的 跡象 .

如果設(shè)定顯示翻譯結(jié)果的條數(shù)為3,生成的英語句子如下:

0 -5.36816 These are signs of hope and relief . <e>

1 -6.23177 These are the light of hope and relief . <e>

2 -7.7914 These are the light of hope and the relief of hope . <e>

左起第一列是生成句子的序號(hào);左起第二列是該條句子的得分(從大到小),分值越高越好;左起第三列是生成的英語句子。 另外有兩個(gè)特殊標(biāo)志:<e>表示句子的結(jié)尾,<unk>表示未登錄詞(unknown word),即未在訓(xùn)練字典中出現(xiàn)的詞。

PaddlePaddle最佳實(shí)踐[7]

下面我們就來用200余行代碼構(gòu)建一個(gè)英法文翻譯機(jī)。

數(shù)據(jù)集及數(shù)據(jù)預(yù)處理

本次實(shí)踐使用WMT-14[8]數(shù)據(jù)集中的bitexts(after selection)作為訓(xùn)練集,dev+test data作為測(cè)試集和生成集。

數(shù)據(jù)集格式如下:

bitexts.selected數(shù)據(jù)集,共12075604行,有大量的并行數(shù)據(jù)的英文/法文對(duì),約850M法文單詞。這個(gè)數(shù)據(jù)是相當(dāng)嘈雜的,是神經(jīng)網(wǎng)絡(luò)訓(xùn)練的一大挑戰(zhàn)。因此,官方已經(jīng)執(zhí)行了數(shù)據(jù)選擇來提取最合適的數(shù)據(jù)。

“pc”之后的數(shù)字表示百分比。 一般我們基于短語的基準(zhǔn)系統(tǒng)僅在這些數(shù)據(jù)上進(jìn)行訓(xùn)練。

ep7_pc45 Europarl版本7 (27.8M)

nc9 新聞評(píng)論版本9 (5.5M)

2008年至2011年的dev08_11舊開發(fā)數(shù)據(jù) (0.3M)

抓取常見抓取數(shù)據(jù) (90M)

ccb2_pc30 10 ^ 9平行語料庫 (81M)

un2000_pc34 聯(lián)合國語料庫 (143M)
下載后的數(shù)據(jù)文件如下:

 

我們打開Europarl版本7(ep7_pc45)數(shù)據(jù)一探究竟。

less ep7_pc45.en

 

可以看到,英文版本的第8行:Me ?

less ep7_pc45.fr

 

可以看到,對(duì)應(yīng)法文版本的第8行Moi ?

因?yàn)橥暾臄?shù)據(jù)集數(shù)據(jù)量較大,為了驗(yàn)證訓(xùn)練流程,PaddlePaddle接口paddle.dataset.wmt14中默認(rèn)提供了一個(gè)經(jīng)過預(yù)處理的較小規(guī)模的數(shù)據(jù)集(wmt14)。該數(shù)據(jù)集有193319條訓(xùn)練數(shù)據(jù),6003條測(cè)試數(shù)據(jù),詞典長度為30000。我們可以在這個(gè)數(shù)據(jù)集上對(duì)模型進(jìn)行實(shí)驗(yàn);但真正需要訓(xùn)練,還是建議采用原始數(shù)據(jù)集。

我們對(duì)這個(gè)較小規(guī)模的數(shù)據(jù)集進(jìn)行預(yù)處理。預(yù)處理后的文件如下:

 

預(yù)處理流程包括3步:

1.將每個(gè)源語言到目標(biāo)語言的平行語料庫文件合并為一個(gè)文件;

2.合并每個(gè)XXX.src和XXX.trg文件為XXX。 - XXX中的第i行內(nèi)容為XXX.src中的第i行和XXX.trg中的第i行連接,用'\t'分隔。 如train和test中處理后如下,下圖每一行是一句法文和英文的平行語料,紅框處代表兩句之間用’\t’的分隔:

 

3.創(chuàng)建訓(xùn)練數(shù)據(jù)的“源字典”和“目標(biāo)字典”。每個(gè)字典都有DICTSIZE個(gè)單詞,包括:語料中詞頻最高的(DICTSIZE - 3)個(gè)單詞,和3個(gè)特殊符號(hào)<s>(序列的開始)、<e>(序列的結(jié)束)和<unk>(未登錄詞)。得到的src.dict(法文詞典)和trg.dict(英文詞典)分別如下:

 

最佳實(shí)踐[9]

數(shù)據(jù)處理好后,接下來我們就開始編寫代碼搭建神經(jīng)網(wǎng)絡(luò)及訓(xùn)練。[10]

paddle初始化

首先,進(jìn)行paddle的初始化,直接導(dǎo)入Python版本的Paddle庫,和TensorFlow很相似。

# 加載 paddle的python包

import sys

import paddle.v2 as paddle

# 配置只使用cpu,并且使用一個(gè)cpu進(jìn)行訓(xùn)練

paddle.init(use_gpu=False, trainer_count=1)

# 訓(xùn)練模式False,生成模式True

is_generating = False

全局變量及超參數(shù)定義

這里,因?yàn)槲覀儗?duì)數(shù)據(jù)預(yù)處理做了30000維的數(shù)據(jù)字典,所以在全局變量中也填寫對(duì)應(yīng)的值。

dict_size = 30000 # 字典維度

source_dict_dim = dict_size # 源語言字典維度

target_dict_dim = dict_size # 目標(biāo)語言字典維度

word_vector_dim = 512 # 詞向量維度

encoder_size = 512 # 編碼器中的GRU隱層大小

decoder_size = 512 # 解碼器中的GRU隱層大小

beam_size = 3 # 柱寬度

max_length = 250 # 生成句子的最大長度

構(gòu)建模型

首先,構(gòu)建編碼器框架:

輸入是一個(gè)文字序列,被表示成整型的序列。序列中每個(gè)元素是文字在字典中的索引。所以,我們定義數(shù)據(jù)層的數(shù)據(jù)類型為integer_value_sequence(整型序列),序列中每個(gè)元素的范圍是[0, source_dict_dim]。

src_word_id = paddle.layer.data(

name='source_language_word',

type=paddle.data_type.integer_value_sequence(source_dict_dim))

將上述編碼映射到低維語言空間的詞向量s。

src_embedding = paddle.layer.embedding(

input=src_word_id, size=word_vector_dim)

用雙向GRU編碼源語言序列,拼接兩個(gè)GRU的編碼結(jié)果得到h。

src_forward = paddle.networks.simple_gru(

input=src_embedding, size=encoder_size)

src_backward = paddle.networks.simple_gru(

input=src_embedding, size=encoder_size, reverse=True)

encoded_vector = paddle.layer.concat(input=[src_forward, src_backward])

接著,構(gòu)建基于注意力機(jī)制的解碼器框架:

對(duì)源語言序列編碼后的結(jié)果(即上面的encoded_vector),過一個(gè)前饋神經(jīng)網(wǎng)絡(luò)(Feed Forward Neural Network),得到其映射。

encoded_proj = paddle.layer.fc(

act=paddle.activation.Linear(),

size=decoder_size,

bias_attr=False,

input=encoded_vector)

構(gòu)造解碼器RNN的初始狀態(tài)。

backward_first = paddle.layer.first_seq(input=src_backward)

decoder_boot = paddle.layer.fc(

size=decoder_size,

act=paddle.activation.Tanh(),

bias_attr=False,

input=backward_first)

定義解碼階段每一個(gè)時(shí)間步的RNN行為。

def gru_decoder_with_attention(enc_vec, enc_proj, current_word):

decoder_mem = paddle.layer.memory(

name='gru_decoder', size=decoder_size, boot_layer=decoder_boot)

context = paddle.networks.simple_attention(

encoded_sequence=enc_vec,

encoded_proj=enc_proj,

decoder_state=decoder_mem)

decoder_inputs = paddle.layer.fc(

act=paddle.activation.Linear(),

size=decoder_size * 3,

bias_attr=False,

input=[context, current_word],

layer_attr=paddle.attr.ExtraLayerAttribute(

error_clipping_threshold=100.0))

gru_step = paddle.layer.gru_step(

name='gru_decoder',

input=decoder_inputs,

output_mem=decoder_mem,

size=decoder_size)

out = paddle.layer.mixed(

size=target_dict_dim,

bias_attr=True,

act=paddle.activation.Softmax(),

input=paddle.layer.full_matrix_projection(input=gru_step))

return out

那在訓(xùn)練模式下的解碼器如何調(diào)用呢?

首先,將目標(biāo)語言序列的詞向量trg_embedding,直接作為訓(xùn)練模式下的current_word傳給gru_decoder_with_attention函數(shù)。

其次,使用recurrent_group函數(shù)循環(huán)調(diào)用gru_decoder_with_attention函數(shù)。

接著,使用目標(biāo)語言的下一個(gè)詞序列作為標(biāo)簽層lbl,即預(yù)測(cè)目標(biāo)詞。

最后,用多類交叉熵?fù)p失函數(shù)classification_cost來計(jì)算損失值。

代碼如下:

if not is_generating:

trg_embedding = paddle.layer.embedding(

input=paddle.layer.data(

name='target_language_word',

type=paddle.data_type.integer_value_sequence(target_dict_dim)),

size=word_vector_dim,

param_attr=paddle.attr.ParamAttr(name='_target_language_embedding'))

group_inputs.append(trg_embedding)

# For decoder equipped with attention mechanism, in training,

# target embeding (the groudtruth) is the data input,

# while encoded source sequence is accessed to as an unbounded memory.

# Here, the StaticInput defines a read-only memory

# for the recurrent_group.

decoder = paddle.layer.recurrent_group(

name=decoder_group_name,

step=gru_decoder_with_attention,

input=group_inputs)

lbl = paddle.layer.data(

name='target_language_next_word',

type=paddle.data_type.integer_value_sequence(target_dict_dim))

cost = paddle.layer.classification_cost(input=decoder, label=lbl)

那生成(預(yù)測(cè))模式下的解碼器如何調(diào)用呢?

首先,在序列生成任務(wù)中,由于解碼階段的RNN總是引用上一時(shí)刻生成出的詞的詞向量,作為當(dāng)前時(shí)刻的輸入,

其次,使用beam_search函數(shù)循環(huán)調(diào)用gru_decoder_with_attention函數(shù),生成出序列id。

if is_generating:

# In generation, the decoder predicts a next target word based on

# the encoded source sequence and the previous generated target word.

# The encoded source sequence (encoder's output) must be specified by

# StaticInput, which is a read-only memory.

# Embedding of the previous generated word is automatically retrieved

# by GeneratedInputs initialized by a start mark <s>.

trg_embedding = paddle.layer.GeneratedInput(

size=target_dict_dim,

embedding_name='_target_language_embedding',

embedding_size=word_vector_dim)

group_inputs.append(trg_embedding)

beam_gen = paddle.layer.beam_search(

name=decoder_group_name,

step=gru_decoder_with_attention,

input=group_inputs,

bos_id=0,

eos_id=1,

beam_size=beam_size,

max_length=max_length)

訓(xùn)練模型

1.構(gòu)造數(shù)據(jù)定義

我們獲取wmt14的dataset reader。

if not is_generating:

wmt14_reader = paddle.batch(

paddle.reader.shuffle(

paddle.dataset.wmt14.train(dict_size=dict_size), buf_size=8192),

batch_size=5)

2.構(gòu)造trainer

根據(jù)優(yōu)化目標(biāo)cost,網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和模型參數(shù)來構(gòu)造出trainer用來訓(xùn)練,在構(gòu)造時(shí)還需指定優(yōu)化方法,這里使用最基本的SGD方法。

if not is_generating:

optimizer = paddle.optimizer.Adam(

learning_rate=5e-5,

regularization=paddle.optimizer.L2Regularization(rate=8e-4))

trainer = paddle.trainer.SGD(cost=cost,

parameters=parameters,

update_equation=optimizer)

3.構(gòu)造event_handler

可以通過自定義回調(diào)函數(shù)來評(píng)估訓(xùn)練過程中的各種狀態(tài),比如錯(cuò)誤率等。下面的代碼通過event.batch_id % 2 == 0 指定每2個(gè)batch打印一次日志,包含cost等信息。

if not is_generating:

def event_handler(event):

if isinstance(event, paddle.event.EndIteration):

if event.batch_id % 2 == 0:

print "\nPass %d, Batch %d, Cost %f, %s" % (

event.pass_id, event.batch_id, event.cost, event.metrics)

4.啟動(dòng)訓(xùn)練

if not is_generating:

trainer.train(

reader=wmt14_reader, event_handler=event_handler, num_passes=2)

隨后,就可以開始訓(xùn)練了。訓(xùn)練開始后,可以觀察到event_handler輸出的日志如下:

Pass 0, Batch 0, Cost 148.444983, {'classification_error_evaluator': 1.0}

.........

Pass 0, Batch 10, Cost 335.896802, {'classification_error_evaluator': 0.9325153231620789}

.........

預(yù)測(cè)模型

我們加載預(yù)訓(xùn)練的模型,然后從wmt14生成集中讀取樣本,試著生成結(jié)果。

1.加載預(yù)訓(xùn)練的模型

if is_generating:

parameters = paddle.dataset.wmt14.model()

2. 數(shù)據(jù)定義

從wmt14的生成集中讀取前3個(gè)樣本作為源語言句子。

if is_generating:

gen_creator = paddle.dataset.wmt14.gen(dict_size)

gen_data = []

gen_num = 3

for item in gen_creator():

gen_data.append((item[0], ))

if len(gen_data) == gen_num:

break

3. 構(gòu)造infer

根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和模型參數(shù)構(gòu)造出infer用來生成,在預(yù)測(cè)時(shí)還需要指定輸出域field,這里使用生成句子的概率prob和句子中每個(gè)詞的id。

if is_generating:

beam_result = paddle.infer(

output_layer=beam_gen,

parameters=parameters,

input=gen_data,

field=['prob', 'id'])

4.打印生成結(jié)果

根據(jù)源/目標(biāo)語言字典,將源語言句子和beam_size個(gè)生成句子打印輸出。

if is_generating:

# load the dictionary

src_dict, trg_dict = paddle.dataset.wmt14.get_dict(dict_size)

gen_sen_idx = np.where(beam_result[1] == -1)[0]

assert len(gen_sen_idx) == len(gen_data) * beam_size

# -1 is the delimiter of generated sequences.

# the first element of each generated sequence its length.

start_pos, end_pos = 1, 0

for i, sample in enumerate(gen_data):

print(" ".join([src_dict[w] for w in sample[0][1:-1]]))

for j in xrange(beam_size):

end_pos = gen_sen_idx[i * beam_size + j]

print("%.4f\t%s" % (beam_result[0][i][j], " ".join(

trg_dict[w] for w in beam_result[1][start_pos:end_pos])))

start_pos = end_pos + 2

print("\n")

生成開始后,可以觀察到輸出的日志如下:

日志的第一行為源語言的句子。下面的三行分別是分?jǐn)?shù)由高到低排列的生成的英文翻譯結(jié)果。

總結(jié)

這里我們著重講解了自然語言處理當(dāng)中神經(jīng)機(jī)器翻譯的原理,以及如何用200余行PaddlePaddle代碼做一個(gè)英法翻譯機(jī)。更多的,PaddlePaddle在

線性回歸、識(shí)別數(shù)字、圖像分類、詞向量、個(gè)性化推薦、情感分析、語義角色標(biāo)注等各個(gè)領(lǐng)域也有非常成熟的應(yīng)用和簡潔易上手示例,期待和大家一起探討。

1.廣義的自然語言處理包含語音處理及文本處理,狹義的單指理解和處理文本。這里指廣義的概念。 ↑

2.http://karpathy.github.io/2015/05/21/rnn-effectiveness/ ↑

3.《A Neural Probabilistic Language Model》 ↑

4.https://github.com/PaddlePaddle/book/blob/develop/06.understand_sentiment/README.cn.md ↑

5.http://staging.paddlepaddle.org/docs/develop/book/08.machine_translation/index.cn.html#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE ↑

6.http://staging.paddlepaddle.org/docs/develop/book/08.machine_translation/index.cn.html#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE ↑

7.http://staging.paddlepaddle.org/docs/develop/book/08.machine_translation/index.cn.html#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE ↑

8.http://www-lium.univ-lemans.fr/~schwenk/cslm_joint_paper/ ↑

9.http://staging.paddlepaddle.org/docs/develop/book/08.machine_translation/index.cn.html#%E5%8F%82%E8%80%83%E6%96%87%E7%8C%AE ↑

10.https://github.com/PaddlePaddle/book/blob/develop/08.machine_translation/train.py ↑ 

責(zé)任編輯:張燕妮 來源: 51CTO
相關(guān)推薦

2021-11-12 20:45:28

數(shù)字化

2020-04-16 14:40:02

翻譯機(jī)工具開發(fā)者

2018-04-04 10:19:32

深度學(xué)習(xí)

2018-04-02 10:45:11

深度學(xué)習(xí)PaddlePaddl手寫數(shù)字識(shí)別

2018-01-03 15:21:33

百度人工智能翻譯機(jī)

2021-05-29 20:44:27

辦公

2018-03-09 22:56:52

PaddlePaddl

2018-03-26 20:07:25

深度學(xué)習(xí)

2018-07-13 14:31:18

翻譯

2018-03-26 20:14:32

深度學(xué)習(xí)

2018-03-26 21:31:30

深度學(xué)習(xí)

2018-03-26 21:26:50

深度學(xué)習(xí)

2018-04-09 10:20:32

深度學(xué)習(xí)

2018-01-10 22:30:21

2017-02-09 16:39:54

百度

2018-08-14 17:49:30

翻譯機(jī)

2022-12-26 16:34:51

開源云原生
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

青青草原在线免费观看| 欧美精品成人网| 亚洲国产精彩视频| 亚洲精品一二| 亚洲欧洲国产一区| 三上悠亚在线一区| 欧美精品videossex少妇| 99精品久久免费看蜜臀剧情介绍 | 日本中文在线| 国产成人精品一区二区三区四区 | 亚洲精品自产拍| 国内外成人免费在线视频| 日本在线视频中文有码| 久久久精品免费观看| 成人精品视频久久久久| 亚洲免费在线观看av| 国产精品久久久久久麻豆一区软件 | 日本一区精品视频| 色综合咪咪久久| dy888午夜| 久久国产精品高清一区二区三区| 国产一区二区在线电影| 国产va免费精品高清在线观看| 亚洲熟女毛茸茸| 日韩激情网站| 欧美一二三区在线| 爱情岛论坛成人| 成av人片在线观看www| 综合久久久久久久| 日韩一区国产在线观看| 日韩中文字幕免费观看| 蜜臀国产一区二区三区在线播放| 国产91成人在在线播放| 国产性一乱一性一伧一色| 日本一区二区三区视频| 国产视频久久网| 亚洲 欧美 日韩在线| **国产精品| 欧美天堂亚洲电影院在线播放| 少妇人妻在线视频| 黄页网站大全在线免费观看| 亚洲人成网站精品片在线观看| 日韩精品久久一区| 欧美一区二区视频| 91在线视频在线| 97视频热人人精品| 国产高潮流白浆喷水视频| 久久99精品久久久久婷婷| 国产v综合ⅴ日韩v欧美大片| 日日摸天天添天天添破| 国产欧美丝祙| 69视频在线播放| 影音先锋亚洲天堂| 国产日韩欧美一区| 欧美与欧洲交xxxx免费观看| 九一国产在线观看| 宅男噜噜噜66国产日韩在线观看| 久久久久久com| 国产在线拍揄自揄拍| 欧美日本一区二区高清播放视频| 欧美床上激情在线观看| 麻豆亚洲av成人无码久久精品| 午夜电影亚洲| 久久免费少妇高潮久久精品99| 欧美成人手机视频| 亚洲一级影院| 欧美亚洲在线播放| 国产精品免费精品一区| 日韩综合一区二区| 国产精品私拍pans大尺度在线| 成人黄色免费网| 精品伊人久久久久7777人| 亚洲最大成人免费视频| 亚洲AV无码一区二区三区性| 99精品黄色片免费大全| 欧美日韩一区二区三区在线观看免 | 狠狠色丁香九九婷婷综合五月| 成人黄色中文字幕| 亚洲AV无码国产精品午夜字幕| 成人福利视频在线看| 免费在线观看91| 成人影视在线播放| 亚洲人成网站在线| 欧美日韩在线一| 视频一区在线免费看| 在线不卡a资源高清| 国产成人av片| 中文字幕伦av一区二区邻居| 一二美女精品欧洲| 精品97人妻无码中文永久在线| 91久久亚洲| 国产精品三级网站| 亚洲国产精品成人久久蜜臀| 久久久久久久久伊人| 国产美女视频免费| 欧美男男tv网站在线播放| 欧美优质美女网站| 亚洲少妇中文字幕| 日韩理论在线| 久久久久久网站| 凹凸精品一区二区三区| 国产高清不卡二三区| 欧美日韩国产综合在线| 免费av在线网址| 欧美日韩亚洲国产一区| www.成年人| 亚洲精品国产setv| 欧美成人精品一区二区三区| 黄色片网站在线免费观看| 国产在线国偷精品免费看| 久久偷窥视频| 暖暖在线中文免费日本| 欧洲一区在线电影| 在线观看国产三级| 午夜久久免费观看| 国产成人小视频在线观看| 亚洲乱码在线观看| 中文字幕亚洲欧美在线不卡| 亚洲自偷自拍熟女另类| 亚洲精品18| 色噜噜狠狠狠综合曰曰曰88av| www.日本精品| 国产a久久麻豆| 一区二区日本伦理| 亚洲成人看片| 亚洲精品按摩视频| 欧美精品xxxxx| 国产一区二区在线观看免费| 亚洲精品国产一区| 免费成人动漫| 亚洲激情免费观看| 久久久久无码国产精品不卡| 狠狠v欧美v日韩v亚洲ⅴ| 视频一区不卡| 88xx成人免费观看视频库| 亚洲激情成人网| 日本熟妇毛耸耸xxxxxx| 国产精品亚洲成人| 精品一区二区成人免费视频| 国产精品黄色片| 中文字幕不卡在线视频极品| 91porny九色| 久久久久国产精品麻豆| 18岁网站在线观看| 美女福利一区| 91高清免费视频| 天堂成人在线视频| 精品久久久久久亚洲精品| 丰满熟女人妻一区二区三区| 国产一区欧美| 国产高清一区二区三区| 538在线视频| 欧美精品一区二区三区高清aⅴ | 99久re热视频这里只有精品6| 麻豆传媒视频在线| 欧美一区二区视频在线观看2020| 亚洲视频重口味| 国产一区二区调教| 免费人成自慰网站| 欧美大胆a级| 人人做人人澡人人爽欧美| 日本黄在线观看| 91国模大尺度私拍在线视频| 国产探花视频在线播放| 麻豆极品一区二区三区| 麻豆传媒网站在线观看| 成人自拍在线| 欧美中文在线免费| caoporn国产精品免费视频| 欧美日韩精品一区二区三区四区| 欧美一级特黄高清视频| 国产不卡视频一区二区三区| 国产精品国产亚洲精品看不卡| 五月天亚洲色图| 国产精品欧美激情| av毛片在线播放| 亚洲国产精品网站| a片在线免费观看| 亚洲男人电影天堂| 精品视频站长推荐| 日本女人一区二区三区| 久久久无码中文字幕久...| 凹凸成人在线| 日本一区二区在线播放| 免费黄色电影在线观看| 精品久久人人做人人爱| 日本黄色中文字幕| 亚洲欧美欧美一区二区三区| 青青草视频网站| 蜜臀av一区二区三区| 日本免费a视频| 色综合综合网| 亚洲最大成人在线| 韩国美女久久| 欧美成人一区二区三区电影| 国产在线黄色| 日韩欧美视频在线| jizz国产在线| 亚洲国产欧美在线| 男女男精品视频网站| 床上的激情91.| www亚洲成人| 亚洲欧洲一区二区天堂久久| 亚洲国产一区二区三区在线| 国产精品久久久久久久久久白浆| 国产精品视频播放| 天堂√8在线中文| 免费91在线视频| 国产福利在线看| 亚洲成色777777女色窝| 一级黄色录像大片| 欧美性xxxx极品hd欧美风情| 欧美丰满艳妇bbwbbw| 国产欧美日韩综合精品一区二区| 在线中文字日产幕| 国精产品一区一区三区mba桃花| 亚洲熟妇av一区二区三区漫画| 综合激情在线| 亚洲视频小说| 精品久久久亚洲| 精品无人区一区二区三区竹菊| 精品肉辣文txt下载| 91av在线播放| 白白色在线观看| 久色乳综合思思在线视频| 国产在线电影| 亚洲欧美日韩区| 成人免费视频国产免费麻豆| 欧美日本在线观看| 波多野结衣一区二区在线 | 日韩不卡一二区| 欧美电影《轻佻寡妇》| 日韩中文字幕一区| 国产精品欧美日韩一区| 久久久久久欧美精品色一二三四| 一区二区三区在线免费看| 成人午夜激情网| 日韩伦理一区二区| 国产美女91呻吟求| 国产91在线播放精品| 国产成人精品久久二区二区91| 中文字幕乱码中文乱码51精品| 4438全国亚洲精品在线观看视频| 亚洲小说区图片| 精品中文字幕在线| 牛牛电影国产一区二区| 久久久综合av| 国产高清中文字幕在线| 97视频色精品| 麻豆视频在线观看免费网站黄| 91国自产精品中文字幕亚洲| av资源在线播放| 欧美亚洲伦理www| 婷婷午夜社区一区| 国产精品久久久久久久久久三级| 3d欧美精品动漫xxxx无尽| 国产精品电影一区| 久久亚洲国产精品尤物| 成人黄色大片在线免费观看| 国产亚洲久久| 成人综合色站| 欧美日韩大片免费观看| 久久综合九色综合久99| 狠狠综合久久av一区二区蜜桃| 视频三区二区一区| 91精品成人| 久久国产精品网| 国产精品视区| 亚洲国产精品三区| 国产精品一区专区| 又黄又爽的网站| 久久久99精品久久| 天堂网中文在线观看| 亚洲乱码国产乱码精品精98午夜| 久久这里只有精品国产| 动漫精品一区二区| 中文字幕精品在线观看| 欧美一级欧美一级在线播放| 日韩一区二区三区不卡| 国产性猛交xxxx免费看久久| 国内精品不卡| 亚洲 日韩 国产第一| 香蕉成人影院| 成人高清在线观看| 国产精品嫩模av在线| 日本天堂免费a| 久久久久久久尹人综合网亚洲| 五月天av在线播放| 成人18视频日本| 国产又粗又猛又爽又黄的视频四季 | 亚洲精品中文字幕在线| 极品日韩av| 国产 porn| 不卡在线视频中文字幕| 免费在线观看a视频| 亚洲自拍偷拍欧美| 一级片在线免费播放| 精品久久久三级丝袜| 在线免费看a| 97香蕉超级碰碰久久免费软件 | 日韩高清不卡一区二区| 久久精品一二三四| 久久久久久久久久看片| 久久婷婷一区二区| 欧美日韩亚洲综合在线| 人人妻人人澡人人爽人人欧美一区 | 亚洲永久精品大片| 中文av免费观看| 日韩av在线免费播放| av中文字幕在线观看| 国产精品久久久久久影视| 麻豆一区二区麻豆免费观看| 最新av网址在线观看| 蜜桃久久精品一区二区| 毛片网站免费观看| 婷婷开心激情综合| 99热这里只有精品9| 在线观看日韩欧美| 中文字幕乱码中文乱码51精品| 国产精品免费一区二区三区在线观看| 日韩中文欧美| 青青草精品视频在线观看| 99久久精品情趣| 精品无码久久久久久久| 91精品国产色综合久久| 91大神在线网站| 国产成人一区三区| 一区二区三区视频免费观看| www.国产精品一二区| 亚洲av无码一区二区三区性色| 中文字幕在线观看日韩| 三级成人在线| 日韩欧美第二区在线观看| 国产精品亚洲综合久久| 久久久久久婷婷| 亚洲综合激情网| 国产成人av免费看| 久久伊人色综合| 国产精品一区二区美女视频免费看 | 精品国产乱码久久久久久1区2匹| 精品少妇人妻av免费久久洗澡| 国产福利电影一区二区三区| 成年人午夜剧场| 日韩一区二区三区av| www视频在线免费观看| 成人淫片在线看| 91精品国偷自产在线电影| 97超碰成人在线| 亚洲素人一区二区| 国产丰满果冻videossex| 欧美二区在线播放| 成人高潮a毛片免费观看网站| 免费网站在线观看视频| caoporn国产精品| 免费观看成人毛片| 亚洲人成在线观看| 国产一区二区三区四区五区3d| 一区二区三区国| 国产一二三精品| 亚洲国产精品成人无久久精品| 日韩av在线导航| 欧美xxx性| 亚洲欧美成人一区| 国产一区二区三区国产| 国产乡下妇女做爰视频| 亚洲欧美在线播放| 91综合国产| 欧美精品一区二区性色a+v| 国产不卡免费视频| 日韩精品在线免费视频| 国产午夜精品一区二区三区| 视频欧美精品| 91午夜在线观看| 久久久久久久国产精品影院| 中文字幕日韩国产| 色在人av网站天堂精品| 婷婷亚洲精品| 欧美在线aaa| 亚洲成av人片一区二区三区| 免费福利在线观看| 成人自拍性视频| 亚洲精品看片| 亚洲女人毛茸茸高潮| 精品少妇一区二区三区在线播放 | 欧美日韩免费看| a天堂中文在线| 国产精品制服诱惑| 日韩国产在线观看一区| 国产乱国产乱老熟300| 日韩精品视频在线免费观看| 国产伊人久久| 免费无码不卡视频在线观看| 国产精品色在线| 色一情一乱一区二区三区| 国产精品免费久久久久影院| 亚洲视频免费| 欧美美女性生活视频| 亚洲另类激情图| 欧洲大片精品免费永久看nba| 可以免费观看av毛片|