文本预处理(上)超详细笔记 | NLP 入门必看

本文是自然语言处理 NLP 入门——文本预处理(上) 完整学习笔记,包含概念、分词、词向量、Word2Vec、Embedding 以及可视化实战,适合发博客、复习、面试使用。


一、文本预处理概述

1. 什么是文本预处理

文本在送入模型之前,必须经过一系列清洗、转换、规范化,才能变成模型可接受的张量(数字矩阵)

2. 作用

  • 把文本变成模型能看懂的数字
  • 清理脏数据、规范句子长度
  • 指导超参数选择、提升模型效果

3. 五大核心环节

  1. 文本处理基本方法(分词、NER、词性标注)
  2. 文本张量表示(one-hot、Word2Vec、Embedding)
  3. 文本语料数据分析(长度、词频、标签分布)
  4. 文本特征处理(n-gram、长度补齐)
  5. 数据增强(回译等)

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 可视化实战

步骤

  1. jieba 分词
  2. Tokenizer 文本数值化(word → id)
  3. 构建 nn.Embedding 层
  4. 写入 SummaryWriter
  5. 浏览器查看可视化

核心代码

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

五、高频面试题(必背)

  1. 文本预处理第一步是什么?
    文本语料数据分析。

  2. 中文为什么要分词?
    中文没有天然分隔符。

  3. jieba 三种模式?
    精确、全模式、搜索引擎模式。

  4. One-Hot 缺点?
    割裂词义、维度爆炸、稀疏向量。

  5. CBOW 和 Skip-Gram 区别?
    CBOW:上下文→中间;Skip-Gram:中间→上下文。

  6. Word2Vec 和 Embedding 层区别?
    Word2Vec 静态;Embedding 动态,随模型训练。


六、总结

这篇内容是 NLP 入门最基础的第一步

  • 学会分词、词性标注、NER
  • 理解 one-hot → Word2Vec → Embedding
  • 会用 FastText 训练词向量
  • 会用 TensorBoard 可视化词向量

掌握这些,你就可以进入文本分类、情感分析、模型搭建等高阶任务啦!

posted @ 2026-05-24 21:41  Petula  阅读(42)  评论(0)    收藏  举报