【搜出来的文本】⋅(三)基于BERT的文本采样
事实真的如此吗?当然不是。利用BERT的MLM模型其实也可以完成文本采样,事实上它就是上一篇文章所介绍的Gibbs采样。这一事实首先由论文 《BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model》
明确指出。论文的标题也颇为有趣:“BERT也有嘴巴,所以它得说点什么。”现在就让我们看看BERT究竟能说出什么来~
首先,我们再次回顾上一篇文章所介绍的Gibbs采样流程:
Gibbs采样
初始状态为$\boldsymbol{x}_0=(x_{0,1},x_{0,2},\cdots,x_{0,l})$,$t$时刻状态为$\boldsymbol{x}_t=(x_{t,1},x_{t,2},\cdots,x_{t,l})$。
通过如下流程采样出$\boldsymbol{x}_{t+1}$:
1、均匀地从$1,2,\cdots,l$中采样一个$i$;
2、计算$p(y|\boldsymbol{x}_{t,-i})=\frac{p(x_{t,1},\dots,x_{t,i-1},y,x_{t,i+1},\cdots,x_{t,l})}{\sum\limits_y p(x_{t,1},\dots,x_{t,i-1},y,x_{t,i+1},\cdots,x_{t,l})}$;
3、采样$y\sim p(y|\boldsymbol{x}_{t,-i})$;
4、$\boldsymbol{x}_{t+1} = {\boldsymbol{x}_t}_{[x_{t,i}=y]}$(即将$\boldsymbol{x}_t$的第$i$个位置替换为$y$作为$\boldsymbol{x}_{t+1}$)。
其中最关键的一步,就是$p(y|\boldsymbol{x}_{-i})$的计算了,它的具体含义是“通过除去第$i$个元素后的所有$l-1$个元素来预测第$i$个元素的概率”,了解BERT的读者应该都能明白过来:这不正是BERT的MLM模型所要做的事情吗?所以,MLM模型与Gibbs采样结合起来,其实就可以实现文本的随机采样了。
所以,将上述Gibbs采样流程落实到基于MLM的文本采样中,流程如下:
MLM模型随机采样
初始句子为$\boldsymbol{x}_0=(x_{0,1},x_{0,2},\cdots,x_{0,l})$,$t$时刻句子为$\boldsymbol{x}_t=(x_{t,1},x_{t,2},\cdots,x_{t,l})$。
通过如下流程采样出新的句子$\boldsymbol{x}_{t+1}$:
1、均匀地从$1,2,\cdots,l$中采样一个$i$,将第$i$的位置的token替换为[MASK],得到序列$\boldsymbol{x}_{t,-i}=(x_{t,1},\dots,x_{t,i-1},\text{[MASK]},x_{t,i+1},\cdots,x_{t,l})$;
3、将$\boldsymbol{x}_{t,-i}$送入到MLM模型中,算出第$i$个位置的概率分布,记为$p_{t+1}$;
3、从$p_{t+1}$采样一个token,记为$y$;
4、将$\boldsymbol{x}_{t}$的第$i$个token替换成$y$来作为$\boldsymbol{x}_{t+1}$。
读者或许留意到了,该采样流程只能采样出固定长度的句子,不会改变句子长度。确实如此,因为Gibbs采样只能实现用某个分布中进行采样,而不同长度的句子事实上已经是属于不同的分布了,它们理论上是不存在交集的,只不过通常我们我们建立语言模型时,是直接用自回归模型统一建模不同长度的句子分布,以至于我们没有察觉到“不同的句子事实上属于不同的概率分布”这个事实。
当然,要解决这一点也不是不可能, 《BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model》
原论文就指出,可以将初始句子设为全部都是[MASK]的序列,这样我们就可以事先随机采样一个长度$l$,然后以$l$个[MASK]为初始句子来开始Gibbs采样过程,从而得到不同长度的句子。
有了现成的MLM模型后,实现上述Gibbs采样其实是一件很简单的事情了,下面是基于bert4keras实现的参考代码:
Gibbs采样参考代码: basic_gibbs_sampling_via_mlm.py
下面是一些例子:
初始句子:
科学技术是第一生产力。
采样结果:
荣耀笔记本开箱怎么样?
微信记录没用被怎么办?
无法安装浏览器怎么办?
epf转换器a7l怎么用?
没有安装浏览器怎么办?
荣耀笔记本充电怎么用?
无法打开asp. net怎么办?
没有安装浏览器怎么办?
无法重启浏览器怎么办?
ro汉巴换mac tv版怎么用?
初始句子:
北京新增3例本地确诊病例和1例无症状感染者
采样结果:
澳门录得233宗h1n1感染案例和13宗放射性感染。
庆祝仪式是学院绘画、钢铁工参与创作的盛会。
庆祝仪式后吉卜力平台其他游戏也参加了庆祝。
临床试验发现中的g染色体多来自胃肠道感染。
临床试验发现,人们通常真正享受阴蒂的快感。
庆祝模式在吉卜力平台其他游戏中更加与庆祝。
庆祝模式在吉卜力,或其他游戏上更新和庆祝。
澳门录得20宗h1n1感染病例,2宗放射性感染。
临床试验发现女性的染色体常来自胃肠道感染。
临床试验发现90% 感染病例为m型胃肠道感染。
初始句子:
连续9个[MASK]
采样结果:
你每天学你妈妈啊!
那晚,眼前白茫茫。
層層青翠綠意盎然。
幼儿园想做生意了。
究竟如何才能入官?
老师、同学,您好!
云山重重,两茫茫。
梅雨,窗外霧茫茫。
那时,眼前白茫茫。
還是很棒的切蛋糕!
笔者实验所使用的是Google开源的中文BERT base。可以看到,采样出来的句子还是比较丰富的,并且具有一定的可读性,这对于一个base版本的模型来说已经还行了。对于连续[MASK]作为初始值来说,重复实验可能会得到很不一样的结果:
初始句子:
连续17个[MASK]
采样结果:
其他面瘫吃什么?其他面瘫吃什么好?
小儿面瘫怎么样治疗?面瘫吃什么药?
幼儿面瘫怎么样治疗?面瘫吃什么好?
儿童头痛是什么原因荨麻疹是什么病?
其他面瘫吃什么・ 其他面瘫吃什么好?
竟然洁具要怎么装进去水龙头怎么接?
其他面瘫吃什么好其他面瘫吃什么好?
孩子头疼是什么原因荨麻疹是什么病?
竟然厨房柜子挑不进去水龙头怎么插?
不然厨房壁橱找不到热水龙头怎么办?
初始句子:
连续17个[MASK]
采样结果:
フロクのツイートは下記リンクからこ覧下さい。
天方町に運行したいシステムをこ利用くたさい。
エリアあります2つクロカー専門店からこ案内まて!
当サイトては割引に合うシステムを採用しています!
同時作品ては表面のシステムを使用する。
メーカーの品は真面まてシステムを使用しています。
掲示板こ利用いたたシステムこ利用くたさい。
住中方は、生産のシステムを使用しています。
エアウェアの住所レヘルをこ一覧下さい。
フロクのサホートは下記リンクてこ覧下さい。
很神奇,日语都采样出来了,而且笔者用百度翻译看了一下,这些日语还算是可读的。一方面,这体现了随机采样结果的多样性,另一方面,这也体现了Goole版的中文BERT并没有做好去噪,训练语料应该夹杂了不少非中英文本的。
前段时间,Google、斯坦福、OpenAI等合作发表了一篇文章 《Extracting Training Data from Large Language Models》
,指出GPT2等语言模型完全是可以重现(暴露)训练数据情况的,这个不难理解,因为语言模型本质上就是在背诵句子。而基于MLM的Gibbs采样表明,其实这个问题不仅GPT2显式的语言模型存在,像MLM这样的双向语言模型其实也是存在的。从我们上述的采样例子就可以看出些端倪了,比如采样出日语来,说明原始语料并没有做特别完善的去噪,而我们从“北京新增3例本地确诊病例和1例无症状感染者”出发,采样出了一些h1n1相关的结果,这反映出训练语料的时代性。这些结果都意味着,如果你不想开源模型暴露你的隐私,那么对预训练的语料就要好好做好清理工作了。
此外,关于 《BERT has a Mouth, and It Must Speak: BERT as a Markov Random Field Language Model》
这篇论文,还有一个瓜可以吃,那就是原论文说MLM模型是一个Markov Random Field,但事实上这是不对的,后来作者也在自己的主页上做了澄清,有兴趣的读者可以看 《BERT has a Mouth and must Speak, but it is not an MRF》
。总的来说,MLM用来做随机采样是没问题的,但它不能对上Markov Random Field。
本文介绍了基于BERT的MLM所进行的文本随机采样,它实际上是Gibbs采样的自然应用。总的来说,本文只是一个相当简单的例子。对于已经对Gibbs采样有所了解的读者来说,本文几乎是没有技术难度的;如果还不是很了解Gibbs采样的读者,正好也可以通过这个具体的例子,来进一步去理解Gibbs采样的流程。
转载到请包括本文地址:
https://kexue.fm/archives/8119
更详细的转载事宜请参考:
《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎/本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Jan. 22, 2021). 《【搜出来的文本】⋅(三)基于BERT的文本采样 》[Blog post]. Retrieved from https://kexue.fm/archives/8119