基於知識圖譜的問答在美團智慧交互場景中的應用和演進
- 2019 年 11 月 25 日
- 筆記
導讀:目前為止 IT 產業經歷了六次浪潮,分別為:大型機時代,小型機時代,個人電腦時代,桌面互聯網時代,移動互聯網時代和 AIOT 時代。在這些時代背後可以發現是人機交互方式的變化:從鼠鍵交互,到觸控交互,再到語音智慧交互,可以看到人機交互的方式在向更自然更直接化的方式演進。今天會和大家分享基於知識圖譜的問答在美團智慧交互場景中的應用和演進。
今天的介紹會圍繞下面三點展開:
- 智慧交互背景介紹
- 受限場景問答應用和演進
- 複雜場景問答應用和演進
——智慧交互背景介紹——
1. 智慧交互的劃分

智慧交互的劃分基本上是根據人類需求拆分:
- 檢索式交互—資訊獲取,比較經典的方法 FAQ:QA 匹配,QQ 匹配;
- 任務式交互—執行任務,比如訂機票 ( 酒店 ) 的特定任務;
- 閑聊式交互—娛樂與休閑,基於深度學習的端到端的學習系統。
2. 美團生活服務交互

美團是做生活服務的公司,覆蓋了餐飲、娛樂、酒店和旅遊等各個生活領域,以上這麼多種領域更適合哪種智慧交互方式,以及智慧交互方式是如何在場景中落地的,下文中都會進行說明。
3. 美團 APP 中的交互

下面先舉個例子,首先在商超場景下我們分析使用路徑發現,接近 4 成的用戶在商品 A 加入購物車後,會去查看其他商家與商品 A 相似的商品。這個行為很明顯是一個商品比較的訴求,而該訴求通過目前的功能交互方式很難完成。

再舉個例子,在打車場景下我們打車需要在 app 中進行 12-14 次頁面交互,app 交互比較瑣碎。而語言智慧交互只需要簡單的一句話就能完成,比如 " 幫我叫個快車,今天下午三點從天安門到北京西站 "。

以上交互的場景對知識有重要的依賴,需要使用知識幫助人們完成選擇:
- 餐飲:熱門商家,人均價格,推薦菜,適合人群,食材等;
- 商超:附近商家,距離,促銷商品,配送費,價格等;
- 電影:上映日期,導演,影片類型,影院,票價等;
- 酒店:房型,評價,星級,空調,早餐,價格等。
由於交互對知識有重要依賴,於是我們引入了基於知識圖譜的問答 KBQA。
4. KBQA 特點

由上表可以看到,KBQA 相對於其它技術的特點:
- 數據準備:KBQA 處於劣勢,需要建構知識圖譜,專業領域人參與並且較為複雜。
- 數據管理:KBQA 為知識結構易於管理和維護。
- 意圖判斷:KBQA 需要判斷意圖,定位到意圖下面的子圖,從而對子圖進行檢索,這樣精度比較高。
- 問題類型:可支援多跳,帶有約束的計算和推理,較為靈活。
- 結果精準性:由於知識結構,回答的精確性會比較高。
- 輪次:對於多輪問答能夠很好完成。
——受限場景問答——
1. 什麼是受限場景

受限場景有以下兩個特徵:
- 交互意圖和需求在確定性範圍
- 知識與資源處於封閉、收斂空間
例如到店點餐,點餐的意圖確定,並且資源也是有限的,商家和菜品都是確定的;同樣,機票預訂起落地點、倉位、價格、人數也是有限的;打車意圖是明確的,而地點可以任意選擇不是受限的,但是可通過高頻的地標建立受限的地點。
下面,會介紹一些受限場景具體實現方案。
2. 傳統基於知識圖譜的問答

首先介紹的是傳統基於知識圖譜的問答,該類問答主要分成兩大流派:
- Semantic Parsing-based KB-QA 把用戶的問題轉換為機器的查詢語句,直接查詢知識圖譜獲取答案。
- Information Retrieval-based KB-QA 使用端到端的方式解決問題。先抽取用戶問題中核心資訊,然後根據核心資訊定位到圖譜中確定子圖 ( 子集 ),最後生成答案。生成答案有兩種方式: ① 子圖的候選答案形成三元組逆向推導生成自然語言的問題和用戶原始問題做匹配 ② 子圖候選答案和周圍的資訊做 embedding 與原始問題 embedding 做匹配。
3. Semantic Parsing

