文本预处理(上)超详细笔记 | NLP 入门必看
本文是自然语言处理 NLP 入门——文本预处理(上) 完整学习笔记,包含概念、分词、词向量、Word2Vec、Embedding 以及可视化实战,适合发博客、复习、面试使用。
一、文本预处理概述
1. 什么是文本预处理
文本在送入模型之前,必须经过一系列清洗、转换、规范化,才能变成模型可接受的张量(数字矩阵)。
2. 作用
- 把文本变成模型能看懂的数字
- 清理脏数据、规范句子长度
- 指导超参数选择、提升模型效果
3. 五大核心环节
- 文本处理基本方法(分词、NER、词性标注)
- 文本张量表示(one-hot、Word2Vec、Embedding)
- 文本语料数据分析(长度、词频、标签分布)
- 文本特征处理(n-gram、长度补齐)
- 数据增强(回译等)
4. 第一步做什么?
拿到数据优先做:文本语料数据分析,了解数据全貌再处理。
二、文本处理基本方法
1. 分词(Tokenization)
- 定义:把连续的句子切成一个个词语
- 中文必须分词:中文没有天然空格分隔
- 作用:语义理解的最小单元,NLP 所有任务的基础
2. jieba 分词工具(Python 最常用)
三种分词模式
- 精确模式(默认):切分最准,无冗余
jieba.lcut(sentence, cut_all=False) - 全模式:把所有可能词语都切出来,有歧义
jieba.lcut(sentence, cut_all=True) - 搜索引擎模式:在精确模式基础上再切长词
jieba.lcut_for_search(sentence)
其他能力
- 支持繁体中文分词
- 支持自定义词典,强制合并专业词汇
jieba.load_userdict("userdict.txt")
3. 命名实体识别(NER)
- 定义:识别文本中的人名、地名、机构名、专有名词
- 示例:鲁迅(人名)、浙江绍兴(地名)
4. 词性标注(POS)
- 定义:给每个词标注词性(名词 n、动词 v、形容词 a 等)
- 使用:
import jieba.posseg as pseg pseg.lcut("我爱北京天安门")
三、文本张量表示(核心重点)
把文字 → 数字向量(张量),让计算机能处理。
1. One-Hot 编码
- 原理:n 个词对应 n 维向量,只有一个位置是 1,其余 0
- 示例:
- 苹果:[1,0,0]
- 香蕉:[0,1,0]
优点:简单直观
缺点:
- 完全割裂词义关系
- 词库大时维度爆炸
- 稀疏向量,浪费内存
2. Word2Vec
把词变成稠密向量,语义相近的词向量也相近。
两种训练方式:
- CBOW:用上下文预测中间词
- 速度快、适合大数据、高频词效果好
- Skip-Gram:用中间词预测上下文
- 效果更准、低频词更好、速度慢
一句话记忆
- CBOW:周围 → 中间
- Skip-Gram:中间 → 周围
3. FastText 实战流程
import fasttext
# 训练
model = fasttext.train_unsupervised("data.txt")
# 保存/加载
model.save_model("vec.bin")
model = fasttext.load_model("vec.bin")
# 获取词向量
vec = model.get_word_vector("machine")
# 查看相似词
model.get_nearest_neighbors("music")
4. Word Embedding(词嵌入)
- 广义:所有稠密词向量方法(Word2Vec 属于其中一种)
- 狭义:神经网络里的
nn.Embedding层
与 Word2Vec 的区别
- Word2Vec:静态,训练完就固定
- Embedding 层:动态,随模型一起训练更新
- 使用更方便,直接嵌入模型
四、词向量 TensorBoard 可视化实战
步骤
- jieba 分词
- Tokenizer 文本数值化(word → id)
- 构建 nn.Embedding 层
- 写入 SummaryWriter
- 浏览器查看可视化
核心代码
import jieba
import torch
import torch.nn as nn
from tensorflow.keras.preprocessing.text import Tokenizer
from torch.utils.tensorboard import SummaryWriter
# 分词
sentences = ["传智教育...", "我爱自然语言处理"]
words = [jieba.lcut(s) for s in sentences]
# 文本数值化
tokenizer = Tokenizer()
tokenizer.fit_on_texts(words)
# Embedding 层
embed = nn.Embedding(num_embeddings=len(tokenizer.index_word), embedding_dim=8)
# 可视化
writer = SummaryWriter()
writer.add_embedding(embed.weight.data, tokenizer.index_word.values())
writer.close()
启动:
tensorboard --logdir=runs --host=0.0.0.0
五、高频面试题(必背)
-
文本预处理第一步是什么?
文本语料数据分析。 -
中文为什么要分词?
中文没有天然分隔符。 -
jieba 三种模式?
精确、全模式、搜索引擎模式。 -
One-Hot 缺点?
割裂词义、维度爆炸、稀疏向量。 -
CBOW 和 Skip-Gram 区别?
CBOW:上下文→中间;Skip-Gram:中间→上下文。 -
Word2Vec 和 Embedding 层区别?
Word2Vec 静态;Embedding 动态,随模型训练。
六、总结
这篇内容是 NLP 入门最基础的第一步:
- 学会分词、词性标注、NER
- 理解 one-hot → Word2Vec → Embedding
- 会用 FastText 训练词向量
- 会用 TensorBoard 可视化词向量
掌握这些,你就可以进入文本分类、情感分析、模型搭建等高阶任务啦!

浙公网安备 33010602011771号