问题描述
最近我一直在从this tutorial中的代码开始,从头开始进行RoBERTa模型的训练(没有任何预训练)。
我正在使用按照自己的格式准备的特定语料库
<s> ID 10 <i> COUNTRY USA <i> CAPITAL Washington DC </s>
在这里,<s>
应该是<bos>
令牌,<i>
是我自己的<sep>
令牌,而</s>
是<eos>
令牌
我注意到可以传递给tokenizer.encoder_plus
函数的参数之一是add_special_tokens
。
如果为add_special_tokens=True
,则为句子的编码
<s> COUNTRY USA <i> CAPITAL Washington DC </s>
成为
<s> <s> COUNTRY USA <i> CAPITAL Washington DC </s> </s>
并且special_tokens_mask
是1 0 0 0 0 0 0 0 0 1
(1、8个零,1)。
当我在同一句话上尝试add_special_tokens=False
时
<s> COUNTRY USA <i> CAPITAL Washington DC </s>
编码的结果是正确的:
<s> COUNTRY USA <i> CAPITAL Washington DC </s>
但是,special_tokens_mask
是0 0 0 0 0 0 0 0
(8个零)。
因此,我怀疑(由于某种原因)我的令牌<i>
没有被识别为特殊令牌,因此这次我尝试使用以下方式对句子设置add_special_tokens=False
和True
进行编码仅<s>
和</s>
。
令牌4是<s>
,它既是<cls>
令牌又是<bos>
令牌,而令牌6是</s>
,它充当sep_token
,并且eos_token
。
第一种情况具有add_special_tokens=False
,其特殊令牌掩码充满了0,第一种情况具有add_special_tokens=True
,并且如预期的那样,<bos>
和<eos>
令牌由算法。特殊令牌掩码仅将第一个和最后一个令牌显示为“ 1”,而其他所有4和6都丢失。
# original sentence
<s> ID 10 </s><s> NAME Trevor </s> <s> COUNTRY USA </s><s> CAPITAL Washington DC </s>
# encoding with add_special_tokens=False
[4,232,28,27,6,4,1,63,93,80,97,90,2,64,62,44,3,66,76,94,83,84,89,82,95,47,46,6]
# encoding with add_special_tokens=True
[4,6]
# special_tokens_mask with add_special_tokens=True
[1,1]
在测试了两个版本之后,我用add_special_tokens=True
获得的结果非常好,而我用add_special_tokens=False
获得的第二次失败。
这引起了一些我自己无法解决的问题:
-
如何访问
special_tokens_mask
来将其更正为 应该是? -
RoBERTa在哪里使用该遮罩?
-
是否有将面具设置为我想要的东西的方法?例如的
<s> ID 10 <i> COUNTRY USA </s>
的掩码应为1 0 0 1 0 0 1
如果<s>
,</s>
和<i>
是特殊标记。 -
如果RoBERTa不是执行此操作的正确模型,那么我应该使用哪种模型 去吗?
非常感谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)