行业报告 AI展会 数据标注 标注供求
数据标注数据集
主页 > 机器学习 > 正文

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

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

 

 

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

 

注2:可能读者会想到直接用 BERT 里边的 Self Attention 的注意力矩阵来作为相关性,但其实并不好:一来,BERT 有那么多层,每层都有注意力矩阵,你也不知道哪个好;二来,文章 Google 新作 Synthesizer:我们还不够了解自注意力告诉我们,注意力矩阵也许并不像我们想象中的那样工作,它里边的值也并不一定是相关性。
 
1.2 span - span

 

 

基于 BERT 的 “span-span” 相关度计算图示(原句为“欧拉是一名数学家”)
 
语言结构
有了这个相关矩阵之后,我们就可以做很多事情了,比如分词、句法分析等。一方面,BERT 的 MLM 模型提供了一种无监督分词甚至句法分析的思路,另一方面,这些合理的无监督结果也反过来诠释了 BERT 本身的合理性,所以原论文的作者们才以 “Analyzing and Interpreting BERT” 为标题。
 
2.1 中文分词
作为一个基本的验证,我们可以试着用它来做无监督中文分词。这部分内容是笔者自己实验的,并没有出现在原论文中,大概是因为原论文的实验都是英文数据,而分词是相对来说是比较具有“中文特色”的任务吧。
 
事实上,有了相关矩阵之后,分词是一个很自然的应用。类似《【中文分词系列】 2. 基于切分的新词发现》[3] 和《最小熵原理(二):“当机立断”之词库构建》[4] 。
 

 

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

 

 

基于相关度矩阵的分块聚类图示
 
如图为距离矩阵的可视化,而聚类的目的,就是希望“蓝色部分和绿色部分的均值尽可能大,而黄色部分和橙色部分的均值尽可能小”,所以就有了上述公式的优化目标。
 
效果怎样呢?我们来试几个句子(事先分好词的,以词为单位构建):
 

 

基于 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
 
声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!
 
 

微信公众号

声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
SEM推广服务

Copyright©2005-2026 Sykv.com 可思数据 版权所有    京ICP备14056871号

关于我们   免责声明   广告合作   版权声明   联系我们   原创投稿   网站地图  

可思数据 数据标注行业联盟

扫码入群
扫码关注

微信公众号

返回顶部