一種基於模糊依存關係匹配的問答模型構建方法

來自專欄猿論4 人贊了文章

0 前言

基於傳統機器學習方法構建問答模型的主要工作是構建適合當前任務的特徵工程,在《中文自然語言處理建模過程中的特徵工程》一文中,我們介紹了很多可提取的特徵以及提取方法,主要的特徵集中在句法分析上。我們都知道,句法分析是NLP中的關鍵底層技術之一,也是構建特徵工程時經常用到的,其基本目標是確定句子的句法結構或者句子中辭彙之間的依存關係。

句法分析分為句法結構分析(syntactic structure parsing)和依存關係分析(dependency parsing)。句法結構分析以其目的不同分為成分結構分析(constituent structure parsing)或者短語結構分析(phrase structure parsing),成分結構分析以獲取整個句子的句法結構為目的,而短語結構分析以獲取完全短語結構為目的;依存關係分析則以獲取局部成分之間的依存關係為目的。

《Question Answering Passage Retrieval Using Dependency Relations》中通過對問題(question)和包含候選答案的句子(Sentence)間的依存關係的分析,提出了一種基於模糊依存關係匹配的問答模型的構建方法。實驗模型在不同數據集下,相比基於詞匹配和基於嚴格依存關係的模型效果要更好。分析這篇論文發現,在某些任務中,模糊依存關係可以作為特徵工程的一部分,所以記錄下來,以便未來建模需要。

1 背景

傳統問答系統定位答案的過程

  • 定位相關的文檔
  • 定位文檔中答案可能所在的段落
  • 在備選段落中精確定位,找到答案

這種傳統問答系統定位答案的方法並非一蹴而就,而是在不斷縮小答案可能所在的範圍。在這個過程中需要每一步都準確無誤,否則一步錯而步步錯。但段落的定位是而這種方法的重點和難點,如果連可能包含答案的段落都找錯了,那肯定不會找到正確的答案了。相反如果段落定位準確,即使答案的精確定位錯誤也不影響大局(可直接返回段落作為答案),因為有研究表明,一個段落足以包含回答問題所需要的信息,且用戶也更傾向於模型給出的答案是一個段落,理由是一個段落可以提供完整的答案上下文,有助於理解答案的含義。當然研究肯定不是隻止步於此,精確地回答問題依舊是問答系統或機器閱讀理解的最終目的。

在基於依存關係匹配來回答問題之前,就出現了基於詞匹配來回答問題。這種方法通過分析問題句與候選答案句之間辭彙來定位答案所在句子,這種方法過於追求句子間辭彙的匹配而忽視了詞之間的依存關係,比如,圖1展示了一個問題和四個候選答案句,其中S1為正確答案句,但分析這四個句子可發現,詞匹配最多的並不是S1

圖 1 基於詞匹配方法的例子

還有一種方法是基於依存關係匹配方法,但是匹配要求較為嚴格,對於語義相同但表述不同的情況也視為匹配失敗。但在實際應用中,在問題句和答案句的句法分析樹中,核心詞之間相似的關係往往有不同的表述方式,嚴格匹配容易把正確的當成錯誤的,即模型召回率低。

2 基於模糊依存關係匹配的問答模型構建方法

我們首先介紹瞭如何從依存關係樹中提取關係路徑並對其進行配對。然後計算兩條關係路徑的匹配分數,匹配分數包含了兩條路徑中單個關係的映射分數。

2.1 依存關係的提取-依存關係樹

依存關係樹的構建工具有很多,詳情可見《你需要知道的幾個好用的中文詞法分析工具》。《Question Answering Passage Retrieval Using Dependency Relations》使用了Minipar來構建依存關係樹,圖2展示了在圖1中問題句和答案句S1的依存關係樹。

圖 2 依存關係樹

