免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
使用TensorFlow和Keras構(gòu)建AI語言翻譯

在本系列文章中,我們將向您展示如何使用深度學(xué)習(xí)來創(chuàng)建自動翻譯系統(tǒng)。本系列可以視為分步教程,可以幫助您了解和構(gòu)建神經(jīng)元機(jī)器翻譯。

    本系列假定您熟悉機(jī)器學(xué)習(xí)的概念:模型訓(xùn)練,監(jiān)督學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)以及人工神經(jīng)元,層和反向傳播。

    在上一篇文章中,我們安裝了開發(fā)自動翻譯系統(tǒng)所需的所有工具,并定義了開發(fā)工作流程。在本文中,我們將繼續(xù)構(gòu)建AI語言翻譯系統(tǒng)。

    我們將只需要編寫很少的代碼行,因為對于大多數(shù)邏輯而言,我們將使用基于Keras的預(yù)格式化模板。

    如果您想查看最終的最終代碼,可以在此Python筆記本中找到。

    導(dǎo)入庫

    首先,我們需要加載所需的庫:

import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
import numpy as np
import string
from numpy import array, argmax, random, take
#for processing imported data
import pandas as pd
#the RNN routines
from keras.models import Sequential
from keras.layers import Dense, LSTM, Embedding, RepeatVector
#we will need the tokenizer for BERT
from keras.preprocessing.text import Tokenizer
from keras.callbacks import ModelCheckpoint
from keras.preprocessing.sequence import pad_sequences
from keras.models import load_model
from keras import optimizers1234567891011121314151617復(fù)制代碼類型:[html]

    建筑模型組件

    使用Keras建立模型非常簡單。我們將從使用Keras提供的Sequential模型創(chuàng)建模型開始。

model = Sequential()1復(fù)制代碼類型:[html]

    接下來,我們添加一個長短期記憶(LSTM)層。在Keras的LSTM類中,LSTM單元的大多數(shù)參數(shù)都具有默認(rèn)值,因此我們唯一需要明確定義的是輸出的維數(shù):將為序列到序列的遞歸神經(jīng)創(chuàng)建的LSTM單元的數(shù)量網(wǎng)絡(luò)(RNN)。

    輸入向量的大小是原始句子中單詞的總數(shù)。因為我們使用的是嵌入,所以我們會得到標(biāo)記化的單詞。這意味著可以將單詞拆分為子單詞,從而增加輸入句子中單詞的數(shù)量。

    為了使模型的大小易于管理(從而確??梢栽诤侠淼臅r間內(nèi)訓(xùn)練模型),我們將長度設(shè)置為512。我們添加了兩個LSTM層:第一層是編碼器,第二層是解碼器。

model.add(LSTM(512))
model.add(RepeatVector(LEN_EN))
model.add(LSTM(512))123復(fù)制代碼類型:[html]

    請注意,我們在中間添加了RepeatVector。這將是我們注意機(jī)制的一部分,我們將在不久后添加。

    接下來,我們在模型中添加一個Dense層。該層從上一層獲取所有輸出神經(jīng)元。我們需要密集的層,因為我們要進(jìn)行預(yù)測。我們想要獲得俄語句子,該句子具有與輸入的英語句子相對應(yīng)的最高分?jǐn)?shù)。本質(zhì)上,密集層在每個LSTM單元的輸出上計算softmax。

model.add(Dense(LEN_RU, activation='softmax'))1復(fù)制代碼類型:[html]

    LEN_RU是輸出向量的大?。ㄉ院笪覀儗⒂嬎氵@些參數(shù))。變量也一樣LEN_EN。

    到目前為止,這是我們的模型的外觀:

model = Sequential()
model.add(LSTM(512))
model.add(LSTM(512))
model.add(Dense(LEN_RU, activation='softmax'))
rms = optimizers.RMSprop(lr=0.001)
model.compile(optimizer=rms, loss='sparse_categorical_crossentropy')123456復(fù)制代碼類型:[html]

    我們正在使用稱為RMSprop的Keras優(yōu)化器。它優(yōu)化了用于反向傳播的梯度下降技術(shù)。

    我們?nèi)匀恍枰砑忧度雽?,并在編碼器和解碼器之間包括關(guān)注層。

    嵌入層是使用Word2Vec創(chuàng)建的,實際上是一個預(yù)訓(xùn)練的嵌入層?,F(xiàn)在,我們需要生成Word2Vec權(quán)重矩陣(該層神經(jīng)元的權(quán)重),并用該矩陣填充標(biāo)準(zhǔn)的Keras嵌入層。

    我們可以使用該gensim包自動獲取嵌入層:

