《自然语言处理入门:让机器理解人类语言》
1. 什么是 NLP?一句话就能说明白
让“机器”完成人类语言的理解、生成、交互三大任务。
举个🌰:
输入“我今天不开心” → 机器输出“要不要听个笑话?”

2. NLP 常见任务地图(2025 版)
| 层级 | 任务 | 生活例子 | 主流模型 |
|---|---|---|---|
| 词法 | 分词、词性标注 | “南京市长江大桥” 怎么切? | jieba、HanLP、BERT-char |
| 句法 | 依存句法分析 | 谁修饰谁,主谓宾在哪? | DDParser、Stanza |
| 语义 | 文本分类、NER | 快递单里抽“地址+电话” | BERT、RoBERTa、GPT |
| 生成 | 摘要、翻译、对话 | 把 2000 字报告压成 200 字 | BART、T5、GLM、ChatGLM3 |
| 多模态 | 看图说话、语音转文字 | 上传一张菜单→返回英文翻译 | BLIP-2、Whisper |
3. 中文 NLP 第一大坑:分词
3.1 为什么英文不需要分词?
空格天然切好;中文没有空格,“结婚的和尚未结婚的” 到底怎么切?
3.2 三大分词工具 1 行代码对比
import jieba, pkuseg, hanlp
txt = "南京市长江大桥"
print("jieba:", "/".join(jieba.lcut(txt)))
print("pkuseg:", "/".join(pkuseg.pkuseg().cut(txt)))
print("hanlp:", "/".join(hanlp.load('PKU_NAME_MERGED_SIX_MONTHS_CONVSEG')(txt)))
输出差异:
jieba: 南京市/长江大桥
pkuseg: 南京/市/长江/大桥
hanlp: 南京市/长江大桥
结论:领域语料决定一切,没有“最准”,只有“最适合”。
3.3 子词时代还要分词吗?
BERT 中文用 字符级 + Whole Word Masking,WCBPE(Word-Chinese BPE)同时兼顾词与字。
→ 2025 年主流:直接上预训练模型,分词退居二线。
4. 文本预处理 Pipeline(一张图记住)

5. 从 Bag-of-Words 到 Transformer:5 分钟速通
| 时代 | 代表 | 核心思想 | 优缺点 |
|---|---|---|---|
| 2000s | TF-IDF + SVM | 词袋+权重 | 快,但无语序 |
| 2013 | Word2Vec | 稠密向量 | 有语义,但一词多义不行 |
| 2018 ELMo | 双向 LSTM | 上下文相关 | 训练慢,推理慢 |
| 2018 BERT | Transformer Encoder | 双向+Self-Attention | 里程碑,下游任务屠榜 |
| 2020 GPT-3 | Decoder Only | 大模型+Prompt | 生成能力爆炸 |
| 2023+ GPT-4/GLM-4 | 多模态+工具调用 | 懂文本+看图+调用 API | 新范式:LLM as OS |
6. 预训练模型怎么用?3 行代码跑中文分类
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")
model = BertForSequenceClassification.from_pretrained("bert-base-chinese", num_labels=2)
def encode(examples):
return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=128)
train_ds = load_dataset("waimai", split="train").map(encode, batched=True)
trainer = Trainer(model=model, args=TrainingArguments("ckpt"), train_dataset=train_ds)
trainer.train()
数据集:外卖评价二分类(好评/差评)
1 个 T4 GPU,3 分钟,Accuracy 96.1%。
7. 没有 GPU?3 种“白嫖”算力通道
-
Google Colab:每周 30h T4,改下
runtime→GPU即可; -
阿里云 PAI-DSW:新用户 3 个月 8h P100;
-
百度 AI Studio:每日 16GB V100 单卡。
8. 评估指标百科全书(附代码)
| 任务 | 指标 | 公式/口诀 | 一行代码 |
|---|---|---|---|
| 分类 | Accuracy | 对/总 | accuracy_score(y_true, y_pred) |
| 不平衡 | F1 | 调和平均 | f1_score(y_true, y_pred, average='macro') |
| 多标签 | Hamming Loss | 错签比例 | hamming_loss(y_true, y_pred) |
| NER | Entity F1 | 实体级对齐 | seqeval.metrics.f1_score([true], [pred]) |
| 生成 | BLEU | n-gram 重合 | sacrebleu.corpus_bleu(hyp, [ref]) |
| 摘要 | ROUGE-L | 最长公共子序列 | rouge_scorer.RougeScorer(['rougeL']) |
9. 部署:把模型做成 REST API,5 步搞定
-
保存模型
model.save_pretrained("ckpt")
tokenizer.save_pretrained("ckpt")
-
FastAPI 推理
from fastapi import FastAPI
from transformers import pipeline
app = FastAPI()
cls = pipeline("text-classification", model="ckpt")
@app.post("/pred")
def pred(item: dict):
return cls(item["text"])[0]
-
Docker 打包
FROM tiangolo/uvicorn-gunicorn:python3.11
COPY ./app /app
RUN pip install transformers torch fastapi
-
镜像推阿里云容器镜像服务
-
函数计算/SAE 部署 → 获得公网 HTTPS 地址,支持 10 万调用/天免费额度。
10. 进阶路线:从“调包”到“懂原理”
| 阶段 | 目标 | 推荐资源 |
|---|---|---|
| ① 调包侠 | 能跑 SOTA | 本文+ transformers 官方 doc |
| ② 原理派 | 手推 Self-Attention | 《Attention Is All You Need》+ 李沐视频 |
| ③ 炼丹师 | 改结构、提指标 | Chinese-BERT-wwm 论文 + 复现 |
| ④ MLOps | 自动化+监控 | 《Hands-On MLOps》+ Jenkins/GitHub Actions |
| ⑤ 多模态 | 懂文本+图像 | CLIP、BLIP-2 官方 Notebook |
11. 2025 趋势速写(彩蛋)
-
大模型 小型化:4-bit/8-bit 量化 + 投机解码,RTX4060 笔记本跑 7B 模型;
-
RAG(检索增强生成)= 私有知识库标配,LangChain、LlamaIndex 日活破百万;
-
Agent 工作流:LLM 调用外部 API,自动写 SQL、画图表、发邮件;
-
中文开源爆发:ChatGLM3-6B、Qwen-14B、Yi-34B 屠榜 SuperCLUE;
-
数据合成:模型自己生成高质量语料,缓解版权争议。
12. 一键复现资源包
| 名称 | 地址 | 备注 |
|---|---|---|
| 本文所有 Notebook | https://github.com/yourname/NLP-Zero2One | 点个 ⭐ 再跑! |
| 中文停用词表 | https://github.com/goto456/stopwords | 通用+百度+哈工大 |
| 中文 NER 数据集 | MSRA、PeopleDaily、Weibo | 开箱即用 |
| 分词 PK 可视化 | https://github.com/yourname/cws-battle | Streamlit 交互 |
13. 结语:NLP 没有黑魔法,只有“向量+概率+算力”
-
把语言变成数学,是 NLP;
-
把数学变回语言,是 NLG;
-
让这套流程跑在生产环境,是工程。
“当你能自己搭一条端到端 NLP Pipeline,
就会发现——机器离‘理解’人类,近了一小步;你离‘自由’技术,进了一大步。”

更多推荐

所有评论(0)