前不久了解到bert是在去年十月份的时候由google发行,当时引起一阵轩然大波。因为它在NLP上取得的效率远远超过google以前发布的word2vec的。也可以说bert就是word2vec的升级版,在特征提取效率上面有很显著的效果。

然后昨天我看到有位大佬说结合keras库用bert很方便,而且还提供了许多功能模块,所以就借鉴着调试了这个bert_keras的文本分类的小项目。

不过据昨天某机构说由CMU(也就是卡耐基梅隆大学)&google发布了一个新的模型,叫做XLNet,说是这个模型将比bert和word2vec更好,也就是说以后将取代这两个模型,具体效果指日可待吧!

OK,开始正题!

模型的部分代码:

bert_model = load_trained_model_from_checkpoint(config_path, checkpoint_path)for l in bert_model.layers:l.trainable = Truex1_in = Input(shape=(None,))
x2_in = Input(shape=(None,))x = bert_model([x1_in, x2_in])
x = Lambda(lambda x: x[:, 0])(x) # 取出[CLS]对应的向量用来做分类
p = Dense(1, activation='sigmoid')(x)model = Model([x1_in, x2_in], p)
model.compile(loss='binary_crossentropy',optimizer=Adam(1e-5), # 用足够小的学习率metrics=['accuracy']
)
model.summary()

在Keras中调用Bert来做情感分类任务就这样写完了!神奇吧!(惊!)

Keras调用Bert就这么简短。事实上,真正调用Bert的也就只有load_trained_model_from_checkpoint那一行代码,剩下的只是普通的Keras操作。所以,如果你已经入门了Keras,那么调用Bert就很方便了。

如此简单的调用,能达到什么精度?经过5个epoch的fine tune后,验证集的最好准确率是95.5%+!用了Bert之后,寥寥几行,就提升了5个百分点多的准确率!难怪Bert能在NLP界掀起一阵热潮,牛批!(破音)

附:
1.要多少显存才够?(嗯…,在我自己调试运行的过程中就遇到了这个问题。CPU好像是内存不够,导致报了个错?在这篇文章的后面会说的)

事实上,这没有一个标准答案,显存的使用取决于三个因素:句子长度、batch size、模型复杂度。像上面的情感分析例子,在GTX1060 6G显存上也能跑起来,只需要将batch size调到24即可。所以,如果你的显存不够大,将句子的maxlen和batch size都调小一点试试。当然,如果你的任务太复杂,再小的maxlen和batch size也可能OOM,那就只有升级显卡了。

2.有什么原则来指导Bert,后面应该要接哪些层?

用尽可能少的层来完成你的任务。比如上述情感分析只是一个二分类任务,你就取出第一个向量然后加个Dense(1)就好了,不要想着多加几层Dense,更加不要想着接个LSTM再接Dense。如果你要做序列标注(比如NER),那你就接个Dense+CRF就好,也不要多加其他东西。总之,额外加的东西尽可能少。一是因为Bert本身就足够复杂,它有足够能力应对你要做的很多任务;二来你自己加的层都是随即初始化的,加太多会对Bert的预训练权重造成剧烈扰动,容易降低效果甚至造成模型不收敛。

下面开始说一个关于CPU的问题:
在调试的过程中我就报了这个问题,如图所示:


Hint: If you want to see a list of allocated tensors when OOM happens, add report_tensor_allocations_upon_oom to RunOptions for current allocation info.

大概意思就是说:啊,我的CPU不行了,或者你可以换台电脑了。。。也可以用GPU在服务器上跑跑,总而言之,就是我这台电脑跑不动。(ps:因为我在跑代码的时候,电脑就差点死机了,蓝屏一次,黑屏一次)

进行新的运算的时候,电脑崩溃了。

解决方法(可能有效):深度学习中最直观的方式就是减小batch_size或者hidden_layer中的单元数。

也可能是内存不足,需要修改网络结构,才有可能顺利运行代码。

最后贴上一些结果图(嗯…,由于CPU的原因,你懂得):

这个模型等我以后换了一台新电脑或者用上GPU了再回来补充,电脑太垃圾了,没办法。

附:OOM in keras
Hint: If you want to see a list of allocated tensors when OOM happens
Bert官方Github
官方的中文预训练权重

