数据学习
登录
注册
原创博客
期刊会议
学术世界
期刊出版社
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI领域与任务
AI研究机构
AI学术期刊
AI论文快讯
AI数据集
AI开源工具
AI模型
AI模型概览
预训练模型
数据推荐
网址导航
我的网址导航
程序员必备网站
自然语言处理中常见的字节编码对(Byte-Pair Encoding,BPE)简介
标签:
#NLP#
#自然语言处理#
时间:2022/12/16 20:52:27
作者:小木
字节对编码(Byte Pair Encoder,BPE),又叫digram coding,是一种在自然语言处理领域经常使用的数据压缩算法。在GPT系列模型中都有用到。主要是将数据中最常连续出现的字节(bytes)替换成数据中没有出现的字节的方法。该算法首先由Philip Gage在1994年提出。在这篇博客中我们将简单介绍一下这个方法。 [TOC] #### 基于子词的标记化 标记化(tokenizer)是将自然语言转变成标记的过程,它将文本转换为模型可以处理的数据。模型只能处理数字,因此标记化(Tokenizer)需要将我们的文本输入转换为数字数据。 自然语言处理的基本对象是单词,这其中包括三类,一种是word(单词),一种是subword(子词),还有一种是character(字符)。第一种就是我们英语处理中常见的单词,用空格分开的。但是算法的处理要灵活的多,因为单词是由单个字母组成的,单个字母也叫character。除此之外,为了追求处理速度与语义的均衡,NLP领域还会处理一种叫Subword(子词)的对象。这是一种介于word和character之间的处理粒度。 基于子词的标记化(tokenizer)是介于词和基于字符的标记化之间的一种解决方案。 基于单词的处理面临的问题包括:非常大的词汇量,大量的OOO标记,以及非常相似的词的不同含义。而基于字符的标记化的问题是非常长的序列和意义不大的单个标记。 基于子词的标记化算法并不把常用的词分成更小的子词。相反,它将罕见的词分割成更小的有意义的子词。例如,"boy "不被分割,但 "boys "被分割成 "boy "和 "s"。这有助于模型了解到 "boys "这个词是用 "boy "这个词形成的,其含义略有不同,但都是同一个词根。 字节编码对(Byte Pair Encoder,BPE)就是一种子词处理的方法。其它一些流行的子词标记化算法包括WordPiece、Unigram和SentencePiece。而BPE用于GPT-2、RoBERTa、XLM、FlauBERT等语言模型中。这些模型中有几个使用空间标记化作为预标记化方法,而有几个使用Moses, spaCY, ftfy提供的更高级的预标记化方法。 #### 字节编码对(Byte Pair Encoder,BPE)简介 主要是将数据中最常连续出现的字节(bytes)替换成数据中没有出现的字节的方法。思想很简单,但是很好用。 维基百科中有个简单的例子,假设我们有如下的数据: ``` aaabdaabac ``` 可以看到,上述数据中字节对“aa”出现得最频繁。那么,我们可以使用数据中没有出现过一个字节,例如“Z”来替代,结果如下: ``` ZabdZabac ``` 可以看到这里的`Z=aa`,接下来,ab依然是最长出现的连续字节对,那么再用一个新的字节“Y”代替得到如下结果: ``` ZYdZYac ``` 显然,“ZY”又是一个最频繁出现的连续字节对,那么继续用心的字节“X”代替,得到: ``` XdXac ``` 其中: ``` X=ZY Y=ab Z=aa ``` 到这里,已经无法继续压缩了。如果要还原数据,只需要把上述过程反过来即可。 #### 总结 为了以最有效的方式表示语料库,BPE在每次迭代时都会通过查看其频率来检查每一个潜在的合并选项。因此,是的,它遵循一种贪婪的方法来优化可能的最佳解决方案。 总之,BPE是最广泛使用的子词标记化算法之一,尽管它是贪婪的,但它具有良好的性能。 参考内容: https://towardsdatascience.com/byte-pair-encoding-subword-based-tokenization-algorithm-77828a70bee0 https://en.wikipedia.org/wiki/Byte_pair_encoding
相关博客
最热博客