当前位置:   article > 正文

层次分解位置编码,让BERT可以处理超长文本

bert 层次分解位置编码

©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

大家都知道,目前的主流的 BERT 模型最多能处理 512 个 token 的文本。导致这一瓶颈的根本原因是 BERT 使用了从随机初始化训练出来的绝对位置编码,一般的最大位置设为了 512,因此顶多只能处理 512 个 token,多出来的部分就没有位置编码可用了。当然,还有一个重要的原因是 Attention的 复杂度,导致长序列时显存用量大大增加,一般显卡也 finetune 不了。

本文主要面向前一个原因,即假设有足够多的显存前提下,如何简单修改当前最大长度为 512 的 BERT 模型,使得它可以直接处理更长的文本,主要思路是层次分解已经训练好的绝对位置编码,使得它可以延拓到更长的位置。

位置编码

BERT 使用的是训练出来的绝对位置编码,这种编码方式简单直接,效果也很不错,但是由于每个位置向量都是模型自己训练出来的,我们无法推断其余位置的编码向量,因此有了长度限制。

解决这个问题的一个主流思路是换成相对位置编码,这是个可行的办法,华为的 NEZHA [1] 模型便是一个换成了相对位置编码的 BERT 模型。相对位置编码一般会对位置差做个截断,使得要处理的相对位置都在一个有限的范围内,因此相对位置编码可以不受限于序列长度。

但相对位置编码也不是完美的解决方案,首先像 NEZHA 那样的相对位置编码会增加计算量(如果是 T5 那种倒是不会),其次是线性 Attention 则没法用相对位置编码,也就是不够通用。

读者可能会想起 Attention is All You Need 不是提出了一种用 表示的 Sinusoidal 绝对位置编码吗?直接用那种不就不限制长度了?理论上是这样,但问题是目前没有用 Sinusoidal 位置编码的模型开放呀,难道我们还要自己从零训练一个?这显然不大现实呀。

层次分解

所以,在有限资源的情况下,最理想的方案还是想办法延拓训练好的 BERT 的位置编码,而不用重新训练模型。下面给出笔者构思的一种层次分解方案。

▲ 位置编码的层次分解示意图

具体来说,假设已经训练好的绝对位置编码向量为 ,我们希望能在此基础上构造一套新的编码向量 ,其中

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/371861?site
推荐阅读
相关标签
  

闽ICP备14008679号