總述:
主要是有一個utterance rewriter的機制,將一句話裏面的省略和共指關係給找出來,然後形成一句新的話語,這樣顯示的聲明一句話的省略部分和共指詞可以提高對話系統的效果。具體來說對於task-oriented對話系統,提高了intention Precision(每一句話的意圖檢測),對於chitchat,提高了CPS:coversation-turns-persession(平均對話輪數)。
貢獻:
1.首先,作者和我都覺得最大的貢獻應該是一個標註了共指和省略關係的數據集,20w條對話
2.結合了transformer和point-generator從dialogu history裏面重寫當前這句句子,消除指代和省略
3.畢竟是wechat團隊,放在實時的chatbots裏面,效果很好
實驗:
我認爲這篇論文實驗做的很充分,所以單獨拿出來枚舉一下。
第一個實驗:
對比了直接生成模型(GEN),直接copy模型(PTR_NET),pointer-genertor模型,以及他的PTR-Y模型。其中,每一種模型,分別用transformer和lstm做encoder來比較transformer,lstm的好壞。
pointer-genertor模型和他提出來模型的不同,主要在於,pointer-genertorcopy的來源只有input和一個固定的詞表(整個vocab),但是PTR_y是從dialogue history 以及當前這一句話中copy,並且有一個哨兵y 決定是從historycopy'還是從當前這句話copy。
BLEU 和rouge就不解釋了,可以看下:https://blog.csdn.net/lwgkzl/article/details/100014922
EM:exact match,就是和標準答案做精準比較,然後EM還分爲positive sample和negative sample,這個positive 我覺得就是有共指關係和省略關係的句子,可以看到明顯結果比較差,只有55.8.negative 就是沒有共指關係和省略關係的,那麼直接copy就好了,所以結果比較好,也就是說這個模型可以很好的區分有沒有省略和共指關係,但是在如何copy省略和共指關係上還需要加油。
此外:顯然T-ptr-y最好。
第二個實驗:指代詞彙
計算了一下rewrite之後生成的句子中包含了原句子指代詞彙的precision 和recall。precision就是生成的這些詞彙中,有多少個是真的指代詞彙,recall就是需要生成的指代詞彙中有多少個真的生成了。
第三個實驗:省略詞彙
同指代詞彙,看precision 和recall,此外加了省略詞之後,還做了一個human evaluation評價了句子的流暢度。
第四個實驗:
將rewrite用於dialogue裏面,看看對intention precision 和CPS(平均對話輪數)有沒有幫助。
模型:
模型的話,相當於魔改了point-generator,不過魔改的比較多就是了。如圖所示:
左邊部分:
左邊是一個類transformer結構,不過他有兩個分別的輸入,一個是dialogue history(H),一個是當前用戶的話語(Un)將這兩個input輸入到一個transformer的encoder中,可以得到兩個兩個輸出Eh和En,如下公式
這兩個就是encoder的輸出部分了。接下來看看decoder怎麼做
右邊部分:
首先把已經生成出來的部分做一個self-attention,右邊下半部分就是做的這個事情。得到一個M
然後接下來就是把M和encoder得到的E結合起來了。可以形成兩個詞的分佈:
第一個:由M和E(h)做attention,不是self-attention,是long attention得到,表示從dialogue history中得到的信息
第二個:由M和E(n)得到,表示從用戶的上一句中得到的信息
然後這兩個詞的分佈該如何取權重呢,這就需要一個權重y。
其中:
可以看到這個y的權重是由M和Eh做multi-attention,M和En做multi-attention得到的。
一句話總結:
通過transformer來 抽取信息,得到dialogue history的詞以及當前句子的詞的分佈,之後應用一個類似於pointer-generator的結構決定下一句該copy哪一個句子的詞彙,去除用戶句子中的省略和指代。
ps:
今年另一篇指代和省略的論文,用的attention和copynet: https://blog.csdn.net/lwgkzl/article/details/102482928
論文地址: https://arxiv.org/abs/1906.07004?context=cs.CL
代碼: