seq2seq聊天模型(三)—— attention 模型


注意力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要相同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM