久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

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

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

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

web

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

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

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

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

    導(dǎo)入庫(kù)

    首先,,我們需要加載所需的庫(kù):

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建立模型非常簡(jiǎn)單,。我們將從使用Keras提供的Sequential模型創(chuàng)建模型開始。

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

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

    輸入向量的大小是原始句子中單詞的總數(shù),。因?yàn)槲覀兪褂玫氖乔度耄晕覀儠?huì)得到標(biāo)記化的單詞,。這意味著可以將單詞拆分為子單詞,,從而增加輸入句子中單詞的數(shù)量。

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

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

    請(qǐng)注意,,我們?cè)谥虚g添加了RepeatVector,。這將是我們注意機(jī)制的一部分,我們將在不久后添加,。

    接下來(lái),,我們?cè)谀P椭刑砑右粋€(gè)Dense層。該層從上一層獲取所有輸出神經(jīng)元,。我們需要密集的層,,因?yàn)槲覀円M(jìn)行預(yù)測(cè)。我們想要獲得俄語(yǔ)句子,,該句子具有與輸入的英語(yǔ)句子相對(duì)應(yīng)的最高分?jǐn)?shù),。本質(zhì)上,密集層在每個(gè)LSTM單元的輸出上計(jì)算softmax,。

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

    LEN_RU是輸出向量的大?。ㄉ院笪覀儗⒂?jì)算這些參數(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)建的,,實(shí)際上是一個(gè)預(yù)訓(xùn)練的嵌入層?,F(xiàn)在,我們需要生成Word2Vec權(quán)重矩陣(該層神經(jīng)元的權(quán)重),,并用該矩陣填充標(biāo)準(zhǔn)的Keras嵌入層,。

    我們可以使用該gensim包自動(dòng)獲取嵌入層:

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

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

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

    現(xiàn)在,,我們將在兩個(gè)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ù)中將使其更易于重用,。你不必有這樣做-但得到的可能怎么看,看在最后的翻譯器代碼的想法筆記本我們前面提到的,。

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多