来自:NLPCAB

文本分类是NLP最常见的应用之一,有了BERT之后更是可以通过小批量数据精调达到不错的效果。但在对速度要求高、没有钱买GPU、移动设备部署的场景下,还是得用浅层网络。

今天就跟大家介绍Google最近新出的一个模型——pQRNN,只利用监督数据(无蒸馏),以约1/300的参数量达到了接近BERT的效果。pQRNN是Google去年更小模型PRADO的一个改进版本,下面从PRADO讲起,来看看它们是如何以小博大的叭。

pQRNN官方博客:

https://ai.googleblog.com/2020/09/advancing-nlp-with-efficient-projection.html

PRADO论文:

https://www.aclweb.org/anthology/D19-1506/

PRADO代码:

https://github.com/tensorflow/models/tree/master/research/sequence_projection

关注「NLPCAB」回复「1001」下载论文~

PRADO模型

Embedding

对于我们常用的NLP模型来说,Embedding词表往往是参数量占比较大的一块儿。中文如果选用字级别的词表,大概在一两万级别,词级别则会几万或者更大,还会出现OOV。英文多出了子词级别,但无论哪种粒度的划分都是存在缺点的:

太细了就对模型要求很高,单独的词也不具有太大意义,而太粗了又没法涵盖所有词汇

这就需要我们在不同的任务上选取不同的粒度。PRADO的作者认为,对于文本分类这样的简单任务,很多词汇是和任务无关的,比如 a, the等。另外,也不需要embedding可以准确的表示每个词,只需要大概表示出词所属的类目就可以了。比如在情感分析任务中,只需要让模型知道“超棒”和“太赞了”都是一个positive的词汇,而不用知道这两个词的区别在哪里,甚至用一个embedding去表示这两个词都是可以的。

下面是不同任务和细粒度词表示的相关性,对于语言模型和翻译任务,就需要准确地区分每个词:

那PRADO是如何压缩embedding的呢?

以往在拿到token之后,我们会有一个转one-hot向量的操作,向量的大小是词表维度V,然后再经过lookup table得到embedding。而PRADO则是将向量进行了压缩,具体的操作是:

  1. 对token进行哈希,得到 2B bits 的哈希值,比如 011001010

  2. 用一个投影函数P,将每2个连续的bit映射到 {-1, 0, 1} 中

  3. 得到B维的三元向量,比如 [-1, -1, 1, 0, 1] 这样

  4. 将 1xB 的三元向量和 Bxd 的矩阵相乘,得到 d维embedding表示

这样,我们就得到了一个压缩后的token表示,不用准确地用one-hot来表示每个token。作者把B的维度限制在 [128, 512],d的维度限制在[32, 96],从词表参数量上比BERT小了三四个数量级。

整体结构

PRADO主要的创新就在Embedding部分,后续就比较普通,选择了性价比较高的CNN+Attention。这里Attention其实是对CNN的结果进行了Pooling:先计算了一路CNN的结果,再计算softmax得到每个step的权重,然后把另一路CNN的结果加权起来,得到一个向量。

最后把不同尺寸kernel输出的向量concat,再过classifier(我们熟悉的套路又渐渐回来了)。

PRADO模型结构

实验效果

在效果上,PRADO肯定是比之前的浅层模型要好,然而我去看了一眼每个数据集的SOTA,emm。。效果上还需努力鸭

PRADO效果

令我感兴趣的是,8-bit量化之后的PRADO居然效果更好!作者认为主要是量化减少了过拟合,在数据越少的数据集上效果提升就更明显。

对比实验,性价比吊打LSTM

最后,作者还做了迁移实验,证明这种embedding改进的可迁移性,发现只freeze上embedding和encoder,只finetune分类器就收敛得很快

PRADO迁移学习实验

pQRNN

介绍完了PRADO,再来看谷歌新出的pQRNN就很好懂了,实际上只是把encoder换成了QRNN(quasi-RNN):

pQRNN模型结构

这里的Projection就是得到三元的过程,Bottleneck就是将三元向量embedding。

虽然没什么太大创新,但比较激动的是pQRNN的效果接近了BERT(之前PRADO都是惨不忍睹)

pQRNN

不过这个结论只在一个数据集上验证了,其他数据上的表现未可知。

总结

PRADO/pQRNN的主要改进点就在embedding部分,确实文本分类对于token的粒度要求不高,只用抓住句子里最主要的一两个词就行了,所以max-pooling经常会比mean-pooling效果要好。

但这里有个需要探讨的点,就是如何迁移到中文任务上。单纯的哈希是没法将相似的词映射到相似的三元向量的,这里我认为应该是进行字粒度的tokenization,这样相似的“好赞”、“超赞”的表示就很接近了,再过CNN就可以捕获到词级别的信息。

去年PRADO就出来了,但20年8月底才放出源码,同学们赶紧试用起来呀。

下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套!后台回复【五件套】
下载二:南大模式识别PPT后台回复【南大模式识别】

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐两个专辑给大家:

专辑 | 李宏毅人类语言处理2020笔记

专辑 | NLP论文解读

专辑 | 情感分析


整理不易,还望给个在看!

