最强记忆 VS 最强检索:T5 & REALM

如果突然让你回答,“ Geoffrey Hinton 的出生年月日是?”,相信大部分人是不知道的,转头直接百度或谷歌,然后找到相关词条,抽取关键信息,回答:“1947年12月6日”(冷知识 get)。

当然也不排除有少部分记忆非常强的人,曾经在某处看到过相关信息,并记了下来,立刻回答:“1947年12月6日”。

至于大部人,我相信,跟我一样属于第一种人,第二种可能... 谢耳朵吧。

最强记忆 VS 最强检索:T5 & REALM

这里提到的两个模型,类比的话,T5 便是那个将一切都记下来并回答的人,而 REALM 则是善于利用它的“搜索引擎”的人。

最强记忆 T5

关于 T5 模型,原理并不难,简单说就是:

  • 一个超大Transformer Encoder-Decoder 模型(11B,110亿参数)

  • Bert 式的文本破坏(corrupt)方法

  • Replace Span 的破坏策略

  • 15% 的破坏比

  • 破坏时 span 长度 3

  • 加上 750GB 的文本数据

最强记忆 VS 最强检索:T5 & REALM

如果对上面概念不了解的可以参考之前这篇:T5 模型:NLP Text-to-Text 预训练模型超大规模探索

当然主要概念就是:用超大 Seq2Seq 模型来记忆下尽可能多的知识,之后用于各种任务

最近发了篇 T5 在开放域问答的短论文,How Much Knowledge Can You Pack Into the Parameters of a Language Model?(到底能把多少知识塞入语言模型的参数里面?) 题目简单明了。

结论也简单明了,还蛮多的。

最强记忆 VS 最强检索:T5 & REALM

在两个数据集上打爆了之前检索知识库的 SOTA 模型,而且可以看到,到 11B 都还没有到个头,很期待最近微软的 17B Turing-NLG 会是怎么样。

可以看到,这个模型的优点是无脑简单,也可以简单的 Scaling 规模,而且本身就比较通用。缺点当然也非常明显,大,也就慢,而且预测出来的东西两眼一抹黑,只能知道应该是在预训练某个阶段学会,的吧。

最强检索 REALM

基于检索的前辈们都被打爆了,REALM 找回了场子,最主要创新是,将检索模型的训练融入了预训练过程

这里简单介绍一下 REALM 的 intuition,很多算法细节最好参考原论文,以及基于的各种文献。

这个系统如下:

最强记忆 VS 最强检索:T5 & REALM

简单来说,基于两个阶段,检索阶段预测阶段,而这两个阶段分别对应 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。

最强记忆 VS 最强检索:T5 & REALM

当然直接算代价太大了,相关文本库可能有好几千万条,鉴于 softmax 之后很多文本的 prob 非常小,于是只取 topk 的检索结果

可以利用 Locality Sensitive Hashing (LSH,局部敏感哈希)算法,快速的拿到 TopK

最强记忆 VS 最强检索:T5 & REALM 简单说,LSH 可以让相似的向量落在相近的地方,相似的向量内积也相似,所以 TopK 内积向量也将出现在临近的区域。之后对 LSH 中每块地方建立索引 (index),检索时就可以只用先找到大概的区域,然后对区域内的向量计算内积就行,将运算时间大大降低了。

关于算法细节强烈建议查看 LSH 相关资料,以及提到的 ALSH for Sublinear Time MIPS 论文。

但这里又出现了两个问题。

第一,Retriever 里面的向量编码器冷启动问题,如果一开始拿不到比较好的文本向量,使检索结果与 query 相关的话,那么 Retriever 就获得不到梯度,就会导致 Retriever 根本训练不起来;

第二,训练过程中,因为向量编码器中的参数是变化的,导致对于同样的文本,可能训练时不同步数的模型编码出来的向量不一样,那么之前 LSH 算法建立的索引是会有 gap

对于第一个问题,主要通过之前一篇论文(相同作者)中的,Inverse Cloze Task (ICT)  预训练来解决

最强记忆 VS 最强检索:T5 & REALM

主要思想和 Word2Vec 的 skip-gram 有些类似,用一个文本来预测它的上下文,只不过 skip-gram 是词粒度,而 ICT 是句子粒度,这里句向量通过 BERT 来获得。

对于第二个问题,就是这篇论文中主要提出的 idea,预训练过程中每更新一定步数 Retriever 的参数,就重新建立  MIPS 中的索引 (index)

最强记忆 VS 最强检索:T5 & REALM

根据消融实验可以看到这一步非常关键:

最强记忆 VS 最强检索:T5 & REALM

同样表中还展示了REALM Retriever 的有效性,以及实体和时间的 span mask 在这里的有效性。

在实验结果中,REALM 也与 T5 进行了比较,打爆了 T5,同时参数量少了很多,也比较有解释性。但另一方面,REALM 也因为中间步骤太多,导致超参有些多,训练麻烦。

与人的类比

其实不难看出 REALM 和人类的一些策略已经很相似了,大脑更多负责思考推断,而一些信息知识完全可以放在外界,只需要知道能通过一些方法找到就行,不管是搜索引擎或是通过图书分类法找。

最强记忆 VS 最强检索:T5 & 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

推荐阅读

最强记忆 VS 最强检索:T5 & REALM

最强记忆 VS 最强检索:T5 & REALM

最强记忆 VS 最强检索:T5 & REALM