使用transformers中的pipeline调用huggingface中模型过程
- 前言
- 管线使用中的问题和解决
- huggingface的连接问题
- 使用huggingface示例
- 修改源继续使用pipeline
- No module named 'keras.engine'
前言
HuggingFace有一个巨大的模型库,其中包括很多的比较成熟的经典模型,这些模型即使不进行任何训练也能直接得出比较好的预测结果(Zero Shot Learning)。
transformers中提供的管线(pipeline)API隐藏了大量复杂的底层代码,直接使用现有的模型,不再需要再训练就可以获得较好的效果。
在学习transformers的初期可能会遇到一些问题,本篇文章将解决transformers中使用管线中可能遇到的问题。
管线使用中的问题和解决
在本篇中以情感分析任务为例,实现通过管线使用中的问题和解决。
huggingface的连接问题
使用管线进行情感分析的代码如下:
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("I hate you")
如果运行过程中出现以下报错,说明遇到了huggingface连接问题,受网络影响,无论是访问huggingface还是从huggingface上下载模型都可能存在连接问题,一般情况下我们会采用镜像源的方式解决。
从上述报错中我们可以看到,情感分析(sentiment-analysis)任务中,访问的链接是https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english,当不能访问huggingface时,这个链接自然也不能正常访问。这时需要将huggingface.co
换成镜像源hf-mirror.com
,可以通过访问镜像源来获取模型。有两种方式可以使用该模型进行情感分析——修改源继续使用pipeline和使用huggingface示例。
使用huggingface示例
我们将访问链接换成https://hf-mirror.com/distilbert-base-uncased-finetuned-sst-2-english可以直接访问镜像源中模型的页面,点击Files and versions
可以查看模型文件
随后我们只需要将这些文件和文件夹全部下载下来并且放在同一个文件夹中即可。
下载完成后我们返回到Model card
向下拉可以看到使用这一模型的示例
如果没有下载模型,使用该代码也会自动下载,但有可能因为超时而断联,从而导致下载失败。所以这里建议先下载后,再执行示例。
在这里我模型下载的路径是"../huggingface_model/distilbert-base-uncased-finetuned-sst-2-english"
,将示例中模型名字换成本地路径即可。
import torch
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification
tokenizer = DistilBertTokenizer.from_pretrained("../huggingface_model/distilbert-base-uncased-finetuned-sst-2-english")
model = DistilBertForSequenceClassification.from_pretrained("../huggingface_model/distilbert-base-uncased-finetuned-sst-2-english")
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
predicted_class_id = logits.argmax().item()
print(model.config.id2label[predicted_class_id])
运行结果:
POSITIVE
修改源继续使用pipeline
修改后的代码如下:
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("I hate you")
print(result)
这样修改的原理是将环境变量HF_ENDPOINT
修改为https://hf-mirror.com
(默认为https://huggingface.co
),设置完之后将默认使用镜像源访问模型。
运行结果:
[{'label': 'NEGATIVE', 'score': 0.9991129040718079}]
从运行结果可以看到链接地址已经变成了镜像源的地址,并且会自动下载模型,不过要注意的是模型默认会下载到C盘,在windows系统中,路径为:C:\Users\<你的主机名>\.cache\huggingface\hub
No module named ‘keras.engine’
在使用管线时还有可以存在以下问题,报错如下:No module named 'keras.engine'
这个报错是因为transformers、tensorflow、keras三者之间版本不匹配产生的问题,一般来讲将这三个包升级到最新版本即可。
pip install --upgrade tensorflow
pip install --upgrade keras
pip install --upgrade transformers
如果升级后还是有问题,不妨参照以下版本,至少在本案例中没有出现问题。
名称 | 版本 |
---|---|
tensorflow | 2.17.0 |
keras | 3.5.0 |
transformers | 4.45.1 |