赞
踩
不同PLM原始论文和transformers库中数据的组织格式。其实,像Roberta,XLM等模型的中<s>, </s>
是可以等价于Bert中的[CLS], [SEP]
的,只不过不同作者的习惯不同。
Bert
[CLS] A [SEP]
[CLS] A [SEP] A [SEP]
Roberta
<s> A </s>
<s> A </s> </s> B </s>
Albert
[CLS] A [SEP]
[CLS] A [SEP] B [SEP]
XLNet
[A] <sep> <cls>
A <sep> B <sep> <cls>
XLM
<s> A </s>
<s> A </s> B </s>
XLM-Roberta
<s> A </s>
<s> A </s> </s> B </s>
Bart
<s> A </s>
<s> A </s> </s> B </s>
关于transformers库中RobertaTokenizer和BertTokenizer的不同
我们注意到,transformers库中RobertaTokenizer需要同时读取vocab_file
和merges_file
两个文件,不同于BertTokenizer只需要读取vocab_file
一个词文件。主要原因是两种模型采用的编码不同:
[unused]
位置,便于使用者将自己数据中重要的token手动添加到词表中。merges.txt
中存储了所有的token,而vocab.json
则是一个byte到索引的映射,通常频率越高的byte索引越小。所以转换的过程是,先将输入的所有tokens转化为merges.txt
中对应的byte,再通过vocab.json
中的字典进行byte到索引的转化。对于Roberta,比如输入的文本是
What's up with the tokenizer?
首先使用merges.txt
转化为对应的Byte(类似于标准化的过程)
['What', "'s", 'Ġup', 'Ġwith', 'Ġthe', 'Ġtoken', 'izer', '?']
再通过vocab.json
文件存储的映射转化为对应的索引
- [ 'What', "'s", 'Ġup', 'Ġwith', 'Ġthe', 'Ġtoken', 'izer', '?']
- ---- becomes ----
- [ 2061, 338, 510, 351, 262, 11241, 7509, 30]
由于RobertaTokenizer是继承自GPT2Tokenizer的,所以GPT2Tokenizer也是相似的过程。
由于中文的特殊性不太适合采用byte级别的编码,所以大部分开源的中文Roberta预训练模型仍然采用的是单字词表,所以直接使用BertTokenizer
读取即可, 不需要使用RobertaTokenizer
。
参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。