bertkera的文本分类的小项目
前不久了解到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) 项目介绍
完整项目 文本分类(二)专栏主要是对Github优秀文本分类项目的解析,该文本分类项目,主要基于深度学习模型,包括TextCNN.TextRNN.FastText.TextRCNN.BiLSTM_At ...
- 文本分类(一) | (9) 项目组织结构
项目Github地址 在学习某个深度学习框架时,掌握其基本知识和接口固然重要,但如何合理组织代码,使得代码具有良好的可读性和可扩展性也必不可少.本文不会深入讲解过多知识性的东西,更多的则是传授一些经验 ...
- TensorFlow使用CNN实现中文文本分类
TensorFlow使用CNN实现中文文本分类 读研期间使用过TensorFlow实现过简单的CNN情感分析(分类),当然这是比较low的二分类情况,后来进行多分类情况.但之前的学习基本上都是在英文词 ...
- FlyAI小课堂:【文本分类-中文】textCNN
摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题.在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI- ...
- FlyAI小课堂:【文本分类-中文】textRNN
摘要: 随着深度学习的快速发展,人们创建了一整套神经网络结构来解决各种各样的任务和问题.在英文分类基础上,中文文本分类的处理也同样重要... 人工智能学习离不开实践的验证,推荐大家可以多在FlyAI- ...
- CNN如何用于NLP任务?一文简述文本分类任务的7个模型(附代码)
点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 选自 | Ahmed BESBES 作者 | Ahmed Besbes 转自 | 机器之心 ...
- NLP-Beginner:自然语言处理入门练习----task 1基于机器学习的文本分类
任务一:基于机器学习的文本分类 任务传送门 项目是在github上的,数据集需要在kaggle上下载,稍微有些麻烦. wang盘:http://链接:https://pan.baidu.com/s/1 ...
- 基于朴素贝叶斯和LSTM的两种新闻文本分类方法
新闻文本分类 文章目录 新闻文本分类 一.项目背景 二.数据处理与分析 三.基于机器学习的文本分类--朴素贝叶斯 1. 模型介绍 2. 代码结构 3. 结果分析 四.基于深度学习的文本分类--LSTM ...
- TextCNN文本分类(keras实现)
目录 前言: 一.论文笔记 二.Keras文本预处理 1.读取数据集 2.将文字转换成数字特征 3.将每条文本转换为数字列表 4.将每条文本设置为相同长度 5.将每个词编码转换为词向量 6.Keras ...
最新文章
- PHP获取客户端真实IP的自定义函数
- LeetCode题组:第206题-反转链表
- FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...
- 招远西苑学校计算机老师,招远市西苑学校积极开展综合实践活动
- git 回退上一个版本
- SAP License:用望闻问切给企业“看病”
- 中国电信云计算重庆基地建成
- vs code 开发企业级python_入股不亏!VS Code中最好用的Python扩展插件
- spring-security 学习参考网站
- docker push received unexpected HTTP status: 503 Service Unavailable
- 一维搜索之黄金分割法
- AutoVue中文字体被其他字体替换
- 关于脑电波的黑科技,离我们生活还有多远。
- 理财就是理生活 —— 小白理财训练营(上)
- windows phone 数字拼图小游戏
- RocketMQ:The producer group has been created before, specify another name please.
- securecrt能输入命令吗?
- 5分钟弄懂语音识别技术原理
- fiddler抓取不了PC端微信小程序的包解决方法
- VScode远程连接出错 Could not establish connection. Cannot read properties of undefined (reading ‘replace‘)