圖譜問答在小米小愛中的實踐探索

語言: CN / TW / HK

分享嘉賓 :代文 博士 小米 高階演算法工程師

編輯整理:何雨婷 湖北工業大學

出品平臺:DataFunTalk

導讀: 今天的介紹會圍繞以下三點展開:

  • 小愛同學應用場景

  • 資訊抽取

  • 圖譜問答

01

小愛同學應用場景介紹

首先和大家介紹一下小愛同學的應用場景。通過小愛同學,可以方便快捷的訪問小米的各種智慧硬體裝置,包括掃地機器人、電視、空調等。小愛同學主要包括內容、資訊查詢、互動、控制、生活服務、基礎工具這六大方面的服務。今天要分享的智慧問答,主要解決的是有客觀事實性答案的這一類query,主要是為了滿足使用者資訊查詢類的需求。

下圖是智慧問答的框架 ,主要由資料層、知識層、語義層、邏輯層、業務層、裝置層組成。在知識層,本文將分享資訊抽取的相關工作。邏輯層主要包括圖譜問答、檢索問答和文件問答,今天主要分享圖譜問答。在業務層,基於問答模組,可以在詞典、古詩、人物、星座、菜譜等不同的功能垂域來進行業務層的開發。最後,針對不同的智慧硬體,我們在裝置層上進行相應的適配,來滿足使用者在不同終端的需求。

目前,小米的知識圖譜實體量是數十億,三元組spo量超百億,這些知識囊括了書籍、本地生活、字詞、古詩、房產等不同領域的資訊。

02

資訊抽取

資訊抽取是指從非結構化的自然語言文字中提取結構化的知識,如實體、關係、事件等。關係抽取會預先定義好一個schema,然後抽取所有滿足schema約束的SPO三元組。事件抽取也是先預先定義好事件型別和論元角色,再從輸入的自然語言文本當中識別事件型別,以及這個事件型別對應的一些事件要素。這裡舉一個關係抽取的例子,“王雪純是87版《紅樓夢》中晴雯的配音者,她是《正大綜藝》的主持人”,我們需要去識別出來subject是王雪純,predicate是配音,object是人物,配音的人物是晴雯。這裡的object是一個複合型別,需要同時識別出來配音的角色是誰,屬於哪部影視作品。

這裡介紹的方案,是我們參加“2021語言與智慧技術競賽:多形態資訊抽取任務”的亞軍方案。我們主要從關係抽取和事件抽取兩個方面介紹資訊抽取。

1. 關係抽取

①難點

在關係抽取中,除了複雜o值之外,還有spo重疊這種比較常見的難點,如s和o兩個實體分別相同。例如,吳京是戰狼的主演,同時吳京也是戰狼的導演。此時吳京和戰狼這兩個實體,在這兩種關係中都是相同的。spo重疊還有另外一種形式是,s和o當中,其中一個實體是相同的。

②解決框架

解決框架主要由多模型粗召回和推理模型細打分兩部分組成。

  • 多模型粗召回——SPO模型

SPO模型 :首先通過指標網路的方式抽取s,然後根據s在schema當中對應的p,再通過指標網路的方式找到每一個p在文本當中對應的o的文字片段。上圖所示為SPO模型的大體框架圖,輸入文字後,首先通過編碼層對語義資訊進行表示,再通過解碼網路找到其中的subject,然後將這個subject和輸入文字連線起來,再在schema中獲取其涉及到的所有謂詞,通過指標網路來找到每個謂詞下是否存在對應的片段,從而找到這個p和o的結果。對於複雜o值,我們對當中各個槽位都分開來分別處理,並且結合位置距離來選擇最優的匹配,最終將複雜o值各個槽位得到的文字結果組合起來作為這個複雜o值的結果。

  • 多模型粗召回——PSO模型

PSO模型 :與SPO模型比較類似。我們首先通過分類模型來識別句子中描述的關係型別,再通過指標網路來抽取這個關係型別對應的subject和object。類似我們也可以對複雜o值的各個槽位分別處理,同時利用位置距離來選擇最優的匹配。

  • 推理模型細打分

通過SPO模型和PSO模型,得到一些三元組關係的候選佇列,還有一個精排的細打分模型。將召回的spo三元組和原始的句子拼接在一起,建模成一個語義相似度的任務,來衡量識別出來的spo三元組和輸入文字之間的語義相似度,從而進行細打分。我們可以設定一些閾值,選出置信度較高的一些spo三元組作為最終的抽取結果。

2.   事件抽取

①事件抽取——主要方法  

事件抽取的方法流派主要有三種:

