這是今年清華大學及阿里巴巴發表在NIPS 2020上的一篇論文《CogLTX: Applying BERT to Long Texts》,介紹了如何優雅地使用bert處理長文本。作者同時開源了不同NLP任務下使用COGLTX的代碼:
論文題目:
CogLTX: Applying BERT to Long Texts
論文鏈接:
http://keg.cs.tsinghua.edu.cn/jietang/publications/NIPS20-Ding-et-al-CogLTX.pdf
Github:
https://github.com/Sleepychord/CogLTX
bert在長文本處理一般分為三種方法[1]:
截斷法;
Pooling法;
壓縮法。
該論文就是壓縮法的一種,是三種方法中最好的。我們在科研和工作中都會遇到該問題,例如我最近關注的一個文本分類比賽:
面向數據安全治理的數據內容智能發現與分級分類 競賽 - DataFountain[2].
其文本數據長度就都在3000左右,無法將其完整輸入bert,使用COGLTX就可以很好地處理該問題,那么就一起來看看該論文具體是怎么做的吧。
1.背景
基于以下情形:
bert作為目前最優秀的PLM,不用是不可能的;
長文本數據普遍存在,且文本中包含的信息非常分散,難以使用滑動窗口[3]截斷。
而由于bert消耗計算資源和時間隨著token的長度是平方級別增長的,所以其無法處理太長的token,目前最長只支持512個token,token過長也很容易會內存溢出,所以在使用bert處理長文本時需要設計巧妙的方法來解決這個問題。
2.提出模型
COGLTX模型在三類NLP任務中的結構如下:
首先假設:存在短文本 可以完全表達原長文本 的語義:
那么令 代替 輸入原來的模型即可,那么怎么找到這個 呢
1、使用動態規劃算法將長文本 劃分為文本塊集合 ;
2、使用MemRecall對原長句中的子句進行打分,MemRecall結構如圖,而表現如下式:
從而選擇出分數最高的子句組成 再進行訓練,這樣一來的話,COGLTX相當于使用了了兩個bert,MemRecall中bert就是負責打分,另一個bert執行原本的NLP任務。
可以發現剛才找到 例子將問題Q放在了初始化 的開頭,但是并不是每個NLP任務都可以這么做,分類的時候就沒有類似Q的監督,這時候COGLTX采用的策略是將每個子句從原句中移除判斷其是否是必不可少的(t是一個閾值):
作者通過設計不同任務下的MemRecall實現了在長文本中使用bert并通過實驗證明了方法的有效性。
3.實驗
通過多維度地對比,證明了本文提出算法的有效性。
參考文獻
[1]https://zhuanlan.zhihu.com/p/88944564
[2]https://www.datafountain.cn/competitions/471
[3]Z. Wang, P. Ng, X. Ma, R. Nallapati, and B. Xiang. Multi-passage bert: A globally normalized bert model for open-domain question answering. arXiv preprint arXiv:1908.08167, 2019.
責任編輯:xj
原文標題:【NIPS 2020】通過文本壓縮,讓BERT支持長文本
文章出處:【微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
-
文本
+關注
關注
0文章
118瀏覽量
17068 -
nlp
+關注
關注
1文章
487瀏覽量
22015
原文標題:【NIPS 2020】通過文本壓縮,讓BERT支持長文本
文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論