transformers的tokenizer总结

2024-03-28 12:44

本文主要是介绍transformers的tokenizer总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.BPE(byte-pair encoding)

根据字母搭配出现的频率组成词根。

初始vocabulary:["b", "g", "h", "n", "p", "s", "u"]

假设训练数据中有10个hug,5个pug,12个pun,4个bun和5个hugs:

("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

那么此时tokenizer会将其分割成:

("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

然后计数字母搭配出现的频率,比如"hu"=10+5=15次,"ug"=10+5+5=20次,"un"=12+4=16次

每次选取频率最高的搭配进行更新vocabulary,那么此时vocabulary:["b", "g", "h", "n", "p", "s", "u","ug"]

再次对语料进行分割,结果为:

("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)

再次计数,再次更新,此时vocabulary:["b", "g", "h", "n", "p", "s", "u","ug","un"]

第三次对语料进行分割,结果为:

("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5)

以此不断更新,直到遇到<unk>(unkonwn,没见过的字母/字符),而vocabulary size和更新次数都是tokenizer训练时的超参数。例如,GPT 的词汇量为 40478,因为它们有 478 个基本字符,并在 40000 次合并后选择停止训练。

2.Byte-level BPE

BPE是基于char的维度进行的,但这样对于某些语言来说,vocabulary会很大。BBPE将文本的UTF-8编码中的一个字节(每个字节有8位的2进制编码,2的8次方=256位。UTF-8可以保证任何语言通用)不同的编码作为vocabulary的base。再加上一些处理标点符号的附加规则。 GPT-2 的词汇量为 50257,对应于 256 字节的基本标记、特殊的文本结束标记以及通过 50,000 次合并学习的符号。

3.WordPiece

与BPE类似,但是与 BPE 相比,WordPiece 不会选择最常见的符号对,而是选择在添加到词汇表后使训练数据的可能性最大化(似然概率最大)的符号对:

P(tx) = freq(x) 就是单词 x 出现的频率,选择x和y合并为z之后句子似然值的变化为freq(z)/(freq(x)*freq(y)),取似然值变化最大的进行合并。

4.Unigram

初始vocabulary的size很大,然后以最大似然的log值作为Loss,选取删掉后对Loss影响最小的约10~20%个symbols从vocabulary中删除

5.SentencePiece

使用“_"代替空格,用于BPE或者Unigram

参考https://colab.research.google.com/github/huggingface/notebooks/blob/main/transformers_doc/en/tokenizer_summary.ipynb#scrollTo=NZqxbedEtCI9

NLP 中的Tokenizer:BPE、BBPE、WordPiece、UniLM 理论 - 知乎

这篇关于transformers的tokenizer总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855647

相关文章

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi