天天看點

TensorFlow筆記---Seq2SeqModel

Seq2SeqModel已經廣泛應用在機器翻譯,QA問答,人工對話等一些自然語言處理問題中。其中tensorflow中有現成的架構,下面将進行介紹:
           

機器翻譯中的seq2seq的模型架構及相應參數;

Seq2SeqModel(source_vocab_size,
               target_vocab_size,
               buckets,
               size,
               num_layers,
               max_gradient_norm,
               batch_size,
               learning_rate,
               learning_rate_decay_factor,
               use_lstm=False,
               num_samples=,
               forward_only=False,
               dtype=tf.float32)
           

參數詳解:

source_vocab_size,在序列到序列的任務中,訓練資料的源資料的詞彙表大小;如序列對(A,B)中A的大小

target_vocab_size,同上目标詞彙表B的大小

buckets,為了解決不同長度輸入而設定的,如[(5,10),(10,15),(15,20),(20,40)],如輸入長度為9時,選擇(10,15)的範圍;

size,某一層的單元數

num_layers,網絡層數

max_gradient_norm,表示梯度最大限度的被削減到這個規範

batch_size,每批讀取資料數

learning_rate,學習率

learning_rate_decay_factor,學習率衰減因子

use_lstm=False,使用lstm嗎?GRU

num_samples=512,采樣softmax的個數,當個數小于詞彙表時才有意義;

forward_only=False,是否更新參數

Sequence-to-Sequence中的一些重要的函數:(model内部的)

該函數傳回的是batch_encoder_inputs,batch_decoder_inputs,batch_weights三個參數
encoder_size, decoder_size = self.buckets[bucket_id]
将輸入與輸出補成同encoder_size, decoder_size大小一樣的尺寸。
encoder_inputs, # Encoder inputs are padded and then reversed.(不夠補0)
decoder_inputs,#留一個給GO_ID,其餘類似decoder_inputs
weight:對于補充的數,weight值為0,原有的為1
batch_encoder_inputs,batch_size大小一批的輸入
batch_decoder_inputs,batch_size大小的一批輸出
batch_weights,尺寸同batch_decoder_inputs
           
def step(self, session, encoder_inputs, decoder_inputs, target_weights,
           bucket_id, forward_only):
           

該函數傳回三個參數值(Gradient norm, loss, outputs)

session, 會話狀态

以下三個參數來源于get_batch的傳回值

encoder_inputs,

decoder_inputs,

target_weights,

bucket_id, #使用那個bucket,會被指定

forward_only,forward_only當為True時,傳回# No gradient norm, loss, outputs;False時,傳回Gradient norm, loss, no outputs.