预训练模型对实体的表示能力差?一个简单有效的解法来了!(开源)
文 | 小軼
今天給大家介紹一篇 ACL'22 的論文,來自清華大學劉知遠老師組。本文解決的問題是如何在預訓練語言模型中引入任務所需的實體知識。此前常見的解決方法大致可以分為兩種。
一種是在領域相關的語料上再做 further pretraining,比如 BioBERT。這種方法的缺點主要在于需要大量的額外訓練,V100 上的訓練時長可達數千小時。
另一種是直接引入知識圖譜,比如 ERNIE。本文則認為:使得預訓練模型具備實體知識,可以不完全依賴于引入外部知識圖譜。已經有許多相關工作證明預訓練模型自身就具備存儲知識的能力,我們需要的只是一種調用出模型知識存儲的方法。于是本文就提出了一種輕量的方法 PELT,能夠非常簡單有效的達到引入實體知識的效果。
論文標題:
A Simple but Effective Pluggable Entity Lookup Table for Pre-trained Language Models
論文鏈接:
https://arxiv.org/pdf/2202.13392.pdf
代碼鏈接:
https://github.com/thunlp/PELT
方法
本文方法的核心在于如何獲取一個好的實體嵌入(entity embedding),使得這個中包含該實體必要的相關知識。獲得實體嵌入后,在下游任務使用預訓練模型時,只需要在輸入中該實體出現的位置加入其相應的 embedding,即可達到引入相關知識的效果。
接下來我們逐步看一下,本文的方法是如何構造實體嵌入的,以及如何在使用預訓練模型時加入實體嵌入。最后,簡單從理論角度分析一下本文方法的合理性。
構建實體嵌入
假定我們需要在某個下游任務使用某個預訓練語言模型,而該下游任務中可能會出現一些其所在領域所特有的實體。我們當前的目標就是:為這些實體構建一個高質量的實體嵌入。
▲PELT 構建實體嵌入信息的過程本文獲取實體嵌入的方法非常簡單。上圖以實體 COVID-19 為例,說明了構建其嵌入的過程:
找到語料庫中 所有出現 COVID-19 的句子集合 (這個語料庫是 domain-specific 的)
把這些句子中出現 COVID-19 的位置 MASK 掉。
保留預訓練語言模型把 MASK 位置對應的 output 表示向量,記為 ()
最后得到實體嵌入表示如下:
其中, 是一個常數。原文中說,這個常數 具體取什么值對于結果影響不大(“has little effect on the input feature of the encoder in use”)。
實際操作時,作者將所有實體嵌入的長度都設置為,即。然后在實驗中,嘗試了多個 的值(=1,2,..,10),看哪一個在下游任務上效果好就用哪個。
在預訓練模型中融入實體知識
接下來的問題就是,在得到實體嵌入后,在預訓練模型做下游任務時使用它。方法也非常簡單。
加入某個樣本輸入中出現了實體。還是假設該實體為 COVID-19,然后原始輸入樣本為:
Most people with COVID-19 have a dry...
在本文所提出的方法中,我們只需要在那個實體后面加個括號,括號中重復一遍該實體。
Most people with COVID-19(COVID-19) have a dry...
在映射到 embedding layer 的時候,不在括號里的實體COVID-19采用普通的詞嵌入處理方式(切成 subword,然后映射到預訓練模型所學的 word embedding);而括號中的實體 COVID-19 則映射為相應的實體嵌入。
方法合理性的理論支持
原文有從理論分析的角度解釋所提出方法的合理性。整個證明過程也比較簡單,可以一看(不過我其實還沒太想清楚這個證明過程是否足夠完善...)。
假設我們把某個實體加入了預訓練模型的原有詞表中。如果我們用預訓練任務 MLM 來學習它的實體嵌入 ,它的損失函數如下所示:
其中,是語料庫中所有出現該實體的句子, 為實體被 MASK 后對應位置的輸出表示向量。這個公式可以進一步展開,變為:
其中,。
然后我們分析一下減號前后的兩項。前一項中的 是對項求和,所以實體嵌入的變化對前一項的值影響很小,可以將這一項視作一個常數。因此,如果要讓損失 盡可能小,我們只需要讓后一項為一個盡量大的正數就行了。于是我們可以將設置為:
其中, 是一個常數。這樣就能使得后一項始終是一個正數。至于 ,具體取什么值,原文里的說法是:由于輸入給 Transformer 編碼器時會過一層 layer normalization,所以||的長度變化影響不大。所以作者就直接把||當做超參數來處理了。
實驗
實驗中,PELT 的提升效果也是比較顯著的。這里我們簡單展示一組實驗:
比較表格最后兩行可以看到,在 RoBERTa 上采用了本文方法后,獲得了非常明顯的提升。另外,和第一行的 ERNIE 相比,在一個數據集上效果相當,在另一個數據集上本文方法明顯占優。值得注意的是,ERNIE 在模型使用時是引入外部知識圖譜的,而本文方法沒有。
小結
本文提出了一種非常簡單有效的方法,使得預訓練模型中融入實體知識。并且,相關代碼已經開源,大家不妨一試。
萌屋作者:小軼
是小軼,不是小秩!更不要叫小鐵!高冷的形象是需要大家共同維護的!作為成熟的大人,正在勤儉節約、兢兢業業,為成為一名合格的(但是仍然發量充足的)PhD而努力著。日常沉迷對話系統。說不定,正在和你對話的,并不是不是真正的小軼哦(!?)
“高冷?那是站在冰箱頂端的意思啦?!??——白鹡鸰
作品推薦:
寫了一篇關于 NLP 綜述的綜述!
全球44家機構,55位大佬,歷時兩年,打造最強NLG評測基準!
谷歌重磅:可以優化自己的優化器!手動調參或將成為歷史!?
ACL20 Best Paper揭曉!NLP模型評價體系或將迎來重大轉折
后臺回復關鍵詞【入群】
加入賣萌屋NLP、CV與搜推廣與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
總結
以上是生活随笔為你收集整理的预训练模型对实体的表示能力差?一个简单有效的解法来了!(开源)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据归一化 - MinMaxScaler
- 下一篇: c语言程序stm8s,经典STM8s20