跳至主要内容

NLP 中的分词:工作原理、挑战与应用场景

机器学习中的 NLP 预处理指南。我们将介绍 spaCy、Hugging Face transformers,以及分词在真实用例中的工作方式。
Abid Ali Awan
Abid Ali Awan

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

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

什么是分词?

想象一下,您在教孩子阅读。您不会一上来就给他们看复杂的段落,而是先从字母开始,再到音节,最后到完整的单词。类似地,分词会将大量文本拆分为更易被机器消化和理解的单元。

分词的主要目标是在不丢失语境的前提下,以对机器有意义的方式表示文本。通过将文本转换为 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 模型到专项研究应用的不同任务。

对于中文或日文等没有空格的语言,分词如何工作?

对于没有显式词间分隔的语言,分词会使用字符级切分或基于统计模型寻找最可能的词边界等技术。

分词如何帮助搜索引擎返回相关结果?

它将查询与文档拆分为可索引的单元,从而实现高效的查找与匹配。这既提升速度也提高准确性。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题