温馨提示:本文翻译自stackoverflow.com,查看原文请点击:nlp - Difficulty in understanding the tokenizer used in Roberta model
bert-language-model huggingface-transformers nlp pytorch

nlp - 难以理解Roberta模型中使用的标记器

发布于 2020-07-05 11:57:15
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))

输出:

['A','ĠTitan','ĠRTX','Ġhas','Ġ24','GB','Ġof','ĠVR','AM']

['A','Titan','R','## T','## X','has','24','## GB','of','V','##内存']

伯特模型使用WordPiece标记程序。WordPiece词汇表中未出现的任何单词都会贪婪地分解为子单词。例如,“ RTX”分为“ R”,“ ## T”和“ ## X”,其中##表示它是一个子令牌。

Roberta使用BPE令牌生成器,但我听不懂

a)BPE令牌生成器如何工作?

b)G在每个令牌中代表什么?

查看更多

提问者
Mr. NLP
被浏览
1
dennlinger 2020-04-10 15:45

这个问题非常广泛,因此我想给出一个针对当前主要问题的答案。如果您需要回答其他问题,请一次打开一个重点关注一个问题的问题,请参阅Stackoverflow的[help / on-topic]规则。

本质上,正如您已经正确地确定的那样,BPE对于现代深度网络中的任何标记化都是至关重要的。我强烈建议您阅读Sennrich等人原始BPE论文。,其中还重点介绍了BPE的历史。
在任何情况下,任何拥抱模型的令牌生成器都是经过预训练的,这意味着它们通常是事先从算法的训练集中生成的。诸如SentencePiece之类的常见实现也可以更好地理解它,但是从本质上讲,该任务被构造为一个约束优化问题,在该问题中,您指定了k允许的最大词汇量(约束),然后算法尝试保留尽可能多的词汇完整无缺的单词k

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

问题的第二部分更容易解释。BERT突出显示两个后续令牌(带有合并##,而RoBERTa的令牌生成器则突出显示具有特定unicode字符(在本例中为带有点的G 的新令牌\u0120)的开头。我为此找到的最佳原因是该线程该线程认为它基本上避免了在训练中使用空格。