文本预处理一般包括哪些常见步骤?

文本预处理是自然语言处理(NLP)的基础环节,目标是将原始文本转化为适合模型或算法处理的规范化形式。常见步骤如下:

1. 文本清洗

去除对分析无意义的噪声内容:

  • 去除 HTML 标签:网页抓取的文本常含<p><div>等标签
  • 去除特殊字符:如@#&等符号
  • 去除表情符号:视任务而定,情感分析可能需要保留
  • 去除多余空白:多个空格、换行符、制表符合并为单个空格
  • 大小写统一:英文文本通常全部转为小写,减少词表规模

2. 分词

将连续文本切分为有意义的语言单元:

  • 英文:按空格和标点切分,如"I love NLP"["I", "love", "NLP"]
  • 中文:需要专门的分词工具(如 jieba、HanLP、THULAC),如"自然语言处理"["自然", "语言", "处理"]
  • 子词分词:BPE、WordPiece、SentencePiece 等方法,平衡词表大小和未登录词问题

3. 去除停用词

过滤掉频率高但信息量低的词:

  • 英文:theisatwhichon
  • 中文:

注意:并非所有任务都需要去停用词。情感分析中"不"、"没有"等否定词可能携带关键信息。

4. 词形归一化

将不同形态的词还原为统一形式,主要针对英语等屈折语:

方法说明示例
词干提取截取词缀,规则粗暴runningrunbetterbet
词形还原基于词典,还原为词元bettergoodrunningrun

词形还原比词干提取更准确,但需要词性标注辅助,计算成本更高。

5. 词性标注

为每个词标注语法类别(名词、动词、形容词等):

  • 辅助词形还原选择正确词元
  • 帮助消歧(如book作名词"书" vs 动词"预订")
  • 为句法分析和信息提取提供基础

6. 去除低频词 / 高频词

  • 低频词:仅出现 1-2 次的词,通常是拼写错误或专有名词,增加词表噪声
  • 高频词:在几乎所有文档中都出现的词,区分度低(类似停用词的扩展)
  • 常用工具:TF-IDF 权重过滤

7. 文本向量化

将文本转化为数值向量,供模型使用:

  • 词袋模型:统计词频,忽略语序
  • TF-IDF:词频-逆文档频率,降低常见词权重
  • 词嵌入:Word2Vec、GloVe、FastText,捕捉语义关系
  • 上下文嵌入:BERT、ELMo,根据上下文动态生成向量

8. 其他可选步骤

  • 拼写纠错:修正拼写错误(如recievereceive
  • 缩写展开don'tdo notcan'tcannot
  • 数字处理:统一为占位符<NUM>或转为文字
  • 命名实体识别:识别人名、地名、机构名等
  • 句法分析:依存句法树、成分句法树

步骤选择原则

原始文本 │ ├─ 文本清洗 ──→ 去标签/特殊字符/空白 ├─ 分词 ──────→ 切分为词单元 ├─ 去停用词 ──→ 过滤无信息量词 ├─ 词形归一化 → 词干提取/词形还原 ├─ 词性标注 ──→ 标注语法类别 ├─ 去低频/高频 → 精简词表 └─ 向量化 ────→ 转为数值表示

并非所有步骤都是必需的,需根据具体任务和语种灵活组合。例如:

  • 文本分类:清洗 → 分词 → 去停用词 → TF-IDF
  • 机器翻译:分词 → 子词切分(BPE),通常不去停用词不做词形还原
  • 情感分析:清洗 → 分词 → 保留否定词 → 词嵌入