通過《Semantic Parsing on Freebase from Question-Answer Pairs, EMNLP 2013》這篇論文介紹 Semantic Parsing 的幾個步驟:
- 把問句的詞語或者單詞與知識庫的實體或者關係進行映射,映射構成葉子節點。
- 直接對葉子節點使用鏈接、求交和聚合三種操作自下向上構建語法樹。
- 這三種操作中會存在多顆語法樹,需要構建一個分類器把正確的語法樹區分出來。最終語法樹的根節點則為輸出的查詢語句。
Semantic Parsing 會有一些局限,需要大量的自然語言邏輯表達式的標註,並且只能滿足有限的場景和邏輯表達。而 Information Retrieval 可以改進 Semantic Parsing 的限制。
4. Information Retrieval

同樣,通過《Question Answering over Knowledge Base with Neural Attention Combining Global Knowledge Information, arxiv 2016》闡述 Information Retrieval 的幾個步驟:
- 問題編碼,問題使用雙向 lstm 並加入答案的 attention 編碼;
- 答案編碼,把所有答案分成四塊進行編碼,分別為答案本身編碼,答案到實體邊的關係編碼,答案類型編碼和答案上下文編碼;
- 匹配,使用問題編碼和答案編碼進行匹配,最終輸出排名最高的作為匹配答案。
5. 效果比較

在 WebQuestion 數據集可以看到,Semantic Parsing+DeepLeanring 效果表現最好 f1 值在 45-55 之間。Information Retrieval 的端到端在複雜問題處理上表現不太好。
6. 面向美團場景

針對美團的場景技術如何選型呢?首先美團領域比較多,但是每個領域之間的關聯不是很強,其次模型的訓練樣本也比較少,希望能快速實現領域之間遷移。Semantic Parsing 需要大量的自然語言標註樣本,而 Information Retrieval 的可解釋性在目前工業界稍微差些。
我們做法將這兩者技術流派優點結合起來,通過 Information Retrieval 精確定位到有限空間的子圖中,Semantic Parsing 生成可解釋性的查詢語句。那麼技術步驟為首先做實體識別和鏈接,其次確定子圖,之後做關係識別,最後 SparQL 查詢輸出結果。這樣的優點為可通過規則和無監督冷啟動快速進行遷移。
7. 小結

在受限場景的問答,其特徵為資源內容、交互輪次、知識外延和意圖都是有限的;它可以實現基礎屬性問答、帶約束的資源查詢、動態屬性值計算和資源資訊比較。
——複雜場景問答——
1. 複雜場景定義

在美團,絕大多數都是複雜場景的問答。與簡單場景相比,其交互意圖與需求從確定的空間到模糊的空間,資源從封閉的數量到開放的數量。
這裡舉三個例子:
" 百威啤酒有沒有便宜的?",在商家點餐的受限場景下,百威啤酒指代就是商家所賣的幾款百威啤酒;但是在智慧音箱的複雜場景,百威啤酒指代的是家旁邊的超市所賣的百威啤酒還是旁邊酒吧做活動的百威啤酒呢?
" 下午四點鐘的復聯四還有沒有 IMAX 票了?",假設已經識別復聯四為一個電影,下午四點的時間如何與電影關聯起來,另外 IMAX 票為影廳的一個屬性如何與電影關聯起來呢?
" 第一個銷量多少?",很明顯用戶在多輪問題所問的,那麼第一個指代的是什麼呢?
2. 方案概述

以上三個例子,我們可以歸納成三大問題:實體爆炸、非連通查詢和融合上下文。
3. 知識建設面臨的挑戰

我們先介紹實體爆炸的問題。傳統的開放域知識圖譜是根據實體上層的概念節點 ( 抽象物理空間 ) 去建設的。比如:宮保雞丁、青島啤酒、復聯四,它們不是商家賣的商品,就是一個抽象的概念。但是美團場景下,面臨了挑戰,比如:青島啤酒原漿 5L 桶裝 ( xxx 超市,條形碼:yy… ),青島啤酒 10 度 500ml ( xxx 超市,條形碼:yy… ) 等這些都是實實在在商家賣的商品。這些實體如何與用戶資源關聯起來,並且把這些實體匯聚起來?
4. 三層概念節點
我們提出三層概念節點:產品 / 標品、同構非標品和異構純概念
- 產品 / 標品

能區別不同商品類別的屬性稱為標品類概念,比如條形碼可對商品做明確的區分,除此之外還有名稱、尺寸和規格等等屬性,這些屬性一致就稱為同類商品。
- 同構非標品

其定義為相同本體下,要求某些特殊屬性相同。沒有明確的屬性做商品類別的區分,但是特殊的屬性可以做區分,比如青島啤酒、車厘子 JJ 級等,他們的品牌相同,等級相同、類型相同。這些概念可以作為商品檢索詞。
- 異構純概念

