Introduciton

transformer类型的预训练模型层出不穷,其中的tokenizer方法作为一个非常重要的模块也出现了一些方法。本文对tokenizer方法做一些总结。参考来自hunggingface。

tokenizer在中文中叫做分词器,就是将句子分成一个个小的词块(token),生成一个词表,并通过模型学习到更好的表示。其中词表的大小和token的长短是很关键的因素,两者需要进行权衡,token太长,则它的表示也能更容易学习到,相应的词表也会变小;token短了,词表就会变大,相应词矩阵变大,参数也会线性变多。所以token的粒度通常分为word和char,中文则对应为词级别和字级别;目前比较流行的是subword-子词级别,将词进一步分为有意义的子词,这在英文中比较常见(词根,词缀),其中在transformers模型中常用的subword tokenizer有三种:BPE、WordPiece、SentencePiece。

Byte-Pair-Encoding

BPE(byte-pair-encoding)基于pre-tokenization对训练数据进行切分。Pre-tokenization可以使用简单的空格分割,比如GPT2、RoBERTa;可以使用规则分词方法,如XLM、FlauBERT,GPT;进行完pre-tokenization之后,需要对词进行频率统计,之后会将一批symbol作为基础vocabulary,根据之前的词频统计结果或者别的规则方法作为合并方法对symbol进行合并,并扩充入vocabulary。如此循环直至词表大小达到预先设置值或者合并结束。

Byte-Level BPE

代表模型:GPT。如果将所有unicode字符视为基本字符,则包含所有可能的基本字符的基本词汇表可能相当大。为了获得更好的基础词汇表,GPT-2使用字节作为基础词汇表,这是一个巧妙的技巧,可以强制基础词汇表的大小为256,同时确保每个基础字符都包含在词汇表中。使用一些额外的规则来处理标点符号,GPT2的标记器可以标记每个文本,而不需要<unk>符号。

WordPiece

WordPiece代表模型:BERT、DistilBERT和Electra,与BPE非常相似。WordPiece首先初始化词汇表以包含训练数据中的每个字符,并逐步学习给定数量的合并规则。与BPE相反,WordPiece并没有选择最频繁的符号对,而是选择一个一旦将训练数据添加到词汇表中,就可以最大化训练数据可能性的符号对。下图为词表的生成流程:

Unigram

Unigram也是一种子词的tokenization,虽然在transformer模型中没有直接使用,但是在SentencePiece中会有用到,所以学习一下。unigram方法和上面两种分词器方法相反,先初始化一个包含大量的symbol的基础vocabulary,其中包含预分词生成的word和高频的子词,然后通过修剪方法缩小词表大小。unigram的修剪方法是训练一个语言模型来计算word修剪前后的loss变化,选择去除loss增加最少的词。为了防止out-of-vocabylary,词表会始终保留单个字符。具体流程如下图:

由于unigram没有合并规则,所以在对句子进行tokenizer时会有很多可能的情况。unigram方法会在生成词表时记录每个词的概率,所以可以在tokenizer时会可能出现的情况计算其概率选择概率最大的情况作为最终tokenizer方案。

SentencePiece

SentencePiece代表模型:XLNet、marian、T5、ALBERT。前面描述的tokenizer算法都有相同的问题:假设输入文本使用空格分隔单词。然而,并非所有语言都使用空格分隔单词。一种可能的解决方案是使用特定于语言的预标记器,例如,XLM使用特定的中文、日文和泰文预标记器。为了更普遍地解决这一问题,SentencePiece将输入视为原始输入流,从而包括要使用的字符集中的空间。它一般使用BPE或unigram算法来构造适当的词汇表。

