seq2seq聊天模型(三)—— attention 模型
阿新 • • 發佈:2019-01-26
num 同仁 gif 技術 .com lstm 一起 coder 一個
註意力seq2seq模型
大部分的seq2seq模型,對所有的輸入,一視同仁,同等處理。
但實際上,輸出是由輸入的各個重點部分產生的。
比如:
(舉例使用,實際比重不是這樣)
對於輸出“晚上”,
各個輸入所占比重: 今天-50%,晚上-50%,吃-100%,什麽-0%
對於輸出“吃”,
各個輸入所占比重: 今天-0%,晚上-0%,吃-100%,什麽-0%
特別是在seq2seq的看圖說話應用情景中
睡覺還握著筆的baby
這裏的重點就是baby,筆!通過這些重點,生成描述。
下面這個圖,就是attention的關鍵原理
tensorlfow 代碼
encoder 和常規的seq2seq中的encoder一樣,只是在attention模型中,不再需要encoder累計的state狀態,需要的是各個各個分詞的outputs輸出。
在訓練的時候,將這個outputs與一個權重值一起擬合逼進目標值。
這個權重值,就是各個輸入對目標值的貢獻占比,也就是註意力機制!
dec_cell = self.cell(self.hidden_size) attn_mech = tf.contrib.seq2seq.LuongAttention( num_units=self.attn_size, # 註意機制權重的size memory=self.enc_outputs, # 主體的記憶,就是decoder輸出outputs memory_sequence_length=self.enc_sequence_length, # normalize=False, name=‘LuongAttention‘) dec_cell = tf.contrib.seq2seq.AttentionWrapper( cell=dec_cell, attention_mechanism=attn_mech, attention_layer_size=self.attn_size, # attention_history=False, # (in ver 1.2) name=‘Attention_Wrapper‘) initial_state = dec_cell.zero_state(dtype=tf.float32, batch_size=batch_size) # output projection (replacing `OutputProjectionWrapper`) output_layer = Dense(dec_vocab_size + 2, name=‘output_projection‘) # lstm的隱藏層size和attention 註意機制權重的size要相同
seq2seq聊天模型(三)—— attention 模型