---
# System prepended metadata

title: Longformer
tags: [NLP, ' Neural']

---

---
title: Longformer
tags: NLP, Neural
disqus: hackmd
---
###### tags: `NLP study group`,`IR`

# Longformer: The Long-Document Transformer

* Presenter：dylanc @ 2020.05.19
* Paper：https://arxiv.org/pdf/2004.05150.pdf
* Codes：https://github.com/allenai/longformer
* Test: (TBA)
* Meeting VOD Record：https://youtu.be/1Hyqfy2tYeE
[![text](http://img.youtube.com/vi/1Hyqfy2tYeE/0.jpg)](http://www.youtube.com/watch?v=1Hyqfy2tYeE)


---
# Note
### 0. Prerequisite
* Transformer model
* Self-attention layer
### 1. Introduction
![](https://i.imgur.com/x15sa9U.png)

* 一般Transformer-Based模型，效能瓶頸通常在self-attention layer。
    * 若文章長度增加，運算時間會線性上升(NaivePytorch) 且 記憶體消耗會指數上升(full-attn)
    * Longformer則可以避免時間、空間成本
    * NaivePytorch: 簡易pytorch實行帶狀矩陣相乘方式（迴圈）
* 自注意力機制矩陣通常很sparse，時間、記憶體都還有利用的空間。
* 透過Longformer的Attention架構(sliding window、dilated)的方式降低self-attention的成本。
* Cuda運算：Tensor Virtual Machine(TVM) 實作
* Competitive models & Tasks:
    * TransformerXL：Character-level Language model
    * RoBERTa：長文本任務
#### P.S. 傳統處理長文本的方法：
    * Chunking：長文本切割成短文本，再重新組合。
    * Truncated: 截斷長文至固定長度。e.g. 512 for BERT
    * Two-Step: 預先做第一步篩選後選文本，縮短文本長度。
---
### 2. Another Attention 
    * n: 長度 l: 層數 w: Window Size d: Dilated Size
    * Receptive Field: 考慮疊起層數最遠可以atten的範圍
![](https://i.imgur.com/Bmt8rrd.png)
* Sliding Window(圖b): 同一層self-attention選用固定W的視窗，可以整合各層注意到的資訊，避免softmax使attention稀疏。 
    * Receptive Field: *l*w
    * 複雜度：O(nw)
    * e.g. l=1, w=2, T Attend到T+1& T-1. 
    *Receptive field=2
* Dildated Window(圖c):
    * Receptive Field: *l*w*d
    * 複雜度：O(nw)
    * e.g. l=1, w=2 w/ d=2, T Attend到T+1, T+3, T-1, T-3.
    *Receptive field=4
* Global+Sliding Window(圖d): Global部分為任務需要attend的位置(需要pre-select) ，結合Sliding window，實作上會分為兩個QKV矩陣運算。（猜測因為實作較簡單）
    * 複雜度：O(n)
    * e.g. BERT [CLS]
    * e.g. QA Task: Question Tokens都開放Attend
    * (Q)若dynamic的token實作上如何處理global?? 
        * (A)實作上使用mask方式，0 for local, -1 for no attn, +1 for global
    
* Summary: 較佳的longformer配置:(詳見4.ablation study）
    * W由小到大（底層至高層）有助於加速訓練。
    * D可在某些attention head裡面加入，有助performance。
    
---
### 3. Experiments

#### 3.1 Character-level Language Model
* Why char-level LM？(猜測)
    * Char-level可取得較長token length的文本。
    * Character為token較容易比較各model之間predict能力，不受不同tokenizer影響。
    * AR-LM只會從左到右attend（反著讀沒有幫助），只能依靠之前的token。
* Datasets:
    * text8 & enwiki8: 英文單詞與空白組成的維基文本。
* Attention Pattern:
    * Small w in lower: Loacl資訊
    * Increasing w for higher: 長距離資訊
    * Dilated: 只放在其中兩個head的high layer（lwd效果）
* Training：最長可至23040，分五階段逐步調高window size和sequence lengt。
* Evaluation: 最長可至32256（不需做BP...可利memory用較多）。
    * Longformer預測結果需要做前處理和後處理：在32256中最後512個token上做evaluation。以此類推，製造重疊的32256個tokens的LM task再重複做evaluation。（即可以和Transformer-XL比較）

* Result：
    * 圖上：相同參數量可以有較好表現。(Reformer參數量應該相對低很多)
    * 圖下：驗證Longformer的配置attention配置有效: Increasing window size & Do some dilation
![](https://i.imgur.com/vCR4DN5.png)
![](https://i.imgur.com/NvvqmUJ.png)


#### 3.2 Pretraining
* Overview:
    * MLM pretraining成本高，直接使用RoBERTa checkpoint。
    * RoBERTa better than BERT
* Attention Pattern: 
    * Max Length: 4096
    * W size: 512(~RoBERTa Fullattention) 
* Position Embeddings:
    * Copy RoBERTa's: 在512&512之間的Boundary會有learned bias，但能保留大部分的local context。(pretrained的weight較符合RoBERTa原本的pos-embeddings)
    * Random initialize會有較差的結果
* Continue Pretrain(the RoBERTa)：
    * 學習longer dependencies: but still remember RoBERTa's.
    * 額外資料: Realnews(seqlen>1200) & 33% of Stories(already pretrained in RoBERTa)
    
* Evalutaion & Result：
    * 圖：4, 5表示Longformer可utilize長文本的效果。(但無法證明Longformer表現較RoBERTa好）
        * 1: RoBERTa
        * 2: Longformer+Random pos-embedding
        * 3: Longformer+Copied pos-embedding
        * 4: Longformer+Copied pos-embedding+2K steps
        * 5: Longformer+Copied pos-embedding+65K steps 
        **P.S. 4.3小節fintune用的pretrained longformer應該是拿5去做
![](https://i.imgur.com/nU4HyJa.png)

#### 3.3 Fintuning
* Overview:
    * 下游任務: WikiHop(mainly), TriviaQA, HotpotQA, coreference, classification
* Finetune detail & QA pipeline:
    * Preprocessing for RoBERTa/Longformer: 切成512/4096後再重組結果做後續處理
    * WikiHop: 候選答案中做分類。
    * TriviaQA: 預測答案區間。
    * HotpotQA: (1-staged)同時抓取evidence. (2-staged) 先extract再預測區間
    
* Processing example(WikiQA): 
    * Question set: [q] 問題 [/q] [ent]候選1[/ent]...[ent]候選n[/ent]
    * Context set: [s] context1 [/s] ... [s] contextM [/s]
    * A Question set concat with contexts as much as the model can support: (RoBERTa: 512, Longformer: 4096)
* Results
    * 長度較長的task表現提升較明顯(e.g. WikiHop)
    * 兩階段的QA(e.g. HotpotQA)較容易找到relevant context。(Q)因為沒有受到長度限制被切掉？
    * P.S. Joint F1: 因為HotPotQA有兩個子任務，會有兩組Precision/Recall([reference](https://nlp.stanford.edu/pubs/yang2018hotpotqa.pdf))
    * P.S. Average F1: Coreference 以entity數量做平均。([reference](https://www.aclweb.org/anthology/W12-4501.pdf))
![](https://i.imgur.com/WQjGgsO.png)

* Ablations
    * P.S. Pretraind Longformer = Continue pretrained RoBERTa 65K 利用4.2小節提到的額外資料

    * 0. Longformer(4096): 用pretrained Longformer finetune 5 epoch
    * 1. RoBERTa(512): 原始checkpoint 直接 finetune
         * 和其他比起來少了65K的Continue pretraining
         
    * 2. Longformer(4096): 用Pretrained Longformer fintune 15 epoch
    * 3. Longformer(512, n^2)：用Pretrained Longformer fintune 5 epoch
        *但把pretrained longformer改成512的full attention。
        *猜測是要說明65K的continue pretraining沒有幫助（若沒有使用Longformer attention）
        
    * 4. Longformer(2048)：
    * 5. Longformer(4096):(?)相當於直接使用RoBERTa checkpoint，直接套用longformer attention
    * 6. Longformer(4096):(?)沒有linear proj，global/window的attention mix在一起
    * 7. Longformer(4096)：沒有global
    
![](https://i.imgur.com/xzXIMIO.png)
---
#### 4. Questions
...
---