【漫话机器学习系列】235.切分文本(Tokenize Text)
自然语言处理的第一步:切分文本(Tokenize Text)详解
在自然语言处理(NLP)中,切分文本(Tokenization) 是我们面对原始文本时必须迈出的第一步。它决定了我们如何理解和处理语言,是几乎所有 NLP 流程的基础。
本文将从定义、原理、常见方法、中文处理注意事项等多个角度,带你彻底掌握「切分文本」这一关键步骤。
什么是切分文本(Tokenize Text)?
切分文本(Tokenization)就是将文本分割为一个个有意义的基本单位(称为“token”),这些单位可以是:
-
单词(word)
-
子词(subword)
-
字符(character)
-
句子(sentence)
-
段落(paragraph)
在图中示例中,“我喜欢小鸟” 被切分为:
“我”, “喜欢”, “小鸟”
这就是一种基于“词”的切分方式。
为什么需要切分文本?
机器无法直接理解人类语言。为了让文本能被输入到模型中,我们必须将其转化为数值表示(如词向量)。但在此之前,需要先将原始文本拆分成最小语义单位,也就是 token。
没有正确的 token,词向量、语法分析、情感分析、问答系统等后续操作都会变得混乱甚至失败。
常见的切分方法
根据语言和处理目标不同,切分方法也不同:
英文中的切分
英文天然以空格分词,可以使用如下工具:
-
split()
函数:最简单的空格分割。 -
NLTK:
nltk.word_tokenize(text)
-
spaCy:
nlp(text)
的.tokens
-
正则表达式(Regex):按标点或字母匹配
例子:
import nltk
nltk.download('punkt')
from nltk.tokenize import word_tokenizetext = "I love birds."
tokens = word_tokenize(text)
# ['I', 'love', 'birds', '.']
中文中的切分
中文没有天然的空格,必须依赖分词工具来识别词边界。
常用工具:
-
jieba:最常用,轻量、准确率高
-
THULAC:清华大学出品,分词+词性标注
-
HanLP:支持多种模型切换
-
pkuseg:北大开发,适合专业场景(如旅游、医学等)
示例(jieba):
import jiebatext = "我喜欢小鸟"
tokens = list(jieba.cut(text))
# ['我', '喜欢', '小鸟']
子词切分(Subword Tokenization)
在现代深度学习 NLP 模型中(如 BERT、GPT),更多采用子词切分算法,如:
-
BPE(Byte-Pair Encoding)
-
WordPiece
-
SentencePiece
这些方法的好处在于:
-
能处理未登录词(OOV)
-
词表更紧凑,支持更高效的模型训练
例如,BERT 可能会把 unbelievable
切成:
["un", "##believ", "##able"]
切分粒度的选择
选择哪种 token 粒度,取决于任务类型:
任务类型 | 建议切分粒度 |
---|---|
情感分析 | 单词或词组 |
命名实体识别 | 单词或子词 |
文本生成 | 子词或字符 |
拼写纠错 | 字符级 |
中文搜索推荐 | 词语或字 |
中文切分的挑战
中文切分不像英文那样天然简单,存在几个难点:
-
多义词:如“研究生物”到底是“研究 生物”还是“研究生 物”?
-
新词识别:如网络热词“内卷”“打工人”,不在词典中。
-
歧义句子:如“他毕业于上海交通大学计算机系”,需要正确断句。
这些都要求分词工具有良好的上下文感知能力,必要时可以训练自己的分词模型。
Tokenize 实践:从文本到模型的第一步
整条 NLP 任务链条通常如下:
原始文本 → Tokenize → 编码 → 向量化 → 模型训练
切分文本的质量会直接影响最终的结果,是模型效果的基础保障。
小结
切分文本(tokenization)并不只是简单地分词,而是构建整个 NLP 系统的地基:
-
是数据预处理的第一步;
-
是语言理解的桥梁;
-
是现代大模型中不可或缺的环节。
希望你在看到“我喜欢小鸟”切分成“我”、“喜欢”、“小鸟”这一刻,能明白一个 NLP 系统的大门已经打开。
如果你觉得本文对你有帮助,欢迎点赞、收藏、留言交流 !