Hugging Face的基础使用

AI界的GitHub

介绍

主流开源大模型平台对比

  • HuggingFace:类 GitHub,模型资源全面,但需要kexue上网。
  • ModelScope(阿里开源):模型资源较有限,访问速度快。

HuggingFace 优点

  1. 丰富的预训练模型资源
    • 适用性广:覆盖文本分类、情感分析、问答、机器翻译等多类 NLP 任务,满足学术、商业、个人项目等不同场景需求,节省从头训练成本。
    • 高质量且持续更新:模型经专业训练优化,性能精准;平台持续迭代模型以适配技术发展。
  2. 便捷的工具和库
    • Transformers 库:NLP 领域重要工具,支持 BERT、GPT、RoBERTa 等多模型的加载、使用与微调,接口易用,便于集成到项目中。
    • 数据集管理工具(如 Datasets 库):可轻松下载、处理和管理公开数据集,提升数据准备效率,减少繁琐操作。

注册

首先我们可以注册和登录。用国内的邮箱也是可以的。
image
然后我们经常用的就是上面导航栏中Models和Datasets两部分

页面介绍

Models

image
找到想要的直接点进去即可。
model card一般会显示基于hugging face平台的使用
image
另外有些模型是支持在线调用的。如下
image

image

Datasets

然后就是与Models页面类似的数据集页面
image
可以在card模块看到数据集的细节。我们可以直接去用。
image

环境准备

在下载模型数据集之前,要配置环境

  • anaconda集成环境安装
  • python 3.10
  • pytorch安装
  • pycharm安装
  • cuda安装(可选,需要有独立的N卡,显存16G及以上)
  • 安装Hugging Face库
    Hugging Face提供了transformers库,用于加载和使用模型,常用的还有datasets和tokenizers库,可以用一下命令安装
    pip install transformers datasets tokenizers
    
    如果太慢的话可以给个镜像源地址,如下
    #这个是清华园,用不了的话可以用阿里云:http://mirrors.aliyun.com/pypi/simple/
    pip install transformers datasets tokenizers -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

在线调用的API接口

首先调用的步骤如下:

  1. 注册账号
  2. 申请一个token
    image
  3. 点击创建token就可以创建了。【可以把所有授权都点上】
    image
  4. 保存好token,后面就再也看不到了
    image
  5. 找到心仪的模型就可以调用了
    import requests
    # router.huggingface.co/hf-inference/models + model name
    API_URL = "https://router.huggingface.co/hf-inference/models/uer/gpt2-chinese-cluecorpussmall"
    API_TOKEN = "your_api_token"
    headers = {"Authorization": f"Bearer {API_TOKEN}"}
    
    response = requests.post(API_URL, headers=headers, json={"inputs":"你好呀,小模型"})
    # print(response.json())
    print(response.text)
    

但是在线调用模型首先肯定是慢。然后不稳定,往往会调用失败。还是建议放在本地调用。

模型本地

下载

我们首先要满足环境要求。
以uer/gpt2-chinese-cluecorpussmall模型为例【下面的代码,huggingface中模型介绍中一般也会给的】

#模型本地下载,#导入模型和分词器。分词器就是把输入的自然语言转换成对应的词向量,让模型看懂。每个模型都有配套的分词器
from transformers import AutoModelForCausalLM, AutoTokenizer

#将模型和分词器工具下载到本地,并指定保存路径
model_name = "uer/gpt2-chinese-cluecorpussmall"
cache_dir = "D:/code/python/learnHuggingFace/models"

# 下载模型
AutoModelForCausalLM.from_pretrained(model_name, cache_dir=cache_dir)
# 下载分词工具
AutoTokenizer.from_pretrained(model_name, cache_dir=cache_dir)

print("下载完毕")

文件分析

运行程序之后,本地对应路径就有模型了
image
在snapshots文件夹中的

  • 最大的.bin文件就是模型
  • config.json文件有模型的一下配置信息
    • tokenizer_class指定分词器模型
    • vocab_size是当前模型能够识别的字符数量。
  • 在vocab.txt中可以看到模型认识哪些字。能够编码的字符都在vocab中,文字转成数字索引【对应中的行号+1,因为索引是从零开始的】,然后再把数字转换成向量。可以发现,有的是带#的,相比不带讲好的,会多包涵一些上下文信息。
  • 特殊token映射。包括不认识的字,分隔符等。

