Subwords Tokenizer方法介绍: BPE, Byte-level BPE, WordPiece, Unigram, SentencePiece

2023-11-20

Byte-Pair Encoding (BPE) 1

出发点

  • 把每一个单词加入词表的话导致词表过大,因此可以把word切分成subwords加入词典。

原理

  • 先进行pre-tokenization, 即通过空格得到单词,并且统计词频。
  • 创建一个base vocabulary包含所有单词中的符号(字符)。之后迭代方式地学习相邻两个符号结合的规则(所以叫做Byte-pair,字节),每次结合选择频数最高的一对。
  • 具体参考文章开头的链接。

应用

  • GPT: 词表大小:40,478(478个 base characters + 40,000个结合的字符)

Byte-level BPE2

出发点

  • BPE中包含所有单词中的符号的base vocabulary可能很大,比如unicode characters包含了不同语言的字符,是很大的。

原理

  • 使用字节(bytes)而不是字符作为base vocabulary。一个字节是8位,一共256种可能,这样base vocabulary的大小就减小到了256。
  • 之后的迭代操作和BPE一样,要学习相邻符号的结合规则。

应用

  • GPT2: 此表大小:50257 (256 base vocabulary + 1个end-of-text token + 50000 迭代/merge次数)

WordPiece3

原理

  • 关键思想:先将所有字符(characters)作为base vocabulary,然后逐步学习结合字符的规则。相较于BPE每次结合符号选取频数最高的一对,WordPiece选取能够最大化训练数据集似然的一对。
  • 例如:字符“u”和“g”,他们融合成一对“ug”之后的数据集的似然除以“u”和“g”分开时候的似然的比值相较于其他字符结合来说最大。
  • Intuition: 相较于BPE,WordPiece验证融合某一对符号是值得的

应用

  • BERT,DistlBERT,Electra。

Unigram 4

原理

  • 相较于BPE从字符级别构建base vocabulary,Unigram相反,它先用pre-tokenization(比如空格切分)处理之后的所有词作为初始化的base vacobulary,然后逐步地裁剪符号,从而得到一个较小的词典。
  • 在每一步,Unigram都定义个训练集合的loss(如log-likelihood),然后它计算去除一个符号(字典中的一个token)之后整体loss的下降,最终把10%或者20%的那些loss下降最多的符号从词典中去除。直到词典大小符合预期。
    ###应用
  • 对于transformers的库来说,没有模型直接使用Unigram,但是它一般会和SentencePiece一起使用

SentencePiece 5

出发点

  • 上述Tokenization方法都存在的一个问题:都假设输入的文本的pre-tokenization都利用空格来切分字词。但是并不是所有的语言都使用空格来切分字词。

原理

  • 解决思路就是把整个输入作为输入流,即包含了空格
  • 之后再使用BPE或者Unigram的算法来构建词典。
  • 所以SentencePiece使用的时候Tokenize的结果包含空格的信息,用_来表示。
