总结

传统词表示方法没有办法很好地处理未知或罕见的词汇。
WordPiece 和 BPE 是两种子词切分算法,两者非常相似。
WordPiece用于BERT,DistilBERT。
BPE使用RoBERTa。

BPE和WordPiece的区别在于如何选择两个子词进行合并

BPE的词表创建过程:

  1. 首先初始化词表,词表中包含了训练数据中出现的所有字符。
  2. 然后两两拼接字符,统计字符对在训练数据中出现的频率。
  3. 选择出现频率最高的一组字符对加入词表中。

反复2和3,直到词表大小达到指定大小。

WordPiece是贪心的最长匹配搜索算法。基本流程:
首先初始化词表,词表包含了训练数据中出现的所有字符。
2. 然后两两拼接字符,统计字符对加入词表后对语言模型的似然值的提升程度。
3. 选择提升语言模型似然值最大的一组字符对加入词表中。

反复2和3,直到词表大小达到指定大小。

  • 什么是语言模型的似然值以及如何统计似然值的提升程度(Byte Pair Encoding and WordPiece Model自词算法详解):

概率: 一件事发生的可能性
似然性:与概率相反,一件事已经发生,反推在什么情况下,这件事发生的概率最大
似然函数可以表示为:

互信息:可以看做一个随机变量中包含的关于另一个随机变量的信息量,或者说,一个随机变量由于已知另一个随机变量而减少的不确定性。

官网阐述BPE和WordPiece的区别于联系:

链接

WordPiece实现源码

    def tokenize(self, text):"""Tokenizes a piece of text into its word pieces.This uses a greedy longest-match-first algorithm to perform tokenizationusing the given vocabulary.For example:input = "unaffable"output = ["un", "##aff", "##able"]Args:text: A single token or whitespace separated tokens. This should havealready been passed through `BasicTokenizer`.Returns:A list of wordpiece tokens."""def whitespace_tokenize(text):"""Runs basic whitespace cleaning and splitting on a peice of text."""text = text.strip()if not text:return []tokens = text.split()return tokensoutput_tokens = []for token in whitespace_tokenize(text):chars = list(token)if len(chars) > self.max_input_chars_per_word:  #max_input_chars_per_word 默认为 100output_tokens.append(self.unk_token) # 单词长度大于最大长度,用[UNK]表示单词continueis_bad = Falsestart = 0sub_tokens = []while start < len(chars):end = len(chars)cur_substr = Nonewhile start < end: # 贪心的最长匹配搜索 end从最后一位往前遍历,每移动一位,判断start:end是否存在于词表中substr = "".join(chars[start:end])if start > 0: # 若子词不是从位置0开始,前面要加“##”substr = "##" + substrif substr in self.vocab:cur_substr = substrbreakend -= 1if cur_substr is None: #没有在词表中出现的子词,breakis_bad = Truebreaksub_tokens.append(cur_substr)start = end # 从上一子词的后一位开始下一轮遍历if is_bad: #没有在词表中出现的子词(单词中的任何区域),用[unk]表示该词:比如“wordfi”,首先确定“word”为子词,后发现“fi”不存在在词表中,则最终用[UNK]表示“wordfi”output_tokens.append(self.unk_token)else:output_tokens.extend(sub_tokens)return output_tokens

