赞
踩
©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 的位置编码,而不用重新训练模型。下面给出笔者构思的一种层次分解方案。
▲ 位置编码的层次分解示意图
具体来说,假设已经训练好的绝对位置编码向量为 ,我们希望能在此基础上构造一套新的编码向量 ,其中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。