← 返回首页

文本输入与预处理

了解模型如何将输入文本分解成token

1什么是Token化?

Token化是将输入文本分解成更小的单位(token)的过程。这些token可以是单词、子词或字符,取决于模型使用的分词器。

在上面的演示中,我们可以看到输入的文本被分解成了多个token。每个token都有一个唯一的ID,模型使用这些ID来查找对应的嵌入向量。

为什么需要Token化?

想象一下,你正在教一个外国朋友学习中文。对于"人工智能"这个词,你可能需要先解释"人工"和"智能"分别是什么意思,然后才能解释整个词的含义。AI模型也需要类似的"分解"过程,将复杂的文本分解成更小的、有意义的单位,这样才能更好地理解和处理。

不同的模型使用不同的分词策略:

  • BPE (Byte Pair Encoding):通过合并最常见的字符对来创建词汇表,就像教孩子识字时,先教单个字母,再教常见的字母组合
  • WordPiece:类似于BPE,但使用不同的评分方式,更注重词的概率分布
  • SentencePiece:可以处理多种语言,包括中文和日文,就像一个多语言翻译器,能理解不同语言的语法结构
  • Unigram:基于子词概率的模型,能够处理未见过的词,就像人类能够理解从未见过的复合词一样

Token化的挑战:

就像人类阅读时可能会对某些词的边界产生歧义(例如"新手机"是"新+手机"还是"新手机"),AI模型在分词时也会面临类似的挑战。不同的分词策略会产生不同的结果,这可能会影响模型的理解和生成能力。

示例:中英文Token化对比

中文示例

原文:人工智能正在改变世界

人工 智能 正在 改变 世界

英文示例

原文:Artificial intelligence is changing the world

Artificial intelligence is changing the world

语言差异与Token化:

注意:中文和英文的Token化方式不同。中文通常按字符或词组进行分割,而英文通常按单词或子词进行分割。这反映了不同语言的特点和模型的设计选择。

中文Token化特点:

  • 中文没有明显的词边界,需要特殊的算法来识别词组
  • 一个汉字可能是一个词,也可能只是词的一部分
  • 同一个词组可能有多种分词方式,如"新手机"可以分成"新+手机"或"新手机"

英文Token化特点:

  • 英文有明确的词边界(空格),但仍有挑战,如"don't"是"do"+"n't"还是"don"+"'t"
  • 长单词可能需要进一步分解,如"unfortunately"可能被分解为"un"+"fortunate"+"ly"
  • 专有名词、缩写和特殊符号需要特殊处理

Token化的实际应用

词汇表大小与效率:

不同的Token化策略会导致不同的词汇表大小。较大的词汇表可以更精确地表示文本,但会增加内存使用和计算复杂度。较小的词汇表更高效,但可能导致更多的未知词(OOV)问题。

实际应用中的挑战:

  • 新词处理:当模型遇到训练数据中没有的新词时,需要能够将其分解为已知的子词
  • 多语言处理:不同语言需要不同的分词策略,多语言模型需要能够处理这种差异
  • 特殊字符和符号:表情符号、数学符号等需要特殊处理
  • 上下文依赖:同一个词在不同上下文中可能有不同的分词方式

Token化对模型性能的影响:

Token化策略会直接影响模型的性能。好的分词器可以帮助模型更好地理解文本,提高生成质量和理解准确性。例如,对于中文分词,如果"人工智能"被错误地分为"人"和"工智能",模型可能无法正确理解其含义。

引导问题

思考以下问题,加深对Token化的理解:

  1. 为什么需要将文本分解成token,而不是直接使用字符或单词?
  2. 不同的分词策略(如BPE、WordPiece)有什么优缺点?
  3. Token化如何影响模型的词汇表大小和处理效率?
  4. 在处理多语言文本时,Token化会面临哪些挑战?
  5. 如何设计一个能够处理未见过的词的Token化策略?
  6. Token化如何影响模型的上下文理解能力?
  7. 在实际应用中,如何选择最适合特定任务的Token化策略?