基于谷歌开源的BERT编写的文本分类器(基于微调方式),可自由加载NLP领域知名的预训练语言模型BERT、 Bert-wwm、Roberta、ALBert以及ERNIE1.0.

该项目支持两种预测方式:

(1)线下实时预测

(2)服务端实时预测


AI项目体验地址 https://loveai.tech

项目说明

主要分为两种运行模式:

模式1:线下实时预测

step1:数据准备

step2:模型训练

step3:模型导出

step4:线下实时预测

模式2:服务端实时预测 step1:数据准备

step2:模型训练

step3:模型转换

step4:服务部署

step5:应用端

注意事项

1.如果你只是想体验从模型训练到本地线下预测这一套流程,只需要按照模式1依次执行即可

2.若你想想体验从模型训练到模型部署整个流程,则需要按照模式2依次执行


下面将针对以上两个模式的运行方式进行详细说明。

模式1:线下实时预测

Step1:数据准备

为了快速实验项目效果,这里使用了样本规模较小的手机评论数据,数据比较简单,有三个分类:-1(差评)、0(中评)、1(好评),数据样例如下所示:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_特征工程

ps:本项目中已将其拆分成了train.tsv、dev.txv、test.tsv三个文件

Step2:模型训练

训练命令:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_深度学习_02

详细说明:训练模型直接使用bert微调的方式进行训练,对应的程序文件为run_classifier_serving.py。关于微调bert进行训练的代码网上介绍的 很多,这里就不一一介绍。主要是创建针对该任务的Processor即:SentimentProcessor,在这个processor的_create_examples()和get_labels()函数自定义,如下所示:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_机器学习_03

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_深度学习_04

注意,此处作出的一个特别变动之处是在conver_single_example()函数中增加了一段保存label的代码,在训练过程中在保存的模型路径下生成label2id.pkl文件,代码如下所示:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_数据_05

会在指定的exported目录下生成以一个时间戳命名的模型目录。

详细说明:run_classifier.py 主要设计为单次运行的目的,如果把 do_predict 参数设置成 True,倒也确实可以预测,但输入样本是基于文件的,并且不支持将模型持久化在内存里进行 serving,因此需要自己改一些代码,达到两个目的:

(1)允许将模型加载到内存里,即:允许一次加载,多次调用。

(2)允许读取非文件中的样本进行预测。譬如从标准输入流读取样本输入。

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_数据_06

Step4:线下实时预测

运行test_serving.py文件,即可进行线下实时预测。

运行效果如下所示:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_特征工程_07

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_服务端_08

模式2:服务端实时预测

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_服务端_09

架构说明:

BERT模型服务端:加载模型,进行实时预测的服务;使用的是 BERT-BiLSTM-CRF-NER提供的bert-base;

API服务端:调用实时预测服务,为应用提供API接口的服务,用flask编写;

应用端:最终的应用端;我这里为了简便,并没有编写网页,直接调用了api接口。

Step1:数据准备

同模式1中的Step1介绍。

Step2:模型训练

同模式1中的Step2介绍。

Step3:模型转换

运行如下命令:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_服务端_10

注意:

port 和 port_out 这两个参数是API调用的端口号,默认是5555和5556,如果你准备部署多个模型服务实例,那一定要指定自己的端口号,避免冲突。我这里是改为:5575 和 5576

如果报错没运行起来,可能是有些模块没装上,都是 bert_base/server/http.py里引用的,装上就好了:

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_机器学习_11

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_数据_12



阅读过本文的人还看了以下文章:

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

​python就业班学习视频,从入门到实战项目​

​2019最新《PyTorch自然语言处理》英、中文版PDF+源码​

​《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码​

​《深度学习之pytorch》pdf+附书源码​

​PyTorch深度学习快速实战入门《pytorch-handbook》​

​【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》​

​《Python数据分析与挖掘实战》PDF+完整源码​

​汽车行业完整知识图谱项目实战视频(全23课)​

​李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材​

​笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!​

​《神经网络与深度学习》最新2018版中英PDF+源码​

​将机器学习模型部署为REST API​

​FashionAI服装属性标签图像识别Top1-5方案分享​

​重要开源!CNN-RNN-CTC 实现手写汉字识别​

​yolo3 检测出图像中的不规则汉字​

​同样是机器学习算法工程师,你的面试为什么过不了?​

​前海征信大数据算法:风险概率预测​

​【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类​

​VGG16迁移学习,实现医学图像识别分类工程项目​

​特征工程(一)​

​特征工程(二) :文本数据的展开、过滤和分块​

​特征工程(三):特征缩放,从词袋到 TF-IDF​

​特征工程(四): 类别特征​

​特征工程(五): PCA 降维​

​特征工程(六): 非线性特征提取和模型堆叠​

​特征工程(七):图像特征提取和深度学习​

​如何利用全新的决策树集成级联结构gcForest做特征工程并打分?​

​Machine Learning Yearning 中文翻译稿​

​蚂蚁金服2018秋招-算法工程师(共四面)通过​

​全球AI挑战-场景分类的比赛源码(多模型融合)​

​斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)​

​python+flask搭建CNN在线识别手写中文网站​

​中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程​

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

文本分类器,可自由加载BERT、Bert-wwm、Roberta、ALBert以及ERNIE1.0_机器学习_13

长按图片,识别二维码,点关注