每天5分钟搞懂大模型的分词器tokenizer(六):BBPE

BBPE是一种基于BPE的分词器,它是BPE的一种变种,是由Google Brain团队提出的。BBPE的全称是Byte-level BPE,它是一种基于字节级别的BPE分词器。

1. 直觉式理解

大模型的分词器tokenizer(二):BPE (Byte-Pair Encoding)

BBPE的核心思想是将文本中的字符对(UTF-8编码中是字节对)进行合并,以形成常见的词汇或字符模式,直到达到预定的词汇表大小或者无法继续合并为止。

它和BPE的区别在于,BPE是基于字符级别character的,而BBPE是基于字节byte级别的。

BBPE具有如下的优点:

  • 跨语言通用性:由于它基于字节级别,因此可以更容易地跨不同语言和脚本进行迁移;
  • 减少词汇表大小:通过合并字节对,BBPE可以生成更通用的子词单元,从而减少词汇表的大小;
  • 处理罕见字符OOV问题:BBPE可以更有效地处理罕见字符,因为它不会为每个罕见字符分配单独的词汇表条目,而是将它们作为字节序列处理

请添加图片描述

系列总结

在这个分词器系列分享中,我们从最简单的word level,character level开始,讲述了按词和字符分词的优缺点;

接着我们介绍了sub-word level分词器,包括BPE,WordPiece,Unigram等;

最后我们介绍了两个变种,一个是SentencePiece工具,它将多语言视为Unicode字符序列,不依赖于特定语言的逻辑,SentencePiece可以基于BPE或者Unigram算法,(也可是BBPE算法);

另一个是BBPE算法,它是一种基于字节级别的BPE分词器,即最小单元是字节。

请添加图片描述

你已经掌握了分词器的基本原理和实现,接下来,我们将介绍更多关于大模型的知识,敬请期待!

参考

[1] Unigram tokenization

欢迎关注我的GitHub和微信公众号,来不及解释了,快上船!

GitHub: LLMForEverybody

仓库上有原始的Markdown文件,完全开源,欢迎大家Star和Fork!

### BPE 和 BBPE 的概念对比 #### Byte Pair Encoding (BPE) Byte Pair Encoding 是一种子词单元(subword unit)学习算法,广泛应用于自然语言处理中的分词任务。它通过统计字符序列的频率来逐步构建词汇表,从而实现动态调整单词粒度的效果。这种方法能够有效地解决开放词汇问题(out-of-vocabulary problem),即未登录词无法被表示的问题[^1]。 具体来说,BPE 会从训练数据中提取最常见的字符对并将其合并为新的符号,重复此过程直到达到预定义的词汇大小或满足其他停止条件。这种技术使得模型可以灵活地适应不同长度和复杂性的词语,同时保持较低的计算成本[^4]。 #### Block Byte Pair Encoding (BBPE) Block Byte Pair Encoding 则是对传统 BPE 方法的一种改进版本,旨在进一步提高效率以及降低冗余信息的影响。与标准版相比,BBPE 引入了一个额外的概念——块划分(Block Partitioning),即将输入文本分割成若干固定大小的小块后再执行字节配对操作[^2]。 这一改动带来了几个显著优势: - **更少的记忆需求**:由于每次只针对一小部分数据进行分析,因此所需的存储空间大幅减少; - **更快的速度**:减少了全局扫描次数,加快了整个流程; - **更好的泛化能力**:局部化的更新策略有助于捕捉短语级特征而不仅仅是单个字母组合模式; 然而值得注意的是,尽管这些特性看起来很有吸引力,但在实际应用过程中还需要考虑特定场景下的权衡取舍情况[^3]。 ```python from transformers import AutoTokenizer tokenizer_bpe = AutoTokenizer.from_pretrained("gpt2") # Standard BPE used by GPT-2 tokenizer_bbpe = CustomBBPETokenizer() # Hypothetical implementation of BBPE text_example = "Natural Language Processing is fascinating!" encoded_bpe = tokenizer_bpe.encode(text_example, return_tensors="pt") print(f"BPE Token IDs: {encoded_bpe}") # Assuming we have a custom BBPE tokenizer implemented similarly to HuggingFace's API. if hasattr(tokenizer_bbpe, 'encode'): encoded_bbpe = tokenizer_bbpe.encode(text_example, return_tensors="pt") print(f"BBPE Token IDs: {encoded_bbpe}") else: raise NotImplementedError("Custom BBPE tokenizer not available.") ``` 上述代码片段展示了如何利用 `transformers` 库加载基于常规 BPE 技术的 GPT-2 分词器,并尝试调用假设存在的自定义 BBPE 实现来进行比较测试。 --- ### 总结区别要点 | 特性 | BPE | BBPE | |--------------------|-----------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | 数据单位 | 字符串整体 | 被划分为多个小块的数据 | | 更新范围 | 全局 | 局部 | | 效率提升原因 | - | 减少了内存占用及运算时间 | 虽然两者都属于 subword modeling 类别下有效工具之一,但它们各自适用场合可能有所差异,需依据项目具体情况做出最佳选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值