Python搭建NLP模型的详细步骤

 更新时间:2026年02月28日 09:49:38   作者:yingjuxia.com  
文章提供了一套从零到一实现中文情感分析模型微调的完整教程,使用HuggingFaceTransformers库,推荐pipeline零代码快速上手,然后进行模型的完整微调和部署,需要的朋友可以参考下

你好!“NPL模型”我理解为 NLP(Natural Language Processing,自然语言处理)模型 的笔误(非常常见),如果不是请立刻告诉我。

下面给你一套从 0 到 1 可直接运行的完整教程,2026 年最推荐的方案是 Hugging Face Transformers,因为:

  • 代码最简洁(几行就能跑通)
  • 支持中文极好
  • 自动处理分词、训练、评估、部署
  • 社区模型最丰富

一、推荐学习路径(建议顺序)

  1. 先用 pipeline 零代码跑通(5 分钟见效果)
  2. 再完整微调一个模型(掌握全流程)
  3. 最后部署成 API(可选)

我们今天直接走 第 2 步:完整微调中文情感分析模型(基于 bert-base-chinese)

二、完整步骤 + 可复制代码

步骤 1:环境准备(推荐新建虚拟环境)

# 1. 创建虚拟环境
conda create -n nlp python=3.11 -y
conda activate nlp

# 2. 安装核心库(2026 年推荐组合)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu   # CPU版(有GPU换cuda版本)
pip install transformers datasets accelerate evaluate pandas scikit-learn

步骤 2:准备数据(使用公开中文数据集)

from datasets import load_dataset

# 加载中文情感分析数据集(Seamew/ChnSentiCorp)
dataset = load_dataset("seamew/ChnSentiCorp")

print(dataset)
# 输出:DatasetDict({
#     train: Dataset({...}),
#     validation: Dataset({...}),
#     test: Dataset({...})
# })

# 查看前3条数据
print(dataset["train"][0:3])

步骤 3:数据预处理(Tokenizer)

from transformers import AutoTokenizer

model_name = "bert-base-chinese"   # 中文预训练模型

tokenizer = AutoTokenizer.from_pretrained(model_name)

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:加载模型 + 设置训练参数

from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer
import evaluate
import numpy as np

# 加载模型(2分类:正面/负面)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# 评估指标(准确率 + F1)
accuracy = evaluate.load("accuracy")
f1 = evaluate.load("f1")

def compute_metrics(eval_pred):
    logits, labels = eval_pred
    predictions = np.argmax(logits, axis=-1)
    acc = accuracy.compute(predictions=predictions, references=labels)
    f1_score = f1.compute(predictions=predictions, references=labels, average="macro")
    return {"accuracy": acc["accuracy"], "f1": f1_score["f1"]}

# 训练参数(可根据显存调整)
training_args = TrainingArguments(
    output_dir="./results",          # 输出目录
    eval_strategy="epoch",           # 每轮评估
    save_strategy="epoch",
    learning_rate=2e-5,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    num_train_epochs=3,              # 建议 3-5 轮
    weight_decay=0.01,
    logging_dir="./logs",
    report_to="none",                # 不上传 wandb
    load_best_model_at_end=True,
    metric_for_best_model="f1"
)

步骤 5:开始训练(核心代码)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["validation"],
    compute_metrics=compute_metrics,
    tokenizer=tokenizer,   # 自动保存 tokenizer
)

print("开始训练...")
trainer.train()

# 训练结束后在测试集上评估
test_results = trainer.evaluate(tokenized_datasets["test"])
print("测试集结果:", test_results)

步骤 6:保存模型 & 推理测试

# 保存模型
trainer.save_model("./my_chinese_sentiment_model")
tokenizer.save_pretrained("./my_chinese_sentiment_model")

# 加载推理(最常用方式)
from transformers import pipeline

sentiment_pipeline = pipeline(
    "sentiment-analysis",
    model="./my_chinese_sentiment_model",
    tokenizer="./my_chinese_sentiment_model"
)

# 测试
texts = [
    "这家餐厅的服务态度非常好,菜也超级美味!",
    "完全是浪费钱,东西难吃还贵,差评!",
    "一般般吧,没什么特别的。"
]