第一種是流水線的方式 ,將事件型別和事件要素的抽取作為流水線串連起來,首先去預測事件型別,得到結果之後,再基於事件型別去預測事件的角色和事件的論元等相關要素的結果。另外基於觸發詞這種方式,流水線的模式是先抽取觸發詞,第二步再基於觸發詞去抽取對應的事件要素。

第二種是聯合的模型 ,將前述的事件型別預測和事件要素抽取聯合起來進行多工學習。為了讓多個子任務同時達到最優,收斂過程相對較難一些。

第三種是端到端的方法 ,我們對標籤組合進行了一些調整,將事件型別和事件角色名組合起來,構成一個新的標籤組合。通過BIO標註後可以一步到位地識別文字中包含的事件型別,和這個事件型別下每個角色的取值。因為是直接通過序列標註的方式抽取得到兩個結果,所以事件型別的分數我們無法得知,因此存在多種事件型別時處理不夠好。

如果事件型別的準確率較高,可以優先選擇流水線方式,因為事件型別本身誤差小,所以誤差傳遞的影響也不大。另外基於流水線方式比較便於後續進行分模組的分析優化。在文本當中存在多個事件型別的情況下,基於流水線方式,可以把第一步事件型別預測得到的多個結果,逐一輸送給第二步要素抽取的模型,分別識別每個事件型別對應的事件要素。它對多種事件型別的處理會更好。所以我們的選型也是採用的流水線的方式。

在模型的選擇上,常見的有指標網路和序列標註這兩種。指標網路的監督訊號比較稀疏,模型不好收斂。序列標註的缺點是處理不了overlap的問題。

由於任務中overlap佔比少,序列標註模型的準確率受overlap的影響並不大。另外也可以通過一些規則來部分地解決overlap的問題。同時序列標註的訓練更容易、效果也更好。所以在事件抽取任務中我們選擇了序列標註模型。

②事件抽取——事件型別和觸發詞識別聯合模型

在事件抽取任務中,有的研究者基於事件型別做要素的抽取,有的研究者基於事件觸發詞做要素的抽取。在這裡我們提出事件型別和觸發詞的聯合識別模型。我們發現事件型別和觸發詞實際上是相互影響的,比如“訂婚”這個事件型別,觸發詞不可能是“婚外情”。相反地,如果給的觸發詞是“婚期已定”,它對應的事件型別不可能是“出軌”。所以我們是通過聯合模型來同時對事件型別和事件觸發詞進行學習,以進一步提升預測的準確率。

如下圖所示,首先通過一個共享的編碼層來對語義資訊進行表示,輸出層中,事件型別預測採用的是線性輸出層,事件觸發詞識別採用的是一個CRF的輸出層。

在識別得到事件型別和事件觸發詞之後,我們設計了並行模型進行要素抽取。第一個模型基於事件型別,第二個模型基於事件觸發詞。在基於事件型別的抽取模型當中,我們將第一步識別得到的事件型別,連線到輸入的文字之前,再通過序列標註的方式來抽取對應的事件要素。

基於這種方式,我們發現結果會有一些欠召回的情形。比如上圖右框中的例子,實際上這個句子中存在一個明顯的觸發詞“懷孕”。但是事件型別預測模型就發生了欠召,沒能識別出它的事件型別。這時候如果是基於事件觸發詞來對這個事件要素進行抽取,則可以和基於事件型別的模型進行互補。

第二種方式,基於事件觸發詞的要素抽取。首先利用抽取得到觸發詞,然後計算每個token到觸發詞的距離,將距離對映為向量表示,級聯到語義的向量上,再接CRF層預測事件要素。

將這兩種方式抽取的事件要素進行投票組合,得到最終的抽取結果。基於資訊抽取模型得到的結構化知識,可以補充到知識圖譜中,作為下游圖譜問答的資料基礎。

03

圖譜問答

1 基於文法解析的方法

如下圖,對使用者query進行解析,從模板庫中找到與使用者query匹配的模板,再通過這個模板把使用者非結構的query解析成為結構化的查詢語句,進而從圖譜中去查詢得到答案。這個過程是比較簡單的,但主要的問題在於如何高效快速的獲取大批量的模板。一方面可以從線上高頻query進行擴充套件補充,這是從業務出發的一種方式,能夠儘快滿足使用者需求。第二種,可以通過挖掘的方式來自動化地獲取。

2.跨垂域粗粒度的槽位抽取方法

該方法的泛化效能會相對更好 。它的基模型是意圖識別和槽位抽取的聯合模型。通過這個聯合模型,對使用者query的意圖和槽位同時進行識別,從而回答使用者的問題。這種方式不依賴模板,所以泛化性更好。

