最強記憶 VS 最強檢索:T5 & REALM 你pick誰?
- 2020 年 3 月 5 日
- 筆記

大數據文摘授權轉載自安迪的寫作間
如果突然讓你回答,「 Geoffrey Hinton 的出生年月日是?」,相信大部分人是不知道的,轉頭直接百度或Google,然後找到相關詞條,抽取關鍵資訊,回答:「1947年12月6日」(冷知識 get)。
當然也不排除有少部分記憶非常強的人,曾經在某處看到過相關資訊,並記了下來,立刻回答:「1947年12月6日」。
至於大部人,我相信屬於第一種人,第二種可能… 謝耳朵吧。

這裡提到的兩個模型,類比的話,T5 便是那個將一切都記下來並回答的人,而 REALM 則是善於利用它的「搜索引擎」的人。
最強記憶 T5
關於 T5 模型,原理並不難,簡單說就是:
- 一個超大Transformer Encoder-Decoder 模型(11B,110億參數)
- Bert 式的文本破壞(corrupt)方法
- Replace Span 的破壞策略
- 15% 的破壞比
- 破壞時 span 長度 3
- 加上 750GB 的文本數據

當然主要概念就是:用超大 Seq2Seq 模型來記憶下儘可能多的知識,之後用於各種任務。
最近發了篇 T5 在開放域問答的短論文,How Much Knowledge Can You Pack Into the Parameters of a Language Model?(到底能把多少知識塞入語言模型的參數裡面?) 題目簡單明了。
結論也簡單明了,還蠻多的。

在兩個數據集上打爆了之前檢索知識庫的 SOTA 模型,而且可以看到,到 11B 都還沒有到個頭,很期待最近微軟的 17B Turing-NLG 會是怎麼樣。
可以看到,這個模型的優點是無腦簡單,也可以簡單的 Scaling 規模,而且本身就比較通用。缺點當然也非常明顯,大,也就慢,而且預測出來的東西兩眼一抹黑,只能知道應該是在預訓練某個階段學會,的吧。
最強檢索 REALM
基於檢索的前輩們都被打爆了,REALM 找回了場子,最主要創新是,將檢索模型的訓練融入了預訓練過程。
這裡簡單介紹一下 REALM 的 intuition,很多演算法細節最好參考原論文,以及基於的各種文獻。
這個系統如下:

簡單來說,基於兩個階段,檢索階段和預測階段,而這兩個階段分別對應 Retriever 模型和 Encoder 模型。
首先從簡單的 Encoder 模型說起,預訓練時,Encoder 部分輸入,其實就是將 Query 中的詞 mask 掉一部分,之後與抽取的相關文本 z 拼接起來,最後從 Encoder 輸出對 mask 部分的預測。而 finetune 階段,將輸出改成 用於問答的對 span 範圍的預測。
Encoder 具體模型就是一個 Bert-base,訓練時 mask 也會像 wwm 或者 ERNIE 一樣,mask 掉一些片段,主要是實體還有日期,結果顯示這個策略很有幫助(可能是因為很多問題的答案就是實體以及日期)。
最關鍵部分還是 Retriever 部分。
首先,怎麼快速檢索到知識庫中 Query 的相關文本,這裡用到了 Maximum Inner Product Search (MIPS, 最大內積搜索)。
具體做法是,先用一個模型將相關文本預處理成向量表示,之後用另一個模型將 Query 處理成向量,接著就如 MIPS 名字說的,計算 Query 和相關文本向量的內積,最後挑分數高的作為相關結果。為了能夠之後做到端到端的訓練,對內積結果加上 Softmax 處理。這裡兩個向量編碼模型也都是 Bert。

當然直接算代價太大了,相關文本庫可能有好幾千萬條,鑒於 softmax 之後很多文本的 prob 非常小,於是只取 topk 的檢索結果。
可以利用 Locality Sensitive Hashing (LSH,局部敏感哈希)演算法,快速的拿到 TopK。

簡單說,LSH 可以讓相似的向量落在相近的地方,相似的向量內積也相似,所以 TopK 內積向量也將出現在臨近的區域。之後對 LSH 中每塊地方建立索引 (index),檢索時就可以只用先找到大概的區域,然後對區域內的向量計算內積就行,將運算時間大大降低了。
關於演算法細節強烈建議查看 LSH 相關資料,以及提到的 ALSH for Sublinear Time MIPS 論文。
但這裡又出現了兩個問題。
- 第一,Retriever 裡面的向量編碼器冷啟動問題,如果一開始拿不到比較好的文本向量,使檢索結果與 query 相關的話,那麼 Retriever 就獲得不到梯度,就會導致 Retriever 根本訓練不起來;
- 第二,訓練過程中,因為向量編碼器中的參數是變化的,導致對於同樣的文本,可能訓練時不同步數的模型編碼出來的向量不一樣,那麼之前 LSH 演算法建立的索引是會有 gap。
對於第一個問題,主要通過之前一篇論文(相同作者)中的,Inverse Cloze Task (ICT) 預訓練來解決。

主要思想和 Word2Vec 的 skip-gram 有些類似,用一個文本來預測它的上下文,只不過 skip-gram 是詞粒度,而 ICT 是句子粒度,這裡句向量通過 BERT 來獲得。
對於第二個問題,就是這篇論文中主要提出的 idea,預訓練過程中每更新一定步數 Retriever 的參數,就重新建立 MIPS 中的索引 (index)。

根據消融實驗可以看到這一步非常關鍵:

同樣表中還展示了REALM Retriever 的有效性,以及實體和時間的 span mask 在這裡的有效性。
在實驗結果中,REALM 也與 T5 進行了比較,打爆了 T5,同時參數量少了很多,也比較有解釋性。但另一方面,REALM 也因為中間步驟太多,導致超參有些多,訓練麻煩。
與人的類比
其實不難看出 REALM 和人類的一些策略已經很相似了,大腦更多負責思考推斷,而一些資訊知識完全可以放在外界,只需要知道能通過一些方法找到就行,不管是搜索引擎或是通過圖書分類法找。
史蒂芬平克也表示過這樣可以讓人更加集中於創造性的工作,一些研究也支援了這個觀點。
當然 REALM 的 Encoder 在這裡做的,也並不是什麼創造性的工作,和之前的 MLM 差不多,只不過能拿到更相關的上下文。看消融實驗里也可以發現,其實將 Encoder 替換掉後性能是掉得最少的,對 Encoder 可以進行進一步改進(其實也就是加入更好的預訓練目標)。
文中對 Retriever 提供的一個視角非常有意思,那就是將 Retriever 看作是一個超大的 Attention 機制,一個query 對上百萬級別的文本進行 attention,看 MIPS 加上 softmax 的計算過程會發現和 Transformer 中 attention 計算已經很類似了。如果再加上 LSH 的話,會發現和最近那篇 Reformer 非常相似。LSH 和 Attention 機制的結合之後應該也會成為一個趨勢吧,如果要將 Attention 量級升上去的話。
總體來說,感覺這是一個很有意思的論文,能將檢索過程加入到自監督學習的預訓練中來,當然也希望看到更多的模組能夠通過自監督學習得到加強,比起 CV 中各種各樣的自監督學習技巧,NLP 還是挺少的。
最強記憶和最強檢索,懶惰的我,還是選擇檢索。
Reference
[1] How Much Knowledge Can You Pack Into the Parameters of a Language Model?
[2] REALM: Retrieval-Augmented Language Model Pre-Training
[3] Asymmetric LSH (ALSH) for Sublinear Time Maximum Inner Product Search (MIPS)
[4] How Does Google Affect the Way We Learn?
[5] Illustrating the Reformer