目录

1. space、punctuation、rule-based tokenization

2. Subword tokenization

2.1 Byte-Pair Encoding (BPE)

Byte-level BPE

2.2 WordPiece

2.3 Unigram

2.4 SentencePiece:ALBERT,XLNet,Marian和T5


tokenizing a text是将文本分为words或subwords,然后通过look-up table将其转换为ID。我们将研究Transformers中使用的三种主要分词器类型:字节对编码(BPE),WordPiece和SentencePiece,并显示每种模型使用哪种分词器类型的示例。

链接:Summary of the tokenizers

1. space、punctuation、rule-based tokenization

space、punctuation、rule-based tokenization: word tokenization, 即splitting sentences into words.

优点:将文本分成较小chunks的最直观的方法;

缺点:使用所有唯一的words和tokens,通常会使vocabulary很大。Such a big vocabulary size forces the model to have an enormous embedding matrix as the input and output layer, which causes both an increased memory and time complexity. In general, transformers models rarely have a vocabulary size greater than 50,000, especially if they are pretrained only on a single language.

例如,Transformer XL使用空格和标点符号化,词汇量为267,735!

2. Subword tokenization

Subword tokenization是word-level 和 character-level tokenization的混合体

Subword tokenization算法基于以下原则:不应将常用词分解为较小的子词,而应将稀有词分解为有意义的子词,即frequently used words should not be split into smaller subwords, but rare words should be decomposed into meaningful subwords.

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
tokenizer.tokenize("I have a new GPU!")

