文献阅读笔记:NEZHA(Neural Contextualized Representation for Chinese Language Understanding)

文献阅读笔记:NEZHA(Neural Contextualized Representation for Chinese Language Understanding)0 背景机构 华为诺亚方舟实验室作者 JunqiuWei XiaozheRen 等面向任务 自然语言理解论文地址 https arxiv org abs 1909 00204 论文代码 https github com huawei noah Pretrained Language Model tree master NEZHA0 1 摘要预训练模型在捕捉深度语境表征方面

0. 背景

0.1 摘要

1. 介绍

本文的NEZHA使用函数式相对位置编码,通过预定义函数的方式在自注意力层编码相对位置。实验结果表明,该方法是一种有效的位置编码方案,并在实验中取得了一致的效果。此外,NEZHA在训练过程中使用了三种已被证明是有效的预训练BERT技术,即全词覆盖,混合精度训练和LAMB优化。

2. NEZHA 模型

由于NEZHA也是基于BERT,所以关于Transformer和BERT的详情请直接阅读原始论文或者查阅本人之前的博文。在此不赘述。

函数式相对位置编码

在Transformer 中,每个词之间互相都要Attending,并不知道每个词离自己的距离有多远,这样把每个词平等的对待,是会有问题的。

NEZHA中的函数式相对位置编码,通过使用相对位置的正弦函数计算输出和attention的得分。该想法源于Transformer中使用的函数式绝对位置编码。在本文的模型中, a i j V a_{i j}^{V} aijV a i j K a_{i j}^{K} aijK都是正弦函数,且在训练过程固定不变。为了简化起见,直接将 a i j V a_{i j}^{V} aijV a i j K a_{i j}^{K} aijK简写为 a i j a_{ij} aij。维度为 2 k 2k 2k 2 k + 1 2k+1 2k+1 a i j a_{ij} aij分别如下:
a i j [ 2 k ] = sin ⁡ ( ( j − i ) / ( 1000 0 2. k d z ) ) a i j [ 2 k + 1 ] = cos ⁡ ( ( j − i ) / ( 1000 0 2. k d z ) ) \begin{aligned} a_{i j}[2 k] &=\sin \left((j-i) /\left(10000^{\frac{2 . k}{d_z}}\right)\right) \\ a_{i j}[2 k+1] &=\cos \left((j-i) /\left(10000^{\frac{2.k}{d_ z}}\right)\right) \end{aligned} aij[2k]aij[2k+1]=sin((ji)/(10000dz2.k))=cos((ji)/(10000dz2.k))
位置i和位置j的相对位置编码由2部分组成,维度为2k和2k+1。假设 d z d_z dz=512,那么k的取值从0,1,255。由此可以看出,位置编码的每个维度都由正弦函数决定。不同维度(即不同 d z d_z dz)的正弦函数会有不同的波长。上述公式中, d z d_z dz表示NEZHA模型的每个head的隐含层大小。波长是一个从 2 π 2\pi 2π 10000 ⋅ 2 π 10000 \cdot2\pi 100002π的几何级数。选择固定正弦函数,可以使该模型具有更强的扩展性;即当它遇到比训练中序列长度更长的序列时,依然可以发挥作用。

全词覆盖

在初始的BERT中,每个token或者每个汉字都是随机覆盖的。而 NEZHA 预训练模型,则采用了全词覆盖(WWM)策略,当一个汉字被覆盖时,属于同一个汉字的其他汉字都被一起覆盖。该策略被证明比 BERT 中的随机覆盖训练(即每个符号或汉字都被随机屏蔽)更有效。在 NEZHA 的 WWM 实现中,使用了一个Jieba进行中文分词。在 WWM 训练数据中,每个样本包含多个覆盖汉字,覆盖汉字的总数约占其长度的 12%,随机替换的占 1.5%。尽管这样预测整个词运算难度有所增加,但最终取得的效果更好。

混合精度训练和LAMB优化器

在 NEZHA 模型的预训练中采用了混合精度训练技术。该技术可以使训练速度提高2-3倍,同时也减少模型的空间占用,从而可以利用较大的batch size。

传统的深度神经网络训练使用 FP32 (即单精度浮点格式)来表示训练中涉及的所有变量(包括模型参数和梯度);而混合精度训练在训练中采用了多精度。具体来说,它重点维持模型中权重的单精度副本(称为主权重),即在每次训练迭代中,将主权重舍入为FP16(即半精度浮点格式),并使用 FP16 格式存储的权重、激活和梯度执行向前和向后传递;最后将梯度转换为FP32格式,并使用FP32梯度更新主权重。

LAMB 优化器是专为深度神经元网络大batch size同时分布式训练而设计。尽管使用大的batch size训练可以有效地加快 DNN 训练速度,但是如果不仔细调整学习率,当batch size处理的大小超过某个阈值时,模型的性能可能会受到很大影响。LAMB 优化器则不需要手动调整学习率,而是采用了一种通用的自适应策略。优化器通过使用非常大的batch size(实验中高达 30k 以上)来加速BERT的训练,而不会导致性能损失,甚至在许多任务中获得最先进的性能。值得注意的是,BERT的训练时间最终从3天显著缩短到 76 分钟。

3. 实验结果

预训练

实验结果

评测数据集:CMRC(中文阅读理解2018)、XNLI(跨语言自然语言推理)、LCQMC(大规模中文问题匹配语料)、PD-NER(人民日报命名实体实体数据集)、ChnSenti(中文情感分类数据集)

从消融研究的实验结果可以看出,上述因素都能够促进下游任务性能的提升。对比函数式相对位置编码、参数式绝对位置编码和参数式相对位置编码,可以看出函数式相对位置编码显著优于其他位置编码方式。在CMRC任务中可以看出,相较于相对位置编码使用绝对位置编码真是弱爆了。

总结

本文提出一个基于中文语料的大规模预训练模型:NEZHA。其中最为重要的贡献在于使用了函数式相对位置编码,该方法显著优于其他位置编码方式。另外,NEZHA模型也集成了几项先进技术:全词覆盖、混合精度训练和LAMB优化器。NEZHA在数个中文自然语言理解任务中取得SOTA结果。

PS:其实这篇文章再9月初已经放出来了,当时没有开放预训练模型,是在走内部的审批流程,直到12月初。。。终于放出来,这时候似乎没了新鲜感。看了下技术点,除了函数式相对位置编码,其他的算是平平无奇吧。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227111.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:55
下一篇 2026年3月16日 下午9:55


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号