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