日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

层次分解位置编码,让BERT可以处理超长文本

發布時間:2024/10/8 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 层次分解位置编码,让BERT可以处理超长文本 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?PaperWeekly 原創 ·?作者|蘇劍林

單位|追一科技

研究方向|NLP、神經網絡

大家都知道,目前的主流的 BERT 模型最多能處理 512 個 token 的文本。導致這一瓶頸的根本原因是 BERT 使用了從隨機初始化訓練出來的絕對位置編碼,一般的最大位置設為了 512,因此頂多只能處理 512 個 token,多出來的部分就沒有位置編碼可用了。當然,還有一個重要的原因是 Attention的 復雜度,導致長序列時顯存用量大大增加,一般顯卡也 finetune 不了。

本文主要面向前一個原因,即假設有足夠多的顯存前提下,如何簡單修改當前最大長度為 512 的 BERT 模型,使得它可以直接處理更長的文本,主要思路是層次分解已經訓練好的絕對位置編碼,使得它可以延拓到更長的位置。

位置編碼

BERT 使用的是訓練出來的絕對位置編碼,這種編碼方式簡單直接,效果也很不錯,但是由于每個位置向量都是模型自己訓練出來的,我們無法推斷其余位置的編碼向量,因此有了長度限制。

解決這個問題的一個主流思路是換成相對位置編碼,這是個可行的辦法,華為的 NEZHA [1] 模型便是一個換成了相對位置編碼的 BERT 模型。相對位置編碼一般會對位置差做個截斷,使得要處理的相對位置都在一個有限的范圍內,因此相對位置編碼可以不受限于序列長度。

但相對位置編碼也不是完美的解決方案,首先像 NEZHA 那樣的相對位置編碼會增加計算量(如果是 T5 那種倒是不會),其次是線性 Attention 則沒法用相對位置編碼,也就是不夠通用。

讀者可能會想起 Attention is All You Need 不是提出了一種用 表示的 Sinusoidal 絕對位置編碼嗎?直接用那種不就不限制長度了?理論上是這樣,但問題是目前沒有用 Sinusoidal 位置編碼的模型開放呀,難道我們還要自己從零訓練一個?這顯然不大現實呀。

層次分解

所以,在有限資源的情況下,最理想的方案還是想辦法延拓訓練好的 BERT 的位置編碼,而不用重新訓練模型。下面給出筆者構思的一種層次分解方案。

▲ 位置編碼的層次分解示意圖

具體來說,假設已經訓練好的絕對位置編碼向量為 ,我們希望能在此基礎上構造一套新的編碼向量 ,其中 。為此,我們設:

其中 且 是一個超參數, 是該套位置編碼的“基底”。這樣的表示意義很清晰,就是將位置 層次地表示為 ,然后 i, j 對應的位置編碼分別為 和,而最終 的編碼向量則是兩者的疊加。不難理解,要求 是為了區分 (i, j) 和 (j, i) 兩種不同的情況。

我們希望在不超過 n 時,位置向量保持跟原來的一樣,這樣就能與已經訓練好的模型兼容。換句話說,我們希望 ,這樣就能幫助我們把各個 給確定下來了:

這樣一來,我們的參數還是 ,但我們可以表示出 個位置的編碼,并且前 n 個位置編碼跟原來模型是相容的。

自我分析

事實上,讀懂了之后,讀者就會發現其實這個分解幾乎沒什么技術含量,就是一個純粹的拍腦袋的結果而已。

至于為什么會覺得這樣做有效?一是由于層次分解的可解釋性很強,因此可以預估我們的結果具有一定外推能力,至少對于大于 n 的位置是一個不錯的初始化;二則是下一節的實驗驗證了,畢竟實驗是證明 trick 有效的唯一標準。

本質上來說,我們做的事情很簡單,就是構建一種位置編碼的延拓方案,它跟原來的前 n 個編碼相容,然后還能外推到更多的位置,剩下的就交給模型來適應了。這類做法肯定有無窮無盡的,筆者只是選擇了其中自認為解釋性比較強的一種,提供一種可能性,并不是最優的方案,也不是保證有效的方案。

此外,討論一下 的選取問題,筆者默認的選擇是 。理論上來說, 且 都成立,但是從實際情況出發,還是建議選擇 的數值。

因為我們很少機會碰到上萬長度的序列,對于個人顯卡來說,能處理到 2048 已經很壕了,如果 n=512,那么這就意味著 i = 1, 2, 3, 4 而 ,如果 的話,那么從分解式(1)看 就會占主導,因為位置編碼之間差異變小,模型不容易把各個位置區分開來,會導致收斂變慢;如果 ,那么占主導的是 ,位置編碼的區分度更好,模型收斂更快一些。

實踐測試

綜上所述,我們可以幾乎無成本地延拓 BERT 的絕對位置編碼,使得它最大長度可以達到 萬!這絕對能滿足我們的需求了吧?該改動已經內置在 bert4kera>=0.9.5 中,用戶只需要在 build_transformer_model 中傳入參數 hierarchical_position=True 即可啟用,True 也可以換為 0~1 之間的浮點數,代表上述 的值,為 True 時則默認 。

至于效果,筆者首先測了 MLM 任務,直接將最大長度設為 1536,然后加載訓練好的 RoBERTa 權重,發現 MLM 的準確率大概是 38% 左右(如果截斷到 512,那么大概是 55% 左右),經過 finetune 其準確率可以很快(2000 步左右)恢復到 55% 以上。

這個結果表明這樣延拓出來的位置編碼在 MLM 任務上是行之有效的。如果有空余算力的話,在做其他任務之前先在 MLM 下繼續預訓練一會應該是比較好的。

然后測了兩個長文本分類問題,分別將長度設為 512 和 1024,其他參數不變進行 finetune(直接 finetune,沒有 MLM 繼續預訓練),其中一個數據集的結果沒有什么明顯變化;另一個數據集在驗證集上 1024 的比 512 的要高 0.5% 左右。

這再次表明本文所提的層次分解位置編碼是能起作用的。所以,大家如果有足夠顯存的顯卡,那就盡管一試吧,反正在 bert4keras 下就是多一行代碼的事情,有提升就是賺到了,沒提升也沒浪費多少精力。

最后提供一個 finetune 階段最大長度與最大 batch_size 的參照表(RoBERTa Base 版,24G 的 TITAN RTX):

文章小結

本文分享了筆者構思的一種基于層次分解的位置編碼延拓方案,通過這個延拓,BERT理論上最多可以處理多達 26 萬長度的文本,只要顯存管夠,就沒有 BERT 處理不了的長文本。

所以,你準備好顯存了嗎?

參考文獻

[1] https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/NEZHA-TensorFlow

[2] https://github.com/bojone/bert4keras

更多閱讀

#投 稿?通 道#

?讓你的論文被更多人看到?

如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。

總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?

PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得技術干貨。我們的目的只有一個,讓知識真正流動起來。

?????來稿標準:

? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?

? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?

? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志

?????投稿郵箱:

? 投稿郵箱:hr@paperweekly.site?

? 所有文章配圖,請單獨在附件中發送?

? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通

????

現在,在「知乎」也能找到我們了

進入知乎首頁搜索「PaperWeekly」

點擊「關注」訂閱我們的專欄吧

關于PaperWeekly

PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。

總結

以上是生活随笔為你收集整理的层次分解位置编码,让BERT可以处理超长文本的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。