1. 程式人生 > 實用技巧 >論文筆記:Enhancing Pre-trained Chinese Character Representation with Word-aligned Attention

論文筆記:Enhancing Pre-trained Chinese Character Representation with Word-aligned Attention

1. 概述

目前,很多NLP演算法大多采用主流的預訓練模型+下游任務微調這樣的演算法架構。預訓練模型種類繁多,如下圖

-w591

用的最多的莫過於大名鼎鼎的BERT預訓練模型,同樣是基於Pre-training和Fine-tuning模式架構的

-w399

不管啥模型,第一件事都是 tokenizer。對於 BERT 來說,英文的 token 是 word-piece,中文的是字(這也對後面的實驗造成了很大的麻煩,因為要對齊)。而且已經有相當多的工作證明了,對於中文在 character-level 建模會比較合適(香儂在 ACL2019 的那篇《Is Word Segmentation Necessary for Deep Learning of Chinese Representations》很是經典)。不過在實際應用中,包括很多 Application of NLP 領域的文章,都發現將詞資訊融入到文字表示中會對應用有效果。不過將詞資訊融入到文字表示的過程中存在兩個主要問題:①如何聚合分詞後的word level資訊到char level的attention中去;②如何降低分詞工具不準確引入的分詞噪聲。

所以,這篇論文實質上就是在實驗看有什麼辦法去各種拐著彎兒向 character-level 的表示模型融入詞資訊,並減輕外部分詞器引入的分詞噪聲。

主要貢獻:

① 這篇文章提出了一個word level對齊的attention機制來拓展基於char level的中文預訓練模型(Multi-source Word Aligned Attention)。

② 並提出了一個mix-polling方法來講char level的attention對齊到word level,以緩解多源分詞器分詞誤差傳播的問題。

2. 動機

語言心理學表明:在閱讀中文的時候,人對每個單詞中的字元的注意力是相近的,如上圖所示。所以作者是想想找一些方法來改變 transformer 的 attention 分佈,或者找一種可以折中 soft-attention 與 hard-attention 的方法,在維持原 attention 機制的情況下,用比較 soft 的方法來實現比較 hard 的效果,來方便某些任務;

另外,通過融合不同粒度的分詞器的結果來降低單一分詞器帶來的分詞噪聲。

3. 模型

3.1Character-level Pre-trained Encoder

利用BERT,ERNIE,BERT-wwm等預訓練語言模型得到char-level的表示

3.2 Word-aligned Attention

單個分詞器下的情況

模型很簡單,就是在預訓練語言模型對下游任務進行微調時,中間插上一層 multi-head attention 的變體。

對預訓練語言模型輸出的每個char level的表示做self-attention

得到沒有word boundary的字元之間的relationship。由於單個char的字面意在不同的word中經常會大不相同,比如 “拍” 這個char在 “球拍” 和 “拍賣” 這兩個詞中的語義完全不同,不能簡單地直接取char level 的 weighted sum。

首先,可以使用分詞工具將輸入的文字進行分詞,具體來說就是講由字構成的序進行劃分(parition),我們把這種劃分策略稱為 π。得到劃分π 後,將其應用於正常得到的 attention 權重矩陣Ac上,可以得到按詞劃分的(word-based)字級別(character-level)的 attention 權重組合。

一個 { } 中代表了一個word中包含的所有char的attention score。會將這個{ }中的字元向量組對齊到相應的word的attention vector。方法就是文中提到的mixed pooling.

為了同時考慮:1. 句子中所有詞的語義表示;2. 句子中最重要的詞的語義表示 這兩種情況,我們使用 mix-pooling 來對 mean-pooling 和 max-pooling 進行混合:

MixPooling=λMeanPooling+(1−λ)MaxPooling)

並將 { } 中的每一個char的attention vector都替換成mixed-pooling後的word vector,從而得到對齊矩陣(5)。這樣就會把在char-level的attention中融入具有分詞邊界資訊的word segment information,從而緩解由於字元在不同單詞中的奇異性所帶來的attention bias。具體公式如下:

上圖就是這種 attention 權重矩陣的視覺化效果圖。這個例子是從情感分類任務模型中拿出來試的,可以看到 attention 權重矩陣被轉化為了 character-level to word-level 的形式,而實際上還是 character-level 的模型,保留了字建模的優秀表示,同時也做到了前面動機所說的接近 hard-attention 的效果。

同時,利用multi-head attention的思想得到K個不同的aligned attention矩陣,拼接降維後輸出

把這樣的 attention 權重再拿回 character-level 表示去調整它,就能得到最終的字表示,送往後續的下游任務。

3.3 Multi-source Word-aligned Attention

多個分詞器下的情況

由於不同分詞器的分詞粒度不同 ,會引入分詞誤差,比如:

為了減少分詞錯誤,以及用上不同粒度級別的特徵,文章找了一種簡單的方法,同時用上多個分詞工具的分詞結果。

把幾個分詞器的結果,分別得到下游表示之後過個線性層結合在一起。

4. 總結

來自作者的自我總結和吐槽哈哈哈…

優點:

  • 提出了這麼一種有意思的結構
  • 這麼一種有意思的結構可以融入一些分詞資訊,並且對預訓練語言模型的下游任務有一些幫助
  • 單純融入一種分詞資訊不夠,就多加幾種分詞資訊

缺點:

  • 實在缺乏理論支撐
  • 預處理的真的特別特別慢(尤其是要用幾種分詞器來分詞),並且資料預處理無比複雜(因為各個分詞器的處理邏輯都不一樣,各種特殊符號、數字、英語、日語、繁體啥的全部都要單獨處理,尤其是 BERT 會將英語單詞 tokenize 成 word-piece,導致 token 對不上,前期實驗有 80% 以上的時間都是在搞這些預處理)
  • 在 forward 的時候把 transformer 的時間複雜度O(n2)O(n2)變成了O(dn2)O(dn2)(這還好是常數級),但是要命的是,在這個方法中,每一條訓練資料都會有各自不同的分詞方式,都只能各自去分段計算 mix-pooling,這導致完全無法應用 cudnn 原語加速,也完全沒可能寫成矩陣運算來利用 GPU batch 加速,即使直接用 cuda 程式設計也沒法改善。連 forward 都這麼慢,backward 更不用說了……
  • 總結下來,這個工作其實缺點其實挺明顯的,主要集中在預處理和速度極慢這兩塊上。