文本预处理全攻略:数据分析 + 特征工程 + 数据增强(NLP必看)
本文是文本预处理完整版总结,从数据探索、特征处理到数据增强,覆盖NLP建模前所有必须步骤,代码可直接运行,小白也能轻松上手。
一、文本预处理到底在做什么?
文本预处理 = 让文本从“人话”变成“机器能读懂的数据”
完整流程:
原始文本 → 数据分析(看懂数据)→ 清洗/特征处理 → 数据增强 → 模型训练
二、第一部分:文本数据分析(探索数据、发现问题)
1. 数据分析的作用
- 理解语料整体情况
- 检查脏数据、异常长度、错误标签
- 判断正负样本是否均衡
- 指导模型超参数设置(句子长度、批次、词表大小)
2. 数据集说明
使用:中文酒店评论二分类语料
- 句子:用户评价
- 标签:0=消极 / 1=积极
- 文件:train.tsv、dev.tsv
3. 标签数量分布
目标:看正负样本比例是否接近 1:1
工具:sns.countplot()
import seaborn as sns
import pandas as pd
train_data = pd.read_csv('./cn_data/train.tsv', sep='\t')
sns.countplot(x='label', data=train_data)
结论:
- 样本基本均衡,无需大规模增强
4. 句子长度分布
目标:确定模型输入长度(padding / truncate)
工具:sns.displot()
train_data['sentence_length'] = list(map(len, train_data['sentence']))
sns.displot(x='sentence_length', data=train_data)
结论:
- 大部分句子长度:20 ~ 250
- 建议模型最大长度:100~150
5. 正负样本长度散点图
目标:快速定位超长异常句子
工具:sns.stripplot()
sns.stripplot(x='label', y='sentence_length', data=train_data)
6. 词汇总数统计
统计去重后总词量:
from itertools import chain
import jieba
vocab = set(chain(*map(jieba.lcut, train_data['sentence'])))
print('总词汇量:', len(vocab))
结果:
- 训练集词汇:12162
- 验证集词汇:6857
7. 形容词词云(情感关键词可视化)
分别提取正负样本的形容词,绘制词云:
- 正样本:干净、舒服、方便、豪华
- 负样本:脏、差、糟糕、慢、不足
三、第二部分:文本特征处理(让数据更适合模型)
1. n-gram 特征(捕捉词语搭配)
概念
连续 n 个词相邻共现 当作一个特征:
- 2-gram:两个词一组
- 3-gram:三个词一组
例:是谁 敲动 我心
2-gram:(是谁,敲动)、(敲动,我心)
实现
def get_ngram(input_list, n=2):
return set(zip(*[input_list[i:] for i in range(n)]))
作用:
- 增强语序特征
- 提升模型语义理解能力
2. 文本长度规范(统一长度)
模型要求:同一个批次长度必须相同
操作:
- 长句子:截断
- 短句子:补0(padding)
工具:pad_sequences
from tensorflow.keras.preprocessing import sequence
res = sequence.pad_sequences(x_train, maxlen=100)
四、第三部分:文本数据增强(回译增强法)
1. 什么是回译增强
流程:
中文 → 外文 → 中文
得到语义相同、表述不同的新句子。
2. 优点
- 最简单、最稳定、效果最好
- 语义保留完整
- 适合小样本场景
3. 缺点
- 短文本容易重复
- 多次翻译会失真
优化:最多翻译 3 轮(中→英→日→中)
4. 代码实现(有道翻译API)
import requests
def back_translate(text):
url = 'https://fanyi.youdao.com/translate'
# 中 → 英
data1 = {'from':'zh-CHS','to':'en','i':text,'doctype':'json'}
res1 = requests.post(url,data=data1).json()
tgt = res1['translateResult'][0][0]['tgt']
# 英 → 中
data2 = {'from':'en','to':'zh-CHS','i':tgt,'doctype':'json'}
res2 = requests.post(url,data=data2).json()
return res2['translateResult'][0][0]['tgt']
五、全文核心总结(最精简干货版)
文本预处理三步骤
-
数据分析
- 标签分布 → 看均衡
- 长度分布 → 定padding
- 词频/词云 → 查情感关键词
-
特征工程
- n-gram → 增强词语搭配特征
- 长度规范 → 统一模型输入
-
数据增强
- 回译法:中→外→中
- 最简单、最高效、工业界标配
六、NLP预处理万能流程
读数据 → 分词 → 建词表 → 转索引 → 数据分析 → 长度规范 → n-gram增强 → 回译扩充 → 模型训练

浙公网安备 33010602011771号