一、快速入门
1.1 环境搭建
# 安装依赖
pip install transformers torch sentencepiece datasets accelerate
1.2 核心组件
- transformers:提供预训练模型和工具
- pipeline:简化模型调用流程
- datasets:处理数据集
- accelerate:加速训练
二、Pipeline使用
2.1 文本分类
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
result = classifier("Hugging Face是NLP领域的神器!")
print(result)
# 输出:[{'label': 'POSITIVE', 'score': 0.9998723268508911}]
2.2 命名实体识别
ner = pipeline("ner")
result = ner("我叫张三,来自北京,在清华大学读书。")
print(result)
# 输出:姓名、地点等实体识别结果
2.3 问答系统
qa = pipeline("question-answering")
context = "Hugging Face成立于2016年,总部位于巴黎。"
result = qa(question="Hugging Face成立于哪一年?", context=context)
print(result)
# 输出:{'answer': '2016年', ...}
三、自定义模型加载
3.1 加载预训练模型
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_name = "bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
3.2 模型推理
text = "这是一个测试文本"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
四、实践Demo规划
📋 Demo实战项目
- 文本生成Demo:基于GPT-2模型实现中文文本生成
- 情感分析API:创建一个简单的情感分析接口
- 模型微调:使用自定义数据集微调BERT模型
五、文本生成Demo实现
5.1 模型选择
使用中文GPT-2模型 gpt2-chinese-cluecorpussmall 实现文本生成
5.2 代码实现
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 加载模型和Tokenizer
model_name = "uer/gpt2-chinese-cluecorpussmall"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)
# 设置生成参数
prompt = "人工智能在未来会改变"
inputs = tokenizer(prompt, return_tensors="pt")
# 生成文本
with torch.no_grad():
outputs = model.generate(
**inputs,
max_length=50,
num_return_sequences=1,
do_sample=True,
temperature=0.7,
top_p=0.9,
repetition_penalty=1.2
)
# 解码并输出结果
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print("生成文本:", generated_text)
5.3 运行说明
temperature:控制生成文本的随机性,值越高越随机top_p:核采样,控制生成词汇的多样性repetition_penalty:避免重复生成相同内容
5.4 示例输出
生成文本:人工智能在未来会改变我们的生活方式,从医疗健康到交通出行,从教育学习到娱乐休闲,AI技术将渗透到每个领域,带来前所未有的便利与创新。
六、情感分析API实现
6.1 技术栈
- FastAPI:构建API服务
- Uvicorn:运行ASGI服务器
- Hugging Face Transformers:情感分析模型
6.2 代码实现
from fastapi import FastAPI
from transformers import pipeline
from pydantic import BaseModel
# 初始化FastAPI应用
app = FastAPI(title="Sentiment Analysis API", version="1.0")
# 加载情感分析模型
sentiment_analyzer = pipeline("sentiment-analysis", model="uer/roberta-base-chinese-finetuned-dianping-chinese")
# 定义请求体模型
class TextRequest(BaseModel):
text: str
# 定义情感分析端点
@app.post("/analyze-sentiment")
def analyze_sentiment(request: TextRequest):
result = sentiment_analyzer(request.text)[0]
return {
"text": request.text,
"sentiment": result["label"],
"confidence": round(result["score"], 4)
}
# 运行服务器
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
6.3 运行说明
- 安装依赖:
pip install fastapi uvicorn - 运行脚本:
python sentiment_analysis_api.py - 访问API:
- POST请求:http://localhost:8000/analyze-sentiment
- 请求体:
{"text": "这个产品真的很好用!"} - 响应示例:
{"text": "这个产品真的很好用!", "sentiment": "positive", "confidence": 0.9987}
6.4 部署建议
- 使用Docker容器化部署
- 配合Nginx做反向代理和负载均衡
- 可使用Hugging Face Inference Endpoints托管模型
七、模型微调Demo实现
7.1 任务说明
使用中文情感分析数据集微调BERT-base-chinese模型,完成二分类任务(正面/负面情感)
7.2 技术栈
- Hugging Face Transformers:预训练模型与微调工具
- Hugging Face Datasets:数据加载与处理
- Hugging Face Evaluate:评估指标计算
- PyTorch:模型训练框架
7.3 代码实现
from transformers import (
AutoTokenizer,
AutoModelForSequenceClassification,
TrainingArguments,
Trainer
)
from datasets import load_dataset, DatasetDict
import evaluate
import numpy as np
# 1. 加载数据集(使用中文情感分析数据集)
dataset = load_dataset("lansinuote/ChnSentiCorp")
# 2. 加载预训练模型和Tokenizer
model_name = "bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 3. 数据预处理函数
def preprocess_function(examples):
return tokenizer(
examples["text"],
truncation=True,
padding="max_length",
max_length=128
)
# 应用预处理
tokenized_datasets = dataset.map(preprocess_function, batched=True)
# 4. 定义评估指标
metric = evaluate.load("accuracy")
def compute_metrics(eval_pred):
logits, labels = eval_pred
predictions = np.argmax(logits, axis=-1)
return metric.compute(predictions=predictions, references=labels)
# 5. 设置训练参数
training_args = TrainingArguments(
output_dir="./bert-chinese-sentiment-finetuned",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
logging_dir="./logs",
)
# 6. 初始化Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"].select(range(1000)), # 取1000条数据快速演示
eval_dataset=tokenized_datasets["validation"].select(range(200)),
compute_metrics=compute_metrics,
)
# 7. 开始训练
trainer.train()
# 8. 保存模型和Tokenizer
trainer.save_model("./bert-chinese-sentiment-finetuned")
tokenizer.save_pretrained("./bert-chinese-sentiment-finetuned")
print("模型微调完成,已保存至 ./bert-chinese-sentiment-finetuned")
7.4 关键参数说明
| 参数 | 说明 |
|---|---|
learning_rate |
学习率,通常设置为2e-5到5e-5之间 |
per_device_train_batch_size |
每个GPU/CPU的训练批次大小 |
num_train_epochs |
训练轮数,一般2-3轮即可避免过拟合 |
evaluation_strategy |
评估策略,"epoch"表示每轮训练后进行评估 |
load_best_model_at_end |
训练结束后加载效果最好的模型 |
7.5 预期结果
训练完成后,模型在验证集上的准确率应达到90%以上,可用于实际中文情感分析任务
八、下一步计划
- 整理所有Demo代码,制作统一的实战文档
- 将Demo代码和文档更新到知识库网站
- 验证所有Demo功能正常运行,确保代码可直接执行
📚 学习来源:Hugging Face 官方文档、GitHub开源项目
💡 核心收获:掌握Hugging Face核心API,理解预训练模型使用流程,完成3个实战Demo