Bert基础(十七)--Bert实战:中文情感识别

这篇具有很好参考价值的文章主要介绍了Bert基础(十七)--Bert实战:中文情感识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面说了中文分类的过程,这次说一下情感分类相关的代码,其实情感分类也属于中文多分类的一种,知识情感分类一般会专门区分出来,但是代码基本是一致的,

基本步骤:

1、加载数据集

数据集我们使用hugging face上的数据集,打开hugging face–》datasets
Bert基础(十七)--Bert实战:中文情感识别,Transformer+BERT学习攻略,bert,人工智能,深度学习
task选择“Text Classification“
languages选择Chinese
搜索sentiments即可,可以自己选择一个合适的来训练
进入查看
Bert基础(十七)--Bert实战:中文情感识别,Transformer+BERT学习攻略,bert,人工智能,深度学习

dataset = load_dataset("tyqiangz/multilingual-sentiments", "chinese",cache_dir="./data")
dataset

自己定义一个缓存的位置来存储数据

DatasetDict({
    train: Dataset({
        features: ['text', 'source', 'label'],
        num_rows: 120000
    })
    validation: Dataset({
        features: ['text', 'source', 'label'],
        num_rows: 3000
    })
    test: Dataset({
        features: ['text', 'source', 'label'],
        num_rows: 3000
    })
})

可通过下面代码查看数据

dataset.num_rows
dataset["train"].info
dataset["train"].info.features
dataset["train"][0]
{'text': '本人账号被盗,资金被江西(杨建)挪用,请亚马逊尽快查实,将本人的200元资金退回。本人已于2017年11月30日提交退货申请,为何到2018年了还是没解决?亚马逊是什么情况?请给本人一个合理解释。',
 'source': 'amazon_reviews_multi',
 'label': 2}

2 数据预处理

tokenizer = AutoTokenizer.from_pretrained("./model/tiansz/bert-base-chinese")
def tokenization(example):
    return tokenizer(example["text"], max_length=128, truncation=True)

dataset = dataset.map(tokenization, batched=True)
dataset.set_format(type="torch", columns=["input_ids", "token_type_ids", "attention_mask", "label"])

dataset

DatasetDict({
    train: Dataset({
        features: ['text', 'source', 'label', 'input_ids', 'token_type_ids', 'attention_mask'],
        num_rows: 120000
    })
    validation: Dataset({
        features: ['text', 'source', 'label', 'input_ids', 'token_type_ids', 'attention_mask'],
        num_rows: 3000
    })
    test: Dataset({
        features: ['text', 'source', 'label', 'input_ids', 'token_type_ids', 'attention_mask'],
        num_rows: 3000
    })
})

3 创建模型

model = AutoModelForSequenceClassification.from_pretrained("./model/tiansz/bert-base-chinese", num_labels=3)

4 创建评估函数

acc_metric = evaluate.load("accuracy")
acc_metric.description

‘\nAccuracy is the proportion of correct predictions among the total number of cases processed. It can be computed with:\nAccuracy = (TP + TN) / (TP + TN + FP + FN)\n Where:\nTP: True positive\nTN: True negative\nFP: False positive\nFN: False negative\n’

def eval_metric(eval_predict):
    predictions, labels = eval_predict
    predictions = predictions.argmax(axis=-1)
    acc = acc_metric.compute(predictions=predictions, references=labels)
    return acc

5 创建训练器

train_args = TrainingArguments(output_dir="./checkpoints",      # 输出文件夹
                               per_device_train_batch_size=64,  # 训练时的batch_size
                               per_device_eval_batch_size=128,  # 验证时的batch_size
                               logging_steps=10,                # log 打印的频率
                               evaluation_strategy="epoch",     # 评估策略
                               save_strategy="epoch",           # 保存策略
                               save_total_limit=3,              # 最大保存数
                               learning_rate=2e-5,              # 学习率
                               weight_decay=0.01,               # weight_decay
                               metric_for_best_model="accuracy",      # 设定评估指标
                               load_best_model_at_end=True,      # 训练完成后加载最优模型
                               report_to=['tensorboard']
                              )
trainer = Trainer(model=model,
                  args=train_args,
                  train_dataset=dataset["train"],
                  eval_dataset=dataset["validation"],
                  data_collator=DataCollatorWithPadding(tokenizer=tokenizer),
                  compute_metrics=eval_metric)


6 训练模型

trainer.train()

Bert基础(十七)--Bert实战:中文情感识别,Transformer+BERT学习攻略,bert,人工智能,深度学习文章来源地址https://www.toymoban.com/news/detail-861346.html

7 评估

trainer.evaluate(dataset["test"])
{'eval_loss': 0.46777570247650146,
 'eval_accuracy': 0.8153333333333334,
 'eval_runtime': 2.796,
 'eval_samples_per_second': 1072.977,
 'eval_steps_per_second': 8.584,
 'epoch': 3.0}

8 预测

from transformers import pipeline

pipe = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0)

sen = "这个电影不错,我很喜欢"
pipe(sen)

