自然语言处理应用篇 · 第1章

NLP 概述与开发环境

认识自然语言处理这门学科的任务全貌、技术演进与中文处理难点,搭建好本篇全部实战所需的 Python 环境。

🎯 学习目标

  • 说清什么是 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-2018word2vec、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通用 MLTF-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 跑通。
练习1:用自己的话解释"中文 NLP 为什么需要分词,而英文通常不需要专门的分词库"。
英文书写时单词之间天然有空格,按空白切分即可得到词(当然撇号、缩写等仍需处理);中文句子词与词连写无分隔符,需要算法依据词典和统计规律找出词边界,且存在歧义与新词问题,因此必须借助 jieba 等专门分词工具。
练习2:把"垃圾短信识别""从合同中抽取甲乙方公司名""文章自动摘要"分别对应到 NLP 任务地图中的层次。
垃圾短信识别是应用层的文本分类;抽取合同公司名是基础层的命名实体识别(NER)在信息抽取中的应用;自动摘要属于应用层的文本生成/理解任务。前者通常在分词+向量化后用分类模型,中者依赖 NER 技术,后者现代方案多用大模型。
练习3:完成环境搭建并运行验证脚本,确认 jieba 能对"我爱自然语言处理"分词。
创建 venv 激活后,pip 安装 jieba(建议配清华镜像),运行 import jieba; print(list(jieba.cut("我爱自然语言处理"))),输出类似 ['我','爱','自然语言','处理'] 即环境正常,可继续第 2 章。