Chapter7-12_Controllable Chatbot
文章目錄
- 1 Chatbot面臨的問題
- 2 控制Chatbot的輸出
- 2.1 直接Finetune
- 2.2 輸入添加控制特征
- 2.3 只有獨白
 
- 3 展望
本文為李弘毅老師【Controllable Chatbot】的課程筆記,課程視頻youtube地址,點這里👈(需翻墻)。
下文中用到的圖片均來自于李宏毅老師的PPT,若有侵權,必定刪除。
文章索引:
上篇 - 7-11 Deep Learning for Question Answering (2/2)
下篇 - 7-13 Dialogue State Tracking (as Question Answering)
總目錄
1 Chatbot面臨的問題
什么是Chatbot這里就不多說了,顧名思義,就是聊天機器人。Chatbot是一個很難的問題,但我們其實可以先把它抽象得很簡單,認為這就是一個seq2seq的問題。訓練的時候,就找一大堆語料,分別是一個人說的前一句,和另一個人接的下一句,然后直接train。這樣會有一個非常致命的問題,就是同一個句子,不同人說出來是不一樣的,這也就導致了找來的語料當中,同樣的輸入,對應的輸出有非常多種。比如問年齡的時候,不同年齡的人的回答必然是不一樣的。
直接用seq2seq的方法train出來的模型產生的對話會長下面這個樣子,同樣的問題,換一個方式問,出來的結果就自相矛盾了。
 
除此之外,這樣train出來的模型會偏向于用比較單調和無聊的句子來回答問題,比如"I don’t know"是一個高頻的回答,因為這樣的結果是合理的,但這并不是我們希望模型回答的。
總結一下,有兩個問題:
- 回答的結果前后矛盾
- 回答的結果太過單調
2 控制Chatbot的輸出
要控制Chatbot的輸出,我們可以給Chatbot增加一些限定條件。限定條件可以是人物設定,可以是人物的情緒,也可以是某個特定的人物。
 
限定了之后,機器的回答會變成下面這樣。下圖的上半是限定情緒的結果,下半是限定了特定人物的結果,都是模型跑出來的真實例子。
 
那么如何訓練出可以限定條件的Chatbot呢?有三種方法,下面來逐個講述。
2.1 直接Finetune
最直接的方法就是,先用一大堆語料來預訓練Chatbot,然后再找限定條件的語料來finetune。這樣的問題是,我們一般沒法找到大量的限定條件的語料,這會導致模型很容易過擬合。要解決這個問題的話可以參考元學習的方法,這不是本文的重點,不多做介紹。
 
2.2 輸入添加控制特征
我們也可以在輸入句子的結尾加一個控制輸出的特征。舉個例子,可以對同一個問題的不同回答進行一個分類,然后在輸入的時候,把這個類別作為一個特征也輸入進去。這樣train出來的模型,就可以通過控制這個輸入的特征來控制輸出了。這樣的語料數據可以是其他模型跑出來的,也可以是人標注的。A Persona-Based Neural Conversation Model就是這種方法的一個經典例子。
 
 有一篇叫做CTRL: A Conditional Transformer Language Model for Controllable Generation的文章就是用的這種方法來訓練一個language model。一般的language model在訓練的時候,我們會找一大堆語料,然后讓模型在看到給定的tokens的情況下,預測出接下來的tokens是什么。CTRL這篇文章會在句子的最前面加上這個語料的來源,來源可以是Wikipedia,可以是Books,甚至是一個網址等等。不同的來源,句子的風格是不一樣的。
 
 然后我們用這樣訓練得到的模型來進行句子的生成,發現模型竟然知道哪一年的美國總統是哪位。
在Chatbot的訓練中,有這樣給定了條件的公開數據集,比如Persona-Chat。這個就是facebook找了一堆人,然后告訴他們自己的人設是什么,然后讓他們對話得到的語料庫。
訓練的方法也出奇地簡單,直接把對人設的形容文字加到句子的開頭,放進BERT去訓練就可以了。TransferTransfo就是這樣做的,作者在訓練的時候,還會去故意打亂描述人設的句子,因為這些句子間是無序的。
 
2.3 只有獨白
有些時候,我們只能拿到某個人設的個人獨白,沒法獲取到他的對話。這個時候,我們也是可以訓練一個Chatbot來模仿該人設對話的。方法有很多種,下面依此介紹
(1)從已有的獨白當中選取最有可能的回復。這種方法就保證了,回復必然是該人設說過的某句話。
(2)用獨白訓練一個language model,然后用這個language model來影響 Chatbot的輸出.
(3)用一個反向的模型來預測獨白中的某句話,是需要問話人說怎樣的句子才會說來的。用這種方法來制造數據。
(4)用有問有答的語料訓練一個seq2seq模型,同時用獨白訓練一個auto encoder。然后在訓練的時候,兩個模型的decoder用的是同一個。這樣可以保證輸出與獨白的風格類似。
(5)用Reinforce Learning或者GAN的方法,訓練一個classifier來判斷輸出的句子和獨白的風格是否相似。
3 展望
有時候,Chatbot說出來了一個positive的句子,但在整個對話中可能是諷刺的意思。我們下一步的目標應該是如果希望Chatbot的對話是positive的,那Chatbot的整個對話給人的感覺應該是postive的,而與Chatbot本身說的話是positive還是negative無關。
 
總結
以上是生活随笔為你收集整理的Chapter7-12_Controllable Chatbot的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PyCharm集成Anaconda3环境
- 下一篇: JavaScript高级之ES5 中的新
