作者 | 台湾大学网红教授李宏毅的三名爱徒

来源 | 井森堡,不定期更新机器学习技术文并附上质量佳且可读性高的代码。

编辑 | Jane

谷歌此前发布的NLP模型BERT,在知乎、Reddit上都引起了轰动。其模型效果极好,BERT论文的作者在论文里做的几个实验数据集都被轰平了。要做那几个数据集的人可以洗洗睡啦,直接被明明白白地安排了一波。

坊间流传 BERT 之于自然语言处理有如 ResNet 之于计算机视觉。谷歌还是谷歌呀,厉害!以后做 NLP 的实验就简单多了,可以先用 BERT 抽特征,再接几层客制化的神经网络后续实验,可以把 BERT 看作是类似于 word to vector 那样的工具。有人在知乎上整理了跑一次BERT的成本:

https://www.zhihu.com/question/298203515/answer/509470502

For TPU pods:4 TPUs * ~$2/h (preemptible) * 24 h/day * 4 days = $768 (base model)16 TPUs = ~$3k (large model)
For TPU:16 tpus * $8/hr * 24 h/day * 4 days = 12k64 tpus * $8/hr * 24 h/day * 4 days = 50k
For GPU:"BERT-Large is 24-layer, 1024-hidden and was trained for 40 epochs over a 3.3 billion word corpus. So maybe 1 year to train on 8 P100s? "

这还只是跑一次的时间,试想一下谷歌在调参、试不同神经网络结构时该需要多少时间与运算资源,太可怕了。

不禁让人感慨,深度学习已经变为大公司之间的军备竞赛,也只有谷歌这样的大公司才能做出这么伟大的模型,那是不是意味着我们普通人就没机会了呢?喜大普奔的是谷歌已经把训练好的模型公布出来,和大家分享他们的成果。我们可以运用大公司提前训练好的模型做迁移学习,用于客制化的应用。

本文想通过一个实际案例来检验一下提前训练好的 BERT 模型的威力,在已经训练好的 BERT 模型上再连几层神经网络做迁移学习。我们用的数据来源是 Kaggle 上的一个豆瓣影评分析数据集,目标是训练出一个模型,输入给模型一条影评的文字,模型能正确输出这条影评所对应的评分。

数据集

这个豆瓣电影短评数据集里面一共有28部电影,总共200多万笔影评,每笔影评有对应的文字以及用户给电影的评分(最高5分,最低1分)。下面是一些简单的范例:

https://www.kaggle.com/utmhikari/doubanmovieshortcomments/

前处理的时候,我们先把每条影评的标点符号去掉,然后用 Jieba 断词,Jieba 是一个很方便的中文断词函数库,安装也很方面直接用 PIP 安装就好。

最后把数据切为 training,testing 和 validation set 三部分,下表是三个 set 的一些简单统计量:

模型结构

第一步,我们先用“Jieba”将影评断词,再把每个词用一个 one-hot vector 表示。

第二步,再把每条影评对应的 one-hot vector 丢到如下图的 BERT 模型抽出特征。

第三步,再把抽出的特征丢进我们客制化设计的神经网络,最后输出网络的预测。网络的预测是 1-5 分,我们分别做了回归和分类两个实验。分类的输出结果是 1-5 分 5 类当中的某一类,回归输出结果是介于 1-5 之间的一个数值。我们会用到如下图所示的 Bengio 在 2017 年提出的自注意力模型做一些语义分析。

第四步,定义损失函数,固定 BERT 的参数不变,再用梯度下降法更新我们客制化设计的网络。

PS:由于 BERT 和 self-attention 模型结构较为复杂,而且本文的目的是探讨如何用 BERT 做迁移学习,所以我们不会赘述模型结构,我们会在文末附上论文链接,感兴趣的小伙伴可以去看看。

实验结果

BERT 分类

  • 分类准确率:61%

  • 混淆矩阵:

以第 1 行第二列的 0.13 为例:意思是真实标签是第一类,被分类为第二类的占总的第一类的个数的比例是 0.13。可以看到 1 分,5 分的大部分例子都能分类正确。大部分分类不正确的情况是被分到相邻的等级了,例如真实标签是 2 分的被分类为 3 分或是真实标签是 3 分的被分类为 2 分。这种情况是合理的,针对某一条特定的影评,就算是人去预测,也很难斩钉截铁地判定为是 2 分还是 3 分,所以也难怪机器分不出来。