运行模型

from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers import pipeline #hugging face提供调用模型的管道工具,创建任务

# 使用绝对路径,否则会去先去huggingface下载。连不上的话,还是会报错
# 目录是包含config.json的目录,就是模型的父目录。这里加"r"是防止转义
cache_dir = r"D:\code\python\learnHuggingFace\models\models--uer--gpt2-chinese-cluecorpussmall\snapshots\c2c0249d8a2731f269414cc3b22dff021f8e07a3"

# 加载模型和分词器。都在一个地方
model = AutoModelForCausalLM.from_pretrained(cache_dir)
tokenizer = AutoTokenizer.from_pretrained(cache_dir)

# 使用本地模型和分词器创建文本,这里的参数是:指定任务名称、模型、分词器……
generator = pipeline('text-generation', model=model, tokenizer=tokenizer,device="cpu") #用cuda的话就写cuda
output = generator("今天天气真好啊", max_length=50, num_return_sequences=1) #max_length文本最大生成长度。num_return_sequences指定用几段话模型
print(output)

输出:

[{'generated_text': '今天天气真好啊 就 在 昨 天 早 上 我 下 了 一 小 时 雨 我 要 穿 过 了 天 桥 还 要 把 家 里 锁 成 一 个 锁 我 没 穿 衣 服 而
 是 一 个 人 坐 在 车'}]

可以发现,输出的没啥逻辑,我们可以在不动模型的基础上调一下参数,来实现想要的结果

output = generator(
 "今天天气真好啊",#生成文本的输入种子文本(prompt)。模型会根据这个初始文本,生成后续的文本
 max_length=50,#指定生成文本的最大长度。这里的 50 表示生成的文本最多包含 50 个标记
(tokens)
 num_return_sequences=1,#参数指定返回多少个独立生成的文本序列。值为 1 表示只生成并返回一段文本。
 truncation=True,#该参数决定是否截断输入文本以适应模型的最大输入长度。如果 True,超出模型最大输入长度的部分将被截断;如果 False,模型可能无法处理过长的输入,可能会报错。
 temperature=0.7,#该参数控制生成文本的随机性。值越低,生成的文本越保守(倾向于选择概率较高的词);值越高,生成的文本越多样(倾向于选择更多不同的词)。0.7 是一个较为常见的设置,既保留了部分随机性,又不至于太混乱。
 top_k=50,#该参数限制模型在每一步生成时仅从概率最高的 k 个词中选择下一个词。这里top_k=50 表示模型在生成每个词时只考虑概率最高的前 50 个候选词,从而减少生成不太可能的词的概率。
 top_p=0.9,#该参数(又称为核采样)进一步限制模型生成时的词汇选择范围。它会选择一组累积概率达到 p 的词汇,模型只会从这个概率集合中采样。top_p=0.9 意味着模型会在可能性最强的90% 的词中选择下一个词,进一步增加生成的质量。
 clean_up_tokenization_spaces=True#该参数控制生成的文本中是否清理分词时引入的空格。如果设置为 True,生成的文本会清除多余的空格;如果为 False,则保留原样。默认值即将改变为False,因为它能更好地保留原始文本的格式。
)

优化后的会好一点

[{'generated_text': '今天天气真好啊 ! 小 朋 友 们 说 , 这 是 他 们 最 喜 欢 的 一 段 时 光 。 小 朋 友 们 说 , 这 是 他 们 的 童 年 最 美 好
 的 记 忆 。 小'}]

生成模型和分类模型

上面下载的模型的类型就是生成模型。对应的是解码器,如gpt
此外还有分类模型,对应的是编码器,如bert。
最典型的分类任务就是二分类。如给一段话,可以知道是积极的还是消极的。可以应用到电商评论中。舆情监控
具体如何下载和运行分类模型,形式上和生成模型是一样的。只不过输出的是分数,一些数字。

数据集下载和本地加载

以lansinuote/ChnSentiCorp数据集为例。【下面的代码,huggingface中数据集介绍中一般也会给的】

from datasets import load_dataset, load_from_disk
#在线加载,不推荐一直用这个方式,后面尽量本地保存,因为不管本地有没有数据集,都要先联网去访问huggingface在对应谷歌云盘的资源,连到之后才判断本地目录中有没有数据集,如果有了就不会下载了。不能离线使用,没网就会报错。
data_dir = "D:\data\datasets"
dataset = load_dataset("lansinuote/ChnSentiCorp", cache_dir=data_dir)
#打印加载的数据信息。如果不提供路径,默认在`C:\Users\name\.cache\huggingface\datasets`。
#数据集默认是arrow的加密格式
print(dataset)
# 必须要执行本地保存, 直接缓存的数据集无法满足本地磁盘加载的格式
dataset.save_to_disk(r"D:\data\datasets\ChnSentiCorp")
print("save completion")
# 本地加载目录是包含dataset_dict.json的目录
dataset = load_from_disk(r"D:\data\datasets\ChnSentiCorp")
#取出训练集
train = dataset["train"]
for data in train:
 print(data)

数据集是人工指定的,是要人来制作的。
另外,如果要把数据集用到其他地方需要转变格式的。也是有一定办法的。如下
image

不同模型类型搭配不同预处理工具

不同模型类型需要搭配不同的预处理工具。

模型类型与预处理工具的关系

  1. 文本模型(如BERT)

    from transformers import AutoTokenizer, AutoModel
    
    # 只需要分词器
    tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
    model = AutoModel.from_pretrained("bert-base-uncased")
    
    # 使用方式
    text = "Hello world"
    inputs = tokenizer(text, return_tensors="pt")
    outputs = model(**inputs)
    
  2. 语音识别模型(如Wav2Vec2)

    from transformers import AutoProcessor, AutoModelForCTC
    
    # 需要处理器(包含特征提取器和分词器)
    processor = AutoProcessor.from_pretrained("facebook/wav2vec2-base-960h")
    model = AutoModelForCTC.from_pretrained("facebook/wav2vec2-base-960h")
    
    # 使用方式
    import soundfile as sf
    audio, sr = sf.read("audio.wav")
    inputs = processor(audio, sampling_rate=sr, return_tensors="pt")
    outputs = model(**inputs)
    
  3. 多模态模型(如CLIP)

    from transformers import CLIPProcessor, CLIPModel
    
    # 需要专门的处理器处理图像和文本
    processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
    model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32")
    
    # 使用方式(同时处理图像和文本)
    from PIL import Image
    image = Image.open("image.jpg")
    inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True)
    outputs = model(**inputs)
    

为什么不同模型需要不同工具?

文本模型

  • 输入:文本字符串
  • 预处理:分词、添加特殊标记、转换为ID
  • 工具:Tokenizer

语音模型

  • 输入:原始音频波形
  • 预处理
    • 特征提取:音频→频谱图/特征向量
    • 文本处理:标签→token IDs
  • 工具:Processor(包含FeatureExtractor + Tokenizer)

视觉模型

  • 输入:图像像素
  • 预处理:调整大小、归一化、转换为张量
  • 工具:FeatureExtractor 或 ImageProcessor

常见模型类型与工具搭配

模型类型 主要工具 辅助工具 示例模型
纯文本 Tokenizer - BERT, GPT, T5
语音识别 Processor - Wav2Vec2, Whisper
语音分类 FeatureExtractor Tokenizer* Wav2Vec2 for Classification
图像分类 ImageProcessor - ViT, ResNet
目标检测 ImageProcessor - DETR, YOLO
多模态 Processor - CLIP, LayoutLM
文本生成 Tokenizer - GPT, T5, BART

*注:语音分类通常只需要特征提取,但如果标签是文本可能需要分词器

这种设计让Hugging Face Transformers库能够统一处理各种模态的输入,同时保持API的一致性。

posted @ 2025-11-04 18:32  韩熙隐ario  阅读(40)  评论(0)    收藏  举报