bertkera的文本分类的小项目相关推荐

  1. 文本分类(二) | (1) 项目介绍

    完整项目 文本分类(二)专栏主要是对Github优秀文本分类项目的解析,该文本分类项目,主要基于深度学习模型,包括TextCNN.TextRNN.FastText.TextRCNN.BiLSTM_At ...

  2. 文本分类(一) | (9) 项目组织结构

    项目Github地址 在学习某个深度学习框架时,掌握其基本知识和接口固然重要,但如何合理组织代码,使得代码具有良好的可读性和可扩展性也必不可少.本文不会深入讲解过多知识性的东西,更多的则是传授一些经验 ...

  3. TensorFlow使用CNN实现中文文本分类

    TensorFlow使用CNN实现中文文本分类 读研期间使用过TensorFlow实现过简单的CNN情感分析(分类),当然这是比较low的二分类情况,后来进行多分类情况.但之前的学习基本上都是在英文词 ...

  4. FlyAI小课堂:【文本分类-中文】textCNN

    摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题.在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI- ...

  5. FlyAI小课堂:【文本分类-中文】textRNN

    摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题.在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI- ...

  6. CNN如何用于NLP任务?一文简述文本分类任务的7个模型(附代码)

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 选自 | Ahmed BESBES   作者 | Ahmed Besbes 转自 | 机器之心 ...

  7. NLP-Beginner:自然语言处理入门练习----task 1基于机器学习的文本分类

    任务一:基于机器学习的文本分类 任务传送门 项目是在github上的,数据集需要在kaggle上下载,稍微有些麻烦. wang盘:http://链接:https://pan.baidu.com/s/1 ...

  8. 基于朴素贝叶斯和LSTM的两种新闻文本分类方法

    新闻文本分类 文章目录 新闻文本分类 一.项目背景 二.数据处理与分析 三.基于机器学习的文本分类--朴素贝叶斯 1. 模型介绍 2. 代码结构 3. 结果分析 四.基于深度学习的文本分类--LSTM ...

  9. TextCNN文本分类(keras实现)

    目录 前言: 一.论文笔记 二.Keras文本预处理 1.读取数据集 2.将文字转换成数字特征 3.将每条文本转换为数字列表 4.将每条文本设置为相同长度 5.将每个词编码转换为词向量 6.Keras ...

最新文章

  1. PHP获取客户端真实IP的自定义函数
  2. LeetCode题组:第206题-反转链表
  3. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...
  4. 招远西苑学校计算机老师,招远市西苑学校积极开展综合实践活动
  5. git 回退上一个版本
  6. SAP License:用望闻问切给企业“看病”
  7. 中国电信云计算重庆基地建成
  8. vs code 开发企业级python_入股不亏!VS Code中最好用的Python扩展插件
  9. spring-security 学习参考网站
  10. docker push received unexpected HTTP status: 503 Service Unavailable
  11. 一维搜索之黄金分割法
  12. AutoVue中文字体被其他字体替换
  13. 关于脑电波的黑科技,离我们生活还有多远。
  14. 理财就是理生活 —— 小白理财训练营(上)
  15. windows phone 数字拼图小游戏
  16. RocketMQ:The producer group has been created before, specify another name please.
  17. securecrt能输入命令吗?
  18. 5分钟弄懂语音识别技术原理
  19. fiddler抓取不了PC端微信小程序的包解决方法
  20. VScode远程连接出错 Could not establish connection. Cannot read properties of undefined (reading ‘replace‘)

热门文章

  1. HoloLens2使用安装包进行安装
  2. 展讯李力游:产业政策制定与实施应更关注设计业龙头
  3. 基于java+jsp+ssm水果蔬菜销售系统-计算机毕业设计
  4. 一个蔬菜摊一个月能赚多少钱?
  5. 大数据求索(8):Spark Streaming简易入门一
  6. 海思AI芯片(Hi3519A/3559A)方案学习(二十六)VPSS不同channel的不同放缩能力
  7. 编译recovery及过程中的部分错误解决
  8. 爬楼梯问题总结(持续更新)
  9. 音视频花屏 噪音一些参考网址
  10. web.xml文件中classpath路径指的哪个路径