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.