本文的灵感来自于A Visual Guide to Using BERT for the First Time,其作者为Jay Alammar,访问网址为:http://jalammar.github.io/a-visual-guide-to-using-bert-for-the-first-time 。
  在文本分类中,有两个大的思路,一个是机器学习,主要是利用n-gram等特征将文本转化为特征向量,这种方法便于操作和理解,但是忽略了文本本身的语义信息;另一个是深度学习,主要是利用word2vec作为特征提取,加之CNN或RNN等深度学习模型来进行分类,尤其是BERT等预训练模型出来了,在小样本上做fine tune即可取得不错的效果,能在很大程度上提取出文本的语义信息,但这种方法不便于操作和理解。
  一个简单的想法便是,我们可以利用预训练模型对文本做特征提取,然后在调用机器学习中的分类模型来进行分类,这样做思路是清晰的,操作较为复杂,便于理解,同时又不会丢失训练模型中的语义信息。
  本文以ALBERT作为文本的特征提取,用机器学习中的逻辑回归(LR)、朴素贝叶斯(NB)、支持向量机(SVM)等模型来进行文本。注意,本文仅作为文本分类方面的尝试,具体在实际的文本分类任务中还需要具体分析。
  本文的数据来源可以参考文章:NLP(二十二)利用ALBERT实现文本二分类, 一共是300条训练数据和80条测试数据,用于区分文本是否是属于政治上的出访类事件。
  在这里我们使用ALBERT已经训练好的文件albert_tiny,借鉴BERT的调用方法,我们在这里给出albert_zh模块,能够让ALBERT提取文本的特征,具体代码不在这里给出,有兴趣的读者可以访问该项目的Github地址:https://github.com/percent4/ALBERT_text_classification 。
  注意,本文中并没有给出文本预处理的代码,有兴趣的读者可以参考该项目的Github地址。在特征提取过程中,Albert_tiny模型给出的向量维度为312,我们的模型训练代码(ml_model_train.py)如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/5/15 3:44 下午import numpy as np
