加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

谷歌最强NLP模型BERT,为何炫酷又强大?腾讯程序员给你从头讲起

发布时间:2020-06-19 05:41:15 所属栏目:创业 来源:站长网
导读:副标题#e# 一、背景介绍 搜索场景下用户搜索的 query 和召回文章标题(title)的相关性对提升用户的搜索体验有很大帮助。query-title 分档任务要求针对 query 和 title 按文本相关性进行 5 个档位的分类(1~5 档),各档位从需求满足及语义匹配这两方面对 query
副标题[/!--empirenews.page--]

 一、背景介绍

搜索场景下用户搜索的 query 和召回文章标题(title)的相关性对提升用户的搜索体验有很大帮助。query-title 分档任务要求针对 query 和 title 按文本相关性进行 5 个档位的分类(1~5 档),各档位从需求满足及语义匹配这两方面对 query-doc 的相关度进行衡量,档位越大表示相关性越高,如 1 档表示文本和语义完全不相关,而 5 档表示文本和语义高度相关,完全符合 query 的需求。

谷歌最强NLP模型BERT,为何炫酷又强大?腾讯程序员给你从头讲起

我们尝试将 Bert 模型应用在 query-title 分档任务上,将 query 和 title 作为句对输入到 bert 中,取最后一层 cls 向量用做 5 分类(如上图),最后得到的结果比 LSTM-Attention 交互式匹配模型要好。虽然知道了 bert能解决这个问题,我们更好奇的是"ô":为什么 bert 的表现能这么好?这里面有没有可解释的部分呢?

因为 Multi-head-attention 是 bert 的主要组成部分,所以我们从"头"入手,希望弄清楚各个 head 对 bert 模型有什么作用。为了研究某个 head 对模型的影响,我们需要比较有这个 head 和没有这个 head 模型的前后表现。这里定义一下 HEAD-MASK 操作,其实就是针对某个 head,直接将这个 head 的 attention 值置成 0,这样对于任何输入这个 head 都只能输出 0 向量。

通过 HEAD-MASK 操作对各个 head 进行对比实验,发现了下面几个有趣的点

attention-head 很冗余/鲁棒,去掉 20%的 head 模型不受影响 各层 transformer 之间不是串行关系,去掉一整层 attention-head 对下层影响不大 各个 head 有固定的功能 某些 head 负责分词 某些 head 提取语序关系 某些 head 负责提取 query-title 之间 term 匹配关系

下面我们开始实验正文,看看这些结论是怎么得到的

二、Bert 模型 Attention-Head 实验

attention-head 是 bert 的基本组成模块,本次实验想要研究各个 head 都对模型作出了什么贡献。通过 Mask 掉某个 head,对比模型前后表现的差异来研究这个 head 对模型有什么样的作用(对训练好的 bert 做 head-mask,不重新训练,对比测试集的表现)。

bert-base 模型共 12 层每层有 12 个 head,下面实验各个 head 提取的特征是否有明显的模式(Bert 模型为在 query-title 数据上 finetune 好的中文字模型)

2.1 Attention-Head 比较冗余

标准大小的 bert 一共有 12*12 共 144 个 head.我们尝试对训练好的 bert 模型,随机 mask 掉一定比例的 head,再在测试数据集上测试分档的准确率(五分类)。

下图的柱状图的数值表示相比于 bseline(也就是不做任何 head-mask)模型 acc 的相对提升,如+1%表示比 baseline 模型的 acc 相对提高了 1%,从下面的图可以看到,随机 mask 掉低于 20%的 head,在测试数据集上模型的 acc 不会降低,甚至当 mask 掉 10%的 head 的时候模型表现比不做 head mask 的时候还提升了 1%。当 mask 掉超过一定数量的 head 后,模型表现持续下降,mask 掉越多表现越差。

谷歌最强NLP模型BERT,为何炫酷又强大?腾讯程序员给你从头讲起

同时为了弄清楚底层和高层的 transformer 哪个对于 query-title 分类更加的重要,分别对底层(layer0 ~ layer5 )和高层(layer6~layer11)的 head 做 mask, 去掉的 head 比例控制在 0~50%(占总 head 数量)之间,50%表示去掉了底层或者是高层 100%的 head 下面的图很清晰的说明了底层和高层的 attention-head 关系,橙色部分表示只 mask 掉高层(6 - 11 层)的 head,蓝色部分表示只 mask 掉底层(0 - 5 层)的 head。

显然高层的 attention-head 非常的依赖底层的 head,底层的 attention-head 负责提取输入文本的各种特征,而高层的 attention 负责将这些特征结合起来。具体表现在当 mask 掉底层(0~5 层)的 80%的 head(图中横坐标为 40%)和 mask 掉底层的 100%的 head(图中横坐标为 50%)时,模型在测试数据集上表现下降剧烈(图中蓝色部分),说明了去掉大部分的底层 head 后只依赖高层的 head 是不行的,高层的 head 并没有提取输入的特征。相反去掉大部分高层的 head 后模型下降的并没有那么剧烈(图中橙色部分),说明了底层的 head 提取到了很多对于本任务有用的输入特征,这部分特征通过残差连接可以直接传导到最后一层用做分类。

谷歌最强NLP模型BERT,为何炫酷又强大?腾讯程序员给你从头讲起

这个结论后面也可以用于指导模型蒸馏,实验结果表明底层的 transformer 比高层的 transformer 更加的重要,显然我们在蒸馏模型时需要保留更多的底层的 head

那么对于模型来说是否有某些层的 head 特别能影响 query-title 分类呢?假设将 bert 中所有的 attention-head 看做一个 12*12 的方阵,下面是按行 mask 掉一整行 head 后模型在测试数据上的表现,柱状图上的数值表示相比 baseline 模型的相对提升。

谷歌最强NLP模型BERT,为何炫酷又强大?腾讯程序员给你从头讲起

可以看到 mask 掉第 5 层~第 9 层的 head 都模型都有比较大的正面提升,特别是当去掉整个第 8 层的 attention-head 的时候测试数据准确率相对提升了 2.3%,从上图可以得到两个结论:

Bert 模型非常的健壮或者是冗余度很高 Bert 模型各层之间不是串行依赖的关系,信息并不是通过一层一层 transformer 层来传递的

bert 模型非常的健壮或者是冗余度很高,直接去掉一整层的 attention-head 并不会对模型的最终表现有太大的影响。 直接去掉整层的 attention-head 模型表现并没有大幅度的下降,说明各层提取的特征信息并不是一层一层的串行传递到分类器的,而是通过残差连接直接传导到对应的层。

2.2 某些 head 负责判断词的边界(使得字模型带有分词信息)

在我们的 query-title 分档场景中,发现词粒度的 bert 和字粒度的 bert 最终的表现是差不多的,而对于 rnn 模型来说字粒度的 rnn 很难达到词粒度 rnn 的效果,我们希望研究一下为什么词粒度和字粒度的 bert 表现差不多。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读