異構純概念脫離了本體的概念,是由人類自行組織構建,形成的認知。比如消費的人群、消費的商圈,稱之為異構純概念。其給予場景化問答提供非常大的幫助。
5. 概念存儲

我們借鑒了 Freebase CVT 的存儲,將概念節點當作節點,真實售賣的商品為概念節點的 CVT 子節點,把 CVT 相似的屬性比如名稱和品牌等抽取出來作為概念的屬性。
6. 概念引入效果
① 實體鏈接的優化

舉個例子,咖啡在沒有概念的情況下,我想要咖啡會鏈接到很多資源 ( 咖啡類、咖啡店和超市賣的速溶咖啡等 );當概念引入後,會鏈接到概念節點上,再基於概念做鏈接和消歧,那麼就能直接鏈接到商家、品類和商品上,並且若用戶沒有召回資源的真實訴求,不會進入下一個實體層去查詢。
② 優化資訊查詢和對比類查詢能力

假設用戶查詢 " 青島啤酒和百威啤酒哪個便宜 " 在沒有概念的情況下,要查詢成千上萬個商品去做比較,但是概念的引入,只需要在概念層進行比較。
③ 缺失屬性補全

用戶在金百萬 ( 中關村店 ),問番茄炒蛋味道如何?假設知識圖譜不存在番茄炒蛋在這家店的味道,該如何回答呢?

有兩種方式:
第一,若存在番茄炒蛋概念且這個概念有味道屬性,可使用這個概念的味道屬性填充該問題;
第二,更好的方式:找到用戶問題最相似的子節點,即金百萬 ( 中關村店 ) 的子節點,發現其定義了番茄炒蛋和其味道屬性,可拿該味道進行填充。
7. 非連通查詢

在非連通查詢中會存在屬性傳遞 ( 傳遞約束 ) 的問題,舉幾個例子:
- 「我想吃簋街的小龍蝦」,簋街為一個商圈其不能與小龍蝦直接相連接;
- 「幫我找個辣的餐廳」,辣為菜的口味不能與餐廳直接相連接;
- 「幫我看一下下午 4 點復聯四還有沒有票」,復聯四與排片時間也不能直接關聯。
① 屬性傳遞

路徑遊走有兩種方式:
- 一是實體關係路徑遊走,例如 " 簋街 -> 胡大飯店簋街總店 -> 麻辣小龍蝦 -> 小龍蝦 "。
- 二是本體的路徑發現,遊走方式為 " 簋街 -> 地址 (本體)-> 訂單 (本體)-> 菜品 (本體)-> 小龍蝦 "。
② 在線路徑查詢

基於上面路徑發現之後,融入到現有的流程中,當用戶輸入 " 幫我找個辣的餐廳 ",首先做路徑的發現,「餐廳 -> 類型 -> 眉州東坡 -> 推薦菜 -> 毛血旺 -> 口味 -> 辣」,再形成 SparQL 查詢語句,得到結果就能回答用戶的問題。
③ 離線關係發現

既然眉州東坡大多數推薦菜的口味是辣的,那麼可以構建眉州東坡口味的邊為辣。同樣發現簋街多跳之後特色菜為小龍蝦,那麼也可以構建簋街的特色菜為小龍蝦…由此可見,在離線把邊補充足夠成分,那麼在線路徑查詢的壓力要小很多。
8. 融合上下文

用戶在外賣點餐的真實場景中,首先通過任務型交互給到用戶的商家列表,用戶可選擇商家以及對應的菜譜,然後從購物車裡篩選內容,最後下單。這個場景為狀態遷移的多輪交互任務。我們想在該場景中融合問答,那麼用戶在商家狀態下問該商家的推薦菜品,在菜品狀態問菜品口味,在購物車狀態問優惠券,也可以在下單後問訂單的狀態。那麼可以將任務型多元交互系統和問答系統融合起來。

我們提出了兩點改造:
- 理解層、生成層和輸出層適配多輪交互模組。
- 解耦 KBQA 內部組件,可獨立被外部模組調用。
在改造過程中遇到兩個難點:
- 理解複雜性提升,需要理解上下文的傳入槽位、id 與意圖。
- 執行複雜性提升,融合了問答之後任務狀態可隨時打斷或者變更。
具體的架構改造為:
- 理解層,加入了意圖重定向、指代消解、ID Schema 提取和槽位復用等。
- 生成層,Session 槽位對齊、Session Function 構造等。
- 輸出層,不會輸出答案本身,而是輸出查詢 Function 和意圖。
7. 小結

在複雜場景問答中,表述與意圖空間、資源內容、交互輪數、知識外延都是寬泛的。在該場景下不僅僅只有優化演算法本身,還需要知識建設和多輪交互系統做一個聯動的優化。