Beam Search(集束搜索):是一種啓發式圖搜索算法,在圖的解空間比較大的情況下,爲了減少搜索所佔用的空間和時間,在每一步深度擴展的時候,剪掉一些質量比較差的結點,保留下一些質量較高的結點。
好處:減少了空間消耗,並提高了時間效率。
啓發式搜索是利用問題擁有的啓發信息來引導搜索,達到減少搜索範圍、降低問題複雜度的目的
Beam Search(集束搜索):使用廣度優先策略建立搜索樹在樹的每一層,按照啓發代價對節點進行排序,然後僅留下預先確定的m個數(Beam Width-集束寬度)的節點,僅這些節點在下一層次繼續擴展,其他節點就被剪掉了。
(注意:如果集束寬度無窮大,那該搜索就是寬度優先搜索)
步驟如下:
1.將初始節點插入到list中
2.將給節點出堆,如果該節點是目標節點,則算法結束;
3.否則擴展該節點,然後按照啓發代價對擴展出來的節點排序,取前m個節點入堆。然後到第二步繼續循環。
4.算法結束的條件是找到最優解或者堆爲空。
得到第一個輸出的概率分佈[0.1,0.1,0.3,0.4,0.1][0.1,0.1,0.3,0.4,0.1],選擇概率最大的前兩個,0.3和0.4,即Je和moi。 然後Je和moi分別作爲Decoder的輸入,得到兩個概率分佈,然後再選擇概率和最大的前兩個序列,0.3+0.8和0.4+0.6,即Je suis和moi suis。 以此類推,最終可以得到兩個序列,即Je suis étudiant和moi suis étudiant,很明顯前者的概率和最大,爲2.2,所以這個序列是最終得到的結果。
集束搜索本質上也是貪心的思想,只不過它考慮了更多的候選搜索空間,因此可以得到更多的翻譯結果。
(貪心思想:在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的局部最優解)