from gensim.models import Word2Vec1復(fù)制代碼類型:[html]

    然后,我們創(chuàng)建我們的Word2Vec嵌入層

model_w2v = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)1復(fù)制代碼類型:[html]

    然后可以按以下方式檢索嵌入層:

model_w2v.wv.get_keras_embedding(train_embeddings=False)1復(fù)制代碼類型:[html]

    我們可以調(diào)用該model.summary()函數(shù)以獲取模型概述:

_________________________________________________________________
Layer (type)  Output Shape  Param #
=================================================================
embedding_1 (Embedding)   (None, None, 100)   1200
_________________________________________________________________
lstm_1 (LSTM) (None, 512)   1255424
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 8, 512)   0
_________________________________________________________________
lstm_2 (LSTM) (None, 512)   2099200
_________________________________________________________________
dense_1 (Dense)  (None, 512)   262656
=================================================================
Total params: 3,618,480
Trainable params: 3,617,280
Non-trainable params: 1,200
_________________________________________________________________1234567891011121314151617復(fù)制代碼類型:[html]

    增加注意力機(jī)制

    現(xiàn)在我們要添加一個注意力機(jī)制。我們可以從頭開始編寫它,但是更簡單的解決方案是使用現(xiàn)有的Keras模塊,例如Kerasself-attention。

    讓我們導(dǎo)入這個模塊:

from keras_self_attention import SeqSelfAttention1復(fù)制代碼類型:[html]

    現(xiàn)在,我們將在兩個LSTM模塊之間添加導(dǎo)入的模塊:

model.add(SeqSelfAttention(attention_activation='sigmoid'))1復(fù)制代碼類型:[html]

    我們的模型現(xiàn)已完成。

    將模型放在一起

    這是用Keras編碼的我們的NN的最終代碼:

import warnings
warnings.filterwarnings("ignore")
import numpy as np
import string
from numpy import array, argmax, random, take
#for processing imported data
import tensorflow as tf
import pandas as pd
#the RNN routines
from keras.models import Sequential
from keras.layers import Dense, LSTM, Embedding, RepeatVector
from keras.preprocessing.text import Tokenizer
from keras.callbacks import ModelCheckpoint
from keras.preprocessing.sequence import pad_sequences
from keras.models import load_model
from keras import optimizers
#optional if you want to generate statistical graphs of the DMT
#import matplotlib.pyplot as plt
#from keras.utils import plot_model
#import pydot

from gensim.models import Word2Vec
from gensim.test.utils import common_texts
from keras_self_attention import SeqSelfAttention


model = Sequential()

model_w2v = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
model.add(model_w2v.wv.get_keras_embedding(train_embeddings=False))
model.add(LSTM(512))
model.add(RepeatVector(8))

model.add(SeqSelfAttention(attention_activation='sigmoid'))

model.add(LSTM(512))
model.add(Dense(LEN_RU, activation='softmax'))
rms = optimizers.RMSprop(lr=0.001)
model.compile(optimizer=rms, loss='sparse_categorical_crossentropy')

#plot_model(model, to_file='model_plot4a.png', show_shapes=True, show_layer_names=True)

model.summary()12345678910111213141516171819202122232425262728293031323334353637383940414243復(fù)制代碼類型:[html]

    運(yùn)行代碼后,將獲得以下輸出:

[root@ids ~]# python3 NMT.py
Using TensorFlow backend.
_________________________________________________________________
Layer (type)  Output Shape  Param #
=================================================================
embedding_1 (Embedding)   (None, None, 100)   1200
_________________________________________________________________
lstm_1 (LSTM) (None, 512)   1255424
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 8, 512)   0
_________________________________________________________________
seq_self_attention_1 (SeqSel (None, 8, 512)   32833
_________________________________________________________________
lstm_2 (LSTM) (None, 512)   2099200
_________________________________________________________________
dense_1 (Dense)  (None, 512)   262656
=================================================================
Total params: 3,651,313
Trainable params: 3,650,113
Non-trainable params: 1,2001234567891011121314151617181920復(fù)制代碼類型:[html]

    盡管我們的模型代碼按原樣運(yùn)行良好,但是考慮將模型創(chuàng)建代碼包含在函數(shù)中將使其更易于重用。你不必有這樣做-但得到的可能怎么看,看在最后的翻譯器代碼的想法筆記本我們前面提到的。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
將Keras作為tensorflow的精簡接口
Keras入門必讀教程:手把手從安裝到解決實際問題
AttributeError: ‘Node‘ object has no attribute ‘output
自然語言處理的奧秘與應(yīng)用:從基礎(chǔ)到實踐
keras搭建多層LSTM時間序列預(yù)測模型
tensorflow2.0保存和恢復(fù)模型
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服