使用Hugging Face Transformer检测文本中的情绪 原创

发布于 2024-8-28 08:16
浏览
0收藏

本文介绍了如何利用Hugging Face预训练语言模型对推文隐藏的情绪进行分类。

Hugging Face上有各种基于Transformer的语言模型,专门用于处理语言理解和语言生成任务,包括但不限于:

  • 文本分类
  • 命名实体识别(NER)
  • 文本生成
  • 问题回答
  • 摘要
  • 翻译

文本分类任务的一个特殊又很常见的案例是情绪分析,其目的是识别给定文本的情绪。“最简单”的一类情绪分析语言模型经过训练后,确定输入文本(比如客户对产品的评价)是积极的还是消极的,或者是积极的、消极的还是中立的。这两个具体问题分别被表述为二元分类任务或多类分类任务。

还有一些语言模型虽然仍可以归为情绪分析模型,但经过训练后,可以将文本分类为几种情绪,比如愤怒、快乐和悲伤等。

这篇基于Python的教程侧重于加载和阐明使用一个Hugging Face预训练模型来分类与输入文本相关的主要情绪。我们将使用在Hugging Face中心上公开可用的情绪数据集。这个数据集含有成千上万条用英语写的推文消息。

加载数据集

我们将运行以下指令,加载情绪数据集中的训练数据:

!pip install datasets
from datasets import load_dataset
all_data = load_dataset("jeffnyman/emotions")
train_data = all_data["train"]

下面是train_data变量中训练子集所包含内容的摘要:

Dataset({
features: ['text', 'label'],
num_rows: 16000
})

情绪数据集中的训练内容含有16000个与推文消息相关的实例。每个实例有两个特征:一个输入特征含有实际的消息文本,一个输出特征或标签含有其相关的情绪(用数字标识符标识)。

0:悲伤

1:快乐

2:喜爱

3:愤怒

4:恐惧

5:惊喜

比如说,训练内容中的第一个标记实例被归类为“悲伤”情绪:

train_data [0]

输出:

{'text': 'i didnt feel humiliated', 'label': 0}

加载语言模型

一旦我们加载了数据,下一步就是从Hugging Face加载一个合适的预训练语言模型,用于我们的目标情绪检测任务。使用Hugging Face的Transformer库加载和使用语言模型有两种主要方法:

  • 管道提供了一个非常高的抽象级别,可以准备加载语言模型,并立即对其执行推理,只需很少的代码行,不过代价是几乎没什么可配置性。
  • 自动类提供了较低层次的抽象,需要更多的编码技能,但在调整模型参数以及定制文本预处理步骤(如标记化)方面提供了更大的灵活性。

为了方便起见,本教程侧重于使用管道来加载模型。管道要求起码指定语言任务的类型,并指定要加载的模型名(可选)。由于情绪检测是文本分类问题的一种非常特殊的形式,因此在加载模型时使用的任务参数应该是“text-classification”。

from transformers import pipeline
classifier = pipeline("text-classification", 
model="j-hartmann/emotion-english-distilroberta-base")

另一方面,强烈建议用“model”参数指定Hugging Face中心中一个特定模型的名称,该模型能够解决我们的特定情绪检测任务。否则,默认情况下,我们可能会为这个特定的6类分类问题加载一个没有经过数据训练的文本分类模型。

你可能会问自己:“我怎么知道使用哪个模型名称?”。答案很简单:在Hugging Face网站上搜索一番,找到合适的模型,或者根据特定数据集(比如情绪数据)训练的模型。

下一步是开始进行预测。管道使得这个推理过程非常简单,只需要调用我们新实例化的管道变量,并将输入文本作为参数来传递:

example_tweet = "I love hugging face transformers!"
prediction = classifier(example_tweet)
print(prediction)

结果,我们得到一个预测标签和一个置信度分数:这个分数越接近1,所做的预测就越“可靠”。

[{'label': 'joy', 'score': 0.9825918674468994}]

所以,我们的输入例子“I love hugging face transformers!”明确地传达了一种喜悦的情绪。

你可以将多个输入文本传递给管道以同时执行几个预测,如下所示:

example_tweets = ["I love hugging face transformers!", "I really like coffee 
but it's too bitter..."]
prediction = classifier(example_tweets)
print(prediction)

这个例子中的第二个输入对于模型执行自信分类更具挑战性:

[{'label': 'joy', 'score': 0.9825918674468994}, {'label': 'sadness', 'score': 
0.38266682624816895}]

最后,我们还可以从数据集传递一批实例,比如之前加载的“情绪”数据。这个例子将前10个训练输入传递给我们的语言模型管道,对它们的情绪进行分类,然后输出一个含有每个预测标签的列表,将他们的置信度分数放在一边:

train_batch = train_data[:10]["text"]
predictions = classifier(train_batch)
labels = [x['label'] for x in predictions]
print(labels)

输出:

['sadness', 'sadness', 'anger', 'joy', 'anger', 'sadness', 'surprise', 
'fear', 'joy', 'joy']

为了比较,下面是这10个训练实例的原始标签:

print(train_data[:10]["label"])

输出:

[0, 0, 3, 2, 3, 0, 5, 4, 1, 2]

如果观察每个数字标识符所关联的情绪,我们可以看到,10个预测中有7个与这10个实例的实际标签相匹配。

你已知道如何使用Hugging Face transformer模型来检测文本情绪,何不探究预训练的语言模型可以提供帮助的其他用例和语言任务呢?

原文标题:Using Hugging Face Transformers for Emotion Detection in Text,作者:Iván Palomares Carrascosa

链接:https://www.kdnuggets.com/using-hugging-face-transformers-for-emotion-detection-in-text。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2024-8-28 10:58:34修改
收藏
回复
举报
回复
相关推荐