通過這種方式進行垂域建設有一些 缺陷 。比如建設好一個古詩垂域,它包含查朝代、查上下句等功能點,包含詩人、詩名、體裁等槽位,在這個意圖和槽位體系之下,挖掘一些樣本進行模型訓練、線上部署,以回答使用者在線上的問題。如果又需要建設一個新的垂域,比如數學定理垂域,這個垂域不僅是一個新的垂域,而且也是一個低資源垂域,那麼我們不得不把古詩垂域建設的過程再重複一遍,而且小垂域的訓練樣本獲取也比較困難。

所以我們提出了一個跨垂域粗粒度的意圖識別和槽位抽取方法 。具體來說,是將不同垂域涉及到的槽位根據概念圖譜來進行抽象,比如詩人和提出者都屬於人物,那麼我就可以將詩人和提出者定義為人物這樣一個槽位。詩名和定理名,可以認為都是作品名。除了合併的槽位之外,各個垂域還有一些特有的槽位,我們將它們直接保留下來。與此同時,也把細粒度的意圖直接上升到粗粒度的意圖。這樣就可以聯合不同垂域的樣本,訓練一個跨垂域粗粒度的模型。在這種跨垂域的模型中,定理垂域就可以利用古詩垂域的訓練樣本,實現領域知識的遷移。

在模型訓練好之後,就可以在線上預測使用者query的意圖和槽位,最後通過對映關係,將粗粒度的槽位和意圖對映到細粒度的意圖和槽位之上,用於進行下一步的解析。

3.  基於路徑檢索的方法

基於路徑檢索的方式,不需要對使用者query進行解析,而是先檢索候選的路徑,然後從中進行篩選找到正確的解析路徑。這裡主要介紹我們參加“CCKS2021生活服務領域知識圖譜問答評測”的冠軍方案。

這次評測任務的難點在帶約束複雜query的問答,比如“北京故宮博物院附近2公里有哪些好玩?”或者“故宮附近5km內便宜的酒店是多少錢?”。

主要涉及兩類約束,第一類約束是 過濾約束 ,第二類約束是 排序約束 。對於這種帶約束的複雜query,我們需要做特殊的處理。

整體來講, 我們採用的技術方案的流程為 :第一步識別實體和屬性值,第二步進行路徑的挖掘,第三步進行匹配打分,第四步進行路徑排序,最終根據最優路徑從圖譜中查詢答案。

第一步我們需要從query當中找到這個問題涉及到的一些實體、屬性值、數值,主要採用三類方式:

①基於AC演算法的字面匹配,識別query中涉及到的字面值。

②模糊匹配。實際上使用者query中有一些實體提及mention和圖譜中實體名稱並不完全一樣。這時我們需要進行模糊匹配。通過建立倒排索引來找到和mention比較相關的候選實體,計算每個候選實體的編輯距離,來對候選實體進行排序。

③基於NER模型,來找到query當中可能涉及到的實體片段。

實體、屬性值抽取是基礎的一步,也是比較關鍵的一步,需要抽取到query中關鍵的語義資訊。如果沒有抽取到,後面路徑無論如何擴充套件,都不能找到正確路徑。

第二步,基於抽取得到的實體和屬性值,進行路徑的挖掘 。路徑挖掘主要包括兩個步驟,首先是基礎的路徑擴充套件,接著是對複雜query進行約束掛載。

路徑擴充套件,是以query中的抽取得到的實體為出發點,通過新增三元組來擴充套件路徑。中間節點可以繼續作為起始節點來新增三元組。同時我們可以將找到的不同路徑,在中間節點相同的情況下進行組合,形成語義資訊更豐富的一條路徑。通過這種路徑擴充套件和組合,儘可能多地挖掘候選路徑,最大可能的將query對應的正確解析路徑包含在候選隊列當中。

約束掛載如上圖所示 。“離天壇最近的酒店人均800以下酒店是哪一家”,首先通過路徑擴充套件得到上圖最上方所示的路徑,然後進一步約束CVT節點對應的距離值,同時對酒店實體X的價格約束為小於800。通過上圖方式,我們將約束可以看作一種特殊的三元組。比如要求價格小於800塊錢,那麼“小於”作為謂詞,“800”就是作為object值。對於排序約束,將“排序”作為謂詞,然後“降序”作為object。將約束資訊統一處理成三元組是為了下一步路徑匹配的需要。

