选自Google AI Blog
作者:Prabhu Kaliamoorthi
转自机器之心
在最新的博客文章中,谷歌公布了一个新的 NLP 模型,在文本分类任务上可以达到 BERT 级别的性能,但参数量仅为 BERT 的 1/300。
在过去的十年中,深度神经网络从根本上变革了自然语言处理(NLP)领域的发展,但移动端有限的内存和处理能力对模型提出了更高的要求。人们希望它们可以变得更小,但性能不打折扣。
去年,谷歌发布了一种被称为 PRADO 的神经架构,该架构当时在许多文本分类问题上都实现了 SOTA 性能,并且参数量少于 200K。大多数模型对每个 token 使用固定数目的参数,而 PRADO 模型使用的网络结构只需要很少的参数即可学习与任务最相关或最有用的 token。
论文链接:https://www.aclweb.org/anthology/D19-1506.pdf
在最新的博客文章中,谷歌的研究者宣布它们改进了 PRADO,并将改进后的模型称为 pQRNN。新模型以最小的模型尺寸达到了 NLP 任务的新 SOTA。pQRNN 的新颖之处在于,它将简单的投影运算与 quasi-RNN 编码器相结合,以进行快速、并行的处理。该研究表明,pQRNN 模型能够在文本分类任务上实现 BERT 级别的性能,但参数量仅为原来的 1/300。
PRADO 的工作原理
在一年前开发该模型时,PRADO 在文本分割上充分利用特定领域的 NLP 知识,以降低模型大小和提升模型性能。通常来说,首先通过将文本分割成与预定义通用词典中的值相对应的 token,将 NLP 模型的文本输入处理成适用于神经网络的形式。然后,神经网络使用可训练参数向量(包括嵌入表)来唯一识别每个文本片段。但是,文本分割的方式对模型性能、大小和延迟都有显著的影响。
下图展示了 NLP 社区使用的各种文本分割方法及其相应的优缺点:
由于文本片段的数量是影响模型性能和压缩的重要参数,因此引出了一个问题,即 NLP 模型是否需要能够清楚地识别每个可能的文本片段。为了回答这个问题,研究者探索了 NLP 任务的固有复杂性。
只有语言建模和机器翻译等少数 NLP 任务需要了解文本片段之间的细微差异,因此可能需要唯一识别所有可能的文本片段。其他大多数任务仅通过了解这些文本片段的子集即可解决。此外,任务相关的文本片段子集并不一定是频率最高的部分,因为可能很大一部分是专用的冠词,如 a、an 和 the,而这些对很多任务来说并不重要。
所以,允许网络决定给定任务的最相关片段可以实现更好的性能。并且,网络不需要唯一识别这些文本片段,只需要识别出文本片段的聚类即可。举例而言,情感分类器只需要了解与文本中的情感强相关的片段聚类就行了。
基于此,PRADO 被设计成从词(word)中学习文本片段的聚类,而不是 word piece 或字符,从而使它能够在低复杂度 NLP 任务中实现良好的性能。由于 word unit 更有意义,而且与大多数任务最相关的词并不多,所以学习相关词聚类的简化子集所需要的模型参数就少了很多。
改进 PRADO
谷歌研究者在 PRADO 的基础上开发了一个更强的 NLP 模型——pQRNN。该模型由三个构建块组成——一个是将文本中的 token 转化为三元向量序列的投影算子、一个密集 bottleneck 层和若干 QRNN 编码器。
pQRNN 中投影层的实现与 PRADO 中所用到的一致,帮助模型学习相关性最强的 token,但没有一组固定的参数来定义这些 token。它首先对文本中的 token 进行识别,然后使用一个简单的映射函数将其转换为三元特征向量。这将产生一个三元向量序列,该序列具有平衡对称分布,用来表示文本。这种表示没有直接用途,因为它不包含解决感兴趣任务所需的任何信息,而且网络无法控制这种表示。
研究者将其与一个密集 bottleneck 层结合在一起,以使网络可以学习到一个与手头任务相关的逐词表示。bottleneck 层产生的表示仍然没有考虑到词的上下文。因此,研究者利用若干双向 QRNN 编码器学习了一个上下文表示。这样可以得到一个仅从文本输入就能学到上下文表示的网络,并且无需任何预处理。
pQRNN 的性能
研究者在 civil_comments 数据集上评估了 pQRNN,并将其与 BERT 模型在相同的任务中进行了比较。模型的大小与其参数量成正比,因此 pQRNN 比 BERT 小得多。
此外,pQRNN 还进行了量化处理(quantized),因此模型体积进一步缩小到原来的 1/4。公开训练的 BERT 在本文的任务中表现不好,因此拿来对比的 BERT 其实是在几个不同的相关多语言数据源上进行预训练得到的,以使其达到最好的表现。
在实验中,研究者得到了两个模型的 AUC 信息。在没有任何预训练、只在监督数据训练的情况下,pQRNN 的 AUC 是 0.963,用到了 130 万个量化(8-bit)参数。在几个不同数据源进行预训练并在监督数据上进行微调之后,BERT 模型得到的 AUC 是 0.976,用到了 1.1 亿个浮点参数。
为了鼓励社区在谷歌研究成果的基础上做出进一步改进,谷歌还开源了 PRADO 模型。
项目地址:https://github.com/tensorflow/models/tree/master/research/sequence_projection
博客链接:https://ai.googleblog.com/2020/09/advancing-nlp-with-efficient-projection.html