在上一篇文章LLM学习笔记:如何理解LLM中的Transformer架构中,我们了解了在GPT、stable diffusion以及情感分析等AI领域常见的 Transformer 架构,概括下来就是:Transformer 是一种用于处理和生成序列数据的深度学习架构,其内部的各种机制(例如 Self-Attention)使计算机能够更好地理解和生成自然语言。
那么,对于开发者来说,该如何使用这种架构理论呢?答案就是 Python 的 Transformers 库。
Hugging Face 在 Transformers 中封装了各种预训练的 Transformer 模型,让开发者无需从零开始训练,只需几行代码就能加载 BERT、GPT-2、T5 等模型,可以用于以下场景:
同时,Transformers 支持 PyTorch、TensorFlow 和 JAX,在一个框架中训练一个模型,在另一个框架也可以使用加载,增加了互通性。
Transformers 中的 pipeline()封装了预训练模型,让用户可以直接来执行各种自然语言处理任务,而无需手动加载模型。下面是一些常见的pipeline:
# 文本分类(情感分析)
pipeline("sentiment-analysis")
# 命名实体识别(NER)
pipeline("ner")
# 文本生成(如 GPT)
pipeline("text-generation")
# 翻译
pipeline("translation")
# 填空
pipeline("fill-mask")
# 语音转文本
pipeline("automatic-speech-recognition")
# 图片识别
pipeline("image-classification")
在使用之前需要安装 transformers,也需要安装pytorch或者tenserflow框架,这里我们使用pytorch。
pip install transformers torch torchvision torchaudio
安装成功之后,就可以使用 transformers 了。
接下来我们就开始使用 pipeline 上面的示例:
我们使用一段情感分析的代码来测试一下 transformers。
from transformers import pipeline
# 加载情感分析 pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
# 进行情感分析
result = sentiment_pipeline("I love this movie!")
print(result) # [{'label': 'POSITIVE', 'score': 0.99}]
上面代码调用了 pipeline("sentiment-analysis"),它自动加载合适的预训练模型(如 distilbert-base-uncased-finetuned-sst-2-english),然后对文本进行情感分析,输出正面(POSITIVE)或负面(NEGATIVE)的结果。
但是你在实际运行的时候,其实是报错的,因为需要的模型默认要在 huggingface 下载,国内是访问不了 huggingface 的,所以要想办法将模型下载下来,才能使用 transformers。
所以我们可以使用国内的镜像源 hf-mirror,最简单的方法就是在环境中设置镜像.首先,我们要在py程序中指定要使用的模型:
classifier = pipeline("sentiment-analysis", model="uer/roberta-base-finetuned-jd-binary-chinese")
在这里我们使用的一个适用于京东商品评论的二分类(好评和差评)任务,这些模型可以在镜像源网站上搜索。然后配置环境变量:
export HF_ENDPOINT=https://hf-mirror.com
然后在交互行中,使用python手动运行你的py程序,这样模型就下载下来了。
下次在IDE中运行py程序,就会自动使用下载好的模型。
如图,label的结果negative表示情感负面,star对应 1~3 星的评价,score表示模型对自己的判读有98%的可信度。如果想要批量对文本情感分析,在 classifier 中传入list即可。
上面我们使用 pipeline() 完成了一个情感分析的demo,那么 pipeline 是如何工作的呢?
这张图展示了 文本情感分析(Sentiment Analysis) 的 处理流程,主要分为三个步骤:
Tokenizer 的作用是将原始文本转换为模型可以理解的 Input ID。如上图所示,输入文本:This course is amazing,经过分词器转换为:101, 2023, 2607, 2003, 6429, 999, 102
然后就是将 Input ID 输入到我们在代码中指定的模型中,并生成 logits(对类别的预测分数)。图中输出 logits(模型的 raw scores):-4.3630, 4.6859其中,第一个值代表负面情绪的得分,第二个值代表正面情绪的得分。
Post Processing 对 logits 进行 Softmax 归一化,将模型输出的 logits 转换成(0 - 1)的概率,然后给出最终的预测结果。
如图,模型输出的logits:-4.3630, 4.6859经过 softmax 转换后:POSITIVE(正面):99.89%,NEGATIVE(负面):0.11%,所以该文本 情感倾向为正面。
所以说 pipeline 简化了这些工作流程,如果没有 pipeline,我们需要下面这么多代码才能实现情感分析的demo:
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 1. 加载 tokenizer 和模型
model_name = "uer/roberta-base-finetuned-jd-binary-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# 2. 输入文本
texts = "这家店的服务太差了!"
# 3. 对文本进行 tokenization
inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt")
# 4. 使用pytorch进行推理
with torch.no_grad():
outputs = model(**inputs)
# 5. 获取 logits(未归一化的得分)
logits = outputs.logits
# 6. 计算 softmax 归一化得分
probs = torch.nn.functional.softmax(logits, dim=-1)
# 7. 获取最高分的类别索引
predicted_labels = torch.argmax(probs, dim=1)
# 8. 映射到实际的情感类别
label_map = {0: "负面", 1: "正面"}
# 9. 打印结果
print(f"文本: {texts} | 情感类别: {label_map[predicted_labels.item()]} | 置信度: {probs[0, predicted_labels].item():.4f}")
运行代码,输入结果:
本篇文章是跟着 Hugging Face 推出的 NLP课程,学习了如何使用 transformers 实现简单的情感分析,同时也在学习过程中解决了模型无法下载的问题,其中的 pipeline() 降低了开发门槛,提高了易用性,有兴趣的小伙伴可以尝试一下。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有