Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >好评or坏评?AI用Hugging Face和PyTorch解码答案

好评or坏评?AI用Hugging Face和PyTorch解码答案

作者头像
Tom2Code
发布于 2024-02-22 06:23:42
发布于 2024-02-22 06:23:42
28300
代码可运行
举报
文章被收录于专栏:TomTom
运行总次数:0
代码可运行

先来科普一下huggingface:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hugging Face是一家专注于自然语言处理(NLP)技术的人工智能公司,致力于开发和提供前沿的NLP工具和大规模预训练模型,以推动自然语言理解和生成的研究与应用。公司成立于2016年,总部位于纽约,其使命是民主化人工智能技术,让开发者、研究人员和公司能够轻松地利用最先进的NLP技术。

Hugging Face背后最著名的产品是transformers库,这是一个开源的机器学习库,提供了数百种NLP模型,如BERTGPT-2T5BART等,支持文本分类、信息提取、文本生成、翻译以及其他多种NLP任务。transformers库以其易用性、灵活性和高效性受到广泛欢迎,成为了自然语言处理领域的事实标准之一。

除了提供强大的transformers库,Hugging Face还运营一个名为Hugging Face Hub的平台,这个平台允许社区成员共享和发现预训练模型和数据集。通过这个平台,用户可以轻松地上传、分享和使用NLP模型,促进了知识的共享和合作。

Hugging Face不仅在开源社区中具有重要影响,也与许多学术机构和企业合作,推动了NLP领域的研究和商业应用。公司持续在自然语言处理、机器学习和人工智能领域进行创新,旨在通过其技术和平台使AI更加普及和易于访问。

huggingface的官网,一般都是打不开的状态。首先,我们来介绍一个huggingface的镜像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
https://hf-mirror.com/

今天是初体验,就来体验一下这个镜像站

首先最简单的就是安装咯:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install transformers

然后就是我们今天的初体验:

首页是这个样子,左边是分类,右边是模型,上面有个搜索框

然后开始我们今天的教程:

  1. 先介绍我们的数据集:是一个教授整理的酒店中文评价数据集,5000条正向评价,标签是1 ,然后2000多条负面评价,标签是0

数据集截图:

那我们接下来开始加载数据集:

2.加载数据集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd
data=pd.read_csv("ChnSentiCorp_htl_all.csv")
data.head()

输出:

打印一下数据集看一下数据集的信息和介绍:

然后就输数据清洗,删除空行和一些无效的数据

3.创建数据集:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch.utils.data import Dataset
class MyDataSet(Dataset):
    def __init__(self):
        super().__init__()
        self.data=pd.read_csv('ChnSentiCorp_htl_all.csv')
        self.data=self.data.dropna()
        
    def __getitem__(self,index):
        return self.data.iloc[index]['review'],self.data.iloc[index]['label']
    
    def __len__(self):
        return len(self.data)
    

经典三部曲:

打印一下看看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dataset=MyDataSet()
for i in range(10):
    print(dataset[i])

可以看到数据集的内容是中文的然后最后的标签是0or1 代表了差评和好评

4.划分训练集和验证集

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch.utils.data import random_split
trainset,validset=random_split(dataset,lengths=[0.9,0.1])

看一下训练集和验证集的大小:

大概90%是训练集,10%是验证集

5.加载huggingface上的模型:

因为本地网络不好,所以就使用镜像站下载了该模型的pytorch版本的权重文件。

顺便介绍一下我们今天使用的模型是:

rbt3

RBT3是一个由哈工大和华为诺亚方舟实验室合作开发的中文预训练语言模型,隶属于Roberta模型家族。Roberta(Robustly optimized BERT approach)是一个优化过的BERT(Bidirectional Encoder Representations from Transformers)模型

然后使用我们的transformer库来加载我们下载好的模型:

首先确保rbt3的所有权重文件已经下载到了对应的文件夹,我这里是下载到了和我的代码同一个目录下的文件夹里的rbt3:

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from transformers import AutoModelForSequenceClassification
model=AutoModelForSequenceClassification.from_pretrained('rbt3')

打印一下model看看:

这就是加载成功了。

还可以这样加载分词器tokenizer:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from transformers import AutoTokenizer
tokenizer=AutoTokenizer.from_pretrained('rbt3')

分词器也加载成功了

我们继续下一步

6.然后就是创建dataloader:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import torch
from torch.utils.data import DataLoader

在定义一个处理dataset中每一个batch的数据的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def collate_func(batch):
    texts,labels=[],[]
    for item in batch:
        texts.append(item[0])
        labels.append(item[1])
    inputs=tokenizer(texts,max_length=128,padding="max_length",truncation=True,return_tensors="pt")
    inputs["labels"]=torch.tensor(labels)
    return inputs

dataloader的创建:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
trainloader=DataLoader(trainset,batch_size=16,shuffle=True,collate_fn=collate_func)
validloader=DataLoader(validset,batch_size=16,shuffle=False,collate_fn=collate_func)