Tokenizer总结相关推荐

  1. tokenizer.encode() 与 tokenizer.tokenize()对比,言简意赅 转 高人讲学

    tokenizer.encode()_不知道起什么名字-CSDN博客_tokenizer.encode tokenizer.encode("说你跑的挺远",add_special_ ...

  2. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  3. Lucene 中的Tokenizer, TokenFilter学习

    https://brandnewuser.iteye.com/blog/2305140 lucene中的TokenStream,TokenFilter之间关系 TokenStream是一个能够在被调用 ...

  4. transformers库的使用【二】tokenizer的使用,模型的保存自定义

    使用标记器(tokenizer) 在之前提到过,标记器(tokenizer)是用来对文本进行预处理的一个工具. 首先,标记器会把输入的文档进行分割,将一个句子分成单个的word(或者词语的一部分,或者 ...

  5. 白话Elasticsearch56-数据建模之 Path Hierarchy Tokenizer 对文件系统进行数据建模以及文件搜索

    文章目录 概述 官网 示例 模拟:文件系统数据构造 测试path_hierarchy分词 需求一: 查找一份,内容包括ES,在/workspace/workspace/projects/hellowo ...

  6. boost::tokenizer模块相关的测试程序

    boost::tokenizer模块相关的测试程序 实现功能 C++实现代码 实现功能 boost::tokenizer模块相关的测试程序 C++实现代码 #include <iostream& ...

  7. ElasticSearch之Tokenizer 分词器

    java学习讨论群:725562382 Tokenizer Standard Tokenizer curl -X POST "192.168.0.120:9200/_analyze" ...

  8. [深度学习TF2][RNN-NPL数据预处理] -Tokenizer函数

    TF2-Tokenizer函数 1. 背景介绍 2. 函数Tokenizer 介绍 2.1 设置要保留多少个高频词汇, 2.2 训练数据集, 得到一个统计信息 2.3 把单词转化为数值index 2. ...

  9. Keras---text.Tokenizer:文本与序列预处理

    keras中文文档:http://keras-cn.readthedocs.io/en/latest/preprocessing/text/ 1.简介 在进行自然语言处理之前,需要对文本进行处理. 本 ...

  10. 7-125 切分表达式——写个tokenizer吧 (20 分)

    7-125 切分表达式--写个tokenizer吧 (20 分) [先说点出题背景] 这个题是为低年级同学.学C语言的同学准备的,因为,对这部分同学,这个题目编写起来略有一点复杂.如果是高年级.学过了 ...

最新文章

  1. 国家哀悼日网站变灰的样式
  2. Smarty 生成静态页
  3. 利用栈将中缀表达式转化成后缀表达式
  4. java命令行选项6_6.jdk命令行工具
  5. 对Xml文档进行操作(修改,删除)
  6. Spring学习大杂烩(待续)
  7. RMI:Java中的分布式计算框架
  8. github中文版_GitHub 上的 Awesome 系列(资源大全系列)
  9. Web 方向学习路线
  10. 手机qq怎么添加相册表情包_手机qq怎么制作表情包配文字
  11. qtdesigner页面布局
  12. AVI文件在opencore框架下的解析
  13. python 化学反应_有意思的Python:用python配平化学方程式
  14. MIT6.828学习之Lab1
  15. 《离别小叙》一个感伤的程序员
  16. s3fs挂载对象存储到本地
  17. 爬虫项目代理操作和线程池爬取
  18. 唱吧创始人:可能再过半年,这一波创业潮就彻底消失了
  19. 《勋伯格和声学》读书笔记(一):大调三和弦的排列与结构
  20. java的含义是什么

热门文章

  1. 基于密度聚类的新闻热点发现实现步骤
  2. 查看休眠文件大小清理休眠文件
  3. No proposals have been found to fix the unresolvable reference to ‘Exception‘.Click here to manually
  4. 如何成为一个好的项目技术管理人员
  5. 自己开发邮编查询,根据地址查邮编代码实现(JAVA)
  6. 职场小故事,工作大道理(14)
  7. Java 程序员要掌握的 10 款工具
  8. jar反编译成java工具
  9. 有关孔隙比的基本概念和计算公式
  10. MySQL 亿级数据需求的优化思路(一),交易流水记录的查询