提出學習一個多跳知識路徑產生器來根據問題動態產生結構化證據。生成器以預先訓練的語言模型爲主幹,利用語言模型中存儲的大量非結構化知識來補充知識庫的不完整性。路徑生成器生成的這些相關路徑被進一步聚合爲知識嵌入,並與文本編碼器給出的上下文嵌入進行融合。python
從問題和答案選擇中提取實體算法
使用構造的路徑生成器生成一個多跳知識路徑來鏈接每對問答實體json
生成器學習將問題實體(紅色)和選擇實體(綠色)與生成的路徑鏈接起來,這些路徑充當QA的動態KG。網絡
將生成的路徑聚合爲一個知識嵌入,並將其與文本編碼器中的上下文嵌入相融合以進行分類。架構
從問題選項對中識別出問題中出現的實體和選項中出現的實體框架
使用隨機遊走從一個常識KG中抽取符號路徑,爲GPT-2知識路徑生成器採樣具備表明性的關係路徑做爲訓練的原始數據。dom
提升路徑質量函數
假設使用Random Walk採樣的這些樣本路徑包含和常識問答任務相關的知識,爲了保證這些採樣路徑的質量,制定了兩種啓發式策略:性能
保證相關性——定義了一個可能對回答常識問題有幫助的關係類型的子集。例如 {atlocation,isa}。在進行採樣以前,丟棄一些被認爲是幫助不大甚至無用處的關係類型,這些關係對於回答問題沒什麼幫助,這些關係包括:relatedto(相關)、synonym(同義)、antonym(反義)、derived-from(派生自)、formof(一種..形式)、etymologicallyderivedfrom(詞源派生自) 和 etymologicallyrelatedto(詞源相關)。學習
保證信息性——要求採樣的路徑不包含具備重複關係類型的邊,即路徑上每條邊的關係都是惟一的。
從靜態KG中隨機採樣一些實體,並從它們開始進行隨機遊走,獲得一些局部KG之外的路徑用於生成器的泛化。
此外,還爲每一個關係添加了一個反向關係,這樣採樣的路徑中不光有正向的路徑和有反向的路徑,這將使得路徑生成器更加靈活地鏈接兩個實體。
除此以外,還對具備混合跳數的路徑進行採樣,以訓練生成器在須要事用可變長的路徑來鏈接實體。對跳數從1到3的路徑進行採樣,以構造具備混合跳數的路徑集。從特定任務數據集的全局採樣和局部採樣中得到的路徑數以下表所示。將這兩種抽樣策略的路徑合併,並進一步將其分紅訓練/開發/測試集,其比率爲9:0.5:0.5。
在隨機遊走採樣的那些路徑上對GPT-2進行微調。
GPT-2是一種預訓練的大容量語言模型,它從龐大的語料庫中編碼出豐富的非結構化知識。用它來做爲路徑生成器帶來的好處是雙重的。
GPT-2 使用字節對編碼(Byte Pair Encoding)方式來建立詞彙表中的詞(token),也就是說詞(token)其實一般只是單詞的一部分。使用GPT2的字節對編碼(Byte-Pair Encoding)方法將上一步直接對知識圖進行隨機遊走採樣獲得的符號路徑轉換成GPT-2輸入的文本形式:\({x}=\left\{X_{0}, Y_{0}, X_{1}, Y_{1}, \ldots, Y_{T-1}, X_{T}\right\}\)
其中,\(X_{t}=\left\{x_{t}^{0}, x_{t}^{1}, \ldots, x_{t}^{\left|e_{t}\right|}\right\}\) 是實體 \(e_{t}\) 的短語token,而\(Y_{t}=\left\{y_{t}^{0}, y_{t}^{1}, \ldots, y_{t}^{\left|r_{t}\right|}\right\}\)是關係 \(r_{t}\) 的短語token。
這樣生成的文本形式的路徑,方可在GPT-2中做爲輸入。
BPE最先是一種數據壓縮算法,於2015年被引入到機器翻譯領域並很快獲得推廣。該算法簡單有效,於是目前它是最流行的子詞表構建方法。GPT-2和RoBERTa使用的Subword算法都是BPE。
BPE得到Subword的步驟以下:
例子:
假設有語料集通過統計後表示爲{'l o w ': 5, 'l o w e r ': 2, 'n e w e s t ': 6, 'w i d e s t ': 3},其中數字表明的是對應單詞在語料中的頻數。其中爲終止符,用於區分單詞的邊界。
step 1, 最高頻連續字節對"e"和"s"出現了6+3=9次,合併成"es"。輸出:
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w es t </w>': 6, 'w i d es t </w>': 3}
step 2, 最高頻連續字節對"es"和"t"出現了6+3=9次, 合併成"est"。輸出:
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w est </w>': 6, 'w i d est </w>': 3}
step 3, 以此類推,最高頻連續字節對爲"est"和"" 輸出:
{'l o w </w>': 5, 'l o w e r </w>': 2, 'n e w est</w>': 6, 'w i d est</w>': 3}
……
step n, 繼續迭代直到達到預設的subword詞表大小或下一個最高頻的字節對出現頻率爲1。
在以前的算法中,已經獲得了subword的詞表,對該詞表按照子詞長度由大到小排序。編碼時,對於每一個單詞,遍歷排好序的子詞詞表尋找是否有token是當前單詞的子字符串,若是有,則該token是表示單詞的tokens之一。
從最長的token迭代到最短的token,嘗試將每一個單詞中的子字符串替換爲token。 最終,咱們將迭代全部tokens,並將全部子字符串替換爲tokens。 若是仍然有子字符串沒被替換但全部token都已迭代完畢,則將剩餘的子詞替換爲特殊token,如
例子
# 給定單詞序列 [「the</w>」, 「highest</w>」, 「mountain</w>」] # 假設已有排好序的subword詞表 [「errrr</w>」, 「tain</w>」, 「moun」, 「est</w>」, 「high」, 「the</w>」, 「a</w>」] # 迭代結果 "the</w>" -> ["the</w>"] "highest</w>" -> ["high", "est</w>"] "mountain</w>" -> ["moun", "tain</w>"]
將全部的tokens拼在一塊兒,以\(</w>\)爲界定符。
例子:
# 編碼序列 [「the</w>」, 「high」, 「est</w>」, 「moun」, 「tain</w>」] # 解碼序列 「the</w> highest</w> mountain</w>」
經過BPE編碼和解碼,爲採樣的路徑構造出適合GPT-2的輸入的文本格式。
爲了進一步模擬生成器提供一個問題實體和一個選擇實體的場景,在每一個路徑的開始處添加最後一個實體短語標記 \(x_{T}\) 和一個單獨的標記[SEP]。這樣,生成器將知道在生成路徑時它應該輸出的最後一個實體。
將目標實體 + [SEP]標記 + 起始實體,即灰色部分交給GPT-2生成器來生成鏈接這兩個實體的路徑。
已知前 \(t-1\) 個生成的token \(s_{<t}\),當前第t個位置生成token \(s_{t}\) 的機率爲:
\(P\left(s_{t} \mid s_{<t}\right)=\operatorname{softmax}\left(\mathbf{W}_{\text {vocab}} \cdot \mathbf{h}_{\mathrm{t}}\right)\)
這裏 \(h_{t}\) 表示在解碼時GPT-2對 \(s_{t}\) 的最終表示, \(W_{vocab}\) 是GPT-2使用的詞彙表的嵌入矩陣。
爲了在給定實體對的狀況下最大化生成句子 \(s\) 的機率,將損失函數定義爲:
\(\mathcal{L}=-\sum_{\mathbf{s}} \log P\left(\mathbf{s} \mid X_{T},[S E P], X_{0}\right)\)
其中,\(P\left(\mathbf{s} \mid X_{T},[S E P], X_{0}\right)\) 爲條件機率的乘積,另外,因爲輸入的 \(X_{0}\) 和 \(X_{1}\) 以及 \([SEP]\)是固定的輸入,因此 \(t\) 的下標從 \(|X_{0}|+|X_{1}| + 1\) 開始。
\(P\left(\mathbf{s} \mid X_{T},[S E P], X_{0}\right)=\prod_{t=\left|X_{0}\right|+\left|X_{T}\right|+1}^{|\mathbf{s}|} P\left(s_{t} \mid s_{<t}\right)\)
本文常識問答的框架由兩個主要部分組成。第一部分是前面提到的路徑生成器。第二部分是一個上下文編碼器,它對問題和選擇進行編碼,以輸出一個上下文嵌入 \(c\) 做爲非結構化證據。
該論文實驗採用的文本編碼器爲BERT和Robert,兩種經常使用的文本輸入上下文編碼器。問題和選擇經過添加一些特殊的標記串接起來,而後輸入上下文編碼器獲得 \(c\) 。上下文嵌入 \(c\) 和路徑生成器生成的路徑進行Attention以後,輸出一個知識嵌入 \(p\) 做爲結構化證據。最後,這兩類證據被輸入分類器,爲每一個選擇輸出一個似然性得分。
路徑生成器GPT-2爲每對問題選項生成一條最終的推理路徑,對於生成的這些長度不一的離散路徑,將GPT-2中最後一層隱藏狀態的平均值 \(p_{k}\) 做爲路徑嵌入,從而最大限度地利用路徑生成器。
\(\mathbf{p}_{\mathbf{k}}=\operatorname{MEAN}\left(\left\{\mathbf{h}_{\mathbf{0}}, \mathbf{h}_{\mathbf{1}}, \ldots, \mathbf{h}_{\mathbf{T}}\right\}\right)\)
因爲GPT-2已經在一個大型語料庫上進行了預訓練,這樣的表示應該足以保存路徑的信息。
因爲並不是全部的路徑都會對決定哪一個選擇是正確答案作出同等貢獻,因此咱們利用非結構化證據,即上面提到的上下文嵌入c做爲編碼這種結構化證據的指導。
\(\mathbf{p}=W_{p r o j} \cdot \sum_{k} \alpha_{k} \mathbf{p}_{k}\)
其中 \(W_{proj}\) 是個可學習的映射矩陣,\(\alpha_{k}\) 爲每條路徑嵌入的注意力權重,其計算公式以下:
\(\alpha_{k}=\frac{\exp \left(s_{k}\right)}{\sum_{k^{\prime}} \exp \left(s_{k^{\prime}}\right)}\)
其中,\(s_{k}\) 的計算公式以下,注意力網絡由 \(W_{att}\) 和 \(b_{att}\) 參數化
\(s_{k}=\mathbf{c}^{\top} \tanh \left(\mathbf{W}_{a t t} \cdot \mathbf{p}_{k}+\mathbf{b}_{a t t}\right)\)
分類器利用路徑生成器產生的路徑嵌入 \(p\) 和文本編碼器產生的非結構化的問題選項的上下文嵌入 \(c\) 來計算問題選擇對的似然性。
如何計算似然性?
將 \(c\) 和 \(p\) 鏈接起來,並將它們提供給最終的線性分類層爲每一個問題選項對獲取一個最終得分,這裏涉及一個線性變換:
\(f(q, a)=\mathbf{W}_{c l s} \cdot[\mathbf{c} ; \mathbf{p}]+\mathbf{b}_{c l s}\)
最後經過一個softmax層對得分進行標準化,獲得全部選擇的最終機率。
BERT
RoBERTa
在該論文的框架中,使用了RoBERTa最後一層隱藏狀態的平均池做爲上下文嵌入,並將其輸入到線性分類器以得到分數。
當使用RoBERTa做爲上下文編碼器以及上面說起的路徑生成器以後,模型在CSQA的表現同baseline相比是最好的,可是當使用BERT做爲上下文編碼器時,表現並無優於全部使用靜態KG的模型。這是方法的侷限性,在某種程度上仍然依賴上下文編碼器來聚合具備註意機制的路徑。如何設計一個與文本模塊耦合較少的路徑生成器是從此的工做。
該論文提出了一種生成多跳知識路徑的生成器,做爲回答常識問題的結構化證據。爲了學習這樣一個路徑生成器,微調了GPT-2,從一個常識KG中隨機抽取樣本。而後生成器將每對問答實體用一條知識路徑鏈接起來。這些路徑被進一步聚合爲知識嵌入,並與文本編碼器給出的上下文嵌入進行融合。在兩個基準數據集上的實驗結果代表,該論文的框架在性能上優於強預訓練語言模型和靜態KG加強方法。除此以外,還證實了所生成的路徑在信息性和幫助性方面是能夠解釋的。將來的工做包括如何將生成器與文本編碼器解耦,以及如何更好地融合知識。