results = sentiment_pipeline(texts)
for text, res in zip(texts, results):
    label = "正面" if res["label"] == "LABEL_1" else "负面"
    print(f"文本: {text}\n预测: {label} (置信度: {res['score']:.4f})\n")

三、完整项目结构推荐(中型项目)

nlp_sentiment_project/
├── data/                  # 原始数据
├── models/                # 保存的模型
├── results/               # 训练输出
├── logs/
├── main.py                # 训练主文件
├── inference.py           # 推理脚本
├── requirements.txt
└── README.md

四、常见问题 & 优化建议(2026 经验)

问题解决方案
显存不够改小 batch_size=8 或用 torch.cuda.empty_cache()
中文效果差换用 hfl/chinese-bert-wwm-extchinese-roberta-wwm-ext
想更快训练--fp16(混合精度)或用 unsloth 加速微调
部署成 API用 FastAPI + pipeline(下节课可讲)
多分类/多标签num_labels 改成对应类别数即可

五、下一步建议

  1. 今天就把上面代码跑通(CPU 也只需要 10–30 分钟)
  2. 换成你自己的数据集(电商评论、电影短评等)
  3. 尝试其他任务:文本分类、命名实体识别、机器翻译

到此这篇关于Python搭建 NLP模型的详细步骤的文章就介绍到这了,更多相关Python搭建NLP模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python中使用ctypes调用so传参设置遇到的问题及解决方法

    python中使用ctypes调用so传参设置遇到的问题及解决方法

    这篇文章主要介绍了python中使用ctypes调用so传参设置,本文较详细的给大家介绍了遇到问题及解决方案,需要的朋友可以参考下
    2019-06-06
  • Numpy中对向量、矩阵的使用详解

    Numpy中对向量、矩阵的使用详解

    这篇文章主要介绍了Numpy中对向量、矩阵的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Python+PyQt5实现网口功能测试详解

    Python+PyQt5实现网口功能测试详解

    这篇文章主要为大家详细介绍了Python+PyQt5实现网口功能测试的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • Python数学建模StatsModels统计回归之线性回归示例详解

    Python数学建模StatsModels统计回归之线性回归示例详解

    这篇文章主要为大家介绍了Python数学建模中StatsModels统计回归之线性回归的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • python解析html开发库pyquery使用方法

    python解析html开发库pyquery使用方法

    PyQuery是一个类似于jQuery的Python库,也可以说是jQuery在Python上的实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好
    2014-02-02
  • python二叉树类以及其4种遍历方法实例

    python二叉树类以及其4种遍历方法实例

    二叉树是一种特殊的树,最直观地体现于它的每个节点至多有两个子节点,二叉树是非常实用的一种数据结构,常常用于实现二叉查找树及二叉堆等,下面这篇文章主要给大家介绍了关于python二叉树类以及其4种遍历方法的相关资料,需要的朋友可以参考下
    2022-05-05
  • python解析模块(ConfigParser)使用方法

    python解析模块(ConfigParser)使用方法

    很多软件都有配置文件,今天介绍一下python ConfigParser模块解析配置文件的使用方法
    2013-12-12
  • python脚本作为Windows服务启动代码详解

    python脚本作为Windows服务启动代码详解

    本篇文章给大家分享了用python脚本写出作为Windows服务启动功能,对此有需求的朋友跟着小编一起学习下。
    2018-02-02
  • Python实现格式化输出的实例详解

    Python实现格式化输出的实例详解

    这篇文章主要为大家介绍了Python语法中实现格式化输出的方法,本文通过几个实例为大家进行了详细的讲解,感兴趣的小伙伴可以了解一下
    2022-08-08
  • Python PySpider爬虫框架安装使用教程

    Python PySpider爬虫框架安装使用教程

    PySpider是一个Python编写的分布式网络爬虫框架,它可以帮助开发者快速构建和部署爬虫,并支持爬虫任务的分布式运行,PySpider基于Twisted网络框架和MongoDB数据库,具有高效、稳定、易用等特点,同时还提供了一套Web界面,可以方便地查看爬虫任务的运行状态和结果
    2023-11-11

最新评论