背景:這篇論文是卡耐基梅隆大學團隊構建的一個名為RubyStar的聊天機器人系統(tǒng)。和亞馬遜的Alexa Prize有關系,就是那個智能音箱,亞馬遜舉辦了個類似比賽的東西,也類似基金的感覺我就不清楚了。當然這不代表這個系統(tǒng)就是alexa背后的機制有絕對關系。
自然語言理解部分(NLU)
這部分按照論文做了三件重要的事,話題檢測(Topic Detection),意圖識別(Intent Analysis),實體鏈接(Entity Linking)
話題檢測
數(shù)據(jù)集使用Reddit評論,把用戶的輸入轉換為詞向量,然后經(jīng)過一個20棵樹的隨機森林,選出用戶輸入所在的話題,例如政治、生活、體育、娛樂、一般話題等等分類。
這個話題的分類也應該會影響后續(xù)選擇如何回答用戶的分類依據(jù)。
意圖識別
意圖識別是從另一個角度來分類用戶輸入,就是判斷用戶可能想要的回答類型,例如:
- 是或否,類型的回答
- 尋求某個具體事實,姚明的身高?
- 尋求建議
- 喜歡的食物
實體鏈接
實體鏈接是從用戶輸入中提取重要實體,并把這個實體連接到某個類似知識圖譜的語義網(wǎng)結構里,論文里是通過TAGME連接到wikipedia
這部分也是為了進行一些模板式回答
例子(和論文里面的不一樣,我隨便說的)
用戶輸入:我喜歡鋼鐵俠,你喜歡什么?
實體:鋼鐵俠
超級英雄的知識圖譜例如包括三元組:<鋼鐵俠, has friend, 蜘蛛俠>
模板:我喜歡<entity>的朋友<has friend>
輸出:我喜歡鋼鐵俠的朋友蜘蛛俠
模板是針對<has friend>這個關系(relation)來做的,所以假設不是鋼鐵俠,而是其他的entity,只要有has friend,也應該能匹配到這個模板,例如:
用戶輸入:我喜歡炸醬面
實體:炸醬面
超級英雄的知識圖譜例如包括三元組:<炸醬面, has friend, 臘八蒜>
模板:我喜歡<entity>的朋友<has friend>
輸出:我喜歡炸醬面的朋友臘八蒜
多種回答模塊
模板式回答
就剛才實體鏈接里那樣,不重復
信息檢索
根據(jù)用戶輸入的實體,和實體鏈接的結果,去推特上搜。然后去掉重復、拼寫錯誤、比較無聊的推特之后,按照某個算法排序并返回推特的一句、一段,或者什么,論文沒說的太細。
神經(jīng)網(wǎng)絡生成
使用sequence to sequence的深度學習模型,生成一個回答。
這種模型的缺點是,經(jīng)常會生成“我不知道”,“謝謝你”,這樣比較沒用的模型(中文也類似,我試過)
基本上也就是在沒啥好回答的時候,隨便編排編排救個場。
選擇結果
就是從上面的那些不同模型,選一個答案出來。
論文對比測試了:邏輯回歸,線性SVM,樸素貝葉斯三種模型,效果差不多
輸入是詞袋模型(bag of words)
最后用一個模型的confidence score作為上面的幾種回答模型的得分
上下文跟蹤(Context Tracking)
使用最近N條聊天記錄,和斯坦福的CoreNLP工具來追蹤上下文代指,例如:
用戶:你知道中國嗎?
bot:我知道
用戶:你知道它的首都嗎?
bot:???(這里需要知道,它,指的是中國)
結尾
整篇論文提到了不少數(shù)據(jù)集,方法,和trick,還是蠻有趣的
不過很多的細節(jié)和trick都是針對為了通用域,更擬人化,讓人覺得跟機器瞎聊不太無聊而設計的。筆者覺得通用域聊天機器人沒什么太大意義,所以很多trick對于垂直的聊天機器人沒什么參考意義。
不過整體構建思路應該還是值得參考的。