Hugging Face 教程¶
概述¶
Hugging Face是AI社区的GitHub,提供海量预训练模型、数据集和机器学习工具,是深度学习开发者必备平台。
注册与配置¶
创建账号¶
安装配置¶
# 安装transformers库
pip install transformers
# 安装datasets库
pip install datasets
# 安装tokenizers
pip install tokenizers
# 登录(用于下载私有模型)
pip install huggingface_hub
huggingface-cli login
核心功能¶
1. 使用预训练模型¶
from transformers import pipeline
# 文本分类
classifier = pipeline("sentiment-analysis")
result = classifier("I love this product!")
print(result) # [{'label': 'POSITIVE', 'score': 0.9998}]
# 文本生成
generator = pipeline("text-generation", model="gpt2")
result = generator("The future of AI is", max_length=50)
print(result[0]['generated_text'])
# 问答
qa = pipeline("question-answering")
result = qa(question="What is the capital of France?",
context="France is a country in Europe. Its capital is Paris.")
print(result['answer']) # Paris
# 翻译
translator = pipeline("translation_en_to_fr", model="t5-base")
result = translator("Hello, how are you?")
print(result[0]['translation_text'])
# 图像分类
image_classifier = pipeline("image-classification")
result = image_classifier("cat.jpg")
print(result)
2. 文本处理¶
from transformers import AutoTokenizer
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
# 分词
text = "我喜欢人工智能"
tokens = tokenizer(text)
print(tokens)
# 编码
encoded = tokenizer(text, padding=True, truncation=True, return_tensors="pt")
print(encoded)
# 解码
decoded = tokenizer.decode(encoded['input_ids'][0])
print(decoded)
3. 模型加载与推理¶
from transformers import AutoModelForSequenceClassification
import torch
# 加载模型
model = AutoModelForSequenceClassification.from_pretrained(
"bert-base-chinese",
num_labels=2
)
# 推理
inputs = tokenizer("测试文本", return_tensors="pt")
outputs = model(**inputs)
predictions = torch.nn.functional.softmax(outputs.logits, dim=-1)
print(predictions)
模型中心(Model Hub)¶
搜索模型¶
from huggingface_hub import list_models
# 搜索模型
models = list_models(search="sentiment-analysis", limit=5)
for model in models:
print(f"{model.id} - {model.tags}")
下载模型¶
from transformers import AutoModel
# 下载模型
model = AutoModel.from_pretrained("bert-base-chinese")
# 下载到指定目录
model = AutoModel.from_pretrained(
"bert-base-chinese",
cache_dir="./my_models"
)
上传模型¶
from huggingface_hub import HfApi
api = HfApi()
# 上传模型
api.upload_folder(
folder_path="./my_model",
repo_id="username/my-model",
repo_type="model"
)
数据集(Datasets)¶
加载数据集¶
from datasets import load_dataset
# 加载内置数据集
dataset = load_dataset("imdb")
print(dataset)
# 加载自定义数据集
dataset = load_dataset("csv", data_files="my_data.csv")
# 加载json数据
dataset = load_dataset("json", data_files="my_data.json")
数据集操作¶
# 查看数据
print(dataset['train'][0])
# 数据集分割
train_dataset = dataset['train']
test_dataset = dataset['test']
# 数据处理
def preprocess(examples):
return tokenizer(examples['text'], padding=True, truncation=True)
tokenized_dataset = train_dataset.map(preprocess, batched=True)
# 保存数据集
dataset.save_to_disk("./my_dataset")
模型训练¶
Trainer API¶
from transformers import (
AutoModelForSequenceClassification,
AutoTokenizer,
TrainingArguments,
Trainer
)
from datasets import load_dataset
# 加载数据和模型
dataset = load_dataset("imdb")
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")
# 数据预处理
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# 训练参数
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=10,
evaluation_strategy="epoch"
)
# 创建Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"]
)
# 训练
trainer.train()
# 保存模型
trainer.save_model("./my_model")
推理服务¶
Inference API¶
import requests
API_URL = "https://api-inference.huggingface.co/models/bert-base-chinese"
headers = {"Authorization": "Bearer YOUR_TOKEN"}
def query(payload):
response = requests.post(API_URL, headers=headers, json=payload)
return response.json()
output = query({
"inputs": "这是一个测试句子"
})
print(output)
本地部署¶
from transformers import pipeline
# 本地推理
classifier = pipeline("sentiment-analysis", model="./my_model")
result = classifier("测试文本")
print(result)
实用示例¶
情感分析系统¶
from transformers import pipeline
import pandas as pd
# 创建情感分析器
analyzer = pipeline("sentiment-analysis",
model="nlptown/bert-base-multilingual-uncased-sentiment")
# 分析多条评论
reviews = [
"这个产品非常好用,推荐购买!",
"质量太差了,不值这个价格",
"一般般,没什么特别的"
]
results = []
for review in reviews:
result = analyzer(review)[0]
results.append({
"review": review,
"sentiment": result['label'],
"score": result['score']
})
df = pd.DataFrame(results)
print(df)
文本摘要¶
from transformers import pipeline
summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
text = """
Natural language processing (NLP) is a subfield of linguistics, computer
science, and artificial intelligence concerned with the interactions between
computers and human language. The goal is to enable computers to understand,
interpret, and generate human language in a valuable way.
"""
summary = summarizer(text, max_length=50, min_length=10)
print(summary[0]['summary_text'])
学习资源¶
# 官方资源
- Hugging Face文档:https://huggingface.co/docs
- Transformers教程:https://huggingface.co/docs/transformers
- 数据集文档:https://huggingface.co/docs/datasets
# 社区
- Hugging Face论坛:https://discuss.huggingface.co
- GitHub:https://github.com/huggingface/transformers
下一步学习¶
- RAG检索增强生成教程 - 使用HF构建RAG系统
- LangChain框架教程 - 集成HF模型
- 模型微调教程 - 微调HF模型