现在再来看看我们的数据格式:

已经转化成了tensor的格式了

7.创建模型&优化器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from torch.optim import Adam
model=AutoModelForSequenceClassification.from_pretrained('rbt3')
optimizer=Adam(model.parameters(),lr=2e-5)
# 因为微调 所以学习率不用很大

8.训练与验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def evaluate():
    model.eval()
    acc_num=0
    with torch.inference_mode():
        for batch in validloader:
            output=model(**batch)
            pred=torch.argmax(output.logits,dim=-1)
            acc_num+=(pred.long()==batch['labels'].long()).float().sum()
    return acc_num/len(validset)


def train(epoch=3,log_step=100):
    global_step=0
    for ep in range(epoch):
        model.train()
        for batch in trainloader:
            optimizer.zero_grad()
            output=model(**batch)
            output.loss.backward()
            optimizer.step()
            if global_step%log_step:
                print(f"ep: {ep}, global_step: {global_step}, loss: {output.loss.item()}",)
            global_step+=1
        acc=evaluate()
        print(f"ep:{ep},acc: {acc}")
        

因为电脑的gpu too low to use 所以只能用cpu来训练了 -=- 无奈之举

最后的acc还可以,大概80%

9.模型的预测

sen是Tom自己想的句子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sen="这家民宿的床很舒服,隔音很好,投影仪配合100寸大幕布超级nice"
id2_label={0:'差评',1:'好评'}
model.eval()
with torch.inference_mode():
    inputs=tokenizer(sen,return_tensors='pt')
    logits=model(**inputs).logits
    pred=torch.argmax(logits,-1)
    print(f"输入:{sen}\n模型预测结果:{id2_label.get(pred.item())}")

模型预测的结果是好评,看来预测的还是很准确的。

或者我们也可以使用另外一种方法进行模型的加载和预测:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from transformers import pipeline
pipe=pipeline("text-classification",model=model,tokenizer=tokenizer)
pipe(sen)

运行结果:

可以看到预测结构还是1,也就是说这条评价“这家民宿的床很舒服,隔音很好,投影仪配合100寸大幕布超级nice ”还是好评

