乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

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

      在本系列文章中,我們將向您展示如何使用深度學(xué)習(xí)來創(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語言翻譯系統(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]

          接下來,我們添加一個(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ī)制的一部分,我們將在不久后添加。

          接下來,我們?cè)谀P椭刑砑右粋€(gè)Dense層。該層從上一層獲取所有輸出神經(jīng)元。我們需要密集的層,因?yàn)槲覀円M(jìn)行預(yù)測(cè)。我們想要獲得俄語句子,該句子具有與輸入的英語句子相對(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)匀恍枰砑忧度雽樱⒃诰幋a器和解碼器之間包括關(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)論公約

        類似文章 更多