python黑洞网 首页 博客 问答 公众号 答疑 pdf 视频 游戏 脚本 实战 其它资源
写博客 登录 注册

程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网: it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

微博评论挖掘之Bert实战应用案例-文本情感分类

发布于2019-08-22 17:05     阅读(2138)     评论(0)     点赞(8)     收藏(3)


在这里插入图片描述
Bert模型全称Bidirectional Encoder Representations from Transformers,主要分为两个部分:1训练语言模型(language model)的预训练(pretrain)部分,2训练具体任务(task)的fine-tune部分。Bert在NLP领域横扫了11项任务的最优结果,可以说是现今最近NLP中最重要的突破。

相比之前的Word Embedding模型,Bert 模型具有双向,多层,随机Mask,并且融合了自然语言处理前沿技术transformer 权重处理多种优点,可以说是ELMO、GPT、Word2Vec的集大成者。具体原理上的理解各位可以移步至 张俊林博士解读BERT非常详尽清晰,有助于各位从理论上加深理解Bert的原理。本文主要从Bert实践角度,拎出实用的代码片段,来完成文本情感分类。

首先下载Bert预训练模型:

google公布了一个参数较小的BERT预训练模型, 点击下载。文件里有五个文件,其中bert_model.ckpt开头的文件是负责模型变量载入的,而vocab.txt是训练时中文文本采用的字典,最后bert_config.json是BERT在训练时,可选调整的一些参数。

修改 processor

  1. 任何模型的训练、预测都是需要有一个明确的输入,而BERT代码中processor就是负责对模型的输入进行处理。我们以分类任务的为例,介绍如何修改processor来运行自己数据集上的fine-tune。在run_classsifier.py文件中我们可以看到,google对于一些公开数据集已经写了一些processor,如XnliProcessor,MnliProcessor,MrpcProcessor和ColaProcessor。这给我们提供了一个很好的示例,指导我们如何针对自己的数据集来写processor。
  2. 对于一个需要执行训练、交叉验证和测试完整过程的模型而言,自定义的processor里需要继承DataProcessor,并重载获取label的get_labels和获取单个输入的get_train_examples,get_dev_examples和get_test_examples函数。其分别会在main函数的FLAGS.do_train、FLAGS.do_eval和FLAGS.do_predict阶段被调用。这三个函数的内容是相差无几的,区别只在于需要指定各自读入文件的地址。
    以get_train_examples为例,函数需要返回一个由InputExample类组成的list。InputExample类是一个很简单的类,只有初始化函数,需要传入的参数中guid是用来区分每个example的,可以按照train-%d’%(i)的方式进行定义。text_a是一串字符串,text_b则是另一串字符串。在进行后续输入处理后(BERT代码中已包含,不需要自己完成) text_a和text_b将组合成[CLS] text_a [SEP] text_b [SEP]的形式传入模型。最后一个参数label也是字符串的形式,label的内容需要保证出现在get_labels函数返回的list里。
    打开run_classifier.py,在XnliProcessor,MnliProcessor,MrpcProcessor和ColaProcessor后,可以添加自定义数据处理任务:
    Class WeiboProcessor(Dataprocessor):
def get_train_examples(self, data_dir):
    file_path = os.path.join(data_dir, 'train.csv')
    with open(file_path, 'r') as f:
        reader = f.readlines()
    examples = []
    for index, line in enumerate(reader):
        guid = 'train-%d'%index
        split_line = line.strip().split(',')
        text_a = tokenization.convert_to_unicode(split_line[1])
        text_b = tokenization.convert_to_unicode(split_line[2])
        label = split_line[0]
        examples.append(InputExample(guid=guid, text_a=text_a, 
                                     text_b=text_b, label=label))
    return examples

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

同时对应判断label为三分类标签,get_labels函数可以写成如下的形式:

def get_labels(self):
    return ['0','1',‘2’]   
  • 1
  • 2

在对get_dev_examples和get_test_examples函数做类似get_train_examples的操作后,便完成了对processor的修改。其中get_test_examples可以传入一个随意的label数值,因为在模型的预测(prediction)中label将不会参与计算。

修改 processor 字典

