教 Chatbot 生成更有营养的对话
Sequence to Backward and Forward Sequences: A Content-Introducing Approach to Generative Short-Text Conversation
https://arxiv.org/pdf/1607.00970.pdf
用一般的 seq2seq 框架來(lái)直接生成對(duì)話,經(jīng)常會(huì)有類似“哈哈”、“我不知道”的話產(chǎn)生,雖然很連貫,但信息量太少,沒有實(shí)際意義。那么,如何根據(jù)上文來(lái)生成相關(guān)的、有信息量的、甚至包括某個(gè)關(guān)鍵詞的對(duì)話?本文或許會(huì)給出一些啟發(fā)。
閱讀筆記精選
xwzhong
paper 依舊是想就生成式對(duì)話中解決通用性回復(fù)的問題,思路比較簡(jiǎn)單,在 decoder 時(shí),預(yù)選確定一個(gè)有意義的“詞”,在一定出現(xiàn)該詞的情況下進(jìn)行擴(kuò)充從而得到完整的回復(fù),關(guān)鍵部分如下:?
1. train:對(duì)于一個(gè)完整的 post-resp 對(duì),將“resp”隨機(jī)選取一個(gè) word 分割,前后部分設(shè)為 head 和 tail,對(duì) head 部分 reverse,得到 post-rehead,post-tail 對(duì),用兩個(gè)不同的 seq2seq 模型進(jìn)行訓(xùn)練;?
2. test/eval:使用 petrain 得到的 PMI 信息,計(jì)算出當(dāng)前 post 出現(xiàn)情況下,最“適合”出現(xiàn)的 word(“詞”級(jí)別),再依次使用反向和正向 seq2seq 模型得到完整的回復(fù);?
3. paper 提出的 idea 降低通用性回復(fù),主要因?yàn)轭A(yù)先使用 PMI 挑出了相對(duì)“有意義”的詞;?
4. 如果只是想進(jìn)行實(shí)驗(yàn),復(fù)現(xiàn)模型相對(duì)簡(jiǎn)單,可以直接套用 seq2seq 的 translate 代碼,再額外寫一個(gè) PMI 相關(guān)計(jì)算;?
5. 就此模型而言,效果的好壞主要應(yīng)該在于 keywords 詞表以及 test/eval 部分 keyword 的選取;?
6. 在 train 部分,不知道在選取 word 進(jìn)行 split 部分,使用 test/eval 一樣的選取方式效果會(huì)不會(huì)更好?
Miao
本文提出的模型有三部分(看 Figure 1): a. keyword prediction, b. backward seq2seq model c. forward seq2seq model 關(guān)于 a 大家討論了不少了;b 和 c 是兩個(gè) seq2seq model,本文使用的是將 encoder 得到的內(nèi)容通過 hidden state 傳遞給 decoder 的 seq2seq 模型,沒有使用 attention 機(jī)制,屬于比較簡(jiǎn)單的模型;c 是一個(gè)標(biāo)準(zhǔn)的 seq2seq 模型,在訓(xùn)練過程中都不需要考慮 keyword 的問題,比較簡(jiǎn)單;我感覺本文最大的關(guān)注點(diǎn)和亮點(diǎn)在 b,有幾點(diǎn)思考:?
1. 傳統(tǒng) seq2seq 模型中 decoder 產(chǎn)生的第一個(gè)詞對(duì)于整個(gè)句子的生成是比較重要的,會(huì)影響內(nèi)容的質(zhì)量,也會(huì)影響多樣性;而 backward seq2seq 可以使得 reply 的第一個(gè)詞的多樣性提升,從而提升 reply 的多樣性;從 table 2 中的例子可以看到,傳統(tǒng)的 seq2seq 模型的回答大部分是“我怎么怎么”,這種回答看上去質(zhì)量也比較差,更像 general reply,而本文模型的回答第一個(gè)詞多樣性大,顯得質(zhì)量較高,我感覺這個(gè)非常有趣;?
2. 因此,backward seq2seq 的好壞對(duì)于 reply 的生成是非常關(guān)鍵的;?
3. 而 backward seq2seq 需要的能力是比較強(qiáng)大的:需要給定一個(gè) post,以及 reply 任意一個(gè)位置的詞,然后向前生成 reply,這個(gè)能力和傳統(tǒng)的 seq2seq model 需要的能力是有一些微妙的區(qū)別的。我感覺這個(gè)能力用本文這樣的 seq2seq model 來(lái)實(shí)現(xiàn)有些別扭,如果能有更好的 backward seq2seq model,會(huì)不會(huì)能顯著的提升 reply 的質(zhì)量。
weijinfeng
本文所解決的問題跟上周的論文基本是一致的,都是通過引入先驗(yàn)知識(shí)到生成過程中,所不同的是,本文只是引入一個(gè)詞,并且限定是名詞,而且還將應(yīng)用場(chǎng)景定位為短句對(duì)話。 模型本身相對(duì)比較簡(jiǎn)單,就只對(duì)前面這幾個(gè)限定說(shuō)一下個(gè)人的理解。?
首先是,1)為什么選取一個(gè)詞,這應(yīng)該是基于短句概念提取的一個(gè)假設(shè),就是一個(gè)短句是以一個(gè)詞(應(yīng)該包括復(fù)合詞)為核心,輔以描述或限定性成分以及其他成分組成。當(dāng)核心概念詞提取出來(lái)后,又因?yàn)閛pen domain對(duì)話的內(nèi)容開放性的特點(diǎn)(比如,只要回復(fù)說(shuō)的是這個(gè)事,至于說(shuō)什么不重要),再擴(kuò)展出其他成分來(lái)就可以了。
其次是,2)為什么是名詞,有同學(xué)的批注也提到了這個(gè)問題,看到?jīng)]有人回復(fù),說(shuō)下自己的看法。根據(jù)1,一個(gè)短句需要映射到唯一的詞作為整句的概念抽象或者核心表達(dá)詞,那么詞的詞性就需要斟酌一下了。用排除法來(lái)做,很顯然除了主謂賓的其他成分在一個(gè)句子中起核心作用的時(shí)候相對(duì)是比較少的。有同學(xué)也提到了核心詞選取的重要性,所以一旦選了非主要成分作為核心詞,后面再生成好回復(fù)的概率也比較小了。另外,從語(yǔ)法結(jié)構(gòu)上來(lái)說(shuō),主語(yǔ)一般是名詞或者代詞,謂語(yǔ)一般是動(dòng)詞,賓語(yǔ)一般是名詞或者代詞。從概率角度來(lái)講也是選名詞覆蓋范圍更大一些。?
最后,3)為什么從一開始就定位為短對(duì)話生成,我覺得主要原因是因?yàn)閞eply的產(chǎn)生是由用PMI方式選出來(lái)的key word為中心擴(kuò)展出來(lái)的,這種擴(kuò)展雖然可以無(wú)限延長(zhǎng),但是隨著跟key word距離的增加,關(guān)聯(lián)性也會(huì)逐漸降低,難免會(huì)出現(xiàn)句子不通暢的情況,所以定位為短句的回復(fù)更為有效一些。
?Q&A 精選
Miopas
Specifically, our seq2BF model works as follows.seq2BF model 分成兩個(gè)部分:?
1. 先把 query 作為 input,經(jīng)過第一個(gè) seq2seq 的模型得到一個(gè) output sequence,作為前半句 reply;?
2. 然后把 query 和前半句的 reply 作為 input,輸入第二個(gè) seq2seq 模型,得到后半句 reply;
3. 最終的 reply = 前半句 reply + keyword + 后半句 reply。 有個(gè)疑問,這個(gè)應(yīng)該是一個(gè) infer 的過程,train 的過程是需要切分訓(xùn)練集里的 reply 的吧,怎么切分 reply 的?
Miopas:?在 2.4 里寫了,是隨機(jī) sample 了一個(gè) word 作為 split word,看漏了。這樣的話實(shí)際上 seq2BF 的模型在 train 的時(shí)候并沒有用到 keyword noun 的信息?
wumark:?不是先生成前半句再生成后半句的。他這個(gè)生成方式比較麻煩,固定 r_k 生成 r_k+1 再前向生成 r_k-1,再后向 r_k+2(利用 rk 和 rk+1),之后再 rk-2(利用 rk-1,rk 和 rk+1),時(shí)間復(fù)雜度很高。?這個(gè)模型最開始并不是生成對(duì)話的,是生成詩(shī)歌的,百度用了同樣的模型生成了詩(shī)歌,也發(fā)表在 coling2016。
Miopas:?重新讀了一下,感覺你說(shuō)的是對(duì)的。之前這個(gè)地方的 Equation 5 沒怎么明白,對(duì)照一下應(yīng)該是你說(shuō)的那樣。不過有個(gè)問題,這里下一段寫"the forward generator is aware of the backward half sequence"看上去是在說(shuō)生成后半句的時(shí)候,已經(jīng)得到完整的前半句了,這里是什么意思呢?
wumark:?我也細(xì)致地看了一下,我說(shuō)的是有問題。按照他的表述他應(yīng)該是后向生成到頭,然后再拿前向的重新再讀一遍,再把前面的生成了。不是每個(gè)字交替一下,是一次生成完了,之前理解錯(cuò)了
mike
Because we have far more Chinese terms than English words, our seq2BF is trained in the character level out of efficiency concerns.PMI keyword 統(tǒng)計(jì)模型是基于詞粒度的,而 seq2BF 中的 RNN encoder 和 decoder 都是基于字粒度的。這里給出使用字粒度的理由是漢語(yǔ)詞太多,隱含的意思是詞粒度容易出現(xiàn) OOV 問題,所以使用字粒度? 有沒有同學(xué)對(duì)比過詞粒度的 seq2seq 和字粒度的 seq2seq 生成結(jié)果的區(qū)別呢??
另外,從 Table 1(a) 中看到,seq2BF 生成的 reply 的長(zhǎng)度平均在 5.6 個(gè)字,而 Groundtruth 也就是實(shí)際 reply 的長(zhǎng)度也就在 9.19,因此數(shù)據(jù)集中的回復(fù)是偏短的,會(huì)不會(huì)也因?yàn)閿?shù)據(jù)集是比較短的 post-reply 才考慮選擇的字粒度呢?
xwzhong:?1.?文中直接說(shuō)明是出于“efficiency concerns”所以用了 char-level,當(dāng)然,你提到的使用 word-level 確實(shí)是會(huì)出現(xiàn) OOV 情況。2. 個(gè)人做過相關(guān)實(shí)驗(yàn),同個(gè) post,使用 seq2seq 得到的 response 其平均長(zhǎng)度比對(duì)應(yīng)訓(xùn)練集中 groundtruth 小 4 左右(實(shí)驗(yàn)進(jìn)行了變量控制,post 出現(xiàn)次數(shù)、response 不同長(zhǎng)度)
xwzhong:?word-level 和 char-level 各有好處,可以從效率、顯存占用、語(yǔ)義表達(dá)角度去考慮(涉及到的東西比較多),但是從使用 seq2seq 模型來(lái)做生成式對(duì)話系統(tǒng),僅僅對(duì)比 word 和 char-level 的區(qū)別很小。
Miaosen
PMI prefers a word that is most “mutually informative” with the query這樣選擇的 keyword,會(huì)不會(huì)在 language model 中也比較少見,導(dǎo)致很難生成流利的回答?(比如 keyword 是某款汽車型號(hào))。其實(shí)很多 keyword 雖然不一樣,但是其實(shí)是類似的意思。在生成 response 的時(shí)候,是不是可以選擇用 embedding 來(lái)做?
mev:?這樣就有點(diǎn)像主題信息而不是關(guān)鍵詞信息了,可以嘗試用主題詞來(lái)替換關(guān)鍵詞,但這樣做的話會(huì)不會(huì)影響生成的回復(fù)的多樣性呢?
cuixiankun:?限定關(guān)鍵詞在本身上就限定了生成的多樣性吧。
來(lái)源:paperweekly
原文鏈接
總結(jié)
以上是生活随笔為你收集整理的教 Chatbot 生成更有营养的对话的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从道的角度来论述大数据对企业价值
- 下一篇: c语言中数组名a和a详细介绍