本文主要是介绍常见分词器tokenizer汇总,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
常见分词器tokenizer
大模型中的分词器:BPE、WordPiece、Unigram LM、SentencePiece
Byte Pair Encoding (BPE)
OpenAI 从GPT2开始分词就是使用的这种方式,BPE每一步都将最常见的一对相邻数据单位替换为该数据中没有出现过的一个新单位,反复迭代直到满足停止条件。
字节对编码(Byte Pair Encoding, BPE)是一种最初为通用数据压缩设计的算法,在自然语言处理(NLP)中被重新用作一种子词(subword)分词方法。它因用于现代NLP模型,如OpenAI的GPT和其他基于变换器(transformer)的架构而广为人知。
在NLP中使用BPE的主要思想是从大量文本语料库开始,然后迭代地将出现频率最高的字节(或字符)对组合起来,形成新的、更长的字节(或字符)序列。这个过程通过合并常见的字符对来减少整个语料库的复杂性,并且能够捕捉到一些词汇的内部结构,这对于处理词形变化丰富的语言尤其有用。在语言模型的训练过程中,BPE允许模型处理未在训练集中直接见过的单词,因为它可以通过已知的子词单元来构造这些单词。
WordPiece
bert用的是wordpiece, wordpiece算法可以看作是BPE的变种。不同的是,WordPiece基于概率生成新的subword而不是下一最高频字节对。WordPiece算法也是每次从词表中选出两个子词合并成新的子词。BPE选择频数最高的相邻子词合并,而WordPiece选择使得语言模型概率最大的相邻子词加入词表。
WordPiece的工作原理如下:
从词汇表中的所有单词开始。
使用给定的词汇大小作为限制,迭代地选择最佳的单词或字符序列进行合并。
在每次迭代中,选择能最大化模型的语言概率的合并。
这个过程会持续,直到词汇表达到预设的大小。
Unigram LM
ULM是另外一种subword分隔算法,它能够输出带概率的多个子词分段。它和 BPE 以及 WordPiece 从表面上看一个大的不同是,前两者都是初始化一个小词表,然后一个个增加到限定的词汇量,而 Unigram Language Model 却是先初始一个大词表,接着通过语言模型评估不断减少词表,直到限定词汇量。
SentencePiece
SentencePiece它是谷歌推出的子词开源工具包,其中集成了BPE、ULM子词算法。除此之外,SentencePiece还能支持字符和词级别的分词。
SentencePiece主要解决了以下三点问题:
以unicode方式编码字符,将所有的输入(英文、中文等不同语言)都转化为unicode字符,解决了多语言编码方式不同的问题。
将空格编码为‘_’, 如’New York’ 会转化为[‘▁’, ‘New’, ‘▁York’],这也是为了能够处理多语言问题,比如英文解码时有空格,而中文没有, 这种语言区别
优化了速度,如果您实时处理输入并对原始输入执行标记化,则速度会太慢。 SentencePiece 通过使用 BPE 算法的优先级队列来加速它来解决这个问题,以便您可以将它用作端到端解决方案的一部分。
这篇关于常见分词器tokenizer汇总的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!