什么是分词?
想象一下,您在教孩子阅读。您不会一上来就给他们看复杂的段落,而是先从字母开始,再到音节,最后到完整的单词。类似地,分词会将大量文本拆分为更易被机器消化和理解的单元。
分词的主要目标是在不丢失语境的前提下,以对机器有意义的方式表示文本。通过将文本转换为 token,算法更容易识别模式。这种模式识别至关重要,因为它使机器能够理解并响应人类输入。例如,当机器遇到单词 "running" 时,它并不会将其视为一个不可分割的整体,而是看作由可供分析并据此推导含义的若干 token 组合。
更深入一点来看,考虑这句话:“Chatbots are helpful.” 当我们按单词对这句话进行分词时,它会变为一个由单词组成的数组:
["Chatbots", "are", "helpful"].
这是一种相对直接的方法,通常由空格来界定 token 的边界。然而,如果我们按字符分词,这句话会被拆分为:
["C", "h", "a", "t", "b", "o", "t", "s", " ", "a", "r", "e", " ", "h", "e", "l", "p", "f", "u", "l"].
这种字符级的拆分更加细粒度,对于某些语言或特定 NLP 任务尤其有用。
本质上,分词就像解剖一句话以理解其结构。正如医生研究细胞以认识器官一样,NLP 从业者通过分词来剖析并理解文本的结构与含义。
值得注意的是,虽然我们在此主要讨论语言处理背景下的分词,但“tokenization”一词也用于安全与隐私领域,尤其是信用卡分词等数据保护实践。在这些场景中,敏感数据会被非敏感的等价物(称为 token)替换。区分这两种语境非常重要,以避免混淆。
分词的类型
分词方法会根据文本拆分的粒度以及具体任务需求而不同。这些方法可以从将文本拆分为独立单词到拆分为字符,甚至更小的单元。以下是更近一步的介绍:
- 单词分词。将文本拆分为一个个单词。这是最常见的方法,特别适用于像英语这样具有清晰词边界的语言。
- 字符分词。将文本分割为单个字符。该方法有利于缺乏清晰词边界的语言,或需要细粒度分析(如拼写纠正)的任务。
- 子词分词。介于单词与字符分词之间,将文本拆分为大于字符但小于完整单词的单元。例如,“Chatbots” 可以被分成 “Chat” 和 “bots”。这种方法对通过组合更小单元来构成意义的语言,或在处理超出词表的词汇时,尤其有效。
下面这张表解释了它们的差异:
| 类型 | 描述 | 使用场景 |
|---|---|---|
| 单词分词 | 将文本拆分为独立单词。 | 适用于具有清晰词边界的语言,如英语。 |
| 字符分词 | 将文本分割为单个字符。 | 适用于没有清晰词边界的语言,或需要细粒度分析的任务。 |
| 子词分词 | 将文本拆分为大于字符但小于单词的单元。 | 有利于形态复杂的语言,或处理超出词表的词汇。 |
分词的应用场景
分词是数字世界众多应用的基石,使机器能够处理和理解海量文本数据。通过将文本拆分为可管理的小块,分词能实现更高效、更准确的数据分析。以下是一些重要用例及其现实应用:
搜索引擎
当您在 Google 等搜索引擎中输入查询时,它会使用分词来解析您的输入。这样的拆分有助于引擎在数十亿文档中筛选,呈现最相关的结果。
机器翻译
如 Google 翻译等工具会对源语言的句子进行分词。完成分词后,再将这些片段翻译并在目标语言中重组,从而确保译文保留原始语境。
语音识别
Siri 或 Alexa 等语音助手高度依赖分词。当您提出问题或命令时,语音首先被转换为文本。随后对文本进行分词,使系统能够处理并执行您的请求。
评论情感分析
分词在从用户生成内容(如产品评论或社交媒体帖子)中提取洞见方面起着关键作用。例如,电商平台的情感分析系统可能会对用户评论进行分词,以判断客户表达的是正面、中性还是负面情绪。例如:
- 评论:
"This product is amazing, but the delivery was late." - 分词后:
["This", "product", "is", "amazing", ",", "but", "the", "delivery", "was", "late", "."]
随后,“amazing”和“late”等 token 会被情感模型处理并赋予混合情绪标签,为企业提供可执行的洞察。
聊天机器人和虚拟助理
分词使聊天机器人能够有效理解并响应用户输入。例如,客服聊天机器人可能会对如下查询进行分词:
"I need to reset my password but can't find the link."
其分词结果为:["I", "need", "to", "reset", "my", "password", "but", "can't", "find", "the", "link"]。
这种拆分有助于机器人识别用户意图(“重置密码”),并做出相应回复,例如提供链接或操作说明。
分词的挑战
人类语言复杂多变、充满细微差别与歧义,这为分词带来了独特挑战。以下深入探讨部分难点及应对它们的最新进展:
歧义
语言天生具有歧义性。考虑这句话:“Flying planes can be dangerous.” 根据分词与解读方式不同,它可能表示驾驶飞机这件事很危险,也可能表示在飞行中的飞机具有危险性。此类歧义会导致截然不同的理解。
缺乏清晰词边界的语言
一些语言(如中文、日文或泰语)缺少显式的词间空格,使分词更加复杂。如何判定词的起止是这些语言中的一大难题。
为此,多语种分词模型取得了显著进展。例如:
- XLM-R(跨语言模型 - RoBERTa)使用子词分词和大规模预训练,有效处理 100 多种语言,包括那些没有清晰词边界的语言。
- mBERT(多语言 BERT)采用 WordPiece 分词,在多种语言中表现出色,即便在低资源语言中也能较好地理解句法与语义结构。
这些模型不仅能有效地进行分词,还利用跨语言共享的子词词表,提升了对通常更难处理文字体系的分词效果。
处理特殊字符
文本中往往包含不止是普通词汇。电子邮件地址、URL 或特殊符号的分词可能很棘手。例如,是否应将 “[email protected]” 视为一个整体 token,还是在句点或“@”处分开?先进的分词模型如今会结合规则和学习到的模式,确保对此类情况的一致处理。
分词的实现
自然语言处理领域提供了众多工具,可满足不同需求与复杂度。以下是一些用于分词的主流工具与方法概览。
Hugging Face Transformers
Hugging Face Transformers 库是现代 NLP 应用的行业标准。它可与 PyTorch 和最先进的 transformer 模型无缝集成,并通过 AutoTokenizer API 自动处理分词。主要特性包括:
AutoTokenizer:为任意模型自动加载正确的预训练分词器。- 高速分词器:基于 Rust 构建,显著提升速度,使大数据集的预处理更快。
- 预训练兼容性:分词器与特定模型(BERT、GPT-2、Llama、Mistral 等)完美匹配。
- 支持子词分词:该库支持 BPE(字节对编码)、WordPiece 和 Unigram 分词,高效处理超出词表词汇与复杂语言。
spaCy
spaCy 是一款现代高效的 Python NLP 库,在需要速度与可解释性的生产系统中表现出色。不同于 Hugging Face,它采用以语言学准确性为优化目标的规则式分词。
何时使用 spaCy:
- 构建传统 NLP 流水线(命名实体识别、依存句法分析)
- 未使用 transformer 模型的项目
- 对分词速度要求极高的性能关键型系统
NLTK(仅限教学用途)
NLTK(自然语言工具包)是主要用于学习与研究的基础 Python 库。尽管仍可使用,但相较现代替代方案要慢得多,不建议用于生产系统。
仅在以下场景使用 NLTK:
- 学习 NLP 概念
- 教学项目
- 语言学研究
对于所有生产级应用,优先选择 spaCy 或 Hugging Face Transformers。
历史说明:Keras Tokenizer
keras.preprocessing.text.Tokenizer 自 Keras 3.0 起已弃用,新项目不应再使用。现代 Keras 项目应改用 keras.layers.TextVectorization。对于 NLP 任务,推荐使用 Hugging Face Transformers。
高级分词技术
对于专项用例或自建模型,这些方法可提供更精细的控制:
- 字节对编码(BPE):一种自适应分词方法,迭代合并文本中最常见的字节对。它是 GPT-2、GPT-3 以及大多数现代大语言模型的默认分词方法。BPE 在处理未知词与多样文字体系方面尤为有效,无需进行特定语言的预处理。
- SentencePiece:一种为基于神经网络的文本生成任务设计的无监督文本分词器。与 BPE 不同,它可将空格视为 token,并使用单一模型处理多种语言,非常适合多语种项目与与语言无关的分词。
这两种方法可通过 Hugging Face Transformers 使用,也可作为独立库使用。
无分词建模
虽然分词目前对高效 NLP 至关重要,但新兴研究正在探索无需固定分词方案、直接在字节或字符层面上运行的模型。
最新进展:
- ByT5:一种在 UTF-8 字节上运行而非子词 token 的预训练模型,在保持与传统分词方法相当性能的同时,对字符级变体更具鲁棒性。
- CharacterBERT:学习字符级表示,并从字符序列中动态构建词向量,无需固定词表。
- 分层式 transformer:通过分层编码策略接受原始字节输入,且效率损失最小的架构创新。
这些方法尚未在大规模生产中成熟,仍主要处于研究阶段。然而,它们在提升对多样语言和文字体系的鲁棒性方面展现出可期优势。
为何重要:无分词模型或将降低对特定语言预处理与词表管理的依赖,使 NLP 系统更具普适性。然而,就当前应用而言,传统分词仍是效率与实用性的标准做法。
结语
从搜索引擎到大型语言模型,分词是每一个现代 NLP 应用的基石。
您选择的分词方法与工具将直接影响模型准确性、推理速度和 API 成本,因此理解不同方法之间的权衡至关重要。为您的具体用例选择合适的分词策略,能显著提升生产系统的性能与效率。
建议学习 Introduction to Natural Language Processing in Python 课程,深入了解预处理技术并探索分词器的世界。
想要进一步了解 AI 和机器学习?请查看以下资源:
FAQs
单词分词与字符分词有何区别?
单词分词将文本拆分为单词,而字符分词将其拆分为字符。
为什么分词在 NLP 中很重要?
它通过将语言拆分为可管理的片段,帮助机器理解并处理人类语言。
我可以在同一文本上使用多种分词方法吗?
可以。根据具体任务的不同,组合使用多种方法可能会获得更好的效果。
NLP 中最常用的分词工具有哪些?
NLP 中最常用的分词工具包括 Hugging Face Transformers、spaCy、NLTK、SentencePiece 和字节对编码(BPE)。它们各有所长,适用于从生产级 transformer 模型到专项研究应用的不同任务。
对于中文或日文等没有空格的语言,分词如何工作?
对于没有显式词间分隔的语言,分词会使用字符级切分或基于统计模型寻找最可能的词边界等技术。
分词如何帮助搜索引擎返回相关结果?
它将查询与文档拆分为可索引的单元,从而实现高效的查找与匹配。这既提升速度也提高准确性。
作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

在自然语言处理(NLP)和机器学习领域,分词是指将一段文本转换为更小的部分(即 token)的过程。这些 token 可以小至字符,也可以长至单词。之所以重要,是因为该过程通过将语言拆解为更易分析的小块,帮助机器理解人类语言。