中文NER的那些事兒5. Transformer相對位置編碼&TENER代碼實現


這一章我們主要關注transformer在序列標注任務上的應用,作為2017年后最熱的模型結構之一,在序列標注任務上原生transformer的表現並不盡如人意,效果比bilstm還要差不少,這背后有哪些原因? 解決這些問題后在NER任務上transformer的效果如何?完整代碼詳見ChineseNER

Transformer水土不服的原因

Hang(2019)在TENER的論文中給出了兩點原因

1. 三角函數絕對位置編碼只考慮距離沒有考慮方向

2. 距離表達在向量project以后也會消失

我們先來回顧下原生Transformer的絕對位置編碼, 最初編碼的設計是為了滿足幾個條件

  • 每個絕對位置應該有獨一無二的位置表征
  • 相對位置表征應該和絕對位置無關以及句子長度無關
  • 編碼可以泛化到訓練樣本之外的句子長度

於是便有了基於三角函數的編碼方式,在pos位置,維度是\(d_k\)的編碼中,第i個元素的計算如下

\[PE(pos, i)= \begin{cases} sin(w_k \cdot pos)& \text{if i=2k}\\ cos(w_k \cdot pos),& \text{if i=2k+1} \end{cases} \]

\[w_k = \frac{1}{10000^{2k/d_{model}}} \]

基於三角函數的絕對位置編碼是常數,並不隨模型更新。在Transformer中,位置編碼會直接加在詞向量上,輸入的詞向量Embedding是E,在self-attention中Q,K進行線性變換后計算attention,對value進行加權得到輸出如下

\[\begin{align} q_i &= (E_i+P_i) \dot W_q^T \\ k_j &= (E_j+P_j) \dot W_k^T \\ v_j &= (E_j+P_j) \dot W_v^T \\ a_{i,j} &= softmax(q_ik_j/\sqrt{d_k}) \\ output &= \sum_{j}v_j * a_{i,j}\\ \end{align} \]

我們來對\(q_ik_j\)部分進行展開可以得到

\[\begin{align} q_ik_ j&=E_iW_qW_K^TE_j^T(語義交互)+ P_iW_qW_K^TP_j^T (位置交互)\\ & + P_iW_qW_K^TE_j^T(query位置*key語義) + E_iW_qW_K^TP_j^T(key位置*query語義) \\ \end{align} \]

其中位置交互是唯一可能包含相對位置信息的部分,如果不考慮線性變換\(w_k\),\(w_q\)只看三角函數位置編碼,會發現位置編碼內積是相對距離的函數,如下

\[\begin{align} P_iP_j^T & = P_iP_{i+\Delta}^T \\ & = \sum_{k=0}^{d_k/2-1}sin(w_k \cdot i)sin(w_k \cdot (i+\Delta)) + cos(w_k \cdot i )cos(w_k \cdot (i+\Delta))\\ & = \sum_{k=0}^{d_k/2-1}cos(w_k \cdot(i-(i+\Delta))) =\sum_{k=0}^{d_k/2-1} cos(w_k \cdot \Delta) \end{align} \]

不同維度\(d_k\)\(P_iP_j^T\)\(\Delta\)的關系如下,會發現位置編碼內積是對稱並不包含方向信息,而BiLSTM是可以通過雙向LSTM引入方向信息的。對於需要全局信息的任務例如翻譯,sentiment analysis,方向信息可能並不十分重要,但對於局部優化的NER任務,因為需要判斷每個token的類型,方向信息的缺失影響更大。

看完三角函數部分,我們把線性變換加上,下圖是加入隨機線性變換后\(P_iw_iw_j^TP_j^T\)\(\Delta\)的關系,會發現位置編碼的相對距離感知消失了,有人會問那這位置編碼有啥用,這是加了個寂寞???

個人感覺上圖的效果是加入隨機變換得到,而\(W_i,W_j\)本身是trainable的,所以如果相對距離信息有用,\(W_iW_j^T\)未必學不到,這里直接用隨機\(W_i\)感覺並不完全合理。But Anyway這兩點確實部分解釋了原生transformer在NER任務上效果打不過BiLSTM的原因。下面我們來看下基於絕對位置編碼的缺陷,都有哪些改良

相對位置編碼

既然相對位置信息是在self-attention中丟失的,最直觀的方案就是顯式的在self-attention中把相對位置信息加回來。相對位置編碼有很多種構建方案,這里我們只回顧TENER之前相對經典的兩種(這里參考了蘇神的讓研究人員絞盡腦汁的Transformer位置編碼再一次膜拜大神~)。為了方便對比,我們把經典的絕對位置編碼計算的self-attenion展開再寫一遍

\[\begin{align} q_ik_ j&=E_iW_qW_K^TE_j^T + P_iW_qW_K^TP_j^T + P_iW_qW_K^TE_j^T + E_iW_qW_K^TP_j^T \\ a_{i,j} &= softmax(q_ik_j/\sqrt{d_k}) \\ output &= \sum_{j}v_j * a_{i,j}\\ \end{align} \]

