日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter7-12_Controllable Chatbot

發布時間:2024/7/5 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。