首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Byte级BPE的词汇量比Unicode的词汇量小?

为什么Byte级BPE的词汇量比Unicode的词汇量小?
EN

Stack Overflow用户
提问于 2021-02-14 08:17:34
回答 2查看 952关注 0票数 2

我最近读了GPT2,报纸上说:

在添加任何多符号标记之前,

将产生超过13万个基本词汇表。与BPE经常使用的32,000到64,000个令牌词汇表相比,这是非常大的。相反,BPE的字节级版本只需要256大小的基词汇表.

我真的不明白这些词。Unicode所代表的字符数为130 K,但如何将其减少到256个?剩下的大约129 K字符在哪里?我遗漏了什么?字节级BPE允许在不同字符之间复制表示吗?

我不明白逻辑。以下是我的问题:

  • 为什么词汇量变小了?(从130 K到256)
  • (字节级BPE)的逻辑是什么?

细节问题

谢谢你的回答,但我真的不明白。假设我们有130 K的独特字符。我们想要(和BBPE做的)是减少这个基本的(独特的)词汇表。使用UTF-8编码,每个Unicode字符可以转换1到4个字节.BBPE的原始论文说(有拜特级子词的神经机器翻译):

以字节表示文本的

和使用256个字节集作为词汇表的是解决此问题的一个潜在解决方案。

每个字节可以表示256个字符(位,2^8),我们只需要2^17 (131072)位来表示唯一的Unicode字符。在这种情况下,原始论文中的256个字节从何而来?我既不知道逻辑,也不知道如何得出这个结果。

我再次安排我的问题,更详细的:

  • ,BBPE是如何工作的?

  • ,为什么词汇量变小了?(从130 K到256个字节)
    • ,我们总是需要130 K的空间。将惟一字符表示为Unicode和Bytes?

有什么区别?

由于我对计算机架构和编程知之甚少,如果我错过了什么,请告诉我。

真诚地谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-14 08:56:33

Unicode代码点是0..1,114,112范围内的整数,其中大约130 k目前正在使用。每个Unicode代码点对应一个字符,如"a“或"λ”或"龙",在许多情况下这很容易处理(但是有很多复杂的细节,例如。组合标记)。

将文本数据保存到文件中时,可以使用其中一个UTF (UTF-8、UTF-16、UTF-32)将代码点(整数)转换为字节。对于UTF-8 (最流行的文件编码),每个字符由1、2、3或4个字节表示(有一些内部逻辑来区分单字节和多字节字符)。

因此,当基词汇表是字节时,这意味着将用多个BPE段对稀有字符进行编码。

示例

让我们考虑一个简短的例句,比如“那很好”。

对于包含所有Unicode字符的基本词汇表,BPE模型的开头如下所示:

代码语言:javascript
复制
T      54
h      68
a      61
t      74
’    2019
s      73
       20
g      67
r      72
e      65
a      61
t      74
       20
   1F44D

(第一列是字符,第二列是十六进制表示法的编码点。)

如果您首先用UTF-8对这个句子进行编码,那么这个字节序列将被输入到BPE中:

代码语言:javascript
复制
T      54
h      68
a      61
t      74
�      e2
�      80
�      99
s      73
       20
g      67
r      72
e      65
a      61
t      74
       20
�      f0
�      9f
�      91
�      8d

排版撇号“‘”和拇指向上表情符号由多个字节表示。

在这两种输入中,BPE分段(训练后)的结尾可能如下所示:

代码语言:javascript
复制
Th|at|’s|great|

(这是一个假设的分段,但大写的“那个”可能太少见了,不能用单个片段来表示。)

但是,BPE操作的数量是不同的:要到达段’s,代码点输入只需要一个合并步骤,而字节输入则需要三个步骤。

对于字节输入,BPE分段很可能以少有字符的子字符段结束。下游语言模型必须学会处理这种输入。

票数 2
EN

Stack Overflow用户

发布于 2022-12-04 13:20:59

因此,您已经知道BPE的右字节级BPE是一个即兴的基础词汇表是如何定义。回想一下,unicode字母表中有1,43,859个unicode字符,但不知道gpt-2词汇表的大小如何只有50,257。在训练过程中,拥有1.4L的基础词汇表将增加更大的词汇量(在训练过程中,我们将合并频繁出现的unicode字符)。

为了解决这个问题,GPT-2使用了一个字节级进程,它的基词汇表只有256个字符,任何unicode字符都可以用单个或多字节级字符来表示。我仍然不知道unicode字符是如何转换成字节级表示的过程。

这个解释是否让我们明白了为什么我们要使用字节级的表示。再次,gpt-2使用这256个基词汇表,并通过增加频繁出现的字符来增加词汇表的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66193575

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档