在提取兩個句子的依存關係時,需注意以下幾點:

  • 雖然依賴關係是有向鏈接,但我們忽略了關係的方向;
  • 路徑長度不能超過預定義的閾值(7),其目的是排除異常長的路徑,因為Minipar只能可靠地解決附近的依賴關係;
  • 如果兩個詞屬於相同的塊(通常是名詞短語或動詞短語),我們忽略了它們之間的關係路徑(這是由MiniPar確定的),比如

『28』和『28 percent』

  • 為了確定依賴關係的相關性,對於兩個句子,提取出主要節點(node),並匹配它們在兩個句子中的依賴關係,node的類型一般為名詞、動詞和形容詞

在依存關係樹中,我們可以提取出主要節點的依存路徑,如圖3所示。

圖 3 主要節點的依存路徑

Minipar有42個主要的依存關係,比如subj (subjective) 表示主觀關係;mod (modifying) 表示修飾關係;pcomp-n (nominal complement of a preposition) 表示介詞的名詞補充。

2.2 模糊依存關係匹配分數計算

以圖3為例,我們需要計算問題句question的依存關係路徑(<subj>-<head, whn, prep, pcomp-n>-<gen>)和答案句S1的依存關係路徑(<pcomp-n, mod, i>-<obj, mod, pcomp-n>-<gen>)間的匹配分數,注意到這裡的node是一樣的。

我們將候選答案句子的關係路徑的匹配分數看作是從問題句中的對應路徑轉換到候選答案句的關係路徑的概率。計算公式如下。(這裡有個小思考:兩個關係路徑的最小編輯距離應該也可以作為模型特徵工程的一部分

其中,P_s表示候選答案句的依存關係路徑,其長度為nP_Q表示問題句的依存關係路徑,其長度為mRel_(s)_i表示P_s中第i個關係,Rel_(Q)_ai則為在P_Q中對應的關係;P_t(Rel_(s)_i | Rel_(Q)_j)表示兩種依存關係轉換的概率。這裡假設每一種關係都可以轉換成另一種關係,所以P_t(Rel_(s)_i | Rel_(Q)_j)是大於0,小於等於1的值,當P_t(Rel_(s)_i | Rel_(Q)_j)=1時,表示Rel_(s)_iRel_(Q)_j是一樣的,那麼自己匹配自己時,其匹配概率是100%。

分析語料庫,在實際依存關係匹配中,我們不需要匹配兩個句子所有的依存關係路徑,而是隻要從關係路徑中的每個關係中找到對應路徑中最可能映射的關係來計算匹配分數即可。於是公式可簡化為:

其中,A_i表示最有可能映射的關係組合。

最終的匹配分數計算公式為:

到這,我們只需要得到P_t(Rel_(s)_i | Rel_(Q)_j)就能計算最終的匹配分數,兩種依存關係的相關性通過依存關係路徑的雙向共現量(bipartite co-occurrences)來測量,計算公式如下所示:

其中,

為一個分段函數,當依存關係Rel_(Q)_jRel_(S)_i在依存關係路徑中都出現了,那麼其值為1,否則為0γ是兩條依存關係路徑長度之和的倒數。|Rel_(Q)_j|為所有問題句的依存關係路徑中包含依存關係Rel_(Q)_j的個數;|Rel_(S)_i|為所有答案句的依存關係路徑中包含依存關係Rel_(S)_i的個數。

從計算過程中,我們可以看出,如果問題句的長度越長,依存關係路徑也可能越長,那麼在一定程度上其包含的信息越多,得到正確答案的概率就越大。

作者: 死磕自己的研究僧

鏈接:imooc.com/article/28118

來源:慕課網

本文原創發佈於慕課網 ,轉載請註明出處,謝謝合作


推薦閱讀:

打造個人品牌 so easy !_慕課手記

記一次tablayout的tabView偷偷自帶padding的問題

騰訊雲SpringBoot部署 + HTTPS配置

tensorflow.js前端機器學習利器(1)-hello tfjs

移動開發者最愛的9個優秀Android代碼編輯器


推薦閱讀:
相關文章