WordPiece 和 BPE 的区别相关推荐

  1. NLP技术中的Tokenization

    ©作者 | Gam Waiciu 单位 | QTrade AI研发中心 研究方向 | 自然语言处理 前言 今天我们来聊一聊 NLP 技术中的 Tokenization.之所以想要聊这个话题,是因为,一 ...

  2. 算法岗SSP offer收割指南!

    文 | 林小平 源 | 知乎 前序 在本文开始以前,林小平首先需要声明的是这篇超详细面经并不是笔者本人的求职笔记,它是笔者学校隔壁实验室22届毕业学弟的面试心路历程和经验心得.由于笔者和这位学弟经常讨 ...

  3. 哈工大SCIR出品《自然语言处理》新书,无套路送5本!

    自然语言处理面临着8个难点,即语言的抽象性.组合性.歧义性.进化性.非规范性.主观性.知识性及难移植性. 正是由于这些难点的存在,导致自然语言处理任务纷繁复杂. 不过,虽然自然语言处理任务多种多样,却 ...

  4. NLP相关论点-浅谈

    大纲 wordpiece softmax sigmoid和softmax的区别和适用范围 LSTM和GRU的区别 损失函数 MSE(Mean Squared Error Loss)均方差损失 交叉熵损 ...

  5. Stanford NLP2

    Lesson 7:Neural Machine Translation gradient vanishing 根据chain rule,如果前三个都很小,gradient vanish Conside ...

  6. 有必要了解的Subword算法模型

    点击下方标题,迅速定位到你感兴趣的内容 前言 介绍 Subword算法 Byte Pair Encoding(BPE) Wordpiece\Sentecepiece model unigram lan ...

  7. Self-Supervised Learning (ELMO, BERT, GPT, Auto-encoder)

    目录 The models become larger and larger - Self-supervised Learning ELMO (feature-based) How to repres ...

  8. [NLP] 自然语言处理基础任务介绍

    概述 本文主要介绍NLP相关基础任务是什么,而不是怎么做.自然语言处理的一大特点是任务种类纷繁复杂,有多种划分的方式.从处理顺序的角度,可以分为底层的基础任务以及上层的应用任务.基础任务输出的结果往往 ...

  9. 【NLP】机器如何认识文本 ?NLP中的Tokenization方法总结

    Tokenization 关于Tokenization,网上有翻译成"分词"的,但是我觉得不是很准确,容易引起误导.一直找不到合适的中文来恰当表达,所以下文采用原汁原味的英文表达. ...

  10. Transformer 这么强,该从何学起?

    Transformer 作为一种基于注意力的编码器 - 解码器架构,不仅彻底改变了自然语言处理(NLP)领域,还在计算机视觉(CV)领域做出了一些开创性的工作.与卷积神经网络(CNN)相比,视觉 Tr ...

最新文章

  1. MindSpore感恩节重磅福利,华为Mate 40E送送送!
  2. 如果你喜欢上了一个程序员小伙 献给所有程序员女友(来自ITeye博客的文章 作者:talent2012)...
  3. k8s的认证和service account简述
  4. mysql数据库用户简单分析_如何用SQLyog来分析MySQL数据库详解
  5. 阿里云开放国内首个云端数据库测试平台,云已成为数据库新标准;华为5G随行WiFi发布;科大讯飞推出 AI 专用语音芯片系列……...
  6. 小米:近期发现5件恶意抢注批量申请Redmi商标事件
  7. 那是财务自由的声音!寒武纪上市造就一批85后亿万富翁
  8. 竞彩足球混合过关赔率API调用示例代码
  9. OSD仿真_MFC程序01
  10. html最大化和最小化,电脑上最大化最小化图标变了怎么办
  11. Quartus II 13.1入门级使用方法 -仿真篇,适用于小白
  12. HTTP 状态码大全
  13. 切换不了摄像头 高拍仪_高拍仪常见问题解答
  14. 阿里云企业邮箱标准版多域名绑定
  15. python项目根目录是在哪_python,_python如何获取当前工程根目录,python - phpStudy
  16. 转:钉钉群直播提取视频文件-手机版
  17. 微信如何用软件测试是否被拉黑,怎么知道微信里对方把自己拉黑或删除了?微信被好友拉黑检测方法...
  18. 【一起DIY】吞币机器人
  19. 【Nas/群晖/服务器】FRP内网穿透实现外网访问
  20. C++学习 十五、类继承(1)基类,派生类,访问权限,protected

热门文章

  1. Xtrabackup 数据备份工具使用方法
  2. 2012年8月26日
  3. giant和huge的区别
  4. 美国篮球巨星科比坠机去世 年仅41岁
  5. Android-N自动旋转屏幕
  6. java栅栏_Java并发工具类(栅栏CyclicBarrier)
  7. PS教程:一分钟搞定 超简单PS皮肤美白方法
  8. oracle12c 日志分析,【案例】Oracle 12C日志大量Resize operation completed for file信息
  9. 基于stm32f103的俄罗斯方块游戏
  10. idea git 颜色代表什么意思