RPR

(shaw et al,2018) 提出的RPR可以說是相對位置編碼的起源,計算也最簡單,只保留了以上Attention的語義交互部分,把key的絕對位置編碼,替換成key&Query的相對位置編碼,同時在對value加權時也同時引入相對位置,得到如下

\[\begin{align} q_ik_ j&=E_iW_qW_K^TE_j^T(語義交互)+ E_iW_qR_{ij}^T(相對位置att語義) \\ output &= \sum_{j}v_j * (a_{i,j} + R_{ij})\\ \end{align} \]

這里\(R_{ij}\)是query第i個字符和key/value第j個字符之間的相對距離j-i的位置編碼,query第2個字符和key第4個字符交互對應\(R_{-2}\)的位置編碼。這樣的編碼方式直接考慮了距離和方向信息。

這里的位置編碼PE是trainable的變量,為了控制模型參數的大小,同時保證位置編碼可以generalize到任意文本長度,對相對位置做了截斷,畢竟當前字符確實不太可能和距離太遠的字符之前存在上下文交互,所以滑動窗口的設計也很合理。如果截斷長度為k,位置編碼PE的dim=2k+1,下圖是k=3的\(R_{ij}\)

\[R_{ij} = PE[min(max(i-j,-k),k)] \]

Transformer-XL/XLNET

(Dai et al,2019)在Transformer-XL中給出了一種新的相對位置編碼,幾乎是和經典的絕對位置編碼一一對應。

  • 把key的絕對位置編碼\(p_j\)替換成相對位置編碼\(R_{ij}\)
  • 把query的絕對位置編碼\(W_ip_i\),替換成learnable的兩個變量u和v,分別學習key的語義bias和相對位置bias,就得到了如下的attention計算,

\[\begin{align} q_ik_ j&=E_iW_qW_K^TE_j^T(語義交互)+ E_iW_qR_{ij}^TW_R^T(相對位置att語義)\\ &+ uE_jW_k(全局語義bias) + vR_{ij}W_R(全局位置bias) \end{align} \]

以上計算方案也被XLNET沿用,和RPR相比,Transfromer-XL

  • 只在attention計算中加入相對位置編碼,在對value加權時並沒有使用,之后相對位置的改良基本都只針對attention部分
  • PE沿用了三角函數而非trainable變量,所以不需要截斷k=max_seq_len。不過加了線性變換\(W_R\)來保留靈活性,且和絕對位置編碼不同的是,位置編碼和語義用不同的W來做線性變換
  • 加入了全局語義bias和全局位置bias,和絕對位置編碼相比每個term都有了明確的含義

TENER:相對位置編碼的NER模型

TENER是transformer在NER任務上的模型嘗試,文章沒有太多的亮點,更像是一篇用更合適的方法來解決問題的工程paper。沿用了Transformer-XL的相對位置編碼, 做了兩點調整,一個是key本身不做project,另一個就是在attention加權時沒用對attenion進行scale, 也就是以下的歸一化不再用\(\sqrt{d_k}\)對query和key的權重進行調整,得到的attenion會更加sharp。這個調整可以讓權重更多focus在每個詞的周邊范圍,更適用於局部建模的NER任務。

\[a_{i,j} = softmax(q_ik_j/\sqrt{d_k}) \]

我們來直觀對比下,同樣的數據集和模型參數。絕對位置編碼和unscale的相對位置編碼attention的差異,這里都用了兩層的transformer,上圖是絕對位置編碼,下圖是unscale的相對位置編碼。可以明顯看到unscale的相對位置編碼的權重,在第一層已經學習到部分周圍信息后,第二層的attention范圍進一步縮小集中在詞周圍(一定程度上說明可能1層transfromer就夠用了),而絕對位置編碼則相對分散在整個文本域。

下面來對比下效果,transformer任務默認都是用的bichar輸入,所以我們也和bilstm_bichar進行對比,在原paper中作者除了對句子部分使用transformer來提取信息,還在token粒度做了一層transformer,不過這里為了更公平的和bilstm對比,我們只保留了句子層面的transformer。以下是分別在MSRA和PeopleDaily兩個任務上的效果對比。

只是把絕對位置編碼替換成相對位置編碼,在兩個任務上都有4~5%的效果提升,最終效果也基本和bilstm一致。這里沒做啥hyper search,參數給的比較小,整體上transformer任務擴大embedding,ffnsize效果會再有提升~


REF

  1. TENER: Adapting Transformer Encoder for Named Entity Recognition, 2019, Hang Yan
  2. Self-attention with relative position represen- tations
  3. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
  4. XLNet: Generalized Autoregressive Pretraining for Language Understanding
  5. 蘇劍林. (Feb. 03, 2021). 《讓研究人員絞盡腦汁的Transformer位置編碼 》[Blog post]. Retrieved from https://kexue.fm/archives/8130
  6. 工業界求解NER問題的12條黃金法則


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM