背景:這篇論文是卡耐基梅隆大學(xué)團隊構(gòu)建的一個名為RubyStar的聊天機器人系統(tǒng)。和亞馬遜的Alexa Prize有關(guān)系吻贿,就是那個智能音箱冤吨,亞馬遜舉辦了個類似比賽的東西,也類似基金的感覺我就不清楚了阵难。當(dāng)然這不代表這個系統(tǒng)就是alexa背后的機制有絕對關(guān)系岳枷。
自然語言理解部分(NLU)
這部分按照論文做了三件重要的事,話題檢測(Topic Detection)呜叫,意圖識別(Intent Analysis)空繁,實體鏈接(Entity Linking)
話題檢測
數(shù)據(jù)集使用Reddit評論,把用戶的輸入轉(zhuǎn)換為詞向量朱庆,然后經(jīng)過一個20棵樹的隨機森林盛泡,選出用戶輸入所在的話題,例如政治娱颊、生活傲诵、體育、娛樂箱硕、一般話題等等分類拴竹。
這個話題的分類也應(yīng)該會影響后續(xù)選擇如何回答用戶的分類依據(jù)。
意圖識別
意圖識別是從另一個角度來分類用戶輸入剧罩,就是判斷用戶可能想要的回答類型殖熟,例如:
- 是或否,類型的回答
- 尋求某個具體事實斑响,姚明的身高菱属?
- 尋求建議
- 喜歡的食物
實體鏈接
實體鏈接是從用戶輸入中提取重要實體,并把這個實體連接到某個類似知識圖譜的語義網(wǎng)結(jié)構(gòu)里舰罚,論文里是通過TAGME連接到wikipedia
這部分也是為了進(jìn)行一些模板式回答
例子(和論文里面的不一樣纽门,我隨便說的)
用戶輸入:我喜歡鋼鐵俠,你喜歡什么营罢?
實體:鋼鐵俠
超級英雄的知識圖譜例如包括三元組:<鋼鐵俠, has friend, 蜘蛛俠>
模板:我喜歡<entity>的朋友<has friend>
輸出:我喜歡鋼鐵俠的朋友蜘蛛俠
模板是針對<has friend>這個關(guān)系(relation)來做的赏陵,所以假設(shè)不是鋼鐵俠饼齿,而是其他的entity,只要有has friend蝙搔,也應(yīng)該能匹配到這個模板缕溉,例如:
用戶輸入:我喜歡炸醬面
實體:炸醬面
超級英雄的知識圖譜例如包括三元組:<炸醬面, has friend, 臘八蒜>
模板:我喜歡<entity>的朋友<has friend>
輸出:我喜歡炸醬面的朋友臘八蒜
多種回答模塊
模板式回答
就剛才實體鏈接里那樣,不重復(fù)
信息檢索
根據(jù)用戶輸入的實體吃型,和實體鏈接的結(jié)果证鸥,去推特上搜。然后去掉重復(fù)勤晚、拼寫錯誤枉层、比較無聊的推特之后,按照某個算法排序并返回推特的一句赐写、一段鸟蜡,或者什么,論文沒說的太細(xì)挺邀。
神經(jīng)網(wǎng)絡(luò)生成
使用sequence to sequence的深度學(xué)習(xí)模型揉忘,生成一個回答。
這種模型的缺點是端铛,經(jīng)常會生成“我不知道”癌淮,“謝謝你”,這樣比較沒用的模型(中文也類似沦补,我試過)
基本上也就是在沒啥好回答的時候乳蓄,隨便編排編排救個場。
選擇結(jié)果
就是從上面的那些不同模型夕膀,選一個答案出來虚倒。
論文對比測試了:邏輯回歸,線性SVM产舞,樸素貝葉斯三種模型魂奥,效果差不多
輸入是詞袋模型(bag of words)
最后用一個模型的confidence score作為上面的幾種回答模型的得分
上下文跟蹤(Context Tracking)
使用最近N條聊天記錄,和斯坦福的CoreNLP工具來追蹤上下文代指易猫,例如:
用戶:你知道中國嗎耻煤?
bot:我知道
用戶:你知道它的首都嗎?
bot:准颓?哈蝇??(這里需要知道攘已,它炮赦,指的是中國)
結(jié)尾
整篇論文提到了不少數(shù)據(jù)集,方法样勃,和trick吠勘,還是蠻有趣的
不過很多的細(xì)節(jié)和trick都是針對為了通用域性芬,更擬人化,讓人覺得跟機器瞎聊不太無聊而設(shè)計的剧防。筆者覺得通用域聊天機器人沒什么太大意義植锉,所以很多trick對于垂直的聊天機器人沒什么參考意義。
不過整體構(gòu)建思路應(yīng)該還是值得參考的峭拘。