RoBERTa为什么不将自定义标记标记为特殊标记?

问题描述

最近我一直在从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_mask1 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_mask0 0 0 0 0 0 0 0(8个零)。

因此,我怀疑(由于某种原因)我的令牌<i>没有被识别为特殊令牌,因此这次我尝试使用以下方式对句子设置add_special_tokens=FalseTrue进行编码仅<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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...