論文地址html
論文源碼git
COMET是一個自適應框架,用於經過在知識元組的種子集上訓練語言模型來從語言模型構建常識知識庫。這些知識元組爲COMET提供了必須學習的知識庫結構和關係,COMET學習調整從預處理中學習的語言模型表示,以向種子知識圖添加新的節點和邊。github
採用GPT的語言模型架構構建COMET。網絡
多頭注意力機制 —— 顧名思義, 注意力由多個頭部組成,每一個頭部使用查詢 \(Q\) 和鍵 \(K\) 來計算一個惟一的點積注意力分佈。架構
其中,\(d_{k}\) 爲 $ Q, \space K, \space V $ 的輸入向量的維度。對於每一個注意力頭來講,在計算注意力以前, $ Q, \space K, \space V $ 被一組矩陣惟一映射。(對應a圖藍色部分)框架
\(H_{i}\) 爲單個注意力頭的輸出, \(W_{i}^{Q}, \space W_{i}^{K}, \space W_{i}^{V}\) 爲特定頭的關於 \(Q, \space K, \space V\) 的映射矩陣。函數
同時,多個注意力頭的輸出將被鏈接在一塊兒。(對應a圖紫色部分)性能
其中 \(W^{O}\) 爲輸出的映射矩陣。學習
多頭注意力的輸入測試
如b圖所示,當前層多頭注意力的輸入來源於上一層Transformer Block的輸出。其中,輸入的 \(Q\) 對應於上一層Block的輸出 $ h_{t}^{l-1}$,而 \(K\) 和 \(V\) 對應於全部先前時間步長的前一層塊的輸出 \(\mathbf{h}_{t}^{l-1} = \left\{h^{l-1}\right\}_{<t}\) 。
如b圖所示,每一個Transformer層包含一個架構上相同的Transformer Block塊(儘管具備惟一的可訓練參數),該Transformer Block對該塊的輸入應用如下變換:
其中,\(\tilde{g}^{l}\) 爲多頭注意力的輸出,\(FFN\) 是一個兩層的前饋神經網絡(Feedforward Network), 而 \(LAYERNORM\)層是對多頭注意力層輸出以及前饋層輸出的正則化操做,操做的輸入包含一個殘差鏈接,該鏈接將前一個操做的輸出和輸入相加。
文本嵌入 —— $ \mathbf{X}= { X^{s}, \space X^{r}, \space X^{o} } $, 其中 \(X^{s}, \space X^{r}, \space X^{o}\) 分別表明知識元組 \(\{s ,r, o\}\) 中每一項的單詞序列,$ \mathbf{X}$ 爲三者的串聯。對於任意 \(x_{t} \in \mathbf{X}\) ,單詞 \(x_{t}\) 的單詞嵌入爲 \(e_{t} = \sum x_{t}^{i}\) ,這裏的 \(\sum\) 爲向量和。
爲什麼單詞嵌入是一種向量和的形式?
這是由於GPT採用字節對編碼(BPE)的方式構建字詞,準確來講,GPT以子詞表中子詞做爲詞嵌入的基本單位的,這裏輸入的文本中的完整單詞在字詞表中多是好幾個字詞之和,因此在表示完整單詞的文本嵌入時,用的是子詞嵌入向量的和。關於字節對編碼的具體步驟,我以前的一篇文章中有提到,這裏再也不贅述。
位置嵌入 —— 由於transformer是一種自注意力模型,沒有token順序的概念,因此引入位置編碼 \(p_{t}\) 來指示模型各個token在文本序列中所處的絕對位置。
最終輸入 —— $ h_{t}^{l} = e_{t} + p_{t} $, 其中 \(l\) 表示transformer層數, \(t\) 表明第 \(t\) 個時間步。如c圖所示,第一層的輸入爲: \(h^{0} = e_{0} + p_{0}\),
已知前 \(t-1\) 個生成的token \(x_{<t}\) ,當前第 \(t\) 個位置生成token \(x_{t}\)的機率爲:
其中,$ |s|, \space |r|, \space |o|$ 分別爲短句主語、關係、賓語對應的token數目。 這裏 \(h_{t}\) 表示在解碼時GPT對\(x_{t}\) 的最終表示,\(\mathbf{W}_{\text {vocab}}\)是GPT使用的詞彙表的嵌入矩陣。
實驗數據集 —— ATOMIC 和 ConceptNet
輸入構造
模型參數初始化 —— 使用GPT的預訓練模型權重初始化模型,爲了微調,往詞彙表中加入了一些特殊的token。例如,關係嵌入(如oReact for ATOMIC和IsA for ConceptNet)是經過從標準正態分佈中採樣來初始化的。
超參設置
對應到實驗中,ATOMIC事件(例如,「X goes to the store」)是短語主體 \(s\) ,xIntent是短語關係 \(r\) ,causes/effects(例如,「to get food」)是短語客體 \(o\)。訓練集/開發集/測試集的數目分別爲:710k/80k/87k
上圖爲採用自動評估標準的評估結果(評估的是生成 \(o\) 的質量和新穎性,第一列對比的模型爲ATOMIC提出文章中的baseline,後面兩個是論文提出的COMET模型。從第二列開始都是評估的指標,第二列是困惑度PPL,第三列是BLEU-2,第三列是模型生成元組所佔的比例,第四列是模型生成的未出如今訓練集元組中 \(o\) 所佔的比例(元組新穎性),爲了證實模型生成的元組新客體不是惟一的,把產生的新客體的數目做爲測試集事件產生的惟一客體集合的函數,就是第五列。
BLEU-2的評估結果代表,COMET模型超越了全部baseline的表現,比表現最好的baseline實現了51%的相對錶現提高。對於人工評估的結果,COMET報告了統計上顯著的相對Avg性能,比最高基線提升了18%。
爲了評估在大型語料庫上的預訓練如何幫助模型學習產生知識,訓練了一個沒有用預訓練權重初始化的COMET版本(COMET(- pretrain))。經過在不一樣比例的訓練數據上訓練模型來評估方法的數據效率。
最後,由於最終目標是可以執行高質量、多樣化的知識庫構建,因此探索了各類解碼方案如何影響候選知識元組的質量,採用了不一樣生成策略進行了實驗,這些策略包括:argmax貪婪解碼、波束大小的波束搜索、b=二、五、10和k = 五、10的top-k採樣。對於每種解碼方法,對每種方法產生的最終候選數進行人工評估,結果以下:
上述結果代表,使用貪婪解碼來產生知識元組,與人工評估ATOMIC測試集相比,僅存在10%的相對性能差距,代表由模型產生的知識接近人工性能。
對應到實驗中,各選取了1200個三元組做爲測試集和開發集,包含34個關係類型的100k版本的訓練集用於訓練模型。
生成質量評估
爲了評估生成知識的質量,給出在測試集中生成的正面示例的數量,這些正面示例被評爲正確。對於給定的 \(s \space r \space o \space\)元組,考慮該模型產生元組是否正確的機率,以50%的機率對分數進行閾值化,以識別正確的預測。
結果代表,該模型能夠生成高質量的知識:上表中的低困惑度(PPL)分數代表其預測的高模型置信度,而高分類器得分Score(95.25%)代表知識庫補全模型在大多數狀況下將生成的元組評分爲正確。在人工評估(遵循與ATOMIC相同的設計)中,貪婪解碼獲得的元組的91.7%被評爲正確。
生成新穎度評估
\(N/T \space sro\) 達到了59.25%,說明有接近6成的生成元組未出如今訓練集中,顯示該模型可以在節點之間生成新的邊,甚至建立新的節點(\(N/T \space o = 3.75\) ,即3.75%的節點是新的)來擴展知識圖的大小。可是須要注意的是,有一些新產生的元組僅僅是訓練集中元組的簡化形式。爲此論文進行了研究,這些簡化形式的新元組到底有多少。結論是大多數產生的新元組與訓練集中它們最接近的元組具備明顯不一樣的單詞序列。
本文引入常識轉換器(COMET)來自動構建常識知識庫。COMET是一個框架,用於調整語言模型的權重,以學習生成新穎和多樣的常識知識元組。在兩個常識知識庫ATOMIC和ConceptNet上的實驗結果代表,COMET常常產生人類評估者認爲是正確的新常識知識。這些積極的結果代表將來能夠尋求將該方法擴展到各類其餘類型的知識庫上,以及研究COMET是否能夠學習爲任意知識種子產生OpenIE風格的知識元組。