我们对评价标准做了一点修改,将误判为相邻评分的例子判别为正确,结果如下:

  • 分类准确率:94.6%

  • 混淆矩阵:

BERT 回归

同样的架构,我们修改了一下最后一层的输出,让模型预测相应影评的评分,输出一个实数值,重新训练了模型。如果是分类的实验,1 分与 5 分这两个类别用数值表示的话都是一个 one-hot 的类别,体现在损失函数里没有差别,模型不会对二者区别对待。如果是回归的实验,模型的输出是一个实数值,实数值具有连续性,1 分和 5 分二者分数的高低能在实数上得到体现。

下面来看看实验结果:

  • 分类准确率:95.3%

  • 混淆矩阵:

  • 真实评分的分布:

  • 模型预测评分的分布:

我们也对 BERT 出来的特征向量做了 TSNE 降维,可视化结果如下:

根据右上角的图例,不同的颜色代表不同的评分,比如紫色代表五分。每一个点都是一笔影评的高维特征降维后在二维平面上的体现。可以明显看出,不同评分的影评被归在了不同的群里。相近的评分,比如 5 分和 4 分、4 分与 3 分会有一些重叠部分。

  • 自注意力机制的一些可视化结果:

引入自注意力机制的模型在预测一句影评对应的评分的时候,能够先通过注意力机制抓取一句话中的重要部分,给重要部分很多的比重。上述几个例子就能看出来,再模型给一条影评 5 分的时候,会给“爆”、“动人”这样的字眼予以高亮。在给 2 分的时候,会给“一般”这样的字眼予以高亮。

案例分析

接下来我们针对疯狂动物城这部电影,做一些可视化分析,来呈现训练好之后的模型的效果。

  • 分类准确率:72.63%

  • 混淆矩阵:

将误判为相邻评分的例子判别为正确的结果如下:

  • 分类准确率:98.56%

  • 混淆矩阵:

  • 真实评分的分布:

  • 模型预测评分的分布:

  • TSNE 降维后可视化结果:

  • 自注意力机制可视化结果:

针对疯狂动物城这部电影,我们做了 TF-IDF 的词频分析。

  • 词频前三十的词:

  • 不同评分的高频词:

第一行的 1-5 是评分,下面的词后面的数字代表的是这个词的出现个数。

最后,用一张词云欢快地结束案例分析:

结论

  • 本文用了目前自然语言界最强的模型BERT做迁移学习,效果看起来还挺 okay 的。

  • BERT 模型可以很好地抽出文字的特征,用于后续的实验。如果小伙伴们有比较好的运算资源,可以把 BERT 当作是一个类似于 word to vector 的工具。

  • 自注意力机制不光能提高模型的效能,同时引入此机制能大大加强模型的可解释性。

参考内容:

  • https://www.zhihu.com/question/298203515/answer/509470502

  • https://arxiv.org/abs/1810.04805

  • https://arxiv.org/abs/1703.03130

  • Github:https://github.com/Chung-I/Douban-Sentiment-Analysis

(本文为AI科技大本营转载文章,转载请联系作者。)

推荐阅读:

AI被“横扫”反噬?

如何帮新手程序员快速分析 Error?

ProgPow:以太坊上浮世绘

名下企业比老板刘强东还多,京东“最强女助理”张雱什么来头?

互联网巨头的春晚江湖

一万多条拼车数据,看春运迁移大军

30个让程序员崩溃的瞬间,笑死我了

程序员给银行植入病毒,分 1300 次盗取 718 万,被判 10 年半!

