【GitHub项目推荐--大模型中核心算法开源!】【转载】

大语言模型LLM 标记化中常用的字节对编码 (BPE) 算法

源代码

karpathy/minbpe: Minimal, clean code for the Byte Pair Encoding (BPE) algorithm commonly used in LLM tokenization. (github.com)

Byte Pair Encoding(BPE)算法是一种在自然语言处理(NLP)中使用的压缩算法,主要用于表示大词汇量。它由Sennrich等人于2016年引入,广泛应用于各种NLP任务,如机器翻译、文本分类和文本生成等。

BPE的基本思想是通过迭代地合并文本语料库中最频繁的相邻字节或字符对,直到达到预定的词汇大小。生成的子词单元可用于以更紧凑和高效的方式表示原始文本。这个过程可以被看作是一种数据压缩的形式,其中最常见的连续字节对被替换成该数据中不存在的字节。

具体来说,BPE算法首先初始化词汇表,包括文本语料库中的所有字节或字符。然后,计算文本语料库中每个字节或字符的频率。接着,按照频率从高到低的顺序,将最常见的相邻字节或字符对合并成一个新的子词单元,并将其添加到词汇表中。同时,更新原始字节或字符的频率。这个过程不断迭代,直到达到预定的词汇大小或满足其他停止条件。

在NLP任务中,BPE算法可以有效地处理未登录词或生僻词。通过将单词划分为子词单元,即使某个单词在训练集中未出现,只要其子词单元在训练集中存在,就可以利用这些子词单元进行组合来表示该单词。这种灵活性使得BPE算法成为许多NLP模型的首选标记化方法,包括GPT、GPT-2、RoBERTa、BART和DeBERTa等。

总的来说,BPE算法是一种高效、灵活且广泛应用的NLP压缩算法 

BPE算法的主要思想是通过迭代地合并文本中最频繁的相邻字节对来构建词汇表。这个过程从字符级别的词汇表开始,然后逐渐合并成更大的子词单元,直到达到预定的词汇表大小或满足其他停止条件。这种方法可以有效地平衡词汇表的大小和编码句子所需的标记(token)数量。

BPE算法的具体过程如下:

  1. 准备足够大的训练语料,并确定期望的词汇表大小。

  2. 将单词拆分为字符序列,并在末尾添加特殊的后缀(例如“</w>”),以表示单词的结束。同时统计每个单词的频率。

  3. 初始化一个空的词汇表,并将所有字符及其频率添加到词汇表中。此时,词汇表中的每个条目都是一个字符。

  4. 统计所有连续字节对的出现频率。字节对是指两个相邻的字符或子词单元。

  5. 选择频率最高的字节对,将它们合并成一个新的子词单元,并将这个新子词单元添加到词汇表中。同时,更新原始文本中所有匹配该字节对的位置,用新的子词单元替换它们。

  6. 重复步骤4和5,直到达到预定的词汇表大小或下一个最高频的字节对出现频率为1。

BPE算法的优点在于它可以有效地处理未知词汇和罕见词汇。由于算法是按照最大频率合并字节对的,因此那些频繁出现的词汇通常会保持完整,而罕见词汇则会被拆分成更小的子词单元。这样,即使某个词汇在训练集中未出现,只要其子词单元在训练集中存在,模型仍然可以利用这些子词单元的组合来表示该词汇。

然而,BPE算法也存在一些缺点。由于是按照最大频率合并字节对的,这可能导致那些平凡出现的词汇被单独保留在词汇表中,而包含稀有字母组合的词汇则会被拆分成很小的部分。此外,BPE算法生成的词汇表可能包含一些不自然的子词单元边界,这可能会影响模型的性能。

总的来说,BPE算法是一种在大语言模型标记化中广泛使用的有效算法,它能够有效地处理大量词汇和未知词汇的问题。

原文链接:

大模型中核心算法开源! 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值