层次分解位置编码,让BERT可以处理超长文本
?PaperWeekly 原創(chuàng) ·?作者|蘇劍林
單位|追一科技
研究方向|NLP、神經(jīng)網(wǎng)絡(luò)
大家都知道,目前的主流的 BERT 模型最多能處理 512 個 token 的文本。導(dǎo)致這一瓶頸的根本原因是 BERT 使用了從隨機初始化訓(xùn)練出來的絕對位置編碼,一般的最大位置設(shè)為了 512,因此頂多只能處理 512 個 token,多出來的部分就沒有位置編碼可用了。當(dāng)然,還有一個重要的原因是 Attention的 復(fù)雜度,導(dǎo)致長序列時顯存用量大大增加,一般顯卡也 finetune 不了。
本文主要面向前一個原因,即假設(shè)有足夠多的顯存前提下,如何簡單修改當(dāng)前最大長度為 512 的 BERT 模型,使得它可以直接處理更長的文本,主要思路是層次分解已經(jīng)訓(xùn)練好的絕對位置編碼,使得它可以延拓到更長的位置。
位置編碼
BERT 使用的是訓(xùn)練出來的絕對位置編碼,這種編碼方式簡單直接,效果也很不錯,但是由于每個位置向量都是模型自己訓(xùn)練出來的,我們無法推斷其余位置的編碼向量,因此有了長度限制。
解決這個問題的一個主流思路是換成相對位置編碼,這是個可行的辦法,華為的 NEZHA [1] 模型便是一個換成了相對位置編碼的 BERT 模型。相對位置編碼一般會對位置差做個截斷,使得要處理的相對位置都在一個有限的范圍內(nèi),因此相對位置編碼可以不受限于序列長度。
但相對位置編碼也不是完美的解決方案,首先像 NEZHA 那樣的相對位置編碼會增加計算量(如果是 T5 那種倒是不會),其次是線性 Attention 則沒法用相對位置編碼,也就是不夠通用。
讀者可能會想起 Attention is All You Need 不是提出了一種用 表示的 Sinusoidal 絕對位置編碼嗎?直接用那種不就不限制長度了?理論上是這樣,但問題是目前沒有用 Sinusoidal 位置編碼的模型開放呀,難道我們還要自己從零訓(xùn)練一個?這顯然不大現(xiàn)實呀。
層次分解
所以,在有限資源的情況下,最理想的方案還是想辦法延拓訓(xùn)練好的 BERT 的位置編碼,而不用重新訓(xùn)練模型。下面給出筆者構(gòu)思的一種層次分解方案。
▲ 位置編碼的層次分解示意圖
具體來說,假設(shè)已經(jīng)訓(xùn)練好的絕對位置編碼向量為 ,我們希望能在此基礎(chǔ)上構(gòu)造一套新的編碼向量 ,其中 。為此,我們設(shè):
其中 且 是一個超參數(shù), 是該套位置編碼的“基底”。這樣的表示意義很清晰,就是將位置 層次地表示為 ,然后 i, j 對應(yīng)的位置編碼分別為 和,而最終 的編碼向量則是兩者的疊加。不難理解,要求 是為了區(qū)分 (i, j) 和 (j, i) 兩種不同的情況。
我們希望在不超過 n 時,位置向量保持跟原來的一樣,這樣就能與已經(jīng)訓(xùn)練好的模型兼容。換句話說,我們希望 ,這樣就能幫助我們把各個 給確定下來了:
這樣一來,我們的參數(shù)還是 ,但我們可以表示出 個位置的編碼,并且前 n 個位置編碼跟原來模型是相容的。
自我分析
事實上,讀懂了之后,讀者就會發(fā)現(xiàn)其實這個分解幾乎沒什么技術(shù)含量,就是一個純粹的拍腦袋的結(jié)果而已。
至于為什么會覺得這樣做有效?一是由于層次分解的可解釋性很強,因此可以預(yù)估我們的結(jié)果具有一定外推能力,至少對于大于 n 的位置是一個不錯的初始化;二則是下一節(jié)的實驗驗證了,畢竟實驗是證明 trick 有效的唯一標(biāo)準(zhǔn)。
本質(zhì)上來說,我們做的事情很簡單,就是構(gòu)建一種位置編碼的延拓方案,它跟原來的前 n 個編碼相容,然后還能外推到更多的位置,剩下的就交給模型來適應(yīng)了。這類做法肯定有無窮無盡的,筆者只是選擇了其中自認(rèn)為解釋性比較強的一種,提供一種可能性,并不是最優(yōu)的方案,也不是保證有效的方案。
此外,討論一下 的選取問題,筆者默認(rèn)的選擇是 。理論上來說, 且 都成立,但是從實際情況出發(fā),還是建議選擇 的數(shù)值。
因為我們很少機會碰到上萬長度的序列,對于個人顯卡來說,能處理到 2048 已經(jīng)很壕了,如果 n=512,那么這就意味著 i = 1, 2, 3, 4 而 ,如果 的話,那么從分解式(1)看 就會占主導(dǎo),因為位置編碼之間差異變小,模型不容易把各個位置區(qū)分開來,會導(dǎo)致收斂變慢;如果 ,那么占主導(dǎo)的是 ,位置編碼的區(qū)分度更好,模型收斂更快一些。
實踐測試
綜上所述,我們可以幾乎無成本地延拓 BERT 的絕對位置編碼,使得它最大長度可以達到 萬!這絕對能滿足我們的需求了吧?該改動已經(jīng)內(nèi)置在 bert4kera>=0.9.5 中,用戶只需要在 build_transformer_model 中傳入?yún)?shù) hierarchical_position=True 即可啟用,True 也可以換為 0~1 之間的浮點數(shù),代表上述 的值,為 True 時則默認(rèn) 。
至于效果,筆者首先測了 MLM 任務(wù),直接將最大長度設(shè)為 1536,然后加載訓(xùn)練好的 RoBERTa 權(quán)重,發(fā)現(xiàn) MLM 的準(zhǔn)確率大概是 38% 左右(如果截斷到 512,那么大概是 55% 左右),經(jīng)過 finetune 其準(zhǔn)確率可以很快(2000 步左右)恢復(fù)到 55% 以上。
這個結(jié)果表明這樣延拓出來的位置編碼在 MLM 任務(wù)上是行之有效的。如果有空余算力的話,在做其他任務(wù)之前先在 MLM 下繼續(xù)預(yù)訓(xùn)練一會應(yīng)該是比較好的。
然后測了兩個長文本分類問題,分別將長度設(shè)為 512 和 1024,其他參數(shù)不變進行 finetune(直接 finetune,沒有 MLM 繼續(xù)預(yù)訓(xùn)練),其中一個數(shù)據(jù)集的結(jié)果沒有什么明顯變化;另一個數(shù)據(jù)集在驗證集上 1024 的比 512 的要高 0.5% 左右。
這再次表明本文所提的層次分解位置編碼是能起作用的。所以,大家如果有足夠顯存的顯卡,那就盡管一試吧,反正在 bert4keras 下就是多一行代碼的事情,有提升就是賺到了,沒提升也沒浪費多少精力。
最后提供一個 finetune 階段最大長度與最大 batch_size 的參照表(RoBERTa Base 版,24G 的 TITAN RTX):
文章小結(jié)
本文分享了筆者構(gòu)思的一種基于層次分解的位置編碼延拓方案,通過這個延拓,BERT理論上最多可以處理多達 26 萬長度的文本,只要顯存管夠,就沒有 BERT 處理不了的長文本。
所以,你準(zhǔn)備好顯存了嗎?
參考文獻
[1] https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/NEZHA-TensorFlow
[2] https://github.com/bojone/bert4keras
更多閱讀
#投 稿?通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)習(xí)心得或技術(shù)干貨。我們的目的只有一個,讓知識真正流動起來。
?????來稿標(biāo)準(zhǔn):
? 稿件確系個人原創(chuàng)作品,來稿需注明作者個人信息(姓名+學(xué)校/工作單位+學(xué)歷/職位+研究方向)?
? 如果文章并非首發(fā),請在投稿時提醒并附上所有已發(fā)布鏈接?
? PaperWeekly 默認(rèn)每篇文章都是首發(fā),均會添加“原創(chuàng)”標(biāo)志
?????投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發(fā)送?
? 請留下即時聯(lián)系方式(微信或手機),以便我們在編輯發(fā)布時和作者溝通
????
現(xiàn)在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
總結(jié)
以上是生活随笔為你收集整理的层次分解位置编码,让BERT可以处理超长文本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 申请专利的条件和流程图(申请专利的条件)
- 下一篇: 如何应用AutoML加速图机器学习任务的