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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Chapter7-12_Controllable Chatbot

發(fā)布時(shí)間:2024/7/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter7-12_Controllable Chatbot 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 Chatbot面臨的問題
  • 2 控制Chatbot的輸出
    • 2.1 直接Finetune
    • 2.2 輸入添加控制特征
    • 2.3 只有獨(dú)白
  • 3 展望

本文為李弘毅老師【Controllable Chatbot】的課程筆記,課程視頻youtube地址,點(diǎn)這里👈(需翻墻)。

下文中用到的圖片均來(lái)自于李宏毅老師的PPT,若有侵權(quán),必定刪除。

文章索引:

上篇 - 7-11 Deep Learning for Question Answering (2/2)

下篇 - 7-13 Dialogue State Tracking (as Question Answering)

總目錄

1 Chatbot面臨的問題

什么是Chatbot這里就不多說(shuō)了,顧名思義,就是聊天機(jī)器人。Chatbot是一個(gè)很難的問題,但我們其實(shí)可以先把它抽象得很簡(jiǎn)單,認(rèn)為這就是一個(gè)seq2seq的問題。訓(xùn)練的時(shí)候,就找一大堆語(yǔ)料,分別是一個(gè)人說(shuō)的前一句,和另一個(gè)人接的下一句,然后直接train。這樣會(huì)有一個(gè)非常致命的問題,就是同一個(gè)句子,不同人說(shuō)出來(lái)是不一樣的,這也就導(dǎo)致了找來(lái)的語(yǔ)料當(dāng)中,同樣的輸入,對(duì)應(yīng)的輸出有非常多種。比如問年齡的時(shí)候,不同年齡的人的回答必然是不一樣的。

直接用seq2seq的方法train出來(lái)的模型產(chǎn)生的對(duì)話會(huì)長(zhǎng)下面這個(gè)樣子,同樣的問題,換一個(gè)方式問,出來(lái)的結(jié)果就自相矛盾了。

除此之外,這樣train出來(lái)的模型會(huì)偏向于用比較單調(diào)和無(wú)聊的句子來(lái)回答問題,比如"I don’t know"是一個(gè)高頻的回答,因?yàn)檫@樣的結(jié)果是合理的,但這并不是我們希望模型回答的。

總結(jié)一下,有兩個(gè)問題:

  • 回答的結(jié)果前后矛盾
  • 回答的結(jié)果太過單調(diào)

2 控制Chatbot的輸出

要控制Chatbot的輸出,我們可以給Chatbot增加一些限定條件。限定條件可以是人物設(shè)定,可以是人物的情緒,也可以是某個(gè)特定的人物。

限定了之后,機(jī)器的回答會(huì)變成下面這樣。下圖的上半是限定情緒的結(jié)果,下半是限定了特定人物的結(jié)果,都是模型跑出來(lái)的真實(shí)例子。

那么如何訓(xùn)練出可以限定條件的Chatbot呢?有三種方法,下面來(lái)逐個(gè)講述。

2.1 直接Finetune

最直接的方法就是,先用一大堆語(yǔ)料來(lái)預(yù)訓(xùn)練Chatbot,然后再找限定條件的語(yǔ)料來(lái)finetune。這樣的問題是,我們一般沒法找到大量的限定條件的語(yǔ)料,這會(huì)導(dǎo)致模型很容易過擬合。要解決這個(gè)問題的話可以參考元學(xué)習(xí)的方法,這不是本文的重點(diǎn),不多做介紹。

2.2 輸入添加控制特征

我們也可以在輸入句子的結(jié)尾加一個(gè)控制輸出的特征。舉個(gè)例子,可以對(duì)同一個(gè)問題的不同回答進(jìn)行一個(gè)分類,然后在輸入的時(shí)候,把這個(gè)類別作為一個(gè)特征也輸入進(jìn)去。這樣train出來(lái)的模型,就可以通過控制這個(gè)輸入的特征來(lái)控制輸出了。這樣的語(yǔ)料數(shù)據(jù)可以是其他模型跑出來(lái)的,也可以是人標(biāo)注的。A Persona-Based Neural Conversation Model就是這種方法的一個(gè)經(jīng)典例子。