如果本教程对您有用,可以带一个再看,创作不易,十分感谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom的小院 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
聊聊Hugging Face
HuggingFace是一个开源社区,提供了开源的AI研发框架、工具集、可在线加载的数据集仓库和预训练模型仓库。HuggingFace提出了一套可以依照的标准研发流程,按照该框架实施工程,能够在一定程度上规避开发混乱、开发人员水平不一致的问题,降低了项目实施的风险及项目和研发人员的耦合度,让后续的研发人员能够更容易地介入,即把HuggingFace的标准研发流程变成所有研发人员的公共知识,不需要额外地学习。
Ryan_OVO
2023/10/19
1.3K0
聊聊Hugging Face
hugging face-基于pytorch-bert的中文文本分类
wget http://52.216.242.246/models.huggingface.co/bert/bert-base-uncased-vocab.txt
西西嘛呦
2020/12/22
3.9K0
hugging face-基于pytorch-bert的中文文本分类
Huggingface🤗NLP笔记8:使用PyTorch来微调模型「初级教程完结撒花ヽ(°▽°)ノ」
在Huggingface官方教程里提到,在使用pytorch的dataloader之前,我们需要做一些事情:
beyondGuo
2021/10/20
2.1K0
使用BERT进行文本分类
准备数据阶段主要需要用到的是datasets.Dataset 和transformers.AutoTokenizer。
lyhue1991
2023/09/05
7300
使用BERT进行文本分类
HuggingFace Transformers 库深度应用指南
在现代自然语言处理(NLP)领域,HuggingFace Transformers 库已经成为了不可或缺的基础工具。作为一个开源项目,它不仅提供了数千个预训练模型,还大大简化了最先进NLP模型的使用和微调过程。因此,掌握这个库的深度使用还是极为重要的。本指南将采用以下学习路径:按照基础环境搭建、核心API使用、实战案例应用、高级优化技巧来帮助各位读者渐进式地掌握它的使用。
别惹CC
2025/01/13
6160
5分钟 NLP :Hugging Face 主要类和函数介绍 🤗
来源:Deephub Imba本文约2200字,建议阅读9分钟本文包含其主要类和函数的概述以及一些代码示例。可以作为该库的一个入门教程 。 主要包括Pipeline, Datasets, Metrics, and AutoClasses HuggingFace是一个非常流行的 NLP 库。本文包含其主要类和函数的概述以及一些代码示例。可以作为该库的一个入门教程 。 Hugging Face 是一个开源库,用于构建、训练和部署最先进的 NLP 模型。Hugging Face 提供了两个主要的库,用于模型的t
数据派THU
2022/03/14
4.2K0
Huggingface🤗NLP笔记7:使用Trainer API来微调模型
不得不说,这个Huggingface很贴心,这里的warning写的很清楚。这里我们使用的是带ForSequenceClassification这个Head的模型,但是我们的bert-baed-cased虽然它本身也有自身的Head,但跟我们这里的二分类任务不匹配,所以可以看到,它的Head被移除了,使用了一个随机初始化的ForSequenceClassificationHead。
beyondGuo
2021/10/08
8.8K0
山东算法赛网格事件智能分类topline
基于网格事件数据,对网格中的事件内容进行提取分析,对事件的类别进行划分,具体为根据提供的事件描述,对事件所属政务类型进行划分。
致Great
2022/01/06
5510
山东算法赛网格事件智能分类topline
Transformers 4.37 中文文档(二)
除了🤗 Transformers 的 notebooks 之外,还有示例脚本演示如何使用PyTorch、TensorFlow或JAX/Flax训练模型的方法。
ApacheCN_飞龙
2024/06/26
7160
Transformers 4.37 中文文档(二)
Transformers 4.37 中文文档(一)
下表表示库中对这些模型的当前支持,它们是否有 Python 分词器(称为“slow”)。由🤗 Tokenizers 库支持的“fast”分词器,它们是否在 Jax(通过 Flax)、PyTorch 和/或 TensorFlow 中有支持。
ApacheCN_飞龙
2024/06/26
1.3K0
Transformers 4.37 中文文档(一)
Huggingface🤗NLP笔记6:数据集预处理,使用dynamic padding构造batch
从这一集,我们就正式开始使用Transformer来训练模型了。今天的部分是关于数据集预处理。
beyondGuo
2021/10/08
5.1K2
使用预训练模型进行句对分类(Paddle、PyTorch)
预训练模型下载:https://huggingface.co/nghuyong/ernie-1.0
Michael阿明
2021/09/06
1.6K0
你也可以动手参数有效微调:LoRA、Prefix Tuning、P-Tuning、Prompt Tuning
随着大语言模型的流行,如何让大模型在消费级GPU上进行微调训练成为了热点。掌握参数有效微调成为每个自然语言处理工程师必不可少的技能,正好hugging face开源了一个PEFT库,让我们也能够自己动手去了解参数有效微调。接下来以中文情感分析(二分类)去了解下参数有效微调。
西西嘛呦
2023/04/27
2.4K0
使用LORA微调RoBERTa
模型微调是指在一个已经训练好的模型的基础上,针对特定任务或者特定数据集进行再次训练以提高性能的过程。微调可以在使其适应特定任务时产生显着的结果。
deephub
2024/02/21
4800
使用LORA微调RoBERTa
BERT-IMDB电影评论情感分类实战:SwanLab可视化训练(完整训练代码)
基于BERT模型的IMDB电影评论情感分类,是NLP经典的Hello World任务之一。
用户9029617
2024/05/23
4890
BERT-IMDB电影评论情感分类实战:SwanLab可视化训练(完整训练代码)
STI比赛任务二:【答案检验基线方案以及思路分享】
子任务1涉及的答案抽取过程主要依赖答案片段与搜索query间语义相关性,却无法保证答案片段本身的正确性与可靠性。因此,在答案抽取之后需要设计答案验证方法,从抽取的多个答案片段中选择出大众认可度最高的高置信度答案进行最后的展示。给定一个搜索问题q和其对应的文档集合D,子任务2希望将所有文档基于其包含的答案观点一致性进行聚类,得到每个query下包含用户最公认答案的文档集合,保证深度智能问答系统最终答案的可信度。
致Great
2022/12/07
3310
STI比赛任务二:【答案检验基线方案以及思路分享】
Paddle 基于预训练模型 ERNIE-Gram 实现语义匹配
项目介绍 项目链接:https://aistudio.baidu.com/aistudio/projectdetail/2029701 单机多卡训练参考:https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/02_paddle2.0_develop/06_device_cn.html 支持 star PaddleNLP github https://github.com/PaddlePaddle/PaddleNLP
Michael阿明
2021/09/06
6300
大模型应用曙光 - 10X压缩技术
虽然LLM的巨大规模赋予了它们在各种用例中的出色性能,但这也在其应用于现实世界问题时带来了挑战。在本文中,我将讨论如何通过压缩LLM来克服这些挑战。我将从概述关键概念开始,接着通过Python代码展示一个具体的示例。
TechLead
2024/09/24
1650
大模型应用曙光 - 10X压缩技术
【AI大模型】Transformers大模型库(十五):timm库
这里的Transformers指的是huggingface开发的大模型库,为huggingface上数以万计的预训练大模型提供预测、训练等服务。
LDG_AGI
2024/08/13
5250
PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】
【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?_汀、的博客-CSDN博客_ernie模型
汀丶人工智能
2022/12/21
8290
PaddleHub实战篇{ERNIE实现文新闻本分类、ERNIE3.0 实现序列标注}【四】
推荐阅读
相关推荐
聊聊Hugging Face
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验