查看原文
其他

无监督分词和句法分析!原来BERT还可以这样用

苏剑林 PaperWeekly 2022-03-17


©PaperWeekly 原创 · 作者|苏剑林
单位|追一科技
研究方向|NLP、神经网络


BERT 的一般用法就是加载其预训练权重,再接一小部分新层,然后在下游任务上进行 finetune,换句话说一般的用法都是有监督训练的。基于这个流程,我们可以做中文的分词、NER 甚至句法分析,这些想必大家就算没做过也会有所听闻。

但如果说直接从预训练的 BERT(不 finetune)就可以对句子进行分词,甚至析出其句法结构出来,那应该会让人感觉到意外和有趣了。

本文介绍 ACL 2020 的论文 Perturbed Masking: Parameter-free Probing for Analyzing and Interpreting BERT,里边提供了直接利用 Masked Language Model(MLM)来分析和解释 BERT 的思路,而利用这种思路,我们可以无监督地做到分词甚至句法分析。

论文标题:Perturbed Masking: Parameter-free Probing for Analyzing and Interpreting BERT
论文来源:ACL 2020
论文链接:https://arxiv.org/abs/2004.14786
代码链接:https://github.com/LividWo/Perturbed-Masking


相关矩阵

本文建议配合如下文章来读:《【中文分词系列】 2. 基于切分的新词发现》[1]、《最小熵原理(二):“当机立断”之词库构建》[2]《最小熵原理(三):“飞象过河”之句模版和语言结构》。这几篇文章主要是介绍了做无监督分词和句法分析的关键思想:相关矩阵

1.1 token - token
依照原文的记号,设待分析句子可以表示为 token 组成的序列 ,那么我们需要一个 的相关矩阵 ,表示该句子中任意两个 token 的相关性。在上面推荐的那几篇文章中,我们用互信息来衡量这种相关性,而借助预训练好的 BERT 模型,我们可以提出新的相关性。
我们用 表示序列 经过 BERT 编码器后的输出序列,而 则表示第 i 个 token 所对应的编码向量,另外, 表示将第 i 个 token 替换为 后的序列, 表示将第 i, j 个 token 都替换为 后的序列。
表示第 i 个 token 对第 j 个 token 的依赖程度,或者说第 j 个 token 对第 i 个 token 的“影响力”,那么我们将其定义为:

其中 是某种向量距离,原论文用欧氏距离,即:

▲ 基于 BERT 的 “token-token” 相关度计算图示(原句为“欧拉是一名数学家”)

该定义的思路大概是:在 MLM 模型中, 都是用来预测 的特征,按照 “mask 越多、预测越不准“直观想法,我们有理由相信 能更准确地预测 ,而 相比就是去掉了 的信息,所以可以用两者的距离代表着 的“影响力”。
注1:原论文还提供了另一种定义 的方式,但是语焉不详,并且笔者也觉得那种方式不够合理,因此这里也不介绍另一种方式了。
注2:可能读者会想到直接用 BERT 里边的 Self Attention 的注意力矩阵来作为相关性,但其实并不好:一来,BERT 有那么多层,每层都有注意力矩阵,你也不知道哪个好;二来,文章 Google 新作 Synthesizer:我们还不够了解自注意力告诉我们,注意力矩阵也许并不像我们想象中的那样工作,它里边的值也并不一定是相关性。
1.2 span - span
当然,我们并不一定要以 token 为单位,比如在句法分析中我们通常是以词为单位的,当然,BERT 的输入还是 token,所以我们需要将 token 分组成若干个 span,即 ,而 ,这时候我们需要一个 的相关矩阵,定义原理跟前面类似:

这里 是指 BERT 输出的 对应的 个向量的平均。

▲ 基于 BERT 的 “span-span” 相关度计算图示(原句为“欧拉是一名数学家”)


语言结构

有了这个相关矩阵之后,我们就可以做很多事情了,比如分词、句法分析等。一方面,BERT 的 MLM 模型提供了一种无监督分词甚至句法分析的思路,另一方面,这些合理的无监督结果也反过来诠释了 BERT 本身的合理性,所以原论文的作者们才以 “Analyzing and Interpreting BERT” 为标题。
2.1 中文分词

作为一个基本的验证,我们可以试着用它来做无监督中文分词。这部分内容是笔者自己实验的,并没有出现在原论文中,大概是因为原论文的实验都是英文数据,而分词是相对来说是比较具有“中文特色”的任务吧。

事实上,有了相关矩阵之后,分词是一个很自然的应用。类似《【中文分词系列】 2. 基于切分的新词发现》[3] 和《最小熵原理(二):“当机立断”之词库构建》[4]

