Transformers 自然语言处理(四)(3)

本文涉及的产品
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP自然语言处理_基础版,每接口每天50万次
简介: Transformers 自然语言处理(四)

Transformers 自然语言处理(四)(2)https://developer.aliyun.com/article/1514227

使用情感分析预测客户行为

此部分将在几个 Hugging Face transformer 模型上运行情感分析任务,以查看哪些模型产生了最佳结果,哪些模型我们简单地喜欢。

我们将使用 Hugging Face 的 DistilBERT 模型开始此过程。

使用 DistilBERT 进行情感分析

让我们使用 DistilBERT 运行情感分析任务,并看看我们如何使用结果来预测客户行为。

打开 SentimentAnalysis.ipynb 和Transformers安装和导入单元格:

!pip install -q transformers
from transformers import pipeline 

我们现在将创建一个名为 classify 的函数,它将使用我们发送给它的序列运行模型:

def classify(sequence,M):
   #DistilBertForSequenceClassification(default model)
    nlp_cls = pipeline('sentiment-analysis')
    if M==1:
      print(nlp_cls.model.config)
    return nlp_cls(sequence) 

请注意,如果您将 M=1 发送给该函数,它将显示我们正在使用的 DistilBERT 6 层、12 个头模型的配置:

DistilBertConfig {
  "activation": "gelu",
  "architectures": [
    "DistilBertForSequenceClassification"
  ],
  "attention_dropout": 0.1,
  "dim": 768,
  "dropout": 0.1,
  "finetuning_task": "sst-2",
  "hidden_dim": 3072,
  "id2label": {
    "0": "NEGATIVE",
    "1": "POSITIVE"
  },
  "initializer_range": 0.02,
  "label2id": {
    "NEGATIVE": 0,
    "POSITIVE": 1
  },
  "max_position_embeddings": 512,
  "model_type": "distilbert",
  "n_heads": 12,
  "n_layers": 6,
  "output_past": true,
  "pad_token_id": 0,
  "qa_dropout": 0.1,
  "seq_classif_dropout": 0.2,
  "sinusoidal_pos_embds": false,
  "tie_weights_": true,
  "vocab_size": 30522
} 

此 DistilBERT 模型的具体参数是标签定义。

现在我们创建一个序列列表(您可以添加更多),我们可以将其发送给 classify 函数:

seq=3
if seq==1:
  sequence="The battery on my Model9X phone doesn't last more than 6 hours and I'm unhappy about that."
if seq==2:
  sequence="The battery on my Model9X phone doesn't last more than 6 hours and I'm unhappy about that. I was really mad! I bought a Moel10x and things seem to be better. I'm super satisfied now."
if seq==3:
  sequence="The customer was very unhappy"
if seq==4:
  sequence="The customer was very satisfied"
print(sequence)
M=0 #display model cofiguration=1, default=0
CS=classify(sequence,M)
print(CS) 

在这种情况下,seq=3 被激活以模拟我们需要考虑的客户问题。 输出为负面,这正是我们要寻找的示例:

[{'label': 'NEGATIVE', 'score': 0.9997098445892334}] 

我们可以从这个结果中得出几个结论,以预测客户行为,编写一个函数来:

  • 将预测存储在客户管理数据库中。
  • 统计客户在某段时间内(周、月、年)投诉服务或产品的次数。 经常投诉的客户可能会转向竞争对手以获得更好的产品或服务。
  • 检测在负面反馈信息中不断出现的产品和服务。 产品或服务可能存在缺陷,需要质量控制和改进。

您可以花几分钟运行其他序列或创建一些序列来探索 DistilBERT 模型。

我们现在将探索其他 Hugging Face transformers。

使用 Hugging Face 模型列表进行情感分析

本节将探索 Hugging Face 的Transformers模型列表,并输入一些样本以评估它们的结果。想法是测试多个模型,而不仅仅是一个,并查看哪个模型最适合您的给定项目需求。

我们将运行 Hugging Face 模型:huggingface.co/models

对于我们使用的每个模型,您可以在 Hugging Face 提供的文档中找到模型的描述:huggingface.co/transformers/

我们将测试几个模型。如果您实现它们,您可能会发现它们需要微调甚至是对您希望执行的 NLP 任务进行预训练。在这种情况下,对于 Hugging Face Transformers,您可以执行以下操作:

  • 对于微调,您可以参考第三章对 BERT 模型进行微调
  • 对于预训练,您可以参考第四章从头开始预训练 RoBERTa 模型

让我们首先浏览 Hugging Face 模型列表:huggingface.co/models

然后,在任务窗格中选择文本分类


图 12.4:选择文本分类模型

将显示一系列用于文本分类的Transformers模型:


图 12.5:Hugging Face 预训练的文本分类模型

默认排序模式为排序:最多下载

