炼数成金 门户 商业智能 自然语言处理 查看内容

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

2020-6-17 15:21| 发布者: 炼数成金_小数| 查看: 18481| 评论: 0|原作者: 苏剑林|来自: PaperWeekly

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

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

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

 

GMT+8, 2020-10-26 18:16 , Processed in 0.207201 second(s), 24 queries .