我们只需要考虑相邻 token 的相关性,设定一个阈值,然后把相关度小于这个阈值的两个 token 切开,大于等于这个阈值的两个 token 拼接,就构成了一个简单的分词工具了。在实验中,笔者用 作为相邻两个 token 的相关程度度量。

具体细节可以参考代码:

https://github.com/bojone/perturbed_masking/blob/master/word_segment.py

下面是效果演示:
[u'习近平', u'总书记', u'6月', u'8日', u'赴', u'宁夏', u'考察', u'调研', u'。', u'当天', u'下午', u',他先后', u'来到', u'吴忠', u'市', u'红寺堡镇', u'弘德', u'村', u'、黄河', u'吴忠', u'市城区段、', u'金星', u'镇金花园', u'社区', u',', u'了解', u'当地', u'推进', u'脱贫', u'攻坚', u'、', u'加强', u'黄河流域', u'生态', u'保护', u'、', u'促进', u'民族团结', u'等', u'情况', u'。']
[u'大肠杆菌', u'是', u'人和', u'许多', u'动物', u'肠道', u'中最', u'主要', u'且数量', u'最多', u'的', u'一种', u'细菌']
[u'苏剑林', u'是', u'科学', u'空间', u'的博主']
[u'九寨沟', u'国家级', u'自然', u'保护', u'区', u'位于', u'四川', u'省', u'阿坝藏族羌族', u'自治', u'州', u'南坪县境内', u',', u'距离', u'成都市400多公里', u',', u'是', u'一条', u'纵深', u'40余公里', u'的山沟谷', u'地']
可以看到,效果还是相当赞的,虽然仍有点错漏,但是作为一个无监督的分词算法来说,已经是相当难得了。

我们可以通过修改阈值进一步控制分词粒度,也可以将它作为一个分词发现工具来进一步提升分词效果(即将分词结果统计起来,然后过滤掉低频词,将剩下的词作为词库,来构建一个基于词库的分词工具)。

值得说明的是,上述实验笔者用的是最早 Google 开源的 BERT base 版本,这个版本是没有融入分词信息的(后来的 WWM 版本是利用分词构建 MASK,所以是融入了分词信息),所以上述分词效果确实算是纯无监督的。
2.2 句法分析

有相关背景的读者应该知道,跟分词类似,其实在有了相关矩阵之后,句法分析其实也是一件水到渠成的事情罢了。当然,由于这里的句法分析是无监督的,所以它只能想办法析出句子的层次结构(句法树)出来,无法像有监督的句法分析一样,贴上人为定义的句法结构标签。

ON-LSTM:用有序神经元表达层次结构这篇论文一样,无监督句法分析的基本思路就是递归地将 划分为 三部分(如果用 span 为单位,那么就将 改为 ,步骤一样,不赘述)。
这有点像聚类,其中 是一类,而 是一类,聚类的思路也很普通,就是希望同类之间的相关性尽可能大,异类之间的相关性尽可能小,所以可以提出如下简单目标:

其中 直接定义为 0 即可,这点细节不大重要,毕竟无监督的本来也不可能做得太精细。上面的公式看起来复杂,但事实上用一张图就可以表达清楚:

▲ 基于相关度矩阵的分块聚类图示

如图为距离矩阵的可视化,而聚类的目的,就是希望“蓝色部分和绿色部分的均值尽可能大,而黄色部分和橙色部分的均值尽可能小”,所以就有了上述公式的优化目标。

效果怎样呢?我们来试几个句子(事先分好词的,以词为单位构建):

▲ 基于 BERT 的无监督句法分析效果演示
感觉确实基本析出了句子的层次结构。实现请参考代码:
https://github.com/bojone/perturbed_masking/blob/master/syntax_parsing.py
最后,原论文作者也开源了自己的代码(致敬开源),读者也可以参考阅读。

https://github.com/LividWo/Perturbed-Masking


文章小结

本文简要介绍了 ACL 2020 的一篇论文,里边提出了基于 BERT 的 MLM 模型来对句子成分进行相关度计算的思路,利用算出来相关度,我们可以进行无监督的分词乃至句法分析,笔者利用 bert4keras 尝试在中文上复现了一下,证实了该思路的有效性。


参考链接


[1] https://kexue.fm/archives/3913
[2] https://kexue.fm/archives/5476
[3] https://kexue.fm/archives/3913
[4] https://kexue.fm/archives/5476


更多阅读





#投 稿 通 道#

 让你的论文被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。


📝 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志


📬 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通



🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



关于PaperWeekly


PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存