from transformers import XLNetTokenizer
tokenizer = XLNetTokenizer.from_pretrained("xlnet-base-cased")
tokenizer.tokenize("Don't you love 									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Subwords Tokenizer方法介绍: BPE, Byte-level BPE, WordPiece, Unigram, SentencePiece 的相关文章

随机推荐

  • nodeJs(express)文件上传配置

    用node作为服务器端 在需要上传文件到后台时 后台需要相应配置 简单配置如下 1 安装multer依赖 npm install multer save 渣渣前台的渣渣后台技术有限 不是自己配置的node服务器 使用的是webstorm自带
  • Android客户端apk自动检测更新自动下载自动安装的实现方法

    改进了一个可以检测版本更新自动下载自动安装的客户端升级方案 在下载之前删除之前的历史下载文件 减少垃圾数据 先给出核心类 public class DownloadService extends Service private Downlo
  • airpodspro没有弹窗_安卓党能用 AirPods Pro ?这样操作可以完美适配

    AirPods Pro一出现就引爆了市场 高达2000元的售价没能阻拦人们对它的狂热 目前AirPods已经在官网全面缺货 发货等待期甚至多达一个月 这是因为AirPods Pro的产品力实在太过出色 比它降噪强的没它小 比它小的没它降噪
  • C# A potentially dangerous 问题解决

    A potentially dangerous Request Path value was detected from the client 如果在页面中出现上述错误 只需在页面的头文件添加validateRequest false 即可
  • 【Vue基础】Vuex全局管理的基本代码结构及其使用

    Vuex全局管理的基本代码结构及其使用 一 代码结构及其使用 1 state 提供唯一的公共数据源 组件访问 state 中数据的第一种方式 this store state 全局数据名称 组件访问 state 中数据的第二种方式 mapS
  • UE4 使蓝图连接线出现小箭头标志

    当我们写的蓝图杂乱无章 甚至不能看清执行顺序的时候 只需要在偏好设置里设置一下就可以清晰的看清蓝图的执行顺序
  • 区块链+物联网 BOT

    不可否认 我们的一只脚已经迈入万物智联时代 但另一只脚迈入还存在一定的阻碍 区块链技术的出现将会促进这一进程的发展 智能音响 主人你好 我是小Q 现在是早上08点29分 上班时间要到咯 智能门锁 主人你摔疼我了 你总是这样匆忙 下次赶紧麻溜
  • 安装Python第三方库

    视频版教程 Python3零基础7天入门实战视频教程 在Python的标准安装中 包含了一组自带的模块 这些模块被成为 标准库 比如常用的math random datetime os json等等 此外 还有很多的第三方模块 或者叫做库也
  • 若以框架 vue富文本字符串中获取图片的存储路径

    若依的富文本 字符串是上述格式 我们要获取以下格式 就是图片的存储路径 有几个步骤 第一步 main js中添加两行代码 import axios from axios Vue prototype axios axios 第二步 Edit包
  • Python 笔记 — 单例模式和魔术方法

    目录 一 单例模式 1 概念 2 优点 3 使用 4 实现方法 5 运用 6 内存地址 7 通过 new 实现 8 通过 classmethod 9 通过装饰器实现 10 通过导入模块时实现 11 hasattr 函数 12 getattr
  • 内存管理——分页分段

    一 分页存储管理 1 页面与页框 1 页面 将一个进程的逻辑地址空间分成若干个大小相等的片 称为页面或页 并为各页加以编号 2 页框 相应于页面 把内存空间分成和页面相同大小的若干个存储块 称为 物理 块或页框 frame 3 页内碎片 在
  • Android中项目中各个文件夹的含义和用途详解

    1 src 存放所有的 java源程序 2 gen 为ADT插件自动生成的代码文件保存路径 里面的R java将保存所有的资源ID 3 assets 可以存放项目一些较大的资源文件 例如 图片 音乐 字体等 4 res 可以存放项目中所有的
  • IntelliJ IDEA 2022.3 版本 IDAE 的Java 编译器错误问题解决方法

    2022 2 3 版本 IDAE 的Java 编译器错误问题解决方法 如果这是按照以前的办法就是去更改下面 的内容就可以OK了 但是在最新版中无论怎么修改都是无用 不知道为啥 随后我就在这里 是的就是上面 的第二张图中 将11 versio
  • 设计模式——State(状态)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 应用举例 4 1 State TcpState 4 2 Context TcpConnection 4 3 ConcreteState ListeningTcp
  • 生产环境的域名地址与后端给的接口地址不一样时的配置(vue)

    1 找到 config dev env js 文件 module exports merge prodEnv NODE ENV development API ROOT http com 本地开发时用的域名 2 找到 config prod
  • 不在傻傻for循环!完美解决JPA批量插入问题

    前言 jpa在简单的增删改查方面确实帮助我们节省了大部分时间 但是面对复杂的情况就显得心有余而力不足了 最近遇到一个批量插入的情况 jpa虽然提供了saveAll方法 但是底层还是for循环save 如果遇到大量数据插入频繁与数据库交互必然
  • WIN11

    WIN11 安装WSL2 在WSL2上跑pytorch gpu 远程连接WSL2 个人电脑的关键配置 显卡是RTX3090 系统是WIN11 由于买的是整机 所以刚开机就装好了驱动 本人没有再进行显卡驱动 同时包含了wsl中的驱动 的安装
  • Android Log系统介绍 (基于Android N)

    原文使用有道云笔记创作 看这个 http note youdao com noteshare id 82f88b1c82652b80c27d54aad55af035 引言 gt Android 的log 从操作系统分层上来讲 可以分为 Ke
  • Linux内核驱动之GPIO子系统(一)GPIO的使用

    分类 Linux内核驱动 2012 10 31 21 12 162人阅读 评论 1 收藏 举报 目录 一 概述 Linux内核中gpio是最简单 最常用的资源 和 interrupt dma timer一样 驱动程序 应用程序都能够通过相应
  • Subwords Tokenizer方法介绍: BPE, Byte-level BPE, WordPiece, Unigram, SentencePiece

    参考于transformers tokenizer的文档 目录 Byte Pair Encoding BPE 1 出发点 原理 应用 Byte level BPE 2 出发点 原理 应用 WordPiece 3 原理 应用 Unigram
Powered by Hwhale