使用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 csv

cases= [('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只需几行就可以完成这么多工作!。

(0)

相关推荐

  • 基于功能磁共振成像数据的机器学习对精神分裂症进行分类

          功能磁共振成像能够估计人脑中的功能激活和连通性,近年来随着机器学习技术的发展,人们热衷于将这些功能模式与机器学习相结合用于识别精神病特征.尽管这些方法具有更好地理解疾病过程并完成早期诊断的 ...

  • 写作神器还是魔鬼化身?万能语言模型GPT-3起底

    「工程壮举」「人间奇迹」GPT-3,会让人类离没事做又近一步吗? 编译 |  心缘 编辑 |  漠影 2020年6月,在训练约2000亿个单词.烧掉几千万美元后,史上最强大AI模型GPT-3一炮而红. ...

  • 大型语言模型中的隐私注意事项

    视频介绍:大型语言模型中的隐私注意事项 经过训练以预测句子中下一个单词的基于机器学习的语言模型变得越来越强大.普遍和有用,从而导致问答.翻译等应用程序的突破性改进.但随着语言模型的不断发展,新的和意想 ...

  • 终于有人把监督学习、强化学习和无监督学习讲明白了

    导读:本文将讨论监督学习.无监督学习和强化学习这三种类型的机器学习. 作者:塞巴斯蒂安·拉施卡(Sebastian Raschka).瓦希德·米尔贾利利(Vahid Mirjalili) 来源:华章科 ...

  • 【学术论文】基于卷积递归模型的文本分类研究

    摘要: 近年来卷积神经网络和循环神经网络在文本分类领域得到了越来越广泛的的应用.提出一种卷积神经网络和长短时记忆网络特征融合的模型,通过长短期记忆网络作为池化层的替代来获得长期依赖性,从而构建一个联合 ...

  • CNN如何用于NLP任务?一文简述文本分类任务的7个模型

    人工智能算法与Python大数据 致力于提供深度学习.机器学习.人工智能干货文章,为AI人员提供学习路线以及前沿资讯 23篇原创内容 公众号 点上方人工智能算法与Python大数据获取更多干货 在右上 ...

  • 【学术论文】基于Transformer模型的中文文本自动校对研究

       摘 要 : 提出将Transformer模型应用于中文文本自动校对领域.Transformer模型与传统的基于概率.统计.规则或引入BiLSTM的Seq2Seq模型不同,该深度学习模型通过对Se ...

  • 如何将关键词信息融入到文本分类任务

    在知乎看到这样一个问题[如何将关键词信息融入到文本分类任务],简单说一下自己的经验,供大家参考: 首先说,现在基本各组都有自己的关键词词库,构造方法也都基本上相似. 简单点的就是TF-IDF筛选,复杂 ...

  • 浅谈Transformer模型中的位置表示

    作者:哈工大SCIR 徐啸 0. 何为位置信息 首先简单谈一下位置信息.一般将位置信息简单分为绝对位置信息和相对位置信息,并且前者对句子语义的影响不大,更为重要的是后者. 以情感分析 (Sentime ...

  • 长短期记忆网络LSTM在时间序列预测和文本分类中的应用

    长短期记忆网络或LSTM网络是深度学习中使用的一种递归神经网络,可以成功地训练非常大的体系结构. 什么是LSTM? LSTM代表长短期记忆网络,在深度学习领域使用.它是各种循环神经网络(RNN),能够 ...

  • 曹宏鑫等:农业模型概念、分类和建立过程

    本文节选自: 曹宏鑫, 葛道阔, 张文宇, 张伟欣, 曹静, 梁万杰, 宣守丽, 刘岩, 吴茜, 孙传亮, 张玲玲, 夏吉安, 刘永霞, 陈昱利, 岳延滨, 张智优, 万倩, 潘月, 韩旭杰, 吴菲. ...

  • 【收藏】一份最新的、全面的NLP文本分类综述

    Paper:Deep Learning Based Text Classification: A Comprehensive Review(Computer Science, Mathematics- ...

  • 面向Transformer模型的高效预训练方法

    声明:本文转载自 哈工大讯飞联合实验室公众号.  原创作者 韦菁 本期导读:自从BERT出现以来,预训练技术逐渐发展成为了 NLP 领域不可或缺的主流技术.这给我们处理NLP任务带来了极大的便利,但是 ...