bert 中文 代码 谷歌_如何用最强模型BERT做NLP迁移学习?相关推荐

  1. bert 中文 代码 谷歌_从字到词,大词典中文BERT模型的探索之旅

    导语: BERT模型自诞生以来统治了各项NLP任务的榜单,谷歌也针对中文给出了基于字的模型.然而我们知道词是语言最重要的组成部分,因此,一个自然的想法就是做基于词的BERT模型.但是受限于显存,谷歌原 ...

  2. bert 中文 代码 谷歌_1美元从零开始训练Bert,手把手教你优雅地薅谷歌云TPU羊毛...

    大数据文摘出品 来源:Google Colab 编译:武帅.曹培信 2018年10月,Google AI团队推出了Bert,可以说Bert一出生就自带光环. 在斯坦福大学机器阅读理解水平测试SQuAD ...

  3. bert 中文 代码 谷歌_BERT系列文章汇总导读

    以下是AINLP公众号BERT相关文章的系列导读,感兴趣的同学可以参考. BERT相关论文.文章和代码资源汇总 张俊林博士系列解读: 放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取 ...

  4. bert 中文 代码 谷歌_ACL 2020 | 用BERT解决表格问答任务,谷歌提出弱监督表格解析器TaPas...

    BERT 在自然语言上已经取得了非凡的成就.近日,谷歌一篇 ACL 2020 论文又将 BERT 模型应用到了基于表格的问答场景中,为弱监督式的表格解析性能带来了显著提升.此外,谷歌开源了相关代码和预 ...

  5. 如何用最强模型BERT做NLP迁移学习?

    作者 | 台湾大学网红教授李宏毅的三名爱徒 来源 | 井森堡,不定期更新机器学习技术文并附上质量佳且可读性高的代码. 编辑 | Jane 谷歌此前发布的NLP模型BERT,在知乎.Reddit上都引起 ...

  6. bert 中文 代码 谷歌_ELECTRA中文预训练模型开源,110个参数,性能媲美BERT

    感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7050/ 在去年11月份,NLP大神Manning联合谷歌做的ELECTRA一经发布,迅速火爆整个NLP ...

  7. 官方解读,谷歌“T5”模型,如何突破迁移学习局限,实现多基准测试SOTA

    2020-02-25 14:35 导语:实现多基准测试SOTA. 过去几年间,迁移学习给 NLP 领域带来了丰硕的成果,掀起了新一波的发展浪潮.而迁移学习之所以如此有效,得益于其利用自监督任务(如语言 ...

  8. python 怎么得到图像深度图 软件_如何用 Python 和 fast.ai 做图像深度迁移学习?...

    本文带你认识一个优秀的新深度学习框架,了解深度学习中最重要的3件事. 框架 看到这个题目,你可能会疑惑:老师,你不是讲过如何用深度学习做图像分类了吗?迁移学习好像也讲过了啊! 说得对!我要感谢你对我专 ...

  9. Google最强模型BERT出炉,NLP还有哪些值得期待的发展?

    AI技术年度盛会即将开启!11月8-9日,来自Google.Amazon.微软.Facebook.LinkedIn.阿里巴巴.百度.腾讯.美团.京东.小米.字节跳动.滴滴.商汤.旷视.思必驰.第四范式 ...

最新文章

  1. 深度报告:一文看懂生物芯片产业
  2. 2、python机器学习基础教程——K近邻算法鸢尾花分类
  3. 无限踩坑系列(6)-mySQL数据库链接错误
  4. Centos7-Lvs+Keepalived架构实验详解
  5. 超详细 | 21张图带你领略集合的线程不安全
  6. python入门基础系列八_03python—9个基础常识-python小白入门系列
  7. Github windows客户端简单上手教程
  8. crontab 定时执行任务
  9. 小白学习一eNSP华为模拟器(3) 交换机基础配置 实验四VLAN 配置Trunk
  10. 网易云音乐服务器code521,网易云音乐scode500是怎么回事 网易云音乐scode502怎么解决...
  11. Windows 完成端口编程
  12. HDU 6070 Dirt Ratio [二分+线段树]
  13. Java批量高效压缩支持加解密支持所有压缩格式(Zip/7z/rar)
  14. ReRes 谷歌浏览器插件使用
  15. dellr720服务器性能,戴尔服务器R720
  16. [Android]Android studio编译程序时报错: error: use of undeclared identifier ’free free(t);
  17. java正则表达式初探——java.util.regex.Pattern类
  18. 中国城市竞争力排名出炉
  19. rtf富文本_轻松生成动态RTF(富文本格式)文档
  20. JavaScript经典案例:用户协议确认

热门文章

  1. RPM方式安装MySQL5.6
  2. 互联网产品跨部门沟通的10个原则(转)
  3. android 获取应用的资源id和uri
  4. sap idoc techniques
  5. Windows Server 2003 群集配置测试
  6. 全球视频监控设备市场规模分析
  7. Fedora15安装NVIDIA显卡驱动全过程
  8. 机器视觉工业镜头-Computar
  9. 相机标定(一) —— 深入理解齐次坐标及其作用
  10. 优迈系统服务器初始化,优迈系统手机操作器服务器操作使用说明.pptx