Longformer:超越RoBERTa,为长文档而生的预训练模型
星標(biāo)/置頂小屋,帶你解鎖
最萌最前沿的NLP、搜索與推薦技術(shù)
文 |?ChrisCao, 小軼
前言
今天要與大家分享的是AllenAI今年發(fā)表的最新工作,Longformer——一種可高效處理長(zhǎng)文本的升級(jí)版Transformer。作者團(tuán)隊(duì)提供了開源代碼,大家可快速?gòu)?fù)現(xiàn),直接用于自己的任務(wù)。
傳統(tǒng)Tranformer-based模型在處理長(zhǎng)文本時(shí)有著天然的劣勢(shì)。因?yàn)閭鹘y(tǒng)模型采用的是“全連接”型的attention機(jī)制,即每一個(gè)token都要與其他所有token進(jìn)行交互。其attention復(fù)雜度高達(dá)。此前的解決辦法是將長(zhǎng)文切分為若干個(gè)較短的text span,然后逐個(gè)處理。這就導(dǎo)致不同的text span之間無法進(jìn)行交互,因而必然存在大量information loss。當(dāng)然,我們也可以通過添加一些其他機(jī)制來加強(qiáng)這種text span之間的交互。但這種新增機(jī)制實(shí)現(xiàn)起來通常比較復(fù)雜,而且往往是task-specific的,通用性不強(qiáng)。
本文提出的Longformer,改進(jìn)了Transformer的傳統(tǒng)attention機(jī)制:對(duì)于每一個(gè)token,只對(duì)固定窗口大小的附近token計(jì)算local attention,并結(jié)合具體任務(wù),計(jì)算少量的global attention。該方法的優(yōu)點(diǎn)包括:
復(fù)雜度低,將attention機(jī)制的復(fù)雜度降至
通用性強(qiáng),可用于各類文檔級(jí)任務(wù)
部署容易,作者在cuda內(nèi)核上直接實(shí)現(xiàn)了Longformer的attention pattern,并提供了開源代碼。
Longformer在兩個(gè)字符級(jí)語言建模任務(wù)上都取得了SOTA的效果。并且,作者用Longformer的attention方法繼續(xù)預(yù)訓(xùn)練RoBERTa。訓(xùn)練得到的語言模型在多個(gè)長(zhǎng)文檔任務(wù)上進(jìn)行fine-tune后,性能全面超越Roberta。該預(yù)訓(xùn)練模型也已開源,大家可以很方便地直接應(yīng)用于自己的任務(wù)。
原文鏈接:
https://arxiv.org/pdf/2004.05150.pdf
Github:
https://github.com/allenai/longformer
Arxiv訪問慢的小伙伴也可以在訂閱號(hào) 「夕小瑤的賣萌屋」 后臺(tái)回復(fù)關(guān)鍵詞 【0716】下載論文PDF~
模型
作者共提出了三種新的attention pattern,來降低傳統(tǒng)self-attention的復(fù)雜度,分別是滑窗機(jī)制、膨脹滑窗機(jī)制、融合全局信息的滑窗機(jī)制。下圖展示了傳統(tǒng)attention與這三種attention pattern的示意圖。接下來將為大家分別講解。
1. 滑窗機(jī)制(Sliding window): 對(duì)于每一個(gè)token,只對(duì)其附近的w個(gè)token計(jì)算attention計(jì)算復(fù)雜度與文本序列長(zhǎng)度成線性關(guān)系,為。作者認(rèn)為,根據(jù)應(yīng)用任務(wù)的不同可以對(duì)Transformer每一層施以不同的窗口大小,對(duì)模型表示能力可能有潛在幫助。
讀到這里的,大家可能和我一樣,誤認(rèn)為這個(gè)窗口應(yīng)該比較小,估計(jì)在16~64這個(gè)量級(jí)。但看到實(shí)驗(yàn)部分會(huì)發(fā)現(xiàn),作者在具體實(shí)現(xiàn)的時(shí)候,設(shè)置的窗口大小為512,和Bert的Input限制完全一樣。所以,大家不要存有“Longformer比Bert還要更輕量”的錯(cuò)覺。
2. 膨脹滑窗機(jī)制(Dilated sliding window): 在對(duì)每一個(gè)進(jìn)行token編碼時(shí),普通滑窗機(jī)制只能考慮到長(zhǎng)度為的上下文。作者進(jìn)一步提出膨脹滑窗機(jī)制,在不增加計(jì)算負(fù)荷的前提下,拓寬模型“視場(chǎng)”。其做法借鑒了空洞卷積的思想[1]。如下圖所示,在滑動(dòng)窗口中,被attend到的兩個(gè)相鄰token之間會(huì)存在大小為d的間隙。當(dāng)transformer的層數(shù)為l時(shí),則視場(chǎng)范圍可達(dá)到。實(shí)驗(yàn)表明,由于考慮了更加全面的上下文信息,膨脹滑窗機(jī)制比普通的滑窗機(jī)制表現(xiàn)更佳。
3. 融合全局信息的滑窗機(jī)制(Global+sliding window): 我們知道Bert一類的語言模型在應(yīng)用于具體任務(wù)時(shí),實(shí)現(xiàn)方式略有不同。比如,對(duì)于文本分類任務(wù),我們會(huì)在文本序列前添加[CLS]這一特殊token;而對(duì)于QA類任務(wù),則會(huì)將問題與文本進(jìn)行拼接后輸入。在Longformer中,作者也希望能夠根據(jù)具體任務(wù)的不同,在local attention的基礎(chǔ)上添加少量的global attention。比如,在分類任務(wù)上就會(huì)在[CLS]處添加一個(gè)global attention,而在QA任務(wù)上會(huì)對(duì)question中的所有token添加global attention。如下圖所示,對(duì)于添加了global attention的token,我們對(duì)其編碼時(shí)要對(duì)整個(gè)序列做attention。并且,編碼其他所有token時(shí),也都要attend到它。
實(shí)驗(yàn)
自定義CUDA內(nèi)核
由于現(xiàn)有的深度學(xué)習(xí)庫(kù)中并沒有能直接實(shí)現(xiàn)膨脹滑窗機(jī)制的接口,為此作者直接自定義了CUDA內(nèi)核操作,用于實(shí)現(xiàn)Longformer的attention pattern[2]。如下圖所示,Longformer的內(nèi)存消耗與文本長(zhǎng)度成線性關(guān)系(紅線)。用自定義CUDA來實(shí)現(xiàn)Longformer,相比于用Naive Pytorch來實(shí)現(xiàn)(藍(lán)線),運(yùn)行速度加快了六倍。
Longformer在字符級(jí)別任務(wù)上的表現(xiàn)
作者在text8和enwik8兩個(gè)字符級(jí)任務(wù)上對(duì)Longformer進(jìn)行實(shí)驗(yàn)。實(shí)驗(yàn)中,模型每一層采用了不同的窗口大小:底層使用較小的滑窗,以建模局部信息;在高層使用較大的滑窗,以擴(kuò)大感受野。訓(xùn)練時(shí),理想狀況下當(dāng)然是希望使用GPU所能承受的最大的window size和sequence len。但為了加快訓(xùn)練速度,作者采用的是一種階段式的訓(xùn)練方式:在學(xué)習(xí)更長(zhǎng)的上下文之前,先學(xué)好局部的上下文。在第一階段,先設(shè)置較短的序列長(zhǎng)度和窗口大小。在后續(xù)階段,window size和sequence length增加一倍,學(xué)習(xí)率減半 實(shí)驗(yàn)結(jié)果如下圖所示,Longformer在這兩個(gè)數(shù)據(jù)集上皆達(dá)到了SOTA效果(注:測(cè)試指標(biāo)為BPC,bits-per-character;BPC越小,性能越優(yōu))。
作者通過實(shí)驗(yàn),對(duì)滑窗機(jī)制的設(shè)置進(jìn)行了進(jìn)一步的討論。如下表所示:
表中第一組實(shí)驗(yàn)(前三行)討論的是:如果transformer的不同層采用不同窗口大小,是否可以提高性能?實(shí)驗(yàn)結(jié)果表明,由底層至高層遞增窗口大小,可提升性能;遞減則反而性能降低。
第二組實(shí)驗(yàn)(后兩行)是對(duì)膨脹滑窗機(jī)制的消融實(shí)驗(yàn),證明了增加間隙后的滑窗機(jī)制,性能可以有小幅度提升
Longformer用于預(yù)訓(xùn)練
MLM Pretraining
作者采用Longformer的方法在以下四個(gè)文檔級(jí)語料上進(jìn)行預(yù)訓(xùn)練,從而得到適于文檔級(jí)NLP任務(wù)的語言模型。作者并沒有完全從頭預(yù)訓(xùn)練一個(gè)隨機(jī)初始化的模型,而是以RoBERTa為基礎(chǔ),采用MLM(masked language modeling)的方法繼續(xù)預(yù)訓(xùn)練。預(yù)訓(xùn)練時(shí),每一層都采用固定的大小為512的滑動(dòng)窗口,暫不添加global attention。為支持長(zhǎng)文本,論文作者把position embedding擴(kuò)展到了4096個(gè)。
預(yù)訓(xùn)練結(jié)束后,在多個(gè)文檔級(jí)任務(wù)上再進(jìn)一步對(duì)預(yù)訓(xùn)練模型做fine-tuning。fine-tuning時(shí)會(huì)根據(jù)任務(wù)增加global attention:共設(shè)置兩套映射矩陣,一套用于局部自注意力,另一套用于全局注意力。實(shí)驗(yàn)表明,Longformer全面超越了RoBERTa的表現(xiàn)。
消融實(shí)驗(yàn)
為了證明Longformer更優(yōu)異的性能并不是因?yàn)閷?duì)RoBERTa額外的預(yù)訓(xùn)練帶來的,作者做了一組消融實(shí)驗(yàn)。采用了與RoBERTa完全相同的序列長(zhǎng)度和attention機(jī)制,在繼續(xù)預(yù)訓(xùn)練后并沒有在文檔級(jí)任務(wù)上取得更優(yōu)的性能。
賣萌屋成立了自然語言處理、搜索技術(shù)、推薦系統(tǒng)、算法崗求職等方向大群和知識(shí)圖譜與信息抽取、智能問答、對(duì)話系統(tǒng)等垂類討論群。不僅可以認(rèn)識(shí)眾多志同道合的優(yōu)秀小伙伴,而且還有若干賣萌屋美麗小姐姐(劃掉)、頂會(huì)審稿人、大廠研究院、知乎大V等你來撩哦。后臺(tái)回復(fù)關(guān)鍵詞【入群】即可獲取入口。
記得掃描下方二維碼關(guān)注并星標(biāo)置頂,我才能來到你面前哦。
參考文獻(xiàn)
[1] Dilated CNN:CV中常用的圖像編碼方式,可拓寬模型編碼時(shí)的感受野。paper原文鏈接:https://arxiv.org/abs/1511.07122。另可參考知乎討論“如何理解空洞卷積(dilated convolution)?”,鏈接:https://www.zhihu.com/question/54149221。
[2] TVM: 關(guān)于如何自定義CUDA內(nèi)核:這里作者使用了TVM (tensor virtual machine)(tvm.apache.org),2018年由華盛頓大學(xué)的SAMPL組貢獻(xiàn)的開源項(xiàng)目。TVM為不同的深度學(xué)習(xí)框架和硬件平臺(tái)實(shí)現(xiàn)了統(tǒng)一的編譯棧,從而實(shí)現(xiàn)將不同框架的深度學(xué)習(xí)模型到硬件平臺(tái)的快速部署。
總結(jié)
以上是生活随笔為你收集整理的Longformer:超越RoBERTa,为长文档而生的预训练模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从我开发过的Tensorflow、飞桨、
- 下一篇: 深度学习如何均衡精度、内存、计算和通信开