python搭建NPL模型的詳細步驟和代碼
“NPL模型”我理解為 NLP(Natural Language Processing,自然語言處理)模型 的筆誤(非常常見),如果不是請立刻告訴我。
下面給你一套從 0 到 1 可直接運行的完整教程,2026 年最推薦的方案是 Hugging Face Transformers,因為:
- 代碼最簡潔(幾行就能跑通)
- 支持中文極好
- 自動處理分詞、訓(xùn)練、評估、部署
- 社區(qū)模型最豐富
一、推薦學(xué)習(xí)路徑(建議順序)
- 先用 pipeline 零代碼跑通(5 分鐘見效果)
- 再完整微調(diào)一個模型(掌握全流程)
- 最后部署成 API(可選)
我們今天直接走 第 2 步:完整微調(diào)中文情感分析模型(基于 bert-base-chinese)
二、完整步驟 + 可復(fù)制代碼
步驟 1:環(huán)境準備(推薦新建虛擬環(huán)境)
# 1. 創(chuàng)建虛擬環(huán)境 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:準備數(shù)據(jù)(使用公開中文數(shù)據(jù)集)
from datasets import load_dataset
# 加載中文情感分析數(shù)據(jù)集(Seamew/ChnSentiCorp)
dataset = load_dataset("seamew/ChnSentiCorp")
print(dataset)
# 輸出:DatasetDict({
# train: Dataset({...}),
# validation: Dataset({...}),
# test: Dataset({...})
# })
# 查看前3條數(shù)據(jù)
print(dataset["train"][0:3])步驟 3:數(shù)據(jù)預(yù)處理(Tokenizer)
from transformers import AutoTokenizer
model_name = "bert-base-chinese" # 中文預(yù)訓(xùn)練模型
tokenizer = AutoTokenizer.from_pretrained(model_name)
def preprocess_function(examples):
return tokenizer(examples["text"],
truncation=True, # 超長自動截斷
padding="max_length", # 統(tǒng)一長度
max_length=128)
# 應(yīng)用到整個數(shù)據(jù)集
tokenized_datasets = dataset.map(preprocess_function, batched=True)步驟 4:加載模型 + 設(shè)置訓(xùn)練參數(shù)
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"]}
# 訓(xùn)練參數(shù)(可根據(jù)顯存調(diào)整)
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:開始訓(xùn)練(核心代碼)
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("開始訓(xùn)練...")
trainer.train()
# 訓(xùn)練結(jié)束后在測試集上評估
test_results = trainer.evaluate(tokenized_datasets["test"])
print("測試集結(jié)果:", 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 = [
"這家餐廳的服務(wù)態(tài)度非常好,菜也超級美味!",
"完全是浪費錢,東西難吃還貴,差評!",
"一般般吧,沒什么特別的。"
]
results = sentiment_pipeline(texts)
for text, res in zip(texts, results):
label = "正面" if res["label"] == "LABEL_1" else "負面"
print(f"文本: {text}\n預(yù)測: {label} (置信度: {res['score']:.4f})\n")
三、完整項目結(jié)構(gòu)推薦(中型項目)
nlp_sentiment_project/ ├── data/ # 原始數(shù)據(jù) ├── models/ # 保存的模型 ├── results/ # 訓(xùn)練輸出 ├── logs/ ├── main.py # 訓(xùn)練主文件 ├── inference.py # 推理腳本 ├── requirements.txt └── README.md
四、常見問題 & 優(yōu)化建議(2026 經(jīng)驗)
| 問題 | 解決方案 |
|---|---|
| 顯存不夠 | 改小 batch_size=8 或用 torch.cuda.empty_cache() |
| 中文效果差 | 換用 hfl/chinese-bert-wwm-ext 或 chinese-roberta-wwm-ext |
| 想更快訓(xùn)練 | 加 --fp16(混合精度)或用 unsloth 加速微調(diào) |
| 部署成 API | 用 FastAPI + pipeline(下節(jié)課可講) |
| 多分類/多標簽 | 把 num_labels 改成對應(yīng)類別數(shù)即可 |
五、下一步建議
- 今天就把上面代碼跑通(CPU 也只需要 10–30 分鐘)
- 換成你自己的數(shù)據(jù)集(電商評論、電影短評等)
- 嘗試其他任務(wù):文本分類、命名實體識別、機器翻譯
到此這篇關(guān)于python搭建NPL模型的詳細步驟和代碼的文章就介紹到這了,更多相關(guān)python搭建NPL模型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3 selenium 切換窗口的幾種方法小結(jié)
今天小編就為大家分享一篇python3 selenium 切換窗口的幾種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
詳解Django-channels 實現(xiàn)WebSocket實例
這篇文章主要介紹了詳解Django-channels實現(xiàn)WebSocket實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Python matplotlib實現(xiàn)條形統(tǒng)計圖
這篇文章主要為大家詳細介紹了Python matplotlib實現(xiàn)條形統(tǒng)計圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
Python計算圖片數(shù)據(jù)集的均值方差示例詳解
這篇文章主要為大家介紹了Python計算圖片數(shù)據(jù)集的均值方差,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05
利用Python實現(xiàn)一個帶進度條的URL批量下載工具(含GUI界面)
本文將帶你一步一步實現(xiàn)一個支持 GUI 操作的批量 URL 下載工具,支持從 Excel 文件中讀取鏈接,自動保存、記錄失敗鏈接,并帶有下載進度條,非常適合運營、測試、爬蟲等批量下載需求,需要的朋友可以參考下2025-07-07

