beam search 演算法在文字生成中用得比較多,用於選擇較優的結果(可能並不是最優的)。接下來將以seq2seq機器翻譯為例來說明這個beam search的演算法思想。
在機器翻譯中,beam search演算法在測試的時候用的,因為在訓練過程中,每乙個decoder的輸出是有與之對應的正確答案做參照,也就不需要beam search去加大輸出的準確率。
有如下從中文到英語的翻譯:
中文:
我 愛 學習,學習 使 我 快樂
英語:
xx)進行編碼,得到語義向量ccc。
得到語義向量c
cc後,進入解碼階段,依次翻譯成目標語言。在正式解碼之前,有乙個引數需要設定,那就是beam search中的beam size,這個引數就相當於top-k中的k,選擇前k個最有可能的結果。在本例中,我們選擇beam size=3。
來看解碼器的第乙個輸出y
1y_1
y1,在給定語義向量c
cc的情況下,首先選擇英語詞彙表中最有可能k個單詞,也就是依次選擇條件概率p(y
1∣c)
p(y_1|c)
p(y1∣
c)前3大對應的單詞,比如這裡概率最大的前三個單詞依次是i
ii,lea
rnin
glearning
learni
ng,h ap
pyhappy。
接著生成第二個輸出y
2y_2
y2,在這個時候我們得到了那些東西呢,首先我們得到了編碼階段的語義向量c
cc,還有第乙個輸出y
1y_1
y1。此時有個問題,y
1y_1
y1有三個,怎麼作為這一時刻的輸入呢(解碼階段需要將前一時刻的輸出作為當前時刻的輸入),答案就是都試下,具體做法是:
這樣就得到了18個組合,每一種組合對應乙個概率值p(y
1∣c)
p(y2
∣c,y
1)p(y_1|c)p(y_2|c, y_1)
p(y1∣
c)p(
y2∣
c,y1
),接著在這18個組合中選擇概率值top3的那三種組合,假設得到ilo
vei love
ilove,iha
ppyih
appy
,l ea
rnin
gmak
elearning make
learni
ngma
ke。接下來要做的重複這個過程,逐步生成單詞,直到遇到結束識別符號停止。最後得到概率最大的那個生成序列。其概率為:
p (y
∣c)=
p(y1
∣c)p
(y2∣
c,y1
),..
.,p(
y6∣c
,y1,
y2,y
3,y4
,y5)
p(y|c)=p(y_1|c)p(y_2|c,y_1),...,p(y_6|c,y_1,y_2,y_3,y_4,y_5)
p(y∣c)
=p(y
1∣c
)p(y
2∣c
,y1
),..
.,p(
y6∣
c,y1
,y2
,y3
,y4
,y5
)以上就是beam search演算法的思想,當beam size=1時,就變成了貪心演算法。
beam search演算法也有許多改進的地方,根據最後的概率公式可知,該演算法傾向於選擇最短的句子,因為在這個連乘操作中,每個因子都是小於1的數,因子越多,最後的概率就越小。解決這個問題的方式,最後的概率值除以這個生成序列的單詞數(記生成序列的單詞數為n
nn),這樣比較的就是每個單詞的平均概率大小。
此外,連乘因子較多時,可能會超過浮點數的最小值,可以考慮取對數來緩解這個問題。
通俗tarjan演算法講解
全網最詳細tarjan演算法講解,我不敢說別的。反正其他tarjan演算法講解,我看了半天才看懂。我寫的這個,讀完一遍,發現原來tarjan這麼簡單!tarjan演算法,乙個關於 圖的聯通性的神奇演算法。基於dfs 迪法師 演算法,深度優先搜尋一張有向圖。注意!是有向圖。根據樹,堆疊,打標記等種種神...
通俗理解EM演算法
如果使用基於最大似然估計的模型,模型中存在隱變數,就要用em演算法做引數估計。個人認為,理解em演算法背後的idea,遠比看懂它的數學推導重要。idea會讓你有乙個直觀的感受,從而明白演算法的合理性,數學推導只是將這種合理性用更加嚴謹的語言表達出來而已。打個比方,乙個梨很甜,用數學的語言可以表述為糖...
Apriori演算法通俗講解
apriori演算法用於解決大規模資料集的關聯分析問題。關聯分析 association analysis 或關聯規則學習 association rule learning 是從大規模資料集中尋找物品間的隱含關係。但是,尋找物品的不同組合是一項十分耗時的任務,計算代價高,蠻力搜尋並不能解決問題,所...