DyGIE 信息抽取模型详解
Introduction
該模型來自于文章 A General Framework for Information Extraction using Dynamic Span Graphs , 簡稱 Dynamic Graph IE (DYGIE)模式, 是事件抽取中一些數據集的 SOTA.
這是一個多任務模型, 同時訓練的任務是 NER(命名實體識別), RE(事件抽取), coreferences solution(實體指代消解), 基本思想是這三個任務之間的相關性可以充分使用文本的信息,
這篇文章使用的實體關系抽取的解碼層的解碼方式是片段分類, 后面會給出細節, 這些片段向量構成圖神經網絡的節點, 邊是關系類型的權重或者指代消解的權重, (指代消解我并不是很熟悉, 只知道在本文的用法).
Model
Problem Definition
我們定義輸入為 (S= {s_1,...,s_T}), 表示所有的 Text Span, 最長的長度為字符長度 (L), 輸出根據三個任務, 分成三部分, 實體類型 (E), 同一句話中, 所有實體對 (S imes S) 之間的關系 (R), 句子之間的實體對應的 coreference links, 表示從一個句子中的實體到其對應的antecedent 之間的鏈接. 實際上是對于 Text span (s_i), 找到它的最優antecedent (c_i).也就是前一句中, 和它意義相同的 span.
Model Introduction
模型的基本思路是首先使用枚舉所有的 text span, 然后使用圖神經網絡來并入(整合) 整句話的信息到這個 text span representation(vector) 中, 整合信息(或者說加入鄰接節點信息), 的方式是使用臨近的 relation type 和 共指的實體.
Model Architecture
模型的整體結構如下, 我們會分部分解釋:
Token Representation Layer
輸入是按照句子級別輸入, 具體細節在代碼里面, 后面會分析, 分詞之后, 每個 token 的輸入是由 1. 字符表示, 2. Glove 預訓練模型的 embedding, 3. ELMo 的embedding, 然后將 token 的輸入經過 BiLSTM, 使用輸出作為每個 Token 的representation,
Span Representation Layer
對于一個 text span (s_i), 它的初始向量 (g_i^0) 也由三部分組合(concatenated)而成,
text span 的左側和右側的 token representation,
一個基于 Attention 的"head word"
還有一個embedded 后的span 的長度特征, 也就是長度特征的編碼
Coreference Propagation Layer
這一層是共指傳播層, 在上圖中就是 text span 枚舉后面的那一層, 我們可以看到輸入是 span 的初始向量, (g_i^0), 每次迭代的過程中, 輸入是 span 的representation (g_i^t) 我們首先為每個 span (s_i) 計算更新矩陣 (u_C^t) , 然后使用這個更新矩陣更新當前狀態, 得到下一個狀態 (g_i^{t+1}), 重復 (N) 次得到, (g_i^N), 這個向量就包含了 span (s_i) 的共指的span 的信息.
Relation Propagation Layer
我們將Coreference Propagation Layer 的輸出, (g_i^N), 作為這一層的輸入, 同樣, 我們首先計算span 的更新矩陣 (u_R^t), 然后計算 (g_i^{t+1}), 重復迭代 (M) 次, 那么輸出 (g_i^{N+M}) 就包含 relation 的信息.
Final Prediction Layer
這一層是三個任務的預測:
使用relation Layer 的輸出 (g_i^{M+N}) ,使用 (FFNN), 進行分類, 計算類別的 (P_E(i)).
對于每個 spans pair, (<s_i, s_j>) 使用對應的 (g_i^{M+N}) 和 (g_j^{M+N}) 的 concatenation, 經過 (FFNN), 計算關系類別
對于每個 span pairs,
Dynamic Graph Construction and Span Refinement
動態圖中的節點是span (S_i) 的第 (t) 輪迭代的 representation (g_i^t), 圖中的邊是共指或者關系的權重, 動態圖更新與構建的過程就是要更新span 的 representation 與邊的 representation.
Coreference Propagation
首先定義一組 spans 表示可能是共指的 spans, 用 (B_C) 表示這個集合, 用 (K) 表示對于一個 span 的antecedents的最大數量, 在集合 (B_C) 中, (P_C^t) 就表示集合中 spans 之間的coreference confidence scores, 它的大小是 (b_c imes K), (b_c) 表示集合(B_C)中 spans 的個數. 對于 (B_C) 中的一個 span (s_i), 假設其 antecedent 是 (s_j), 那么動態圖中的邊用 (P_C^t(i,j)) 來表示, 它的計算方式是:
首先計算 (V_C^t(i,j) = FFNN([g_i^t,g_j^t,g_i^t odot g_j^t])) 得到的 (V_C^t(i,j)) 是一個標量, 然后對于 (B_C) 中的所有 (j), 計算:
[P_C^t(i,j) = frac{exp(V_C^t(i,j))}{sum_{j' in B_C(i)}exp(V_C^t(i,j))}
]
我們可以看出, 動態圖中的邊表示的就是 spans 之間的coreference confidence scores, 我們根據這個邊,來計算spans representation 的更新矩陣:
[u_C^t(i) = sum_{jin B_C(i)}P_C^t(i, j)g_j^t
]
然后使用更新矩陣更新 (g_i^t) , 更新的方式后面會講, 有點類似與 LSTM 的門方式.
Relation Propagation
從圖的結構中, 我們知道, 關系圖是在共指圖的后面, 但是實際上, 更新的方式是類似的, 首先定義集合 (B_R) 表示可能有關系的 (b_r) 個spans, 不同于共指, 關系抽取, 兩個 spans 之間可能有多種關系, 而共指中只有一種關系. 假設關系的類別為 (L_R), 那么關系圖的邊表示 (V_R^t), 它的維度是 (mathbb{R}^{b_R imes b_R imes L_R}) , 這是因為需要表示 (L_R) 種關系, 其中一條邊計算方式是:
[V_R^t(i,j) = FFNN([g_i^t, g_j^t])
]
(V_R^t(i,j)) 的維度是 (L_R), 那么在關系圖中更新span representation 的矩陣 (u_R^t(i) in mathbb{R}^d) 計算公式如下:
[u_R^t(i) = sum_{jin B_R} f(V_R^t(i,j)) A_R odot g_j^t
]
其中 (f) 可以使用 ReLU函數進行分類, (A_R in mathbb{R}^{L_R imes d}) 是一個參數矩陣.
Updating Span Representations with Gating
之前我們講到的迭代, 感覺有點類似與 LSTM 的方式, 本質上只有一個模塊, 然后上層的輸出作為下層的輸入, 不斷迭代, 這里每次迭代更新 (g_i^t) 的方式有點類似, 使用門的方式, 更新的過程可以表示為:
[f_x^t(i) = g(W_x^f[g_i^t, u_x^t(i)]) \
g_i^{t+1} = f_x^t(i) odot g_i^t + (1-f_x^t(i)) odot u_x^t(i)
]
其中 (f_x^t(i) in mathbb{R}^d) , (x) 表示共指階段圖與關系抽取圖可以使用不同的參數, (W_x^f in mathbb{R}^{d imes 2d}) 是訓練的參數. (g) 是 sigmoid 函數, 上述表示一次迭代過程中更新的方式.
整個過程就是圖神經網絡的部分, 共指關系圖 和關系抽取圖 部分, spans representation的更新方式, 也就是圖神經網絡的輸出部分, 但是我們可以看到, 實際上這個圖神經網絡并不是十分復雜的圖神經網絡,
Training
訓練過程中, 我們需要最大化極大似然估計, 由于三個都是分類問題, 本質上是最小化交叉熵損失函數,
[sum_{(D, R^*, E^*, C^*) in D} { lambda_ElogP(E^* | C,R,D) + lambda_RlogP(R^* |C,D)+lambda_C logP(C^*|D) }
]
其中(R^*, E^*, C^*) 是我們的預測值, (D) 是輸入的documents, (lambda_E, lambda_R, lambda_C) 是損失函數三個任務部分的超參數.
關于代碼部分, 目前不打算繼續分析后面的實驗以及代碼細節, 因為新的文章已經出來了, 谷歌就像擠牙膏, 把這個模型用于事件抽取, 也是 SOTA, 因為我主要是做事件抽取的, 所以會好好分析下一篇文章以及它的代碼實現.
總結
以上是生活随笔為你收集整理的DyGIE 信息抽取模型详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: canvas点阵函数波动,类似飘带或水波
- 下一篇: 体积飙升近一倍:Intel巨蛇峡谷NUC