1、NLG的定義及應用場景
NLG是指,生產出任何新文本。被用於以下場景:
1. 機器翻譯
2. 摘要
3. 對話(任務型、閒聊型、問答型)
4. 創意寫作:寫故事,寫詩
5. 生成式,相比於抽取式
6. 圖像描述
2、語言模型
2.1 LM
語言建模(Language Modeling)是指,在給定詞語的情況下,預測下一個詞的概率,用公式表示爲:
而語言模型(Language Model)是隻一種系統,用以預測上述概率的分佈。
2.2 RNN-LM
如果用RNN網絡來預測上述概率,那麼這個語音模型就稱爲RNN-LM。
2.3 Conditional LM
如果出了已出現的詞,我們還知道其他的輸入條件,那麼我們就可以進行條件語言建模(ConditionalLanguageModel),用公式表示爲
這種建模方法在很多應用中都有用到:
- 機器翻譯:
x
是源句子,y
是目標句子 - 摘要生成:
x
是輸入文本,y
是摘要文本 - 對話:
x
是歷史聊天記錄,y
是下一句話
2.4 泛RNN語言模型的訓練
一般模型有兩部分組成:編碼器(RNN)和解碼器(RNN)。
有一種訓練方式,是將真正的生成句子輸入解碼器中,而不是解碼器生成的句子。這種訓練方式是Teacher Forcing
以NeuralMachineTranslation爲例:
3、解碼算法
語言模型訓練好之後,我們會通過解碼算法來生成文本。
這裏會介紹兩種解碼算法,貪心解碼(Greedy Decoding)算法和簇搜索(Beam Search)算法
3.1 貪心解碼算法
一種比較簡單的算法,就是在每一步中預測最有可能的那個詞. 這個詞會被作爲下一次預測時的輸入。
上述過程是重複進行的,直到預測出結束符<END>
或者生成的詞個數已經達到設定的最大值。
整個過程如下圖所示:
GreedyDecoding算法的缺點在於,由於沒有backtracking
回溯過程,即每一次的最好並不是全局的最佳,所以文本生成的效果不是特別好,比如會出現不符合語法邏輯、不自然、不合理的情況。
3.2 beam search解碼算法
搜索算法旨在從若干可能的句子裏,一次就找出可能性比較高的句子,這個句子可能並不是最優的結果。
核心思想:在每一步解碼過程中,跟蹤k
個最可能的部分序列(我們稱之爲假設 hypotheses ),這個k
就是 束大小,beam size
生成階段的循環過程結束時,選擇概率最大的句子片段(這裏的片段是因爲還要考慮到生成長度,所以我們會進行一些調整)
舉個例子如下圖,此時k=2
藍色的數字值是該句子的得分$score(y_i|y_1,..,y_(i-1),x)$
,通過如下公式計算得到:
每個時間步都只保留了k=2
個節點往下繼續搜索。最後pie
對應的路徑打分最高,最後的句子是
he hit me with a pie
從圖中可以看出,不同路徑預測輸出結束標誌符的時間點可能不一樣,比如第三步時,已經有I was hit
這樣一個結果還不錯的句子產生了,這樣一句預測完成的句子,稱之爲完全路徑。
爲了從不同長度的完全路徑中挑選一個最佳答案,我們會根據生成句子的長度進行分值的歸一化,
不同大小的k
對結果有什麼影響呢?
如果k
越小的話,每次考慮的範圍就越小,出現的問題約同貪心解碼(k=1時就回退到貪心解碼)
k
越大的話,每一步都需要更多假設,會造成更多計算量。
不僅如此,對NMT
來說,k
越大,BLEU
值會越小,因爲即使對長度進行了歸一化,但是k
越大,越偏向生成短文本。NMT的六大挑戰一文中,對比了不同k
情況下的BLEU
值,
可以看到,k
越大,生成質量越差,特別是如果沒有進行長度歸一化,結果會更差。當然不同場景下,最優k
值也是不同的,比如Czech–English
的翻譯中,k
選4最好,而English– Romanian
翻譯中,k=30
會得到最好的結果。
此外,在閒聊型對話任務中,k
越大,生成的答案通用性越強(示例見下圖)
當一方說,“我大多情況下都以生鮮爲主,不怎麼去雜貨店買東西”,可以看到k
比較小的時候,回答都是比較有主題的,比如圍繞飲食、健康開展的。而隨着k
變大,回覆也變得含含糊糊,不會答錯但是也沒那麼相關,有一點答非所問。
3.3 基於採樣的解碼算法
因爲beam seach
中每次要進行k
個hypothese
,所以可能不會那麼efficient
.這就推進了基於採樣的解碼算法誕生。
3.3.1 PureSampling
每一個時間步下,從分佈中隨機選一個作爲下一個詞.和貪心解碼算法一樣,也是每次只選一個詞,但是隨機的而不是選概率最大。
3.3.2 Top-n Sampling
每一個時間步下,從分佈中,按照概率選取個,再從中隨機選一個。
可以看到當時就是貪心,當時就是pure sample
越大,生成的文本更具有多樣性,當然也更加危險,因爲不知道會出來什麼玩意兒。
越小,生成的文本更加具有通用性,雖然可能有點跑偏,但是生成的文本比較安全,不會出錯。
3.3.3 不是解碼算法的 Softmax temperature
在beam search
和sampling
的解碼算法中,我們都是根據概率大小進行選擇的。在softmax
過程中,我們還會做一點變化,引入了一個溫度參數
越大,分佈就會越平滑,詞表中每個詞被選中的概率就會比較平均,所以生成的結果越具有多樣性。
越小,分佈就會越尖銳,詞表中每個詞被選中的概率就會不平均,總有一些詞選不到,而另外一些詞總被選到,所以生成的結果越比較常見。
3.4 解碼算法總結
貪心解碼算法非常簡單,但是效果也不好
束搜索效果比較好,但是也會出現回答太普通,太短等問題。
採樣方法則是結果更具有多樣性