什么是分词(Tokenization)

AI解读 2个月前 硕雀
25 0

分词Tokenization‍是自然语言处理NLP)中的一个基础概念,指的是将一段连续的文字序列切分成一个个离散的单元(Token)的过程。

这一步是所有语言模型(如ChatGPT)的核心前置步骤之一。不同的语言和处理任务会采用不同的分词策略,以下是对分词概念的详细解析:

1. 基本定义

在NLP中,Token(令牌)‍是处理文本的基本单位。Tokenization(分词)‍则是将连续的文本(如一段话或一个句子)拆解成这些基本单元的过程。

2. 分词的不同层级

分词的粒度(Granularity)可以分为以下几种:

  • 字符级(Character-level)‍:将文本拆解为单个字符(Character)。比如 "ChatGPT" 会被分成 ["C", "h", "a", "t", "G", "P", "T"]。这种方式细粒度高,适用于拼写纠错等任务。
  • 词级(Word-level)‍:将文本拆解为单词(Word)。这是最直观的分词方式,但在处理英语时需要额外处理标点符号和空格。
  • 子词级(Subword-level)‍:将词拆解为更小的子单元(Subword)。这是现代语言模型(如GPT-3/4)最常用的方式,能够兼顾词汇覆盖率和模型参数量(详见BPESentencePiece)。

3. 常见的分词算法

不同的分词策略适用于不同的语言特性:

  • 空格分词(Space Tokenizer‍:
    • 适用语言:英语、法语等西方语言。
    • 原理:直接根据空格(Space)将句子切分为词。
    • 局限性:无法处理标点符号(如 "ChatGPT!" 包含感叹号)。
  • 正则表达式分词(Regex Tokenizer)‍:
    • 适用语言:需要自定义规则的场景。
    • 原理:使用正则表达式匹配特定模式(如数字、日期、URL)。
  • BPE(Byte Pair Encoding‍:
    • 适用语言:英语及混合语言场景。
    • 原理:先将所有词拆解为字符,然后反复合并最频繁出现的字符对(Pair)。例如 "lower" → "low er"。
  • SentencePiece(Unigram Language Model)‍:
    • 适用语言:中日韩等无明确空格的语言。
    • 原理:视文本为字符序列,通过统计学习自动生成子词表,支持Unigram(基于概率)和BPE两种模式。

4. 中文分词的特殊性

中文是一种‍“无空格语言”‍(Space-less Language),这给分词带来了独特的挑战:

  • 词义多样性:一个汉字可能在不同词组中承担不同的语义(如“行”在“银行”与“行走”中的含义不同)。
  • 歧义:同一串字符可能有多种切分方式(如“长春市长”可以切分为“长春/市长”或“长春市/长”)。

因此,中文分词通常需要结合词典(Dictionary)‍和统计模型来判断切分位置。

5. 实际应用示例

我们来对比一下不同的分词方式对一句话的影响:

原始文本我喜欢使用ChatGPT模型。

  • 字符级分词[我, 喜, 欢, 使, 用, C, h, a, t, G, P, T, 模, 型, 。]
  • 词级分词(理想情况)‍:[我, 喜欢, 使用, ChatGPT, 模型, 。]
  • 子词级分词(BPE/SentencePiece)‍:[我, 喜欢, 使用, Chat, GPT, 模型, 。]

分析

  • 字符级最细粒度,但无法表达“ChatGPT”这个整体概念。
  • 词级是最自然的阅读方式,但对于语言模型来说,词表(Vocabulary)会非常庞大,导致模型难以覆盖所有词汇。
  • 子词级是现代AI的折中方案。它既能表示常见词汇(如“ChatGPT”),又能通过组合子词(如“Chat”和“GPT”)来表达罕见词(如“ChatGPT-4”)。

总结

分词(Tokenization)是将文本转化为模型可读的“数字化语言”的第一步。它的好坏直接影响后续模型的理解能力和生成质量。对于中文用户来说,理解分词的机制有助于更好地与AI模型交互(如避免产生歧义切分)。

来源:www.aiug.cn
声明:文章均为AI生成,请谨慎辨别信息的真伪和可靠性!