我們總結了可以加約束資訊的常見屬性 ,比如平均價格、酒店入住時間、押金、距離值、房屋面積等。在路徑擴充套件過程中,如果發現某一個屬性的取值是數值時,就可以對它進行約束掛載,從而表達出query中的複雜語義資訊。

下一步是路徑匹配 。需要在候選路徑中找到最有可能的路徑。 具體方法為 :將路徑表達成文字的形式,把它建模成一個語義匹配的任務。 路徑的文字表示,這裡介紹三種方式 :第一種方式是設計一個模板將路徑表示為一句話;第二種方式是把這個路徑中的subject、predicate以及答案節點拼接起來;第三種方式和第二種方式相似,但是把中間節點通過[UNK]字元保留下來。通過實驗對比,這三種方式的匹配效果差異不大。選擇任意一種方式皆可。

經過路徑匹配排序之後,可以得到語義上和使用者query最接近的候選路徑,進一步還可以結合一些業務特徵對候選路徑進行重排序,最後從圖譜中查詢正確答案。

在評測結束之後,我們將這個方案在業務中進行了落地,落地時為了追求效能和效果的平衡,落地方案和前面稍有差別。在實體和屬性值抽取時,通過實體連結來找到query當中的核心的實體。在路徑挖掘時,自研了一套路徑檢索和路徑挖掘的方式,能夠提高路徑挖掘的效能。得到候選路徑後,我們會對候選路徑的規模進行約束,比如取前20條候選路徑進行語義匹配。最終輸出排名第一的候選路徑,從圖譜中查詢正確答案返回使用者。

這裡簡單介紹一下我們 自研的路徑檢索工具 。我們將圖譜裡的實體和關係,進行整型id的對映,然後通過一個節點索引表來記錄每個實體對應的SPO三元組,比如劉德華所對應的三元組的終止節點在661,也就是說找劉德華的三元組時,可以快速地在資料儲存表中的第0位到第661位進行查詢,這裡的查詢可以通過二分法進一步加速。通過這種方式使檢索耗時大大減少,記憶體的佔用也會非常的小。

最後我們列舉了幾個圖譜問答的示意效果圖。圖譜問答的結果更適應結構化展示的需求,能滿足精品化的產品需求,為使用者提供更好的使用體驗。

04

問答環節

Q:路徑的設定是否能通過神經網路模型去訓練獲得,還是都需要人工去制定路徑規則模板,有沒有一些高效的方法去獲取路徑和規則的方法?

A:神經網路方法可以用於獲取路徑,有一些研究論文這麼去做了。但是在產品中我們目前採用的還是人工定義的方式,一是因為這些人工定義的模板實際上可以覆蓋線上絕大部分的真實需求,二是因為通過人工模板挖掘路徑,耗時很小,更能適應線上效能的要求。

Q:關係抽取spo模型,對複雜o解析只需要考慮位置距離匹配嗎?還需要考慮標籤本身的概率嗎?

A:在關係抽取裡面,我們採用的是指標網路模型,它的優點是可以解決overlap問題,但缺點是解碼時可能有多個index候選,因此需要通過一些策略來選擇index,比如我們使用的位置距離特徵。也可以採用其他的特徵進行選擇。

Q:事件要素抽取模型,對每個事件型別預測角色的時候,是把schema定義全部角色都用CRF預測出來?還是最後根據事件型別保留相關的角色?

A:在抽取事件要素時,並沒有限定於第一步預測的事件型別,而是把所有可能的事件角色都抽取出來,然後再用第一步預測的事件型別進行篩選。

今天的分享就到這裡,謝謝大家。

在文末分享、點贊、在看,給個3連擊唄~

01 / 分享嘉賓

代文 博士

小米  高階演算法工程師

代文,小米AI實驗室知識圖譜組智慧問答業務負責人,2015年博士畢業於中科院自動化所。目前負責小愛同學產品的智慧問答系統研發,研究方向包括圖譜問答、檢索問答、文件摘要、多輪問答等。具有豐富的NLP工作經驗,曾獲得資訊抽取、圖譜問答等多項競賽的冠軍。

02 / 專題電子書 限時免費送

03 / 報名看直播 免費領PPT

04 / 關於我們

DataFun: 專注於大資料、人工智慧技術應用的分享與交流。發起於2017年,在北京、上海、深圳、杭州等城市舉辦超過100+線下和100+線上沙龍、論壇及峰會,已邀請超過2000位專家和學者參與分享。其公眾號 DataFunTalk 累計生產原創文章800+,百萬+閱讀,14萬+精準粉絲

  分享、點贊、在看 ,給個 3連擊 :point_down: