1. 程式人生 > 其它 >筆記:Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism

筆記:Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism

Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism

作者:Xiangrong Zeng et al.,ACL 2018.

目錄

  • 簡介
  • 模型
  • 實驗
  • 總結

1 簡介

發現問題:近期之前的聯合抽取,如(zheng et al., 2017)的工作是假設每個實體只對應一種關係,但在實際生活中每個實體可能參與到多個關係中即關係重疊問題。
本文主要貢獻:

  • 基於sequence to sequence學習模型,結合copy機制提出了一種端到端的模型來聯合抽取句子中的實體和關係。
  • 此模型可以考慮到三元組關係重疊問題。
  • sota在NYT10。

2 模型

大致步驟就是encoder將變長sentence編碼為定長向量表示,之後decoder解碼結合copy機制獲取三元組。同時解碼器作者設計了兩種--OneDecoder、MultiDecoder。

2.1 OneDecoder Model

2.1.1 Encoder

先簡要說明以下編碼器,便於後續的說明。

就是普通的BLSTM,將sequence進行embedding後作為lstm的輸入,得到輸出,如下Eq (1),\(\mathbf{E}\)表示Encoder。

其中,\(o_t^E,h_t^E\)為時間步為t時的輸出和hidden state,\(x_t\)

為t時刻的輸入--句子\(\mathbf{X}=\{x_1,...,x_n\}\)
最後,我們用\(\mathbf{O^E}=[o_1^E,...,o_n^E]\)表示最後的輸出,其中\(o_t^E=[\overrightarrow{o_t^E};\overleftarrow{o^E_{n-t+1}}]\)表示第t個詞,同時使用最後的hidden state表示sentence即\(\mathbf{s=[\overrightarrow{h_n^E};\overleftarrow{h_n^E}]}\)

2.1.2 OneDecoder

如下圖Figure 2所示為OneDecoder整體結構。

單編碼模型整個結構的大致流程為:使用編碼器的輸出\(o_i^E\)作為解碼器的輸入,利用解碼器的輸出\(o_t^D\),根據時間步t(t%3 = 1 為預測關係,t%3=2為copy第一個實體,t%3=0為copy第二個實體)來分別copy實體或預測關係,最後預測如圖Figure 2的兩個暗紅色框。

同時實體的copy是根據計算句子中每個詞的概率後取最大概率的詞作為預測值,因此實體是可以複用的,那麼也就是說一個實體是可能參與多個關係的,即一定程度上解決了關係重疊的問題。下面具體展開解碼的每一個步驟,下圖Figure 3 (a)為單解碼的過程。

迴圈解碼

便於後續說明,上標\(E,D\)分別代表編碼器和解碼器。

解碼是按照時間步t每三步一迴圈,即每三個時間步一個元組,直到decoder生成NA三元組代表此句子所有有效的三元組均已生成完畢,這樣在T時間內就會生成多組三元組。如下圖為時間步為t解碼器的輸出。

其中,\(o_t^D,h_t^D\)分別為解碼器的輸出和hidden state,\(g(\cdot)\)為解碼器函式(本文實驗中用的都是lstm cell作為model的cell),\(h_{t-1}^D\)為上一次的hidden state,對於\(h_0^D\)我們使用Encoder中提到的句子的表示\(\mathbf{s=[\overrightarrow{h_n^E};\overleftarrow{h_n^E}]}\)來初始化,\(u_t\)為解碼器輸入。

對於t時刻的輸入\(u_t\)是由兩個向量的拼接而成,如下Eq (3)。這裡\(v_t\)沒寫錯就是\(v_t\)而不是\(v_{t-1}\),文中描述的是上一步t-1的預測作為這一步t的輸入\(v_t\)

其中,\(c_t\)為attention 向量,它的計算則是由如下Eq (4) (5) (6)計算得來的。

其中,\(\mathbf{w}^c\)為權重矩陣,說白了就是為了把維度變成計算時我們需要的維度乘了個矩陣而已。
我們要明白這三個公式是如何對應到Figure 2中的,對於decoder每一步的輸入\(u_t\)的獲取需要\(c_t\)\(c_t\)又取決於\(o_i^E\)(i,也是時間步為了與t區分罷了)和\(h_{t-1}^D\)\(o_i^E\)是不變的,那麼每一步的c的獲取就是讓每個詞對應的輸出\(o_i^E\)分別與\(h_{t-1}^D\)拼接乘w維度變換得到一個標量,最後就會得到一個向量\(\pmb{\beta}=\{\beta_1,...,\beta_n\}\), n為句子長度,之後做softmax後得到\(\pmb{\alpha}\),再去對\(O^E\)attention求和得到向量\(\mathbf{c_t}\),每個時間步都不斷重複此過程。

對於,\(v_t\)為預測的關係或實體,取決於t。

預測關係

假設我們有m個有效的關係,那麼我們使用一個全連線層來計算這個confidence vector(不知道怎麼翻譯好反正就是包含所有有效關係的向量,其中每個維度的值都可以看作是一個關係的得分)\(\mathbf{q^r}=[q_1^r,...,q_m^r]\), 如下Eq (7)。

其中,\(o_t^D\)為t時刻解碼器的輸出,\(W^r,b^r\)就是權重矩陣用於維度變換和偏置向量。同時,我們還有個NA三元組如下Eq (8)。

最後拼接兩個向量後做softmax得到分散式概率,\(p^r=[p_1^r,...,p_{m+1}^r]\),如下Eq (9)。

最後,我們使用概率最大的關係作為預測關係,正如Figure 2中的Prediction Relation。同時我們使用這個預測關係的embedding向量作為下一個時間步的輸入\(\mathbf{v_{t+1}}\)。這個關係的embedding哪來的沒搞懂?

預測第一個實體

t時刻,我們使用\(o_t\)和每個\(o_i^E\)拼接後做線性變換調整維度,後做非線性變換得到,\(q_i^e\),最後得到實體的confidence vector \(\mathbf{q}^e=[q_1^e,...,q_n^e]\)。上標\(e\)代表entity,\(r\)代表relation。

同樣類似關係預測,也要拼接NA三元組裡的NA實體後softmax得到關於整個句子每個詞的概率分佈,取概率最大的作為預測實體(這裡有一點不明白,實體可能包含多個詞,雖然後面實驗說明了copy實體時只copy最後一個詞,但怎麼保證概率最大的就是最後一個詞呢?),之後用這個詞的embedding向量作為下一次的輸入\(\mathbf{v_{t+1}}\)

預測第二個實體

第二個實體的預測和預測第一個實體基本一致,但有一點,由於三元組中兩個實體不能相同,所以這裡加了個mask向量做掩碼,來計算如下公式。

其中,\(\bigotimes\)為矩陣element-wise相乘。

小結

有了以上概念,基於上面的公式重新對Figure 2說明一下。

句子經過lstm編碼後得到每個詞的輸出交給解碼器作為輸入,解碼器結合\(h_{t-1}^D\)\(O^E=\{o_i^E\},i=1,...,n\)得到\(c_t\)之後拼接通過\(o_{t-1}^D\)得到的\(v_t\)得到最終的輸入\(u_t\)。根據時間步t%3=1,2,0,三步一迴圈分別預測關係和實體得到一個三元組,迴圈往復。其中對於每個時間步t的實體的copy,當前時間步t下,將\(o_t^D\)依次與每個\(o_i^E\)拼接計算得到copy的實體,如Figure 2中Entity Copy藍綠箭頭表結合拼接計算。對於每個時間步t的關係的預測僅使用\(o_t\)做變換得到維度為m的向量,依次對應一種關係如Figure 2中的\(r_1,r_2,r_3,r_4\)...藍色箭頭表關係對應。最後將暗紅色框中的預測值的embedding向量作為下一個時間步的輸入\(v_{t+1}\)

同時有幾個問題,(1) decoder為什麼要用\(\{v_{t};c_t\}\)拼接計算輸入;(2) 為什麼要用\(\{h_{t-1}^D;o_i^E\}\)的拼接計算\(c_t\);(3) 為什麼用decoder的輸出\(o_t^D\)就可以預測關係;(4) 為什麼用\(\{o_t^D;o_i^E\}\)的拼接預測要copy的實體;(3)(4)即為什麼\(v_t\)這麼算?

個人感覺可能有誤,對於(1)由於我們要預測下一個時間步的關係或實體就肯定需要context資訊,同時實驗中model cell用的都是lstm,那麼把上一步的預測值與c(為整個句子資訊的attention整合)結合使用作為輸入也合理;對於(2)由於每一時間步都需要進行依次預測一般也不同包括對實體關係的預測,那麼對於輸入或者說句子資訊整合的側重點應該也不同即每個詞的attention 權重每個時間步的側重不同,那麼如何知道該側重哪部分詞,就需要之前的資訊,所以結合上一個時間步的hidden state也合理;對於(3) t%3=1時是預測關係,\(o_t\)已經吸收了那麼多的輸入資訊,直接用它預測可能就足夠了也算合理?像實體copy一樣再拼接一下之前的資訊會更好麼?不太懂;對於(4) 不同於關係預測,實體預測需要copy原句中的實體,所以,也確實應該再加上原來實體的編碼資訊,所以可能只用\(o_t\)或許資訊不足?

2.1.3 MutilDecoder

如圖Figure 2 (b),與單解碼基本一致,唯一不同就在於,單解碼器一直使用同一個解碼器三步一小迴圈不斷生成三元組,而多解碼器則是依據時間步t的不同,不同時刻使用不同的解碼器,但這多個解碼器結構都一樣,怎麼就不是一個解碼器呢,區分在於幾個解碼器輸入不同,如下公式。

其中,上標\(D_i\)代表第i個解碼器。

2.1.4 Training

輸入一個batch的資料,大小為B,根據已知的每個輸入句子的目標結果即預測輸出(也就是每個句子包含的實體及關係),計算損失,網路目標最小化損失進行訓練。

其中,T代表時間步,實驗中取T=15,也就是說最多能預測三個三元組(一個時間步根據輸出預測一個關係或實體嘛)。

但沒看懂這個損失函式。這句話也沒看懂,根據實驗中描述用了NYT10資料集,但NYT10沒有這種形式的訓練資料標籤啊,它是以(e1, e2, relation, sentence)類似這種形式的資料一行代表一條資料,這個損失到底啥意思??不像是那種多分類的損失的計算,用標籤和預測標籤之間差值差異之類的???沒看懂。

3 實驗結果

設定 T=15,即最多預測五個三元組。

  1. 比不考慮複用的模型總體好,在複用問題上更是大幅領先
  2. 在 Normal 問題上,不如不考慮複用的模型,這說明我們模型判斷三元組對數的能力還有待提升(要能判斷出只有一對,那就不會落後了)
  3. 一句話的複用越多,效果越差
  4. 多解碼器模型好於單解碼器模型。這個結論作者是通過文字生成的任務判斷的,我沒看懂。\(^{[2]}\)

4 總結

真的強!

可以看看參考!理解的確實更深感覺,也很強,值得學習!

參考

【1】Xiangrong Zeng, Daojian Zeng, Shizhu He1, Kang Liu, Jun Zhao.Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism.ACL 2018.

【2】論文筆記 – Extracting Relational Facts by an End-to-End Neural Model with Copy Mechanism.https://ivenwang.com/2020/08/10/copymec/.