修改完成processor后,需要在在原本main函数的processor字典里,加入修改后的processor类,即可在运行参数里指定调用该processor。

 processors = {
      "cola": ColaProcessor,
      "mnli": MnliProcessor,
      "mrpc": MrpcProcessor,
      "xnli": XnliProcessor, 
      "WeiboProc": WeiboProcessor #添加自己的processor
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行 fine-tune

之后就可以直接运行run_classsifier.py进行模型的训练。在运行时需要制定一些参数,一个较为完整的运行参数如下所示:

python run_classifier.py \
  --task_name=selfsim \ #自己添加processor在processors字典里的key名
  --do_train=true \
  --do_eval=true \
  --dopredict=true \
  --data_dir=$MY_DATASET \
  --vocab_file=$BERT_BASE_DIR/vocab.txt \
  --bert_config_file=$BERT_BASE_DIR/bert_config.json \
  --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
  --max_seq_length=128 \ #模型参数
  --train_batch_size=32 \
  --learning_rate=5e-5 \
  --num_train_epochs=2.0 \
  --output_dir=/tmp/selfsim_output/ #模型输出路径
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

配置的阿里云ESC云服务器,大概跑了几个小时,部分过程图如下:
在这里插入图片描述
train 和 dev 验证结果如下:

eval_accuracy = 0.9049439
eval_loss = 0.30998465
global_step = 1605
loss = 0.30991942
  • 1
  • 2
  • 3
  • 4

实现预测的话,在python run_classifier.py \中修改相应参数,设置do_predict=true。

以句子向量的形式使用Bert

如果想要将bert模型的编码和其他模型一起使用,将bert模型作为句子向量使用很有意义。我们可以使用bert-as-service来完成这个目标。

安装完bert-as-service以后,就可以利用bert模型将句子映射到固定长度的向量上。在终端中用一下命令启动服务:

bert-serving-start -model_dir /media/ganjinzero/Code/bert/chinese_L-12_H-768_A-12 -num_worker=4 

  • 1
  • 2

model_dir后面的参数是bert预训练模型所在的文件夹。num_worker的数量应该取决于你的CPU/GPU数量。
这时就可以在Python中调用如下的命令:

from bert_serving.client import BertClient
bc = BertClient()
bc.encode(['一二三四五六七八', '今天您吃了吗?'])

  • 1
  • 2
  • 3
  • 4

由于GPU深度学习整套装备还没有配置,本人采用了阿里云ESC服务器,选用NGC镜像,配置tf1.0-GPU-TP4,安装了jupyter notebook,整体完成的。
如何各位对配置深度学习环境有疑问,可以留下阿里云账号,我把已经建立好的深度学习环境镜像(包含[tf1.0-gpu,anaconda,])在阿里云站发送给留言的童鞋。
附赠个人的 阿里云优惠券目前我是按量和按周,土豪可以包月包年~~任性。
后面我也会更博,专门拆解下如何快速搭建快速可用的深度学习环境。目前以tf1.0-gpu为主。

感谢本文参考来源:
作者:GjZr
https://blog.csdn.net/weixin_43837634/article/details/88049783
作者:奇点机智
链接:https://www.jianshu.com/p/aa2eff7ec5c1

程序员说:42岁了,突然觉得研发前途渺茫

中国程序员数量达755万,全球排名第二

为什么都说程序员找不到女朋友,但是身边程序猿的却没一个单身的?

程序员说:30岁以上你还死磕技术,别说拿高薪,可能你连饭碗都会保不住

程序员被开除,老板:“有你参与的项目全黄了!”

笑话:一个测试工程师走进一家酒吧

笑话:面试官:请拿出一段体现你水平的代码。我: sudo rm -rf /*面试官:这体现了你哪方面能力?

python精选:Python 办公实战!​按姓名拆分 Excel 为单独文件,微信自动发给相应联系人

网友说:做开发,不被领导喜欢怎么办?

网友说:我奉劝各位,一定不能在职场透露自己的家庭条件



所属网站分类: 技术文章 > 博客

作者: 232hdsjdh

链接: https://www.pythonheidong.com/blog/article/53133/49c4cfa3e2c93ff25a31/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)




站长公众号(new) 更多>

程序员说:42岁了,突然觉得研发前途渺茫

中国程序员数量达755万,全球排名第二

为什么都说程序员找不到女朋友,但是身边程序猿的却没一个单身的?

程序员说:30岁以上你还死磕技术,别说拿高薪,可能你连饭碗都会保不住

程序员被开除,老板:“有你参与的项目全黄了!”

笑话:一个测试工程师走进一家酒吧

笑话:面试官:请拿出一段体现你水平的代码。我: sudo rm -rf /*面试官:这体现了你哪方面能力?

python精选:Python 办公实战!​按姓名拆分 Excel 为单独文件,微信自动发给相应联系人

网友说:做开发,不被领导喜欢怎么办?

网友说:我奉劝各位,一定不能在职场透露自己的家庭条件

pdf(new) 更多>

git常用命令pdf下载

《从零开始学Python网络爬虫》PDF高清版免费下载

《Python游戏编程快速上手 》PDF高清版免费下载

【每日书籍推荐】PYTHON 项目开发实战_超高清PDF

《父与子的编程之旅:与小卡特一起学Python》PDF高清版免费下载

《Effective Python》pdf高清版下载

【每日推荐书籍】《Python3网络爬虫开发实战》

【每日一本书】《Python编程快速上手 让繁琐工作自动化》

《Python从小白到大牛》PDF高清版 免费下载

《Python编程:从入门到实践(第2版)》

脚本(new) 更多>

五年级同学BMI指数计算器

用python做---,pythonos2.2.0-1版

使用Discord.py个人号创建Discord Bot 提示 401 Unauthorized

新手训练短语

opencv实现视频截取

python练习题

用python画国旗

抖音最火表白代码下载

python文件解压脚本

python分类文件脚本下载

博客(new) 更多>

Python使用Matplotlib库绘制双y轴图形(柱状图+折线图)

Python中使用matplotlib时显示中文乱码_(或更改字体)

Python 列表 pop()函数使用详解

17 Python的os模块

Python皮卡丘

Python提取JSON格式数据

python 爱心代码

python萌新爬虫学习笔记【建议收藏】

【2023华为杯F题】强对流降水临近预报(Python&Matlab代码分享)

warning: retrying (retry(total=4, connect=none, read=none, redirect=none, st

视频(new) 更多>

2020最新_Python_(MySQL_SQL_Redis)数据库详解【千锋】

2019版-千锋Python语法-视频

2019千锋Python爬虫全套视频(最经典)

13天搞定Python分布爬虫 视频教程

python办公自动化

python深度学习系列教程

python视频 神经网络 Tensorflow 模块 视频教程

初级Python视频教程 云盘

初级Python视频教程推荐

python视频各种视频很多

实战(new) 更多>

韩顺平TCP网络文件传输课程代码word下载

基于python的ARP扫描与断网攻击的图形化脚本

bootstrap-datetimepicker搞了一天也不显示,请教!

这个项目是人人网的爬虫程序

这是一个利用Python分析一个json数据,并可视化输出结果的小项目

一个Mp3播放器 Python项目实战

一个自动发送邮箱验证码的小项目 源码下载

python 加密解密的程序 .py下载

PYTHON实现计算机功能

PYTHON定时关机

问答(new) 更多>

modbus tcp 与王鸽 RTU5026

如何在数据框中创建新列以根据 Python Pandas 中的日期列对每个 id 的值进行排序?[复制]

索引/数组故障排除:家庭作业

Pytorch安装

mysql.connector.errors.InterfaceError:执行操作失败;

如何将发出请求的用户分配给 Django 模型中的外键字段

如何在 python 中将日期时间格式化为字符串“yyyy-MM-dd'T'HH:mm:ss.SSSZ'”格式

如何使用 PyQt 信号发出 64 位无符号整数

如何在Android上使用“pyqtdeploy”Windows pyqt5?[关闭]

将数据(超过 1 点)添加到绘图破折号中的现有迹线

游戏(new) 更多>

用python写滑雪游戏 源码下载

用python写乒乓球游戏 源码下载

python吃豆子小游戏 源码下载

外星人入侵 python小游戏源码下载

帅哥吃苹果 python小游戏源码下载

小恐龙快跑 python小游戏源码下载

python小游戏拼图源码下载

风筝 python小游戏源码下载

迷宫-python小游戏源码下载

python小游戏 life

其他资源(new) 更多>

王道机试

python做乘法口诀表

纯净版python 3.7开发环境安装包

视觉SLAM十四讲 - 从理论到实践

Python正则表达式教程下载

Vue+Go前端后端一体化 企业级微服务网关项目

尚硅谷java基础入门视频下载

尚硅谷java基础入门视频

超基础初一生反utPython程序(只是一个文本)

注册表实用手册


深圳SEO优化公司下城区网站优化排名平台电商网站seo优化方案莆田网站seo优化策略锦州网站做优化铜陵网站优化怎么收费多少寿光优化网站软件淮北网站优化网站推广优化优化网站分手工优化吗沈阳怎么做网站优化黄石本地网站优化公司排名整站优化公司网站多少钱巴青网站优化江苏网站关键词优化哪家好通化网站优化哪家好出名的服装行业网站优化咨询热线专业的网站如何seo优化推广郑州网站优化推广排名呈贡区网站seo优化怎样银川网站优化一般流程网站优化的关键字怎么添加龙口网站优化选哪家宁国网络推广网站优化排名怎么选青岛网站关键词优化价格邯郸网站优化电池许昌实力网站优化公司地址乐山网站自然优化广东专业网站优化快照钟楼区网站优化渠道怀化网站搜索引擎优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化