【NLP】使用Transformer模型进行文本分类
作者 | Eric Fillion
编译 | VK
来源 | Towards Data Science
文本分类是NLP最常见的应用。与大多数NLP应用一样,Transformer模型近年来在该领域占据主导地位。
在本文中,我们将讨论如何使用Python包(我是名为Happy Transformer的主要维护者)实现和训练文本分类Transformer模型,该包只需几行代码。
Happy Transformer构建在Hugging Face的transformers库之上,允许程序员只需几行代码即可实现和训练Transformer模型。
预训练模型
在Hugging Face的模型网络上,有100种预训练文本分类模型可供选择。
因此,我建议,在你花费太多时间担心模型训练之前,先看看是否有人已经为你的特定应用程序对模型进行了微调。
例如,我已经制作了关于如何实现用于情绪分析和仇恨语音检测的预训练Transformer模型的内容。
在本教程中,我们将实现一个名为finbert的模型,该模型由一家名为Prosus的公司创建。该模型检测金融数据的情绪。
安装
Happy Transformer在PyPI上可用,因此我们可以用一行代码安装它。
pip install happytransformer
实例化
让我们导入一个名为HappyTextClassification的类,我们将使用它加载模型。
from happytransformer import HappyTextClassification
从这里,我们可以使用HappyTextClassification类为模型实例化一个对象。
第一个position参数指定模型的类型。例如,“BERT”、“ROBERTA”和“ALBERT”都是有效的模型名称。第二个position参数表示模型的名称,可以在模型的网页上找到。最后一个参数是一个名为“num_labels”的参数,它指定模型拥有的类的数量。在本例中,模型有三个标签:“正”、“中性”和“负”
重要提示:实例化模型时不要忘记设置num_labels。否则,可能会发生错误。
happy_tc = HappyTextClassification("BERT", "ProsusAI/finbert", num_labels=3)
用法
我们可以使用“classify_text”方法,只需一行代码即可开始对文本进行分类
result = happy_tc.classify_text("Tesla's stock just increased by 20%")
让我们把结果打印出来,以便更好地理解它。
print(result)
Output: TextClassificationResult(label=’positive’, score=0.929110586643219)
如你所见,输出是一个数据类,有两个变量:“label”和“score”。
label是一个字符串,用于指示输入被分类到哪个类。“score”变量指定模型将答案分配为浮点数的概率。我们不能孤立这两个变量。
print(result.label)
print(result.score)
Result:
positive
0.929110586643219
下面是另一个示例。
result = happy_tc.classify_text("The price of gold just dropped by 5%")
print(result.label)
print(result.score)
Output:
negative
0.8852565288543701
训练-NLP情绪分析
现在我们来讨论训练。我们将训练一个模型来检测与NLP相关的文本情感。我们将仅使用两个示例进行训练—当然,这还不足以可靠地训练模型。但是,这只是为了示范。
我们必须创建一个包含两列的CSV文件:文本和标签。文本列包含我们希望分类的文本。“标签”列将标签类型包含为大于或等于0的整数。下表给出了训练CSV的示例。
下面是生成上述CSV文件的代码:
import csvcases= [("Wow I love using BERT for text classification", 0), ("I hate NLP", 1)]with open("train.csv", 'w', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerow(["text", "label"])for case in cases:writer.writerow([case[0], case[1]])
首先,我们将安装DistilBERT的普通版本作为起点。还有其他模型可以使用,如 BERT, ALBERT, RoBERTa等。更多型号请访问Hugging Face的模型网络:https://huggingface.co/models。
happy_tc = HappyTextClassification(model_type="DISTILBERT", model_name="distilbert-base-uncased", num_labels=2)
然后,我们可以使用新实例化的类简单地调用方法“train”。
happy_tc.train("train.csv")
就这样!我们刚刚训练了模型。我们现在可以使用它,就像我们在上一节中所做的那样。例如,你现在可以像以前一样调用“happy_tc.classify_text”,并将使用新的微调模型。
自定义参数
通过使用一个名为“TCTrainArgs”的类,我们可以轻松地修改学习参数,例如epoch数、学习率等。
from happytransformer import TCTrainArgs
现在,我们可以使用TCTrainArgs类创建一个对象来包含训练参数。可以修改的参数列表:https://happytransformer.com/text-classification/finetuning/。让我们将默认的训练次数从3增加到5。
args = TCTrainArgs(num_train_epochs=5)
让我们像以前一样调用happy_tc的train方法,但这次将args对象传递到该方法的args参数中。
happy_tc.train("train.csv", args=args)
好了,我们修改了学习参数!
评价
HappyTextGeneration对象有一个内置方法,允许你快速评估模型。
首先,按照训练中讨论的格式格式化数据,然后调用“.eval”方法。为了简单起见,让我们使用训练文件进行评估。
result = happy_tc.eval("train.csv")
print(result)
Result: EvalResult(loss=0.2848379611968994)
然后我们可以像这样分离损失变量:
print(result.loss)
Output: 0.2848379611968994
我建议你将整体数据的一部分用于训练,另一部分用于评估。然后,在训练前后评估你的模型。如果损失减少,则表示你的模型已学习。
你还可以创建数据的第三部分,用于运行实验,以找到最佳的学习参数
结论
就这样!你刚刚学习了如何实现和训练文本分类Transformer模型。使用Happy Transformer只需几行就可以完成这么多工作!。
相关文章
本文中的代码:
https://colab.research.google.com/drive/1Jq3o8whsgEL994noS14qyv98jt5We-pU?usp=sharing
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件
本站qq群554839127,加入微信群请扫码:
【NLP】使用Transformer模型进行文本分类相关推荐
- 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用
论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...
- 【NLP】6种用于文本分类的开源预训练模型
来源 | PURVA HUILGOL 编译 | VK 作者 | Analytics Vidhya [导读]我们正站在语言和机器的交汇处,这个话题我很感兴趣.机器能像莎士比亚一样写作吗?机器能提高我自己 ...
- 【NLP】基于机器学习的文本分类!
作者:李露,西北工业大学,Datawhale优秀学习者 据不完全统计,网民们平均每人每周收到的垃圾邮件高达10封左右.垃圾邮件浪费网络资源的同时,还消耗了我们大量的时间.大家对此深恶痛绝,于是识别垃圾 ...
- Word Averaging模型做文本分类 稳定效果好模型简单
利用WORDAVG模型做文本分类 模型简单 效果号 简单思想就是 将每个词向量在 句子维度进行求平均 可以用avgpool来做平均池化 然后用平均后的向量作为句子向量 进行文本分类 后面我们还 ...
- 分类(二):基于向量空间模型的文本分类
2019独角兽企业重金招聘Python工程师标准>>> 利用向量空间模型进行文本分类的思路主要基于邻近假设(contiguity hypothesis). 邻近假设: 同一类的文档会 ...
- 猿创征文丨深度学习基于双向LSTM模型完成文本分类任务
大家好,我是猿童学,本期猿创征文的第三期,也是最后一期,给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含 ...
- bert模型可以做文本主题识别吗_GitHub - jkszw2014/TextClassify_with_BERT: 使用BERT模型做文本分类;面向工业用途...
TextClassify_with_BERT 使用BERT模型做文本分类:面向工业用途 自己研究了当前开源的使用BERT做文本分类的许多存储库,各有各的缺点.通病就是面向学术,不考虑实际应用. 使用t ...
- 深度学习基于双向 LSTM 模型完成文本分类任务
大家好,本期给大家带来神经网络中的循环神经网络案例,基于双向LSTM模型完成文本分类任务,数据集来自kaggle,对电影评论进行文本分类. 电影评论可以蕴含丰富的情感:比如喜欢.讨厌.等等.情感分析( ...
- 【NLP】(task6)Transformers解决文本分类任务 + 超参搜索
学习总结 (1)学习用BERT模型解决文本分类任务的方法及步骤,步骤主要分为加载数据.数据预处理.微调预训练模型和超参数搜索. 在加载数据阶段中,GLUE榜单包含了9个句子级别的分类任务,要使用与分类 ...
最新文章
- web移动端Fixed在Input获取焦点时ios下产生的BUG及处理
- 人人可用的AI大模型来了,“玩”TA还有奖金拿
- Py之pytest-shutil:Python库之pytest-shutil简介、安装、使用方法之详细攻略
- “乘客迟到5分钟,滴滴司机无责取消订单”是一个好策略吗?
- 一些关于bootstrap,bagging,Adaboost,random forest, gradient boost的基本理解
- Could not parse configuration: /hibernate.cfg.xml
- ORACLE工作原理小结
- SQL Server 固定角色
- C# 使用Microsoft.Office.Interop将Excel、Word转换成PDF遇到的问题总结
- 走错路也要美美的!富有创意的404页面设计灵感
- 用JavaScript怎么写Windows的状态栏
- 数据结构Huffman树及编码
- vue-video-player 实现广告视频轮播和播放直播
- 【高等数学】上册知识点复习
- matlab7.0 win10安装报错,win10系统安装Matlab7.0后出现Runtime Error警告窗口的技巧介绍...
- jsmind-网页版的由js实现的思维导图
- html表白网页制作_表白时刻_表白网页在线制作_创意表白_表白神器
- 配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现
- the little schemer 笔记(10)
- 对二分法的理解和结对编程情况
热门文章
- 2016年度最受欢迎的100个 Java 库
- 链表操作---面向过程--到---面型对象---到模板类
- 让Windows2008R2也能进入手柄设置(游戏控制器设置)
- 计算机科学综合常用链接
- Topless eclipse导入myeclipse的web项目没法识别问题解决
- PHP编程最快明白 by www.kuphp.com 案例实战zencart1.38a支付模块简化Fast and Easy Checkout配置...
- AS3初学者容易迷糊的几个问题
- 【学习小记】一般图最大匹配——带花树算法
- 判断IE浏览器的版本号
- HTML 5.2 新特性介绍