日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 碼農(nóng)9527 2021-04-25

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

web

    本系列假定您熟悉機器學(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ù)量。

    為了使模型的大小易于管理(從而確保可以在合理的時間內(nèi)訓(xùn)練模型),我們將長度設(shè)置為512。我們添加了兩個LSTM層:第一層是編碼器,第二層是解碼器。

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

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

    接下來,我們在模型中添加一個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]

    增加注意力機制

    現(xiàn)在我們要添加一個注意力機制。我們可以從頭開始編寫它,但是更簡單的解決方案是使用現(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]

    運行代碼后,將獲得以下輸出:

[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]

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

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多