谷歌最新模型pQRNN:效果接近BERT,参数量缩小300倍相关推荐

  1. 清华p-tuning | GPT也能做NLU?清华推出p-tuning方法解决GPT系列模型fine-tuning效果比BERT差问题

    一.概述 title:GPT Understands, Too 论文地址:https://arxiv.org/abs/2103.10385 代码:https://github.com/THUDM/P- ...

  2. 12层的bert参数量_只需一个损失函数、一个超参数即可压缩BERT,MSRA提出模型压缩新方法...

    来自武汉大学.北京航空航天大学和微软亚洲研究院的这项研究为模型压缩提供了新方向. 机器之心报道,参与:魔王. 论文链接:https://arxiv.org/pdf/2002.02925.pdf 这篇论 ...

  3. 模型的显存和参数量计算

    写在前面:以此记录关于模型显存和参数量的一些理解和计算. 首先是"运算量"和"参数量"两个概念: 参数量:这个比较好理解,例如卷积层中的卷积核c_i*k*k*n ...

  4. “蚁人”不再是科幻!MIT最新研究,能把任何材料物体缩小1000倍 | Science

    来源:量子位 科学加速,科幻成真也在加速. 漫威世界中,蚁人是蚂蚁大小的超级英雄,靠一件"变身服",人类就能在更微观的世界里大干一场. 现在,类似的科幻想象,被MIT变成现实. 丨 ...

  5. 12层的bert参数量_Bort: 亚马逊最新4层小模型,效果超越BERT-large

    本文首发于微信公众号「李rumor」 最近一年多,BERT的瘦身方法层出不穷,主要围绕着三个方向:蒸馏.剪枝.量化.也有不少同学直接砍掉BERT的一些层再精调也能达到不错的效果.我就是"懒惰 ...

  6. NLP-预训练模型-2019:ALBert【 轻Bert;使用 “输入层向量矩阵分解”、“跨层参数共享” 减少参数量;使用SOP代替NSP】【较Bert而言缩短训练及推理时间】

    预训练模型(Pretrained model):一般情况下预训练模型都是大型模型,具备复杂的网络结构,众多的参数量,以及在足够大的数据集下进行训练而产生的模型. 在NLP领域,预训练模型往往是语言模型 ...

  7. 性能堪比GPT-3,但参数量仅为0.1%,LMU团队推出NLP最强文本生成模型

    2020-09-24 04:21:08 作者 | 贝爽 编辑 | 陈彩娴 模型越大,性能越佳?不一定. 在NLP领域,谈到超大模型必然想到预训练语言模型GPT-3,自今年3月份对外开放以来,其因超大模 ...

  8. Lesson 16.1016.1116.1216.13 卷积层的参数量计算,1x1卷积核分组卷积与深度可分离卷积全连接层 nn.Sequential全局平均池化,NiN网络复现

    二 架构对参数量/计算量的影响 在自建架构的时候,除了模型效果之外,我们还需要关注模型整体的计算效率.深度学习模型天生就需要大量数据进行训练,因此每次训练中的参数量和计算量就格外关键,因此在设计卷积网 ...

  9. pytorch_lesson16.2 架构对学习/鲁棒性的影响(VGG16复现+感受野+平移不变性)+架构对参数量的影响(1*1卷积核+分组卷积与深度分离卷积+NiN网络复现)

    提示:仅仅是学习记录笔记,搬运了学习课程的ppt内容,本意不是抄袭!望大家不要误解!纯属学习记录笔记!!!!!! 文章目录 前言 一.架构对学习能力/鲁棒性的影响 1 深度 1.1 困难与实践 1.2 ...

  10. 深度学习中参数量与计算量的理解

    接下来要分别概述以下内容: 1 首先什么是参数量,什么是计算量 2 如何计算 参数量,如何统计 计算量 3 换算参数量,把他换算成我们常用的单位,比如:mb 4 对于各个经典网络,论述他们是计算量大还 ...

最新文章

  1. vue-cli脚手架项目构成
  2. python的列表元素输出
  3. linux替换文件内容cat,Linux下巧用cat与EOF实现文件的替换和追加
  4. 法国标致雪铁龙汽车公司采用通快碟片激光器进行焊接
  5. C语言实现的简单的线程池
  6. datagridview绑定与详细说明 (搜集)
  7. 论文浅尝 | Complex Embeddings for Simple Link Prediction
  8. 计算polygon面积和判断顺逆时针方向的方法
  9. 智能门禁考勤机:刷脸同时开门和打卡
  10. ubuntu mysql 升级_Ubuntu 升级mysql 之后的一些问题
  11. HDUacm2095
  12. 联想微型计算机4250怎么拆机,联想T430笔记本拆机增加内存条图解教程
  13. 1970年图灵奖--詹姆斯·威尔金森生平
  14. sql server 取当天所在第几周
  15. HTML5编写格式命令详解
  16. 【任务脚本】1103双十一京东淘宝任务脚本,全自动程序,淘宝京东自动做任务,向大神致敬...
  17. 牛客多校第十场 Han Xin and His Troops(扩展中国剩余)
  18. Windows 平台下局域网劫持
  19. 计算机面试专业英语词汇,面试常用英语,英语面试常用词汇?
  20. RecyclerView使用探索1--了解及使用

热门文章

  1. datalist 给输入框绑定文本提示(大部分浏览器不支持)
  2. CentOS 7安装ifconfig
  3. 兼容之css中的hack
  4. Mybatis 参考
  5. jar包的生成及运行
  6. 【转】如何查看linux版本 如何查看LINUX是多少位
  7. Google推出免费公共域名解析DNS服务
  8. 如何进行ASP.NET MVC 的测试
  9. java day32【HTML标签:表单标签 、CSS】
  10. vue 父子之间通信及非父子之间通信