我在Keras中實現了Seq2Seq模型。但是,他們還沒有在解碼器中提供波束搜索選項。因此,我考慮了pynlpl的BeamSearch,但是他們的搜索文檔here沒有關於如何實現它的任何信息。您能否舉一個例子來說明波束搜索是如何實現的?使用Python搜索光標
這裏有一個類似的答案:How to implement a custom beam search in TensorFlow? 但是,它不清楚。
我在Keras中實現了Seq2Seq模型。但是,他們還沒有在解碼器中提供波束搜索選項。因此,我考慮了pynlpl的BeamSearch,但是他們的搜索文檔here沒有關於如何實現它的任何信息。您能否舉一個例子來說明波束搜索是如何實現的?使用Python搜索光標
這裏有一個類似的答案:How to implement a custom beam search in TensorFlow? 但是,它不清楚。
一般來說,你可以這樣做:
瓷磚產地批第一維由beam_size倍,包括輸出(編碼輸出的關注和編碼器的最終狀態作爲初始解碼器州)。每個波束大小的重複樣本被標註爲beam_i。
完成解碼的一個步驟並從每個beam_i的詞彙大小輸出中相應地獲得頂部beam_size * 2索引和概率。
保留每個生成角色的先前概率,並用這些概率和從步驟2獲得的最後概率計算平均概率,並獲得頂部beam_size字符。
將遇到stop_decode符號的樣本放入列表中,如果列表的長度達到每個beam_i的波束大小,則波束結束。
但它是一個有點過於抽象,因此你可以參考this (official) example尋求幫助。它由谷歌的Denny Britz執行。