?? Reading Group 的 pdf 版本 blog 版本
- 結(jié)構(gòu)化/純文本
之前的一系列將知識融入 BERT 的工作大多基于 entity 三元組這種結(jié)構(gòu)化數(shù)據(jù).
這就要求有大量且高質(zhì)量的人工標(biāo)注(當(dāng)然我們有 HowNet, WordNet, WikiData), 人工標(biāo)注必然出現(xiàn)大量噪聲, 結(jié)構(gòu)化數(shù)據(jù)更新周期普遍更長.
MLM 的無監(jiān)督是否是無監(jiān)督的極限(當(dāng)然 ERNIE 2.0 那種偏語法的任務(wù)也可以算), 能否有一種無監(jiān)督或者弱監(jiān)督的任務(wù)/模式 增強(qiáng)原先的預(yù)訓(xùn)練語言模型中的知識信息.
- LMs are KBs?
EMNLP 2019 的這篇文章 Language Models as Knowledge Bases? 設(shè)計(jì)了 cloze style 的 Probing 實(shí)驗(yàn)(大多是 Commensense 的問答任務(wù))來證明語言模型的知識性.
雖然現(xiàn)在看起來語言模型學(xué)到的更多還是共現(xiàn)關(guān)系, 對于低頻詞效果沒有那么好, 但所蘊(yùn)含的知識信息幾乎和 KBs 類的方法相近.
除去 RoBERTa 這個(gè)異類, 之前的工作顯示不 fine-tune 時(shí)遠(yuǎn)低于其他 LMs, fine-tune 了又遠(yuǎn)高于其他.
想辦法增加 LMs 的知識能力還是很有道理的.
- 腳注/引用
在日常書寫中, 其實(shí)我們會(huì)大量使用腳注/引用來解釋真實(shí)的含義, 輔助讀者理解.
對于語言模型來說, 這部分信息是缺失的.
基于以上幾點(diǎn), 這篇文章淺顯的介紹一下目前預(yù)訓(xùn)練語言模型中無監(jiān)督知識融入的一些解決方案.
主要介紹以下兩篇工作:
- Generalization through Memorization: Nearest Neighbor Language Models. ICLR 2020
- REALM: Retrieval-Augmented Language Model Pre-Training.
k NN-LM
Generalization through Memorization: Nearest Neighbor Language Models. ICLR 2020
這篇工作是 ICLR2020 的工作, 出發(fā)點(diǎn)是利用 k NN 增強(qiáng)長程依賴(這已經(jīng)不是長程了, 叫跨篇章依賴更合適一點(diǎn)).
做法很簡單. 拿 BERT-base 對數(shù)據(jù)中的每一個(gè) token 生成一個(gè)(上下文表征 k-(其他 LMs 可能是只有上文), 當(dāng)前詞 v) Pair 對, 合成一個(gè)很大的集合 N.
當(dāng)預(yù)測時(shí)需要獲取表征的時(shí)候, 計(jì)算 N 中每一個(gè) k 與當(dāng)前詞計(jì)算得到的表征之間的距離, 此處使用 L2 距離進(jìn)行計(jì)算.
最后預(yù)測詞關(guān)于 x 的條件概率. 由兩部分組成, 原先的 LM 概率和 kNN 的概率, 兩者插值之后獲得最后結(jié)果.
模型在訓(xùn)練過程中不 fine-tune 預(yù)訓(xùn)練模型參數(shù), 利用 FAISS 來優(yōu)化檢索空間(一種優(yōu)化版的 LSH).
主要在 WikiText 103 和 BookCorpus 上做了測試, 其中 WikiText 103 的 baseline 是 Adaptive Input Representations for Neural Language Modeling.
其主要思想是按照詞頻分成 N 個(gè)桶, 桶之間的 embedding size 隨著指數(shù)減小, 借鑒了 Adaptive Softmax 的想法, 之前是 WikiText103 的 SOTA.
對比 Transformer-XL 的結(jié)果, 可以看出 kNN-LM 帶來的 ppl 的提升還是很明顯的.
直觀上來看 ppl 表征的是語言模型概率等可能輸出個(gè)數(shù), 或者是平均概率下選取到正確輸出需要的次數(shù).
kNN 的想法顯著的提升 ppl 就可以理解為在語義相近的情況下, 增強(qiáng)了顯著的共現(xiàn)模式, 從而減小了等概率個(gè)數(shù).
對比拿數(shù)據(jù) Fine-tune 和拿數(shù)據(jù)做 dataStore, 在用 WikiText 103 Fine-tune 模型的基礎(chǔ)上用 WikiText 3B 做 dataStore 的效果顯著比拿數(shù)據(jù) Fine-tune 效果好.
跨領(lǐng)域/zero-shot 的實(shí)驗(yàn)中也能發(fā)現(xiàn)即使沒有在 BookCorpus 上學(xué)習(xí)過, 只用 BookCorpus 制作 DataStore 蘊(yùn)含的信息能提升 ppl 14 個(gè)點(diǎn), 雖然和 fine-tune 的結(jié)果還有差距.
還測試了 Transformer 結(jié)構(gòu)中不同位置的輸出對于最后提升的影響(看起來這個(gè)作者有點(diǎn)閑
得到的結(jié)果是 FFN 之前 LN 之后這個(gè)位置效果最好, 筆者的理解是 MHSA 更關(guān)注與當(dāng)前 sentence 本身, FFN 更關(guān)注與上下文的 memory, 不經(jīng)過 FFN 可以更突出當(dāng)前句子的信息.
當(dāng)然有人會(huì)懷疑 kNN 這種模式是否和 n-gram 類似, 作者對比了 n-gram 和 kNN 的結(jié)果, 使用 n-gram 之后 performance 變化不大.
最后討論了一下顯示存儲(chǔ) memory 和隱式存儲(chǔ) memory 兩種情況, 這邊作者用去掉 Dropout 來模擬隱式存儲(chǔ) memory。 他的論點(diǎn)是 loss 已經(jīng)降到 0 了說明模型已經(jīng)蘊(yùn)含所有必要的知識了. 對比使用 Dropout, 效果差很多.
當(dāng)然這個(gè)問題更多的是一個(gè)如何利用 memory, 上面的實(shí)驗(yàn)最起碼可以證明 Transformer 理論上是具有很強(qiáng)的 memory 能力的.
幾點(diǎn)討論:
- kNN-LM 的方式本質(zhì)上來講還是一種利用檢索增強(qiáng)共現(xiàn)模式的知識融入.
- 需要構(gòu)建 dataStore 的數(shù)據(jù)集和測試集之間存在較強(qiáng)的關(guān)聯(lián)度.
- 對于時(shí)間復(fù)雜度部分, 作者在 openview 的時(shí)候說明大概花費(fèi)和 fine-tune 差不多的時(shí)間, 在 interface 階段會(huì)比純 Transformer 要慢一點(diǎn), 大概從 500 tokens per second 降到 60 tokens per second.
- 目前尚不清楚這種模式是否能在其他下游任務(wù) work, 雖然直觀上來感受應(yīng)該是能增強(qiáng)表征的, 還是需要更多的實(shí)驗(yàn)進(jìn)行驗(yàn)證.
- 這篇文章中 k 取得是 1024, 是一個(gè)比較大的數(shù), 畫出來的曲線可以看出隨著 k 的增大, ppl 能不斷的下降.
REALM
這篇的工作是在幾位 dalao ACL2019 那篇 ORQA 的基礎(chǔ)上做的工作. 共一和通訊作者是 BERT 四分之二作者.
這篇文章主要是在 Open domain task 上做的工作(畢竟是谷果的核心業(yè)務(wù) ??)
大概思路是利用一個(gè)隱式的 Retriever 來擴(kuò)展語料增強(qiáng)語義.
將預(yù)測詞相對于上下文的條件概率展開成相關(guān)篇章基于上下文的概率與預(yù)測詞相對于上下文和篇章的概率乘積之和.
- 對于預(yù)訓(xùn)練模型來說, x 是被 mask 之后的 sentence, y 是預(yù)測的被 mask 掉的那些詞.
- 對于 Fine-tune 來說, 比如說 open-QA x 就是問句 y 則是答案
對于 Retriever 來說, input 得到的 embed 和 document 得到的 embed 矩陣相乘過一個(gè) softmax 就是 z 相對于 x 的概率輸出.
- 具體來說輸入 x 的 embed, 是 x 這句話的 CLS 指示符的 BERT representation 輸出, 再乘上一個(gè)線性矩陣(在 ORQA 中這個(gè)矩陣起到縮小維度的作用)
- 文檔的 embed 則是將 document 的 title 和 body 拼接起來用 sep 分割, 同樣取 CLS 的輸出再乘上一個(gè)線性矩陣
- 這邊考慮兩個(gè) Embed 相乘, 感覺更多的預(yù)先處理的角度.
知識增強(qiáng)編碼器的計(jì)算分為預(yù)訓(xùn)練和微調(diào)兩個(gè)模式
- Pre-trained.
- j 位置預(yù)測為 y_j 的概率乘積
- 而 y_j 在 z, x 下的概率與拼接 x 與 z 的正文部分得到的在 Mask_j 位置的表征的指數(shù)次呈正相關(guān).
- Fine-tune
- n 個(gè) span 的表征之和
- span 的表征則為將 x 與 z 的正文部分拼接在一起在 span start end 兩個(gè)位置的 representations 輸出 concat 在一起, 然后過一個(gè) MLP 之和再取指數(shù)次.
當(dāng)然 z 對于 x 的分布是一個(gè)長尾分布, 大部分 z 對于 x 都是沒用的, top-K 是一個(gè)很顯然的思路.
再利用 LSH 這種 MIPS 方法對搜索空間進(jìn)行優(yōu)化.
LSH 的思路大概就是高維空間的投影能保留相近的關(guān)系, 但投影中相近不能保證高維空間中相近, 所以一般會(huì)使用多個(gè) Hash 函數(shù)聯(lián)合判斷.
最近 LSH 出鏡率還蠻高的, Reformer 之類的都有提到.
因?yàn)槭褂昧?LSH, 就需要預(yù)計(jì)算 document 的 Embed, 但在訓(xùn)練過程中這個(gè) Embed 也會(huì)變, 這邊就采用了一個(gè)延遲更新的想法, 實(shí)際中每隔 500step 更新一次 document Embed 參數(shù).
這部分更新的只是 Top-K 的參數(shù).
作者認(rèn)為經(jīng)過預(yù)訓(xùn)練 Document 的 Embed 已經(jīng)很好了, 在 Fine-tune 階段 Document 的 Embed 就固定了不再進(jìn)行訓(xùn)練了.
然后還加了一些 tricks 上去
- Span level 的 Mask. 用了在 CoNLL-03 上面 fine-tune 的 BERT-base 作為 chuck 工具來獲取 entity 的邊界. 后面結(jié)果顯示這個(gè)操作至關(guān)重要.(其實(shí)覺得 SpanBERT 那個(gè)操作有點(diǎn)迷)
- 考慮到有些 sentence 不需要其他 document 輔助, 在 Document 中增加空 Document.
- 當(dāng) x 句子在檢索時(shí), 去除 x 句子所在的 Document, 避免變成單純的學(xué)習(xí)到詞句匹配.
- 由上面的描述, 我們可以看出, 這是一個(gè)很看重初始化過程的模型.當(dāng)然也可以理解為就是在 pre-trained 基礎(chǔ)上 pre-trained, 看 lr 也是.
- 對于 Retriever 利用 Inverse Cloze Task (ICT)任務(wù). ICT 任務(wù)是將 document 挖去一些句子, 然后判斷句子是否屬于這個(gè)文檔. ICT 幫助模型獲得除詞匹配之外語義匹配的能力.
- 對于 Knowledge Augment Encoder 來說, 直接使用 BERT-based.
作者除了提出以上模型, 訓(xùn)練方法之外, 還試圖解釋 Retriever 學(xué)習(xí)到的內(nèi)容.
logp(y|x)對 Retriever 參數(shù)求偏導(dǎo)可以得到(這一部分推到可以參考我在 pdf 中手推的過程)
相當(dāng)于模型的梯度是向那些加上 z 條件概率變大的樣本.
這也很符合直觀感受, Retriever 學(xué)到的更多的是篩選能提升 performance 的文檔的能力.
如果使用 DrQA 的思路, 上式的導(dǎo)數(shù)可化作參考樣本的梯度.
實(shí)驗(yàn)是主要在 Open-QA 三個(gè)數(shù)據(jù)集上做了測試.
相對于強(qiáng) baseline ORQA 和 T5 的 11b 兩個(gè) baseine 都有顯著的提升.
Ablation 實(shí)驗(yàn)可以看出參數(shù) Fine-tune 影響不是特別大, mask 機(jī)制影響特別大, 基本上包括了所有的提升點(diǎn).
我的理解是 random Mask 容易使得 sentence 失去原本的語義, 從而對 Retriever 產(chǎn)生巨大的影響.
同樣的, 設(shè)計(jì)了一個(gè) RU 指標(biāo), 來 probing Retriever 對模型的影響.
幾點(diǎn)討論:
- 看起來參數(shù)初始化對模型的效果影響很大.
- 隱變量的方式看起來很優(yōu)雅, 得到兩個(gè)副產(chǎn)物: retriever 和 文檔級的 representations.
- 注意到 Mask 策略對結(jié)果影響很大, 這是一個(gè)隱患, 最好能有一個(gè) ORQA + mask 的對比試驗(yàn).
- 這是一種利用無監(jiān)督的方式將非結(jié)構(gòu)化數(shù)據(jù)中的知識融入到 LMs 中的策略, 看起來比較自然.究竟是結(jié)構(gòu)化的方法更好一點(diǎn)還是非結(jié)構(gòu)化的更好一點(diǎn)呢?
- 可以通過更換語料來較快的更新語言模型中的信息, 但是對于“Thatcher” for “__ is the prime minister of United Kingdom.”模型還是回答錯(cuò)了.個(gè)人的理解這種方式更多的還是增強(qiáng)共現(xiàn)關(guān)系的策略, 當(dāng)然這個(gè)時(shí)候結(jié)構(gòu)化數(shù)據(jù)可能就有優(yōu)勢. 我覺得除了三元組的方式之外, 對于實(shí)效性很強(qiáng)的, 是不是可以只用最近的語料進(jìn)行訓(xùn)練, 這樣的效果可能會(huì)更好一點(diǎn).
總結(jié)
弱監(jiān)督或者無監(jiān)督擁有更強(qiáng)的泛化能力, 對于知識融入這個(gè)問題來說這兩篇工作嘗試使用 kNN 和隱變量的方式融入非結(jié)構(gòu)化的信息, 具有開創(chuàng)性.
水平有限, 歡迎討論.