层次分解位置编码,让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 的位置编码,而不用重新训练模型。下面给出笔者构思的一种层次分解方案。

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

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

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值