首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很难理解Roberta模型中使用的令牌器

很难理解Roberta模型中使用的令牌器
EN

Stack Overflow用户
提问于 2020-04-10 04:58:26
回答 2查看 7.5K关注 0票数 13
代码语言:javascript
复制
from transformers import AutoModel, AutoTokenizer

tokenizer1 = AutoTokenizer.from_pretrained("roberta-base")
tokenizer2 = AutoTokenizer.from_pretrained("bert-base-cased")

sequence = "A Titan RTX has 24GB of VRAM"
print(tokenizer1.tokenize(sequence))
print(tokenizer2.tokenize(sequence))

输出:

‘,’Ġ‘泰坦’,'ĠRTX',‘Ġ’有'Ġ24','GB','Ġof','ĠVR','AM‘

‘泰坦’,'R‘’,'##T','##X','has','24','##GB','of','V','##RA','##M‘

Bert模型使用WordPiece令牌程序。在WordPiece词汇表中没有出现的任何单词都会被贪婪地分解成子单词。例如,“RTX”被分为“R”、“##T”和“##X”,其中##表示它是子令牌。

罗伯塔使用BPE令牌,但我无法理解

( a) BPE令牌器是如何工作的?

( b) G在每个记号中代表什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-10 07:45:44

这个问题非常广泛,所以我试图给出一个主要问题的答案。如果您觉得需要回答其他问题,请打开另一个问题,每次只关注一个问题,请参阅Stackoverflow的帮助/主题规则。

本质上,正如您正确识别的那样,BPE是现代深网络中任何令牌化的核心。我强烈建议您阅读原版BPE论文作者: Sennrich等人。,其中还突出了BPEs的一些历史。

在任何情况下,任何一个拥抱面模型的标记器都是预先训练的,这意味着它们通常是由算法的训练集预先生成的。常见的实现(如SentencePiece )也能更好地理解它,但从本质上说,任务是一个受限的优化问题,您可以指定最大数量的k允许词汇表单词(约束),然后该算法试图在不超过k的情况下保持尽可能多的单词不变。

如果没有足够的单词覆盖整个词汇表,则使用较小的单位来近似词汇表,这将导致在您给出的示例中观察到的分裂。RoBERTa使用了一个名为“字节级BPE”的变体,最好的解释可能是在这是王等人的研究。中。主要的好处是,根据我所理解的,它在保持分裂质量的同时,导致词汇量更小。

问题的第二部分更容易解释;伯特强调了两个随后的令牌(与##)的合并,而RoBERTa的令牌器则突出了带有特定unicode字符的新令牌的开始(在本例中,是带有点的G)。我能找到的最好的原因是这条线,它认为它基本上避免了在训练中使用空白空间。

票数 19
EN

Stack Overflow用户

发布于 2022-03-21 19:44:02

( a)我建议给看一看。从本质上讲,BPE (Byte-对编码)采用一个超参数k,并试图构造<=k数量的字符序列,以便能够表达训练文本语料库中的所有单词。RoBERTa使用字节级BPE,它将基词汇表设置为256个,即有多少unicode字符。

( b)带有点的G (Ġ)似乎是随机挑选的,它可能是任何字符。只要有一个字符需要编码,RobertaTokenizer也会使用其他“非典型”字符进行编码,例如'Ĵ‘(u/0134) 'Ĺ’(u/0139)和‘U0 164’来编码表情符号。

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

https://stackoverflow.com/questions/61134275

复制
相关文章

相似问题

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