seq2seq應(yīng)用場(chǎng)景:
文本生成:翻譯浅妆、看圖說(shuō)話墅诡、生成摘要
文本理解和生成文本
encoder & decoder
encoder壳嚎,根據(jù)輸入序列生成語(yǔ)義向量 (h4 = C)
decoder 根據(jù)語(yǔ)義向量生成指定序列
encoder通常是一個(gè)RNN類模型,
decoder可以有:
1末早、Greedy Decoding:Greedy Decoding就是每次選擇概率值最大的對(duì)應(yīng)的單詞(每一輪softmax最大的單詞)烟馅。但這樣做的缺點(diǎn)是,局部最優(yōu)并不等于全局最好的然磷,而且一旦選錯(cuò)了郑趁,后續(xù)生成的內(nèi)容很可能也是錯(cuò)誤的,具有錯(cuò)誤的累加效果姿搜。對(duì)于此問(wèn)題寡润,更好的解決方法是每次考慮更多的可能性捆憎。
2、暴力搜索: 相比方法1梭纹,暴力搜索時(shí)間復(fù)雜度極高躲惰,一句話m個(gè)單詞,會(huì)產(chǎn)生|V|的m次方計(jì)算栗柒。
3礁扮、beam-search: Beam Search的時(shí)間復(fù)雜度 kkT,k時(shí)beam_size瞬沦, T是句子長(zhǎng)度
k=3時(shí)太伊,每一步我們考慮了9種可能性,但為了不讓計(jì)算復(fù)雜度增加,又從9個(gè)選項(xiàng)里再選出最好的3個(gè)。這就意味著,每個(gè)時(shí)間的計(jì)算復(fù)雜度實(shí)際上是3的平方,也就是k的平方
時(shí)間復(fù)雜度kkT
序列得分怎么得到逛钻? decoder最后的輸出僚焦,softmax ?曙痘?芳悲?
代碼review:
一個(gè)句子,有10個(gè)單詞边坤,總共有5個(gè)備選詞名扛。
句子每個(gè)位置上,取0~4號(hào)單詞的概率 用一個(gè)矩陣表示茧痒,第一維表示是第幾個(gè)詞肮韧,第二維表示第i個(gè)備選詞。
for row in data: # 循環(huán)這個(gè)句子中的每一個(gè)詞
for i in range(len(sequeces)): # 循環(huán)目前所有的備選子序列旺订,循環(huán)次數(shù)=beam_size
1) for j in range(len(row)): # 循環(huán)每個(gè)備選詞弄企,循環(huán)次數(shù)=詞表大小
# 更新每個(gè)備選子序列,比如:第一次備選序列為 [a] [c], 更新后[aa] [ab] [ac] [ca] [cb] [cc]
2) 備選子序列重新賦值区拳,取上一步驟的 topk 個(gè)子序列
返回所有備選子序列