from sklearn.linear_model import LogisticRegression as LR
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report
from sklearn.externals import joblib
from sklearn.svm import SVC
from sklearn.naive_bayes import GaussianNBfrom load_data import train_df, test_df
from albert_zh.extract_feature import BertVector# 读取文件并进行转换
bert_model = BertVector(pooling_strategy="REDUCE_MEAN", max_seq_len=200)
print('begin encoding')
f = lambda text: bert_model.encode([text])["encodes"][0]
train_df['x'] = train_df['text'].apply(f)
test_df['x'] = test_df['text'].apply(f)
print('end encoding')x_train = np.array([vec for vec in train_df['x']])
x_test = np.array([vec for vec in test_df['x']])
y_train = np.array([vec for vec in train_df['label']])
y_test = np.array([vec for vec in test_df['label']])
print('x_train: ', x_train.shape)# Logistic Regression
lr = LR(random_state=123)
lr.fit(x_train, y_train)y_pred = lr.predict(x_test)
print("Logistic Regression Model")
print("混淆矩阵", confusion_matrix(y_true=y_test, y_pred=y_pred))
print("正确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_true=y_test, y_pred=y_pred, digits=4))# 保存模型
joblib.dump(lr, "lr.model")# Naive Bayes Model
gnb = GaussianNB()
gnb.fit(x_train, y_train)
y_pred = gnb.predict(x_test)
print("\nNaive Bayes Model")
print("混淆矩阵", confusion_matrix(y_true=y_test, y_pred=y_pred))
print("正确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_true=y_test, y_pred=y_pred, digits=4))# SVM model
svc = SVC(kernel="rbf")
svc.fit(x_train, y_train)
y_pred = svc.predict(x_test)
print("\nSVM Model")
print("混淆矩阵", confusion_matrix(y_true=y_test, y_pred=y_pred))
print("正确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_true=y_test, y_pred=y_pred, digits=4))joblib.dump(svc, "svc.model")

让我们来简单的理一下思路,我们的训练集合测试集数据集为train_dftest_df,包含文本内容和标签等,然后用ALBERT提取文本特征,再尝试用逻辑回归、朴素贝叶斯、支持向量机等机器学习模型来进行分类。分类后的输出结果如下:

Logistic Regression Model
混淆矩阵 [[33  5][ 2 40]]
正确率: 0.9125precision    recall  f1-score   support0     0.9429    0.8684    0.9041        381     0.8889    0.9524    0.9195        42micro avg     0.9125    0.9125    0.9125        80macro avg     0.9159    0.9104    0.9118        80
weighted avg     0.9145    0.9125    0.9122        80Naive Bayes Model
混淆矩阵 [[37  1][ 1 41]]
正确率: 0.975precision    recall  f1-score   support0     0.9737    0.9737    0.9737        381     0.9762    0.9762    0.9762        42micro avg     0.9750    0.9750    0.9750        80macro avg     0.9749    0.9749    0.9749        80
weighted avg     0.9750    0.9750    0.9750        80SVM Model
混淆矩阵 [[35  3][ 1 41]]
正确率: 0.95precision    recall  f1-score   support0     0.9722    0.9211    0.9459        381     0.9318    0.9762    0.9535        42micro avg     0.9500    0.9500    0.9500        80macro avg     0.9520    0.9486    0.9497        80
weighted avg     0.9510    0.9500    0.9499        80

可以看到,上述三种模型在这个文本分类的任务上都取得了不错的效果,比在之前的文章 NLP(二十二)利用ALBERT实现文本二分类 中的ALBERT作为特征提取,DNN作为分类模型的效果要更好些。
  最后,让我们用保存的支持向量机模型对新文本进行预测,代码如下:

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Pudong Shanghai
# time: 2020/5/15 4:23 下午import numpy as np
from sklearn.externals import joblib
from albert_zh.extract_feature import BertVector# 读取文件并进行转换
bert_model = BertVector(pooling_strategy="REDUCE_MEAN", max_seq_len=200)
f = lambda text: bert_model.encode([text])["encodes"][0]# predict
# 预测语句
texts = ['在访问限制中,用户可以选择禁用iPhone的功能,包括Siri、iTunes购买功能、安装/删除应用等,甚至还可以让iPhone变成一台功能手机。以下是访问限制具体可以实现的一些功能','IT之家4月23日消息 近日,谷歌在其官方论坛发布消息表示,他们为Android Auto添加了一项新功能:可以访问完整联系人列表。用户现在可以通过在Auto的电话拨号界面中打开左上角的菜单访问完整的联系人列表。值得注意的是,这一功能仅支持在车辆停止时使用。','要通过telnet 访问路由器,需要先通过console 口对路由器进行基本配置,例如:IP地址、密码等。','IT之家3月26日消息 近日反盗版的国际咨询公司MUSO发布了2017年的年度报告,其中的数据显示,去年盗版资源网站访问量达到了3000亿次,比前一年(2016年)提高了1.6%。美国是访问盗版站点次数最多的国家,共有279亿次访问;其后分别是俄罗斯、印度和巴西,中国位列第18。','应葡萄牙议会邀请,全国人大常委会副委员长吉炳轩率团于12月14日至16日访问葡萄牙,会见副议长费利佩、社会党副总书记卡内罗。','2月26日至3月2日,应香港特区政府“内地贵宾访港计划”邀请,省委常委、常务副省长陈向群赴港考察访问,重点围绕“香港所长、湖南所需”,与特区政府相关部门和机构深入交流,推动湖南与香港交流合作取得新进展。','目前A站已经恢复了访问,可以直接登录,网页加载正常,视频已经可以正常播放。','难民署特使安吉丽娜·朱莉6月8日结束了对哥伦比亚和委内瑞拉边境地区的难民营地为期两天的访问,她对哥伦比亚人民展现的人道主义和勇气表示赞扬。','据《南德意志报》报道,德国总理默克尔计划明年1月就前往安卡拉,和土耳其总统埃尔多安进行会谈。','Win7电脑提示无线适配器或访问点有问题怎么办?很多用户在使用无线网连接上网时,发现无线网显示已连接,但旁边却出现了一个黄色感叹号,无法进行网络操作,通过诊断提示电脑无线适配器或访问点有问题,且处于未修复状态,这该怎么办呢?下面小编就和大家分享下Win7电脑提示无线适配器或访问点有问题的解决方法。','2019年10月13日至14日,外交部副部长马朝旭访问智利,会见智利外长里韦拉,同智利总统外事顾问萨拉斯举行会谈,就智利举办亚太经合组织(APEC)第二十七次领导人非正式会议等深入交换意见。','未开发所有安全组之前访问,FTP可以链接上,但是打开会很慢,需要1-2分钟才能链接上','win7系统电脑的用户,在连接WIFI网络网上时,有时候会遇到突然上不了网,查看连接的WIFI出现“有限的访问权限”的文字提示。','联合国秘书长潘基文8日访问了日本福岛县,与当地灾民交流并访问了一所高中。','正在中国访问的巴巴多斯总理斯图尔特15日在陕西西安参观访问。','据外媒报道,当地时间10日,美国白宫发声明称,美国总统特朗普将于2月底访问印度,与印度总理莫迪进行战略对话。','2月28日,唐山曹妃甸蓝色海洋科技有限公司董事长赵力军等一行5人到黄海水产研究所交流访问。黄海水产研究所副所长辛福言及相关部门负责人、专家等参加了会议。','2018年7月2日,莫斯科孔子文化促进会会长姜彦彬,常务副会长陈国建,在中国著名留俄油画大师牟克教授的陪同下,访问了莫斯科国立苏里科夫美术学院,受到第一副校长伊戈尔·戈尔巴秋克先生接待。''据外媒报道,当地时间26日晚,阿尔及利亚总统特本抵达沙特阿拉伯,进行为期三天的访问。两国领导人预计将就国家间合作和地区发展进行磋商。','与标准Mozy一样,Stash文件夹为用户提供了对其备份文件的基于云的访问,但是它们还使他们可以随时,跨多个设备(包括所有计算机,智能手机和平板电脑)访问它们。换句话说,使用浏览器的任何人都可以同时查看文件(如果需要)。操作系统和设备品牌无关。','研究表明,每个网页的平均预期寿命为44至100天。当用户通过浏览器访问已消失的网页时,就会看到「Page Not Found」的错误信息。对于这种情况,相信大多数人也只能不了了之。不过有责任心的组织——互联网档案馆为了提供更可靠的Web服务,它联手Brave浏览器专门针对此类网页提供了一键加载存档页面的功能。','据外媒报道,土耳其总统府于当地时间2日表示,土耳其总统埃尔多安计划于5日对俄罗斯进行为期一天的访问。','3日,根据三星电子的消息,李在镕副会长这天访问了位于韩国庆尚北道龟尾市的三星电子工厂。',"通过你本机ip 和 2375端口访问测试是否成功。","方济各弗朗西斯教皇访问泰国,在泰国曼谷朱拉隆功大学举行会议,并与泰国佛教宗教领袖谈话。"]for text in texts:vec = np.array([f(text)])svc = joblib.load("svc.model")y_predict = svc.predict(vec)print("句子: %s \n 预测类别: %s" % (text, y_predict))

输出结果如下:

句子: 在访问限制中,用户可以选择禁用iPhone的功能,包括Siri、iTunes购买功能、安装/删除应用等,甚至还可以让iPhone变成一台功能手机。以下是访问限制具体可以实现的一些功能 预测类别: ['0']
句子: IT之家4月23日消息 近日,谷歌在其官方论坛发布消息表示,他们为Android Auto添加了一项新功能:可以访问完整联系人列表。用户现在可以通过在Auto的电话拨号界面中打开左上角的菜单访问完整的联系人列表。值得注意的是,这一功能仅支持在车辆停止时使用。 预测类别: ['0']
句子: 要通过telnet 访问路由器,需要先通过console 口对路由器进行基本配置,例如:IP地址、密码等。 预测类别: ['0']
句子: IT之家3月26日消息 近日反盗版的国际咨询公司MUSO发布了2017年的年度报告,其中的数据显示,去年盗版资源网站访问量达到了3000亿次,比前一年(2016年)提高了1.6%。美国是访问盗版站点次数最多的国家,共有279亿次访问;其后分别是俄罗斯、印度和巴西,中国位列第18。 预测类别: ['0']
句子: 应葡萄牙议会邀请,全国人大常委会副委员长吉炳轩率团于12月14日至16日访问葡萄牙,会见副议长费利佩、社会党副总书记卡内罗。 预测类别: ['1']
句子: 2月26日至3月2日,应香港特区政府“内地贵宾访港计划”邀请,省委常委、常务副省长陈向群赴港考察访问,重点围绕“香港所长、湖南所需”,与特区政府相关部门和机构深入交流,推动湖南与香港交流合作取得新进展。 预测类别: ['1']
句子: 目前A站已经恢复了访问,可以直接登录,网页加载正常,视频已经可以正常播放。 预测类别: ['0']
句子: 难民署特使安吉丽娜·朱莉6月8日结束了对哥伦比亚和委内瑞拉边境地区的难民营地为期两天的访问,她对哥伦比亚人民展现的人道主义和勇气表示赞扬。 预测类别: ['1']
句子: 据《南德意志报》报道,德国总理默克尔计划明年1月就前往安卡拉,和土耳其总统埃尔多安进行会谈。 预测类别: ['1']
句子: Win7电脑提示无线适配器或访问点有问题怎么办?很多用户在使用无线网连接上网时,发现无线网显示已连接,但旁边却出现了一个黄色感叹号,无法进行网络操作,通过诊断提示电脑无线适配器或访问点有问题,且处于未修复状态,这该怎么办呢?下面小编就和大家分享下Win7电脑提示无线适配器或访问点有问题的解决方法。 预测类别: ['0']
句子: 2019年10月13日至14日,外交部副部长马朝旭访问智利,会见智利外长里韦拉,同智利总统外事顾问萨拉斯举行会谈,就智利举办亚太经合组织(APEC)第二十七次领导人非正式会议等深入交换意见。 预测类别: ['1']
句子: 未开发所有安全组之前访问,FTP可以链接上,但是打开会很慢,需要1-2分钟才能链接上 预测类别: ['0']
句子: win7系统电脑的用户,在连接WIFI网络网上时,有时候会遇到突然上不了网,查看连接的WIFI出现“有限的访问权限”的文字提示。 预测类别: ['0']
句子: 联合国秘书长潘基文8日访问了日本福岛县,与当地灾民交流并访问了一所高中。 预测类别: ['1']
句子: 正在中国访问的巴巴多斯总理斯图尔特15日在陕西西安参观访问。 预测类别: ['1']
句子: 据外媒报道,当地时间10日,美国白宫发声明称,美国总统特朗普将于2月底访问印度,与印度总理莫迪进行战略对话。 预测类别: ['1']
句子: 2月28日,唐山曹妃甸蓝色海洋科技有限公司董事长赵力军等一行5人到黄海水产研究所交流访问。黄海水产研究所副所长辛福言及相关部门负责人、专家等参加了会议。 预测类别: ['1']
句子: 2018年7月2日,莫斯科孔子文化促进会会长姜彦彬,常务副会长陈国建,在中国著名留俄油画大师牟克教授的陪同下,访问了莫斯科国立苏里科夫美术学院,受到第一副校长伊戈尔·戈尔巴秋克先生接待。据外媒报道,当地时间26日晚,阿尔及利亚总统特本抵达沙特阿拉伯,进行为期三天的访问。两国领导人预计将就国家间合作和地区发展进行磋商。 预测类别: ['1']
句子: 与标准Mozy一样,Stash文件夹为用户提供了对其备份文件的基于云的访问,但是它们还使他们可以随时,跨多个设备(包括所有计算机,智能手机和平板电脑)访问它们。换句话说,使用浏览器的任何人都可以同时查看文件(如果需要)。操作系统和设备品牌无关。 预测类别: ['0']
句子: 研究表明,每个网页的平均预期寿命为44至100天。当用户通过浏览器访问已消失的网页时,就会看到「Page Not Found」的错误信息。对于这种情况,相信大多数人也只能不了了之。不过有责任心的组织——互联网档案馆为了提供更可靠的Web服务,它联手Brave浏览器专门针对此类网页提供了一键加载存档页面的功能。 预测类别: ['0']
句子: 据外媒报道,土耳其总统府于当地时间2日表示,土耳其总统埃尔多安计划于5日对俄罗斯进行为期一天的访问。 预测类别: ['1']
句子: 3日,根据三星电子的消息,李在镕副会长这天访问了位于韩国庆尚北道龟尾市的三星电子工厂。 预测类别: ['1']
句子: 通过你本机ip 和 2375端口访问测试是否成功。 预测类别: ['0']
句子: 方济各弗朗西斯教皇访问泰国,在泰国曼谷朱拉隆功大学举行会议,并与泰国佛教宗教领袖谈话。 预测类别: ['1']

0表示不是政治意义上的出访,1代表是。所有的新文本(新文本中都含有访问这个词语)都分类正确。
  本文作为笔者的一次尝试,因此写得比较简单,有兴趣的读者可以移步本项目的Github地址:https://github.com/percent4/ALBERT_text_classification 。
  感谢大家的阅读,如有问题,敬请批评指正~

NLP(三十)利用ALBERT和机器学习来做文本分类相关推荐

  1. 【NLP傻瓜式教程】手把手带你RCNN文本分类(附代码)

    继续之前的文本分类系列 [NLP傻瓜式教程]手把手带你CNN文本分类(附代码) [NLP傻瓜式教程]手把手带你RNN文本分类(附代码) [NLP傻瓜式教程]手把手带你fastText文本分类(附代码) ...

  2. 利用TensorFlow和神经网络来处理文本分类问题

    利用TensorFlow和神经网络来处理文本分类问题 By 机器之心2017年8月23日 10:33 在这篇文章中,机器之心海外分析师对Medium(链接见文后)上的一篇热门博客进行了介绍,讨论了六个 ...

  3. 【NLP保姆级教程】手把手带你RNN文本分类(附代码)

    写在前面 这是NLP保姆级教程的第二篇----基于RNN的文本分类实现(Text RNN) 参考的的论文是来自2016年复旦大学IJCAI上的发表的关于循环神经网络在多任务文本分类上的应用:Recur ...

  4. 第十三讲:textcnn做文本分类任务,基于论文:Relation_Classification_via_Convolutional_Deep_Neural_Network的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  5. NLP 模型“解语如神”的诀窍:在文本分类模型中注入外部词典

    一. 引言 现实世界的文本表述如恒河沙数,以惊人的速度变换着,人工智能(AI)在快速识别形形色色的文本之前,必须经过充足的训练数据洗礼.然而,面对复杂多变的文本表述,NLP 模型往往无法从有限的训练数 ...

  6. 【NLP傻瓜式教程】手把手带你HAN文本分类(附代码)

    继续之前的文本分类系列 [NLP傻瓜式教程]手把手带你CNN文本分类(附代码) [NLP傻瓜式教程]手把手带你RNN文本分类(附代码) [NLP傻瓜式教程]手把手带你fastText文本分类(附代码) ...

  7. 【NLP傻瓜式教程】手把手带你fastText文本分类(附代码)

    写在前面 已经发布: [NLP傻瓜式教程]手把手带你CNN文本分类(附代码) [NLP傻瓜式教程]手把手带你RNN文本分类(附代码) 继续NLP傻瓜式教程系列,今天的教程是基于FAIR的Bag of ...

  8. tf第十二讲:TextCNN做文本分类的实战代码

      大家好,我是爱编程的喵喵.双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中.从事机器学习以及相关的前后端开发工作.曾在阿里云.科大讯飞.CCF等比赛获得多次Top名次.现 ...

  9. 【机器学习】决策树案例三:利用决策树进行泰坦尼克号事故人员存活分类预测

    利用决策树进行泰坦尼克号事故人员存活分类预测 3 利用决策树进行泰坦尼克号事故人员存活分类预测 3.1 导入模块与加载数据 3.2 特征工程 3.3 划分数据 3.4 模型创建与应用 3.5 模型可视 ...

最新文章

  1. 新版本,ggplot2 v3.3.0 新特性来袭
  2. 10.2.2移动产品离线功能等具体解释----暨4月8日移动《在离线一体化》公开课Qamp;A...
  3. eclipse ssh连接git an error_JSP+SSH+Mysql实现的学生管理系统
  4. leetcode —— 337. 打家劫舍 III
  5. Seesaw Loss:一种面向长尾目标检测的平衡损失函数
  6. 【OpenCV】OpenCV函数精讲之 -- 通道合并:merge()函数
  7. Cookie、Session、Token、JWT分别是什么(一)
  8. javascript Declarations
  9. 初探 performance – 监控网页与程序性能
  10. 开发文档模板_究竟什么样的开发流程是规范的?
  11. android根据ip获取查询省份,通过IP地址获取省份城市位置信息
  12. C#代码执行中等待10秒
  13. 【连载】【FPGA黑金开发板】NIOS II那些事儿--SDRAM实验(十二)
  14. android上的单片机编程软件下载,AVR单片机编程软件(AVR_fighter)
  15. 凝胶渗透色谱的基本概念(一)
  16. java实现短信通知、验证码
  17. IPhone 日历提醒
  18. Netty学习二:Netty整体框架
  19. strrchr和strchr用法
  20. 怎么通过外网来访问自己在Tomcat服务器中配置的项目

热门文章

  1. java操作geotiff_关于java使用geotools中的GeoTiffReader读取tif图像时报错
  2. Linux中hostname修改方法详解
  3. 狼人杀(bug有点多哦请大家见谅)(*^_^*)
  4. 解决Bug:关于折叠屏手机(Android)出现fragment重叠问题
  5. 一位正义中国人与韩国肤浅女生的精彩交锋
  6. spdlog 日志库学习,简易封装
  7. js,jsx,ts和tsx在用法上的区别
  8. 【案例】7-11介绍——鲜食店
  9. kafka消费者报错:Failed to add leader for partitions
  10. Android下的配置管理之道之基线升级