有一篇叫做CTRL: A Conditional Transformer Language Model for Controllable Generation的文章就是用的這種方法來(lái)訓(xùn)練一個(gè)language model。一般的language model在訓(xùn)練的時(shí)候,我們會(huì)找一大堆語(yǔ)料,然后讓模型在看到給定的tokens的情況下,預(yù)測(cè)出接下來(lái)的tokens是什么。CTRL這篇文章會(huì)在句子的最前面加上這個(gè)語(yǔ)料的來(lái)源,來(lái)源可以是Wikipedia,可以是Books,甚至是一個(gè)網(wǎng)址等等。不同的來(lái)源,句子的風(fēng)格是不一樣的。

然后我們用這樣訓(xùn)練得到的模型來(lái)進(jìn)行句子的生成,發(fā)現(xiàn)模型竟然知道哪一年的美國(guó)總統(tǒng)是哪位。

在Chatbot的訓(xùn)練中,有這樣給定了條件的公開數(shù)據(jù)集,比如Persona-Chat。這個(gè)就是facebook找了一堆人,然后告訴他們自己的人設(shè)是什么,然后讓他們對(duì)話得到的語(yǔ)料庫(kù)。

訓(xùn)練的方法也出奇地簡(jiǎn)單,直接把對(duì)人設(shè)的形容文字加到句子的開頭,放進(jìn)BERT去訓(xùn)練就可以了。TransferTransfo就是這樣做的,作者在訓(xùn)練的時(shí)候,還會(huì)去故意打亂描述人設(shè)的句子,因?yàn)檫@些句子間是無(wú)序的。

2.3 只有獨(dú)白

有些時(shí)候,我們只能拿到某個(gè)人設(shè)的個(gè)人獨(dú)白,沒法獲取到他的對(duì)話。這個(gè)時(shí)候,我們也是可以訓(xùn)練一個(gè)Chatbot來(lái)模仿該人設(shè)對(duì)話的。方法有很多種,下面依此介紹

(1)從已有的獨(dú)白當(dāng)中選取最有可能的回復(fù)。這種方法就保證了,回復(fù)必然是該人設(shè)說(shuō)過的某句話。

(2)用獨(dú)白訓(xùn)練一個(gè)language model,然后用這個(gè)language model來(lái)影響 Chatbot的輸出.

(3)用一個(gè)反向的模型來(lái)預(yù)測(cè)獨(dú)白中的某句話,是需要問話人說(shuō)怎樣的句子才會(huì)說(shuō)來(lái)的。用這種方法來(lái)制造數(shù)據(jù)。

(4)用有問有答的語(yǔ)料訓(xùn)練一個(gè)seq2seq模型,同時(shí)用獨(dú)白訓(xùn)練一個(gè)auto encoder。然后在訓(xùn)練的時(shí)候,兩個(gè)模型的decoder用的是同一個(gè)。這樣可以保證輸出與獨(dú)白的風(fēng)格類似。

(5)用Reinforce Learning或者GAN的方法,訓(xùn)練一個(gè)classifier來(lái)判斷輸出的句子和獨(dú)白的風(fēng)格是否相似。

3 展望

有時(shí)候,Chatbot說(shuō)出來(lái)了一個(gè)positive的句子,但在整個(gè)對(duì)話中可能是諷刺的意思。我們下一步的目標(biāo)應(yīng)該是如果希望Chatbot的對(duì)話是positive的,那Chatbot的整個(gè)對(duì)話給人的感覺應(yīng)該是postive的,而與Chatbot本身說(shuō)的話是positive還是negative無(wú)關(guān)。

總結(jié)

以上是生活随笔為你收集整理的Chapter7-12_Controllable Chatbot的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。