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

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
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

相关文章
|
1月前
|
存储 人工智能 自然语言处理
Transformers 自然语言处理(五)(2)
Transformers 自然语言处理(五)
46 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformers 自然语言处理(一)(2)
Transformers 自然语言处理(一)
36 3
|
1月前
|
存储 机器学习/深度学习 自然语言处理
Transformers 自然语言处理(一)(3)
Transformers 自然语言处理(一)
42 2
|
1月前
|
机器学习/深度学习 存储 自然语言处理
Transformers 自然语言处理(一)(1)
Transformers 自然语言处理(一)
37 2
|
1月前
|
人工智能 自然语言处理 数据可视化
Transformers 自然语言处理(四)(1)
Transformers 自然语言处理(四)
12 1
|
1月前
|
人工智能 自然语言处理 数据可视化
Transformers 自然语言处理(五)(1)
Transformers 自然语言处理(五)
18 0
|
1月前
|
人工智能 自然语言处理 算法
Transformers 自然语言处理(四)(4)
Transformers 自然语言处理(四)
27 0
|
1月前
|
人工智能 自然语言处理 数据可视化
Transformers 自然语言处理(四)(2)
Transformers 自然语言处理(四)
13 0
|
1月前
|
人工智能 自然语言处理 安全
Transformers 自然语言处理(三)(4)
Transformers 自然语言处理(三)
25 0
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
探索未来AI技术的前沿——自然语言处理的发展与应用
本文将深入探讨自然语言处理技术在人工智能领域中的重要性和应用前景。通过分析当前自然语言处理技术的发展趋势和实际应用案例,揭示了其在改善用户体验、提升工作效率以及推动产业创新方面的巨大潜力。

热门文章

最新文章