[{'label': 'LABEL_0', 'score': 0.9698687195777893}]

id2label_dic = {
    0:"积极",
    1:"中性",
    2:"消极"
                }
model.config.id2label = id2label_dic
pipe = pipeline("text-classification", model=model, tokenizer=tokenizer, device=0)

sen = "这个电影不错,我很喜欢"
pipe(sen)
[{'label': '积极', 'score': 0.9698687195777893}]

sen = "这味道太差了"
pipe(sen)
[{'label': '消极', 'score': 0.8582561016082764}]

sen = "1+2=3"
pipe(sen)
[{'label': '中性', 'score': 0.34471380710601807}]

到了这里,关于Bert基础(十七)--Bert实战:中文情感识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • bert,transformer架构图及面试题

    Transformer详解 - mathor atten之后经过一个全连接层+残差+层归一化 残差的作用:避免梯度消失 归一化的作用:避免梯度消失和爆炸,加速收敛 然后再送入一个两层的前馈神经网络   面试题:为什么注意力机制中要除以根号dk 答:因为q和k做点积后值会很大,会导致反向传播时

    2024年02月12日
    浏览(15)
  • 【NLP】1、BERT | 双向 transformer 预训练语言模型

    论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 出处:Google 在 BERT 之前的语言模型如 GPT 都是单向的模型,但 BERT 认为虽然单向(从左到右预测)预测任务符合语言模型的建模过程,但对一些语言理解任务不太友好,因为要理解一句话说的是什么意思的话

    2024年02月12日
    浏览(26)
  • 基于BERT对中文邮件内容分类

    本文是《用BERT做中文邮件内容分类》系列的第二篇,该系列项目持续更新中。系列的起源是《使用PaddleNLP识别垃圾邮件》项目,旨在解决企业面临的垃圾邮件问题,通过深度学习方法探索多语言垃圾邮件的内容、标题提取与分类识别。 在本篇文章中,我们使用PaddleNLP的BERT预

    2024年01月22日
    浏览(25)
  • 机器学习&&深度学习——BERT(来自transformer的双向编码器表示)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——transformer(机器翻译的再实现) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 我们首先理解一下相关的一些概念,首先我们知道在自然语言系统中,词是意义的基

    2024年02月12日
    浏览(26)
  • 【论文笔记】——从transformer、bert、GPT-1、2、3到ChatGPT

    18年有bert和gpt这两个语言模型,分别源自transformer的编码器和解码器,都是无监督方式训练的 GPT-1用的是无监督预训练+有监督微调 GPT-2用的是纯无监督预训练。提升了网络层数和训练数据量 GPT-3沿用了GPT-2的纯无监督预训练,但是数据大了好几个量级 InstructGPT在GPT-3上用来自人

    2024年02月09日
    浏览(22)
  • Transformer、BERT和GPT 自然语言处理领域的重要模型

    Transformer、BERT和GPT都是自然语言处理领域的重要模型,它们之间有一些区别和联系。 区别: 架构:Transformer是一种基于自注意力机制的神经网络架构,用于编码输入序列和解码输出序列。BERT(Bidirectional Encoder Representations from Transformers)是基于Transformer架构的双向编码模型,

    2024年03月09日
    浏览(26)
  • [oneAPI] 使用Bert进行中文文本分类

    比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel® DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolkitSamples/ 在本次实验中,我们利用PyTorch和Intel® Optimization for PyTorch的强大功能,对PyTorch进行了精心的优化和扩展。这些优化举措极大地增强了PyTorch在各

    2024年02月12日
    浏览(21)
  • 使用Bert,ERNIE,进行中文文本分类

    GitHub - 649453932/Bert-Chinese-Text-Classification-Pytorch: 使用Bert,ERNIE,进行中文文本分类 使用Bert,ERNIE,进行中文文本分类. Contribute to 649453932/Bert-Chinese-Text-Classification-Pytorch development by creating an account on GitHub. https://github.com/649453932/Bert-Chinese-Text-Classification-Pytorch   gayhub上有一个项目

    2024年02月12日
    浏览(67)
  • 读书笔记:多Transformer的双向编码器表示法(Bert)-1

    Bidirectional Encoder Representations from Transformers,即Bert; 本笔记主要是对谷歌Bert架构的入门学习: 介绍Transformer架构,理解编码器和解码器的工作原理; 掌握Bert模型架构的各个部分,了解如何进行模型的预训练、模型微调(将预训练的结果用于下游任务); 学习Bert的不同变体

    2024年02月09日
    浏览(20)
  • 读书笔记:多Transformer的双向编码器表示法(Bert)-4

    Bidirectional Encoder Representations from Transformers,即Bert; 第二部分 探索BERT变体 从本章开始的诸多内容,以理解为目标,着重关注对音频相关的支持(如果有的话); BERT变体:ALBERT、RoBERTTa、ELECTRA、SpanBERT、基于知识蒸馏; ALBERT,A Lite version of BERT,意为BERT模型的精简版;它对

    2024年02月07日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包