本期问题聚焦于大模型Tokenizer相关问题
本期问题快览
模型中的Tokenization是指的什么
在模型中,Tokenization(分词)是指将文本转换为一系列的tokens(标记)的过程。这些tokens可以是单个字符、单词的一部分,甚至是整个单词或句子片段。分词的目的是为了将文本转换成计算模型能够更容易分析的格式。在大型语言模型(LLMs)如OpenAI的GPT系列中,分词是理解和生成人类语言的关键步骤。
分词的方法会影响模型的性能、复杂性以及其理解语言细微差别的能力。例如,许多LLMs使用一种修改版的字节对编码(BPE)来进行分词,这种方法从最基本的元素——单个字符——开始,逐渐合并最常见的相邻字符或字符序列成为单个tokens。这使得模型能够有效地处理各种语言现象,包括常见词汇、罕见术语、习语,甚至是表情符号。
References
- Introduction to Tokenizers in Large Language Models (LLMs … - Medium
- Understanding Tokenization in Large Language Models
- Understanding “tokens” and tokenization in large language models
- What is Tokenization in NLP & Machine Learning? | Deepgram
常用的Tokenization方法了解有哪些吗
-
词粒度Tokenization:这种方法将文本分割成单词。对于英文,常用的工具有NLTK、SpaCy等;对于中文,则常用jieba、LTP等工具。这种方法能够很好地保留语义信息,但对于拼写错误或缩写等情况的鲁棒性较差。
-
字粒度Tokenization:这种方法将文本分割成单个字符。对于英文,可能会以字母为单位;对于中文,则以单个汉字为单位。这种方法的鲁棒性较强,词表也相对较小。
-
Subword粒度Tokenization:这种方法介于词粒度和字粒度之间。它不会转换最常见的单词,而是将稀有单词分解成有意义的子词单元。例如,“unfriendly"可能会被分解为"un-friendly-ly”。这种方法可以处理未知标记,并且保留了一定的词汇含义和语义细节。
-
BPE(Byte Pair Encoding):这是一种迭代合并频繁出现的字符序列的方法,可以有效地减少词表大小,同时处理未知词汇。
-
Unigram Language Model:这种方法基于概率模型,通过优化下一个词出现的概率来进行Tokenization,它可以输出具有概率的多个分段。
-
WordPiece:这种方法类似于BPE,但它基于可能性而不是频率来形成新的子词单元。
这些方法各有优缺点,通常根据具体的应用场景和需求来选择合适的Tokenization方法。
References
- 机器如何认识文本 ?NLP中的Tokenization方法总结 - 知乎
- 6种Tokenization的独特方法 - 知乎 - 知乎专栏
- 深度学习中的tokenization:理解与应用-百度开发者中心
- 【自然语言处理】一篇文章入门分词(Tokenization)-CSDN博客
- NLP中的Tokenization - 知乎
了解什么是Byte-Pair Encoding(BPE)吗
Byte-Pair Encoding(BPE)是一种在自然语言处理(NLP)中常用的数据压缩技术。它最初是为了压缩文件而设计的,但后来在NLP领域,尤其是在处理大型词汇表时,被广泛应用于各种任务,如机器翻译、文本分类和文本生成。
BPE的核心思想是将常见的字符对(byte pairs)合并成一个单独的新字符,这个过程会反复进行,直到达到预设的词汇大小或者迭代次数。这种方法可以有效地减少需要处理的唯一词汇的数量,同时保留了词汇的大部分语义信息。
例如,如果我们有一个包含以下单词的数据集:“low”, “lower”, “newest”, “widest”,BPE会这样工作:
- 首先,它会将所有单词分解成字符,并在每个单词的末尾添加一个特殊的结束标记,如“low”变成“l o w ”。
- 然后,算法会在整个数据集中查找最常见的字符对,并将它们合并。假设“e s”是最常见的字符对,那么“newest”就会被重新编码为“n e w e s t”。
- 这个过程会不断重复,每次都会合并最常见的字符对,直到达到预设的词汇限制。
BPE的优势在于它能够平衡词汇表的大小和文本的表示能力,同时处理未知或罕见词汇的问题。这使得BPE成为了许多现代NLP模型,如GPT-2、RoBERTa、XLM等的基础组件。
References
- 理解NLP最重要的编码方式 — Byte Pair Encoding (BPE),这一篇就够了 - 知乎
- Byte-Pair Encoding: Subword-based tokenization algorithm
- Byte-Pair Encoding (BPE) in NLP - GeeksforGeeks
- Unraveling the Byte Pair Encoding (BPE) Algorithm in NLP
- BPE Explained | Papers With Code
介绍下Byte-Pair EncodingBPE的核心算法
Byte-Pair Encoding(BPE)是一种在自然语言处理(NLP)中常用的数据压缩算法,它通过迭代合并文本中最频繁出现的字节对或字符对来构建一个更小的子词单元集合。这个算法最初由Sennrich等人在2016年提出,并已广泛应用于机器翻译、文本分类和文本生成等多种NLP任务。
BPE算法的核心步骤如下:
- 初始化词汇表:将文本中的所有字节或字符作为初始词汇表。
- 计算频率:统计每个字节或字符在文本中出现的频率。
- 迭代合并:重复以下步骤直到达到预定的词汇表大小:
- 找出文本中出现频率最高的连续字节对或字符对。
- 将这对字节或字符合并成一个新的子词单元。
- 更新所有包含合并对的字节或字符的频率计数。
- 将新的子词单元添加到词汇表中。
- 表示文本:使用词汇表中的子词单元来表示原始文本。
例如,假设我们有一个包含以下四个单词的文本语料库:“ab”、“bc”、“bcd”和“cde”。初始词汇表由文本中的所有字节或字符组成:{“a”, “b”, “c”, “d”, “e”}。然后,算法会迭代地合并出现频率最高的字符对,比如“bc”,并将其作为一个新的子词单元添加到词汇表中。
BPE算法的优势在于它能够有效地处理大词汇量问题,同时减少未知词(OOV)的出现。它在处理具有丰富形态变化的语言或需要处理词级以下结构的语言时尤其有用。此外,BPE算法支持模型学习到词根和词缀之间的关系,从而提高了模型对文本的理解能力。
References
- Byte-Pair Encoding (BPE) in NLP - GeeksforGeeks
- Byte-Pair Encoding: Subword-based tokenization algorithm
- Unraveling the Byte Pair Encoding (BPE) Algorithm in NLP
- algorithm - Explain bpe (Byte Pair Encoding) with examples? - Stack …
了解什么是WordPiece吗
WordPiece是一种在自然语言处理中使用的子词分割算法。它通过将词汇初始化为语言中的单个字符,然后迭代地将词汇中符号的最频繁组合添加到词汇中。这个过程包括以下步骤:
- 用文本中的所有字符初始化词单元库。
- 使用第一步中的库在训练数据上构建一个语言模型。
- 通过结合当前词库中的两个单元来生成一个新的词单元,从而使词单元库增加一个。
- 在所有可能的新词单元中选择一个,当添加到模型中时,它能最大程度地提高训练数据的可能性。
- 重复第二步,直到达到预定义的词单元限制或可能性增加低于某个阈值。
WordPiece在BERT和谷歌的神经机器翻译系统中得到了应用,它帮助模型更好地处理词汇表外的词,并在各种NLP任务上提高性能。此外,WordPiece的训练算法与BPE(字节对编码)类似,但实际的分词操作不同。
References
- WordPiece Explained | Papers With Code
- WordPiece tokenization - Hugging Face NLP Course
- What is WordPiece? - h2o.ai
- WordPiece: Subword-based tokenization algorithm
介绍一下 WordPiece 思路
WordPiece 是一种用于自然语言处理(NLP)中的子词(subword)分割算法。它主要用于解决传统词表方法中的一些问题,如词汇表过大和无法处理未知词(OOV)的问题。WordPiece 的思路是在词和字符之间找到一个平衡点,通过将词分解为更小的单元,这些单元可以是词根、前缀、后缀等。
WordPiece 算法的基本步骤如下:
- 初始化词表:从最基础的字符开始,构建初始词表。
- 统计频数:在训练数据上统计相邻字符对的频数。
- 合并字符对:选择能够提高语言模型概率最大的相邻字符对进行合并,形成新的子词。
- 迭代过程:重复统计频数和合并字符对的步骤,直到达到预设的词表大小或者增益变得非常小。
这种方法允许模型有效地处理罕见词和未知词,同时保持了一定的语义信息,并且可以减少模型的复杂性。WordPiece 在 Google 的 BERT 模型中得到了广泛应用,用于改善模型对文本的理解和处理能力。它通过迭代地合并频繁出现的字符对,逐渐构建出一个既不会太大也不会丢失太多语义信息的词表。
References
- NLP三大Subword模型详解:BPE、WordPiece、ULM - 知乎
- 理解tokenizer之WordPiece: Subword-based tokenization algorithm - 知乎
- WordPiece是如何基于词表对文本进行切分的-CSDN博客
- [wordpiece]论文分析:Google’s Neural Machine Translation System
了解什么是SentencePiece吗
SentencePiece 是一个开源的文本处理工具,主要用于神经网络模型中的文本生成系统。它是一种无监督的文本 tokenizer 和 detokenizer,可以从原始文本中直接训练出词汇表。这个工具特别适合处理多语言数据,因为它不依赖于特定语言的预处理和后处理。
SentencePiece 支持两种子词算法:Byte-Pair Encoding (BPE) 和 Unigram Language Model。BPE 算法通过合并频繁出现的字符对来减少词汇表的大小,而 Unigram 算法则通过优化语言模型的概率来选择保留哪些词汇。这两种方法都能有效地处理未知词(OOV)问题,并且能够在词汇表大小和语义表达能力之间取得平衡。
一个重要的特点是,SentencePiece 将空格也视为一个普通的符号,并将其包含在词汇表中。这样做的好处是可以保留原始文本的空格信息,使得分词和合并词(detokenization)过程可逆,这对于像中文和日文这样的语言尤其有用,因为这些语言中的词之间通常没有明确的空格分隔。
References
- 大模型词表扩充必备工具SentencePiece - 知乎 - 知乎专栏
- 【LLM】大语言模型学习笔记-3 一文详解sentencepiece(关于大语言模型的词表扩充) - 知乎
- 深入探究SentencePiece分词器:中文语境下的应用与实践
- 分词工具使用系列——sentencepiece使用-CSDN博客
介绍一下 SentencePiece 思路
SentencePiece 是一个由谷歌开发的开源文本处理工具,它主要用于神经网络文本生成系统中的无监督文本分词(tokenization)和合词(detokenization)。这个工具的核心思想是将文本分词问题视为一个无监督学习问题,它不依赖于语言特定的预处理或后处理。
SentencePiece 的特点包括:
- 数据驱动:SentencePiece 直接从原始文本句子中训练分词和合词模型,不需要预先的分词处理。
- 语言无关性:它将句子视为Unicode字符序列,不包含任何依赖于特定语言的逻辑。
- 支持多种子词算法:SentencePiece 支持字节对编码(Byte-Pair Encoding, BPE)和unigram语言模型等算法。
- 子词规则化:SentencePiece 实现了子词采样和BPE-dropout,这有助于提高神经机器翻译模型的鲁棒性和准确性。
- 快速且轻量:分词速度约为每秒50k句子,内存占用约为6MB。
- 自包含:只要使用相同的模型文件,就能得到相同的分词和合词结果。
- 直接词汇ID生成:SentencePiece 管理词汇到ID的映射,可以直接从原始句子生成词汇ID序列。
- 基于NFKC的文本规范化:SentencePiece 执行基于NFKC的文本规范化。
References
- 大模型词表扩充必备工具SentencePiece - 知乎 - 知乎专栏
- GitHub - google/sentencepiece: Unsupervised text tokenizer for Neural …
- 分词工具使用系列——sentencepiece使用-CSDN博客
- 大语言模型之十 SentencePiece-CSDN博客
- 深入探究SentencePiece分词器:中文语境下的应用与实践
Byte-Pair Encoding, WordPiece, SentencePiece这三者有什么区别
Byte-Pair Encoding (BPE)、WordPiece和SentencePiece是自然语言处理中用于子词分词的三种不同算法。它们的主要区别在于它们选择将符号对添加到词汇表中的方式。
-
BPE:最初用于数据压缩,后来被应用于NLP中的分词。它通过合并文本中最常见的字符对来迭代地构建词汇表。这种方法可以有效地处理罕见词汇和词汇外(OOV)词汇。
-
WordPiece:与BPE类似,但在选择要合并的符号对时,WordPiece不仅考虑频率,还考虑合并后对训练数据似然度的最大化。这意味着WordPiece在添加新符号对到词汇表时,会选择那些能使整体数据的似然度最大化的符号对。
-
SentencePiece:与BPE和WordPiece的主要区别在于,SentencePiece直接在原始文本上操作,而不是预先分词的文本。这允许SentencePiece在不同语言和空格使用不一致的情况下更加灵活。此外,SentencePiece实现了BPE和unigram语言模型的分词算法,提供了更快的C++实现,并且可以处理多种语言。
总的来说,这三种算法都旨在通过创建子词单元来减少词汇表的大小,从而解决OOV问题,并提高模型的泛化能力。选择哪一种算法取决于特定任务的需求和语料库的特性。
References
- A comprehensive guide to subword tokenisers | by Eram Munawwar …
- Summary of the tokenizers - Hugging Face
- BPE vs WordPiece Tokenization - when to use / which?
- WordPiece: Subword-based tokenization algorithm
- BPE vs WordPiece Tokenization - when to use / which?
不同大模型LLMs 的分词方式
不同的大型语言模型(LLMs)在处理分词时采用了各种方法。一般来说,这些模型会使用以下几种分词技术:
-
基于规则的分词:这种方法根据预定义的规则来识别词汇边界。例如,中文分词可能依赖于词典和语法规则来确定词语。
-
统计分词:利用大量语料库中的统计信息来预测词汇边界。这种方法通常涉及机器学习算法,如隐马尔可夫模型(HMM)或条件随机场(CRF)。
-
基于神经网络的分词:近年来,基于深度学习的方法,尤其是使用Transformer架构的模型,如BERT和GPT系列,已经成为分词的主流。这些模型通常使用一个称为“子词分割”的技术,它可以将词汇分解为更小的单元(如字节对编码BPE或WordPiece)。
-
端到端分词:一些最新的LLMs,如GPT-3或T5,可以直接在没有明确分词步骤的情况下处理文本,因为它们能够在内部学习到词汇的表示。
每种方法都有其优势和局限性,而且不同的LLMs可能会结合使用多种技术来优化分词的效果。
References