[“i”, “have”, “a”, “new”, “gp”, “##u”, “!”]

The tokenizer splits “gpu” into known subwords: [“gp” and “##u”].

"##":that the rest of the token should be attached to the previous one, without space (for decoding or reversal of the tokenization)

SentencePiece:

from transformers import XLNetTokenizer
tokenizer = XLNetTokenizer.from_pretrained("xlnet-base-cased")
tokenizer.tokenize("Don't you love  Transformers? We sure do.")

[“▁Don”, “’”, “t”, “▁you”, “▁love”, “▁”, “”, “▁”, “Transform”, “ers”, “?”, “▁We”, “▁sure”, “▁do”, “.”]

2.1 Byte-Pair Encoding (BPE)

学习资料:BPE论文

BPE依赖于pre-tokenizer,该pre-tokenizer将训练数据分成单词, Pretokenization可以像空格分词器一样简单。

After pre-tokenization, a set of unique words has been created and the frequency of each word it occurred in the training data has been determined. Next, BPE creates a base vocabulary consisting of all symbols that occur in the set of unique words and learns merge rules to form a new symbol from two symbols of the base vocabulary. It does so until the vocabulary has attained the desired vocabulary size. Note that the desired vocabulary size is a hyperparameter to define before training the tokenizer.

Step1:pre-tokenization:创建一组唯一的单词和在训练数据中出现的每个单词的频率。如:

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

Step2:BPE创建一个base vocabulary(该词汇表由一组出现在唯一词中的所有符号组成);并学习合并规则(从基础词汇表的两个符号中形成一个新符号), 这样做直到词汇表达到所需的词汇量vocabulary size 为止。 注意,vocabulary size 是在训练tokenizer之前定义的超参数。如:

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

Splitting all words into symbols of the base vocabulary:("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)

然后,BPE计算每个可能的符号对的频率,并选择最频繁出现的符号对。

假设BPE训练将在此处停止,则将学习的合并规则应用于新单词(只要这些新单词不包括基本词汇表中没有的符号)。

the vocabulary size = the base vocabulary size + the number of merges, is a hyperparameter to choose.

For instance GPT has a vocabulary size of 40,478 since they have 478 base characters and chose to stop training after 40,000 merges.

Byte-level BPE

包含所有可能的基本字符的基本词汇表可能非常大,例如 所有unicode字符都被视为基本字符。 为了拥有更好的基础词汇表,GPT-2使用字节作为基础词汇表,这是一个巧妙的技巧,可以强制基础词汇表的大小为256,同时确保词汇表中包含每个基本字符。随着一些额外的rules 来处理标点符号,GPT-2的标记生成器可以记号化每个文本,而不需要<UNK>符号。

GPT-2的词汇量为50257,它对应于256个字节的基本标记,一个特殊的文本结尾标记以及通过50,000次合并学习的符号。

2.2 WordPiece

WordPiece本质还是用的BPE思想,是用于BERT,DistilBERT和Electra的subword分词算法。

与BPE非常相似,WordPiece首先初始化一个词汇表,包含训练数据中存在的每个字符,然后逐步学习给定数量的合并规则。

与BPE相比,WordPiece不会选择最频繁的符号对,而是会选择一种将训练数据添加到词汇表中的可能性最大化的符号对。最大化训练数据的可能性等同于找到符号对,在所有符号对中,第一个符号后紧跟第二个符号的概率最大。例如。仅当“ ug”由“ u”,“ g”分割的概率大于任何其他符号对时,“ u” followed by“ g”才可以合并。直观上,WordPiece与BPE稍有不同,它通过合并两个符号来评估丢失的内容

2.3 Unigram

与BPE或WordPiece相比,Unigram将其基本词汇表初始化为大量符号,并逐步修整每个符号以获得较小的词汇表。基本词汇可以例如对应于所有pre-tokenized的单词和最常见的substrings。 
Unigram不能直接用于Transformers中的任何模型,但可以与SentencePiece结合使用。

2.4 SentencePiece

参考:https://github.com/google/sentencepiece

使用SentencePiece的模型示例包括ALBERT,XLNet,Marian和T5。

到目前为止描述的所有tokenization算法都具有相同的问题:假定输入文本使用空格分隔单词。 但是,并非所有语言都使用空格来分隔单词。 一种可能的解决方案是使用特定于语言的pre-tokenizers,例如 XLM使用特定的中文、日文和泰文pre-tokenizer。 为了更广泛地解决此问题:

  1. SentencePiece将输入视为原始输入流,因此在要使用的字符集中包含空格 ;

  2. 然后,它使用BPE或unigram算法来构建适当的词汇表。

XLNetTokenizer使用SentencePiece。 使用SentencePiece进行解码非常容易,因为所有tokens都可以串联在一起,并且用空格替换"▁"。 transformers库中所有使用SentencePiece的模型都将它与unigram结合使用。

tokenizers in Transformers:BPE、WordPiece,SentencePiece相关推荐

  1. 深入理解NLP Subword算法:BPE、WordPiece、ULM ,sentencepiece

    https://zhuanlan.zhihu.com/p/86965595 https://zhuanlan.zhihu.com/p/75271211

  2. NLP Subword三大算法原理:BPE、WordPiece、ULM

    Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法在其中已经成为标 ...

  3. 深入理解NLP Subword算法:BPE、WordPiece、ULM

    CHANGLOG 4/18/2020,规范化引用 3/27/2020,新增目录. 前言 Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大 ...

  4. Subword三大算法原理:BPE、WordPiece、ULM

    前言 Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法在其中已经 ...

  5. 理解 NLP Subword算法:BPE、WordPiece、ULM

    前言 Subword算法如今已经成为了一个重要的NLP模型性能提升方法.自从2018年BERT横空出世横扫NLP界各大排行榜之后,各路预训练语言模型如同雨后春笋般涌现,其中Subword算法在其中已经 ...

  6. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  7. 旧文重发:做人、做事,做架构师——架构师能力模型解析

    这篇文章发表于<程序员>2008.04期.其中有关模型图参见: http://blog.csdn.net/aimingoo/archive/2007/06/26/1667508.aspx ...

  8. 帮忙选个号手机号码末四位:4739、3636,2577,8968,1717,2424,8886,5678,4619,5151,6226,1212,4321,2157,3445,觉得哪个好?

    帮忙选个号手机号码末四位:4739.3636,2577,8968,1717,2424,8886,5678, 4619,5151,6226,1212,4321,2157,3445,觉得哪个好? 刚才帮忙 ...

  9. python作业:学生成绩表数据包括:学号、姓名,高数、英语和计算机3门课成绩

    1.学生成绩表数据包括:学号.姓名,高数.英语和计算机3门课成绩,计算每个学生总分,每课程平均分,最高分和最低分.要求:用函数和模块化程序设计方法实现. 请在[python数据分析之禅]gzh后台,回 ...

  10. 免费DNS域名解析服务:稳定、可靠,支持多种线路解析

    免费DNS域名解析服务:稳定.可靠,支持多种线路解析 DNS,即Domain Name System,中文为域名解析系统,平时我们可能感觉不到DNS的存在,但是一旦DNS域名解析出了问题则可能对网站造 ...

最新文章

  1. 阿里某员工论坛炫耀:感谢公司让毕业不到两年的我年入百万
  2. 十种方法保持云中数据安全
  3. display:inline、block、inline-block的区别以及该死的ie6兼容问题
  4. Java 7之基础 - 强引用、弱引用、软引用、虚引用
  5. 组合总和Python解法
  6. 串口通讯基础及S3C2410 UART控制器
  7. gradle 查看依赖类库版本_Android studio中查看依赖的第三方库的历史版本和最新版本...
  8. python中run函数作用_python3多线程中如何改写run()函数?
  9. (转)海外基金销售新模式 机器人投顾与人工相结合
  10. ESP8266学习——HW Timer
  11. 笔记本按开机键没反应怎么办
  12. 网络攻防技术(2021期末考试)
  13. python 证书-Python 发送带自签名证书的 https 请求
  14. Java 执行 JS 脚本工具
  15. nss什么意思计算机网络用语,nss是什么意思 网络语nss是什么意思
  16. 后补贴时代的内容平台之战
  17. 直播live-broadcast中断时,hls-server填充预录视频的方法
  18. matlab求曲线每点的斜率_如何用matlab求出图中各条直线的斜率
  19. oracle高水位线以及pctfree、pctused
  20. ajax访问远程服务器,ajax 获取远程服务器时间

热门文章

  1. android 邮箱 推荐,Android邮箱谁最棒?最新热门邮箱App横向测试
  2. 光盘重装linux系统教程视频,重装系统?一步一步安装系统详细教程【带视频】。...
  3. elvui显示服务器,魔兽世界怀旧服ElvUI插件
  4. [Qt]setGeometry: Unable to set geometry……问题的解决方案
  5. 你真的会调整后视镜吗?正确调整的四个步骤!
  6. 手机连接电脑后,QT的QDIR怎么读取手机文件路径
  7. 网站打开速度测试常用的两种工具及操作方法
  8. 【案例4-8】模拟物流快递系统
  9. 树莓派做旁路网关 及 无法上网解决
  10. Unity WebGL 发布内存优化