REALM——检索增强的预训练模型

3.1 生成过程

将输入x和输出y之间的分布p(y|x)分解为两部分:
1)检索器 p ( z ∣ x ) p(z|x) p(zx) z z z是来自文集 Z Z Z的文章, x x x为输入。
2)生成器 p ( y ∣ z , x ) p(y|z,x) p(yz,x)
为了得到y将z视为隐变量,利用贝叶斯公式marginalize一下:
p ( y ∣ x ) = ∑ z Z p ( y ∣ z , x ) ∗ p ( z ∣ x ) p(y | x) =\sum_z^Z{p(y | z, x) * p(z | x)} p(yx)=zZp(yz,x)p(zx)

问题1:为什么要分成这两部分?计算就简单了吗?
答1:这两个分布均好求。如果直接算 p ( y ∣ x ) p(y|x) p(yx)的话,其中没有利用 z z z,也就谈不上检索了。

3.2 模型结构

两部分。知识检索,对应 p ( z ∣ x ) p(z|x) p(zx)。知识增强编码,对应 p ( y ∣ z , x ) p(y|z, x) p(yz,x)
知识检索 p ( z ∣ x ) p(z|x) p(zx)
两个BERT求内积,再压缩映射一下。
p ( z ∣ x ) = s o f t m a x { E m b e d i n p u t ( x ) T E m b e d d o c ( z ) } p(z|x) = softmax\{Embed_{input}(x)^TEmbed_{doc}(z)\} p(zx)=softmax{Embedinput(x)TEmbeddoc(z)}
问题2:如何减少文档向量计算的计算量?
知识增强编码 p ( y ∣ z , x ) p(y|z, x) p(yz,x)
假定 y y y z z z中连续片段; x x x z z z拼接送BERT,得到头尾指针。

3.3 训练

答2:仅计算 p ( z ∣ x ) p(z|x) p(zx)的前几项。并使用MIPS工具进行异步更新索引,以某个间隔计算文档向量,而不是每次传播都计算。

索引仅在预训练时更新。

MIPS异步更新索引
主进程负责训练,副进程负责计算索引。主进程定期发送当前的参数给副进程,副进程利用新参数计算完索引后将其发送给主进程。

3.4 设置归纳偏见

(介绍了一些有用的额外设置)

  • 知识增强掩码

因为希望预训练模型对知识敏感,在掩码环节应该选择实体,而不是让模型仅仅通过上下文就能获取答案的单词。

  • 占位文档

知识增强编码还不充分,在候选文档中设置一个空文档,让模型在不需要引用外部知识时选择这个文档。

  • 禁止虚假检索

如果问答数据库和知识数据库是一样的,那么模型很可能会选择掩码句子所在的文章作为候选段,这种情况应该禁止。

  • 热启动

如果随机初始化,那么检索器刚开始提供的是无用的信息,由此导致参数更新缓慢,进而形成恶循环。采用Inverse Cloze Task来预-预训练Embed_input和Embed_doc。

你可能感兴趣的:(人工智能)