现在我们将搜索一些有趣的Transformers模型,我们可以在线测试。

我们将从 DistilBERT 开始。

DistilBERT 用于 SST

distilbert-base-uncased-finetuned-sst-2-english 模型在 SST 上进行了微调。

让我们试试一个需要对组成原理有良好理解的例子:

"尽管客户似乎不满意,但事实上她是满意的,只是当时在想其他事情,这给了一个错误的印象。"

这个句子对于Transformers来说很难分析,需要逻辑规则训练。

输出是一个假阴性:


图 12.6:复杂序列分类任务的输出

假阴性并不意味着模型工作不正确。我们可以选择另一个模型。然而,这可能意味着我们必须下载并训练它更长时间更好!

在撰写本书时,类似 BERT 的模型在 GLUE 和 SuperGLUE 排行榜上排名靠前。排名将不断变化,但Transformers的基本概念不会改变。

现在我们将尝试一个困难但不那么复杂的示例。

这个例子是真实项目的一个关键教训。当我们尝试估计客户投诉的次数时,我们将得到假阴性和假阳性。因此,对于未来几年,定期的人工干预仍将是必要的

让我们试试一个 MiniLM 模型。

MiniLM-L12-H384-uncased

Microsoft/MiniLM-L12-H384-uncased 优化了老师的最后一个自注意力层的大小,以及对 BERT 模型的其他调整,以获得更好的性能。它有 12 层,12 个头部和 3300 万参数,并且比 BERT-base 快 2.7 倍。

让我们测试它对组成原则的理解能力:

尽管客户似乎不高兴,但事实上她很满意,只是在那时在想其他事情,这造成了误解。

输出很有趣,因为它产生了一个谨慎的分数(未决定):


图 12.7: 复杂句子情感分析

我们可以看到这个输出不是决定性的,因为它在0.5左右。应该是积极的。

让我们尝试一个涉及含意的模型。

RoBERTa-large-mnli

一个多题材自然语言推理MultiNLI)任务,cims.nyu.edu/~sbowman/multinli/,可以帮助解决复杂句子的解释,当我们试图确定客户的意思时。推理任务必须确定一个序列是否导致下一个序列。

我们需要对输入进行格式化,并使用序列分割标记分割序列:

尽管客户似乎不高兴 事实上她很满意,只是当时在想其他事情,这造成了误解

结果很有趣,尽管保持中性:


图 12.8: 针对稍微积极的句子获得的中性结果

但是,这个结果没有错误。第二个序列不是从第一个序列推断出的。结果非常正确。

让我们以“积极情感”多语言 BERT-base 模型结束我们的实验。

BERT-base 多语言模型

让我们在一个超级酷的 BERT-base 模型上运行我们的最终实验:nlptown/bert-base-multilingual-uncased-sentiment

它设计得非常好。

让我们用友好和积极的英文句子来运行它:


图 12.9: 英文情感分析

让我们用法语尝试一下,“Ce modèle est super bien!”(“这个模型超级好!”,意思是“酷”):


图 12.10: 法语情感分析

Hugging Face 上这个模型的路径是nlptown/bert-base-multilingual-uncased-sentiment。您可以在 Hugging Face 网站的搜索表单中找到它。其当前链接为huggingface.co/nlptown/bert-base-multilingual-uncased-sentiment?text=Ce+mod%C3%A8le+est+super+bien%21

您可以通过以下初始化代码在您的网站上实现它:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("nlptown/bert-base-multilingual-uncased-sentiment")
model = AutoModelForSequenceClassification.from_pretrained("nlptown/bert-base-multilingual-uncased-sentiment") 

这将需要一些时间和耐心,但结果可能会非常好!

您可以在您的网站上实施此转换器,以平均全球客户的满意度!您还可以将其用作持续反馈,以改善您的客户服务并预测客户的反应。

在我们离开之前,我们将看看 GPT-3 如何执行情感分析。

使用 GPT-3 进行情感分析

您需要一个 OpenAI 账户来运行本节的示例。教育界面不需要 API、开发或培训。您可以简单地输入一些推特,然后请求进行情感分析:

推特: 我觉得这部电影不那么令人兴奋,但不知怎么的我真的很享受看它!

情感: 积极

推特: 我以前从未吃过这样的辛辣食物,但觉得它超级好吃!

情感: 积极

输出是令人满意的。

现在我们将向 GPT-3 引擎提交一个困难的序列:

推特: 因为我们不得不考虑所有参数,所以很难找到我们在生活中真正喜欢的东西。

情感: 积极

输出是错误的!这个情感根本不是积极的。这句话显示了生活的困难。然而,“享受”这个词为 GPT-3 引入了偏见。

如果我们从序列中去除“享受”并用动词 替换,输出将是负面的:

推特: 因为我们不得不考虑所有参数,所以很难找到我们在生活中真正喜欢的东西。

情感: 消极

输出也是错误的!并不是因为生活难以理解,我们就可以得出这句话是负面的结论。正确的输出应该是中性的。然后我们可以要求 GPT-3 在流水线中执行另一个任务,例如解释为什么它很困难。

作为一个没有任务的用户运行 NLP 任务显示了工业 4.0(I4.0)的发展方向:更少的人为干预,更多的自动功能。 然而,我们知道某些情况下我们的新技能是必需的,比如在转换器产生意外结果时设计预处理功能。人类仍然是有用的!

第七章GPT-3 引擎崛起的超人类转换器运行 OpenAI GPT-3 任务 部分中描述了一种具有现成代码的推特分类示例。如果您愿意,您可以在该代码中实现本节的示例。

现在让我们看看我们如何仍然证明自己是有价值的资产。

在我们离开之前进行一些务实的 I4.0 思考

Hugging Face transformers 进行情感分析时包含了一句被判定为“中性”的句子。

但那是真的吗?

将这句话标记为“中性”让我感到不安。我很好奇 OpenAI GPT-3 能否做得更好。毕竟,GPT-3 是一个理论上可以做许多其未经过训练的事情的基础模型。

我再次检查了这句话:

虽然客户看起来不高兴,但实际上她却很满意,只是在那时在想其他事情,这给了一个错误的印象。

当我仔细阅读句子时,我能看到顾客是 she。当我更深入地观察时,我理解到 she 实际上是 satisfied。我决定不是盲目地尝试各种模型,直到找到一个有效的为止。一直尝试一个接一个的模型是没有生产力的。

我需要通过逻辑和实验来找到问题的根源。我不想依赖自动找到原因的算法。有时候我们需要使用我们的神经元!

问题可能是很难为机器识别 she 作为 customer 吗?就像我们在第十章中所做的那样,基于 BERT 的语义角色标注,让我们问问 SRL BERT。


Transformers 自然语言处理(四)(4)https://developer.aliyun.com/article/1514231

相关文章
|
6月前
|
存储 人工智能 自然语言处理
Transformers 自然语言处理(五)(2)
Transformers 自然语言处理(五)
80 0
|
3月前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch与Hugging Face Transformers:快速构建先进的NLP模型
【8月更文第27天】随着自然语言处理(NLP)技术的快速发展,深度学习模型已经成为了构建高质量NLP应用程序的关键。PyTorch 作为一种强大的深度学习框架,提供了灵活的 API 和高效的性能,非常适合于构建复杂的 NLP 模型。Hugging Face Transformers 库则是目前最流行的预训练模型库之一,它为 PyTorch 提供了大量的预训练模型和工具,极大地简化了模型训练和部署的过程。
172 2
|
3月前
|
机器学习/深度学习 人工智能 自然语言处理
【开源项目】自然语言处理领域的明星项目推荐:Hugging Face Transformers
在当今人工智能与大数据飞速发展的时代,自然语言处理(NLP)已成为推动科技进步的重要力量。而在NLP领域,Hugging Face Transformers无疑是一个备受瞩目的开源项目。本文将从项目介绍、代码解释以及技术特点等角度,为您深入剖析这一热门项目。
72 10
|
4月前
|
自然语言处理 PyTorch API
`transformers`库是Hugging Face提供的一个开源库,它包含了大量的预训练模型和方便的API,用于自然语言处理(NLP)任务。在文本生成任务中,`transformers`库提供了许多预训练的生成模型,如GPT系列、T5、BART等。这些模型可以通过`pipeline()`函数方便地加载和使用,而`generate()`函数则是用于生成文本的核心函数。
`transformers`库是Hugging Face提供的一个开源库,它包含了大量的预训练模型和方便的API,用于自然语言处理(NLP)任务。在文本生成任务中,`transformers`库提供了许多预训练的生成模型,如GPT系列、T5、BART等。这些模型可以通过`pipeline()`函数方便地加载和使用,而`generate()`函数则是用于生成文本的核心函数。
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformers 自然语言处理(一)(2)
Transformers 自然语言处理(一)
66 3
|
6月前
|
存储 机器学习/深度学习 自然语言处理
Transformers 自然语言处理(一)(3)
Transformers 自然语言处理(一)
69 2
|
6月前
|
机器学习/深度学习 存储 自然语言处理
Transformers 自然语言处理(一)(1)
Transformers 自然语言处理(一)
61 2
|
6月前
|
人工智能 自然语言处理 数据可视化
Transformers 自然语言处理(五)(1)
Transformers 自然语言处理(五)
55 0
|
6月前
|
人工智能 自然语言处理 算法
Transformers 自然语言处理(四)(4)
Transformers 自然语言处理(四)
47 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。