🎯 学习目标
- 说清什么是 NLP,理解它与语音、AI 的关系
- 建立 NLP 任务层次地图:基础任务 → 核心任务 → 应用任务
- 了解规则、统计机器学习、深度学习、大模型四个发展阶段
- 理解中文 NLP 为什么比英文多一道"分词"门槛
- 认识 jieba、NLTK、spaCy、scikit-learn、gensim、transformers 等生态
- 一次性搭建好本篇全部章节的开发环境并验证
1什么是自然语言处理
自然语言处理(Natural Language Processing,NLP)是人工智能的一个分支,研究如何让计算机理解、分析和生成人类语言(中文、英文……),实现人与计算机之间用自然语言进行有效通信。
它处于语言学、计算机科学、数学、机器学习的交叉地带。这里的"自然语言"是相对于 C/Python 这类人造编程语言而言的——人类语言充满歧义、省略、隐喻、新词,处理难度远高于结构化数据。
NLP vs 语音识别:语音识别(ASR)解决"声音 → 文字",语音合成(TTS)解决"文字 → 声音",属于语音处理;NLP 处理的是文字层面的理解与生成。语音转写出文字之后的理解工作,就进入 NLP 范畴。
2NLP 任务地图
NLP 任务可以按"从底层到应用"分成三层,本篇章节也按此顺序展开:
| 层次 | 任务 | 说明 | 本篇 |
|---|---|---|---|
| 基础层 (语料加工) | 文本清洗 | 去噪、去标签、统一格式、停用词 | 第2章 |
| 分词 Tokenization | 把句子切成词语序列(中文关键) | 第3章 | |
| 词性标注 POS | 标注名词/动词/形容词等 | 第4章 | |
| 命名实体识别 NER | 识别人名、地名、机构名 | 第4章 | |
| 表示层 (文本→数字) | 词频 / TF-IDF | 统计权重、关键词提取 | 第5章 |
| 文本向量化 | One-Hot、词袋、TF-IDF 向量 | 第7章 | |
| 词向量 / 预训练模型 | word2vec、BERT 语义表示 | 第7章 | |
| 应用层 (解决业务) | 文本分类 | 新闻分类、垃圾邮件识别 | 第6章 |
| 情感分析 | 评论正负面、舆情监控 | 第6章 | |
| 信息检索 | 搜索引擎、文本相似度 | 第7、8章 | |
| 信息抽取 | 实体关系、事件抽取 | 第8章 | |
| 文本生成 / 大模型 | 摘要、翻译、问答、对话 | 第7、8章简介 |
3NLP 的四个发展阶段
| 阶段 | 年代 | 方法 | 代表 / 局限 |
|---|---|---|---|
| ① 规则时代 | 1950s-1980s | 语言学家手写规则、词典、语法树 | 专家系统;规则爆炸、无法覆盖真实语言 |
| ② 统计学习 | 1990s-2010 | 语料统计 + 朴素贝叶斯、SVM、HMM、CRF | 依赖人工特征工程;TF-IDF、n-gram 仍在用 |
| ③ 深度学习 | 2013-2018 | word2vec、RNN/LSTM、CNN、seq2seq、注意力 | 自动学习特征;word2vec 是里程碑 |
| ④ 预训练大模型 | 2018 至今 | ELMo、BERT、GPT、大语言模型 LLM | 一个模型通吃多任务,生成式 AI 爆发 |
为什么还要学"传统"方法? ① TF-IDF、朴素贝叶斯等方法简单、快、可解释,在简单场景和小数据上依然好用,是工业基线(baseline);② 它们是理解深度学习的地基;③ 学习顺序上必须先知道"文本如何变成数字",才能理解 BERT 在做什么。
4中文 NLP 为什么更难
英文句子 I love natural language processing 天然由空格分成 5 个词;而中文 我爱自然语言处理 词与词之间没有任何分隔符。由此带来一系列中文特有的难点:
- 分词歧义:"从小学电脑"→ 从/小学/电脑?从小/学/电脑?"结婚的和尚未结婚的"("和尚未")。
- 新词迭出:网络流行语、"绝绝子""City不City"、专有名词,词典永远滞后。
- 一词多词性:"打"(打电话/打人/打车/打酱油)。
- 实体边界模糊:"北京大学生"是"北京大学/生"还是"北京/大学生"?
- 繁简、全半角、中英混排:"Python真的很nice!!"。
- 指代省略:中文对话中主语经常缺失。
英文:Natural | language | processing | is | interesting (空格天然分词)
中文:自然语言处理很有趣 (需要先分词)
→ 自然 / 语言 / 处理 / 很 / 有趣
英文小写归一:Hello → hello
中文还需考虑:繁简转换、全角半角、标点统一……
趋势提示:BERT/GPT 等模型可以直接以字(subword)为输入单位,一定程度上绕开了分词;但在传统方法、关键词提取、搜索索引、统计分析等海量场景中,中文分词仍是必备基础技能。
5Python NLP 技术生态
| 库 | 语言侧重 | 核心能力 | 本篇章节 |
|---|---|---|---|
| jieba | 中文 | 分词、词性标注、关键词(TF-IDF/TextRank) | 3、5 |
| NLTK | 英文/教学 | 分词、词干化、词形还原、语料库,NLP 经典教学库 | 2 |
| spaCy | 多语工业级 | 分词、词性、NER、依存句法,速度快 | 4 |
| HanLP / pkuseg | 中文 | 分词、标注、句法、语义,功能齐全 | 3、4 |
| scikit-learn | 通用 ML | TF-IDF 向量化、朴素贝叶斯/SVM/逻辑回归、评估 | 6、7 |
| gensim | 主题/向量 | word2vec、TF-IDF、LDA 主题模型 | 7 |
| pandas/numpy | 数据基础 | 语料表格化处理、数值计算 | 全程 |
| wordcloud/matplotlib | 可视化 | 词云、统计图 | 5 |
| transformers | 大模型 | HuggingFace 的 BERT/GPT 中文模型调用 | 7、8 |
6搭建开发环境
建议先创建并激活虚拟环境(语法篇第 1、8 章已学),再安装本篇依赖:
# 1. 创建项目与虚拟环境
mkdir nlp_project
cd nlp_project
python -m venv .venv
.venv\Scripts\activate # Windows;Mac/Linux 用 source .venv/bin/activate
# 2. 先升级 pip 并配置国内镜像(下载快)
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 3. 安装本篇核心依赖(可分批执行)
pip install jieba nltk
pip install numpy pandas scikit-learn
pip install matplotlib wordcloud
pip install gensim
pip install requests beautifulsoup4 lxml
# transformers/torch 体积大,仅第7、8章选学需要,可最后安装
安装说明:① wordcloud 在 Windows 上若 pip 安装失败,可到 PyPI 项目页下载对应 Python 版本的 whl 文件后 pip install 文件路径;② torch/transformers 体积较大,仅第 7、8 章选学部分需要;③ matplotlib 中文显示需要配置字体(第 5 章详述)。
验证安装
# check_env.py:逐行运行,全部输出版本号即成功
import jieba, sklearn, pandas, numpy
import matplotlib, gensim
import sys
print("Python:", sys.version.split()[0])
print("scikit-learn:", sklearn.__version__)
print("pandas:", pandas.__version__)
print("numpy:", numpy.__version__)
print("gensim:", gensim.__version__)
# jieba 自带词典,无需下载模型即可分词
print(list(jieba.cut("我爱自然语言处理")))
# ['我', '爱', '自然语言', '处理']
NLTK 数据包(第 2 章英文处理用)
import nltk
# nltk.download() 会打开图形下载器;国内网络可只下载需要的数据包:
# nltk.download("punkt_tab") # 分词(新版本)
# nltk.download("stopwords") # 英文停用词
# nltk.download("wordnet") # 词形还原
# 网络不通时可从 https://github.com/nltk/nltk_data 手动下载,
# 放到 C:\Users\用户名\AppData\Roaming\nltk_data
spaCy 中文模型(第 4 章选学)
pip install spacy
python -m spacy download zh_core_web_sm # 小型中文模型
7NLP 项目通用流程
几乎所有 NLP 项目都遵循同一条流水线(pipeline),本教程后面的章节就是把每个环节讲透:
原始语料(网页/评论/文档)
│ ① 数据获取:爬虫/API/公开数据集
▼
文本清洗(去 HTML、去重、归一化、停用词)……… 第2章
▼
分词 / 词性标注 / 实体识别 ………………………… 第3、4章
▼
特征表示:词频 → TF-IDF → 词向量 ……………… 第5、7章
▼
建模:分类/聚类/相似度/大模型 …………………… 第6、7、8章
▼
评估:准确率/精确率/召回率/F1 …………………… 第6章
▼
应用:搜索/推荐/舆情/问答/对话 ………………… 第8章
8常用公开数据集(练手用)
| 数据集 | 任务 | 获取方式 |
|---|---|---|
| THUCNews | 中文新闻分类(14 类) | 搜索"THUCNews 下载" |
| ChnSentiCorp | 中文酒店评论情感二分类 | GitHub 搜索 ChnSentiCorp |
| waimai_10k | 外卖评论情感 | GitHub 常见入门数据 |
| 20 Newsgroups | 英文新闻分类 | sklearn 内置可直接加载 |
| IMDB Reviews | 英文影评情感 | HuggingFace datasets |
| MSRA NER | 中文命名实体识别 | 常用公开 NER 语料 |
9本章小结与练习
📌 关键结论
- NLP 让计算机理解与生成文字;中文因无空格分词而更难。
- 技术路线:规则 → 统计 → 深度学习 → 大模型;传统方法仍是必备基线。
- 核心流水线:清洗 → 分词/标注 → 向量化 → 建模 → 评估。
- 环境:jieba + sklearn + pandas + gensim 是本篇主力组合,务必先验证
jieba.cut跑通。