6月1日 15:02

NLP 文本预处理有哪些步骤?LLM 时代还需要吗?

文本预处理是把原始文本变成模型能消化的输入的过程。传统 NLP 流程里这一步极其重要——垃圾进垃圾出,预处理做不好,模型再强也没用。但 LLM 时代有些变化,后面会说。

预处理的核心步骤

按顺序走:

1. 清洗噪声:去掉 HTML 标签、URL、特殊符号、多余空格。爬虫抓的文本必做这步。用 BeautifulSoup 去 HTML 标签,正则去 URL(re.sub(r"http\S+", "", text)),没什么技术含量但很重要。

2. 文本标准化:统一大小写(英文)、统一编码(UTF-8)、繁简转换(中文)。注意英文小写化会丢失一些信息——"US" 变成 "us" 就不是国家了。如果做 NER,这一步要慎重。

3. 分词:把句子切成词或子词。英文按空格切就行(粗略说),中文必须用分词工具(jieba、pkuseg)。但更现代的做法是用子词分词(BPE、WordPiece),BERT 和 GPT 都用这种方式——它解决了 OOV(词表外词)问题,"unhappiness" 会被拆成 "un" + "happi" + "ness"。

4. 去停用词:移除"的""了""is""the"这些高频但无实际含义的词。在搜索和分类任务中有用,但在情感分析中要小心——"not" 可能被去掉,语义就反了。LLM 时代这步基本不需要了,大模型自己能判断哪些词重要。

5. 词形还原/词干提取:running → run,better → good。英文常用,中文不需要。NLTK 的 WordNetLemmatizer 做词形还原,PorterStemmer 做词干提取。词形还原更准确但更慢,词干提取更快但可能产出非词(如 "university" → "univers")。

6. 序列填充/截断:神经网络需要固定长度的输入,长的截断,短的补 padding。BERT 最大 512 token,GPT-4 可以到 128K,但填充和截断的思路一样。

LLM 时代,哪些预处理还需要?

分词(tokenizer)仍然需要,但已经是模型自带的了——你不需要自己 jieba 分词再喂给 BERT,直接用模型的 tokenizer 就行。

清洗噪声仍然需要——LLM 也不是什么垃圾都能消化,HTML 标签和乱码照样影响效果。

去停用词、词形还原、词干提取基本不需要了。LLM 的上下文理解能力足以处理这些变化,手动去掉反而丢失信息。

中文预处理的特殊问题

中文没有天然的分隔符,分词质量直接影响下游任务。jieba 是最常用的工具,但准确率只有 90% 左右,专业领域(医学、法律)需要自定义词典。另一个常见问题是编码——GBK 和 UTF-8 混用的数据,Python 里先统一 encode("utf-8").decode("utf-8") 处理不了就加 errors 参数忽略。

实操建议

别一上来就全做。先看任务——情感分析去停用词要小心,文本生成不需要去,搜索需要去。先做最小预处理(清洗+分词),跑个 baseline,看效果再加步骤。预处理步骤越多,pipeline 越复杂,出错的地方也越多。

标签:NLP