“正在使用bos_token,但尚未设置”是什么意思

问题描述

当我运行 demo.py

from transformers import AutoTokenizer,AutoModel
    
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-multilingual-cased")
model = AutoModel.from_pretrained("distilbert-base-multilingual-cased",return_dict=True)
# print(model)
def count_parameters(model):
    return sum(p.numel() for p in model.parameters() if p.requires_grad)
print(count_parameters(model))
inputs = tokenizer("史密斯先生不在,他去看电影了。Mr Smith is not in. He ________ ________to the cinema",return_tensors="pt")
print(inputs)
outputs = model(**inputs)
print(outputs)

代码展示

{'input_ids': tensor([[  101,2759,3417,4332,2431,5600,2080,3031,10064,2196,2724,5765,5614,3756,2146,1882,12916,11673,10124,10472,10106,119,10357,168,10114,10105,18458,102]]),'attention_mask': tensor([[1,1,1]])}

使用bos_token,但还没有设置。 使用eos_token,但尚未设置。 为什么要打印 bos_token?

解决方法

__call__ method of the tokenizer 有一个属性 add_special_tokens,默认为 True。这意味着在开头添加 BOS(句子开头)令牌,在结尾添加 EOS(句子结尾)令牌。如果您不想使用这些符号,可以将 add_special_tokens 设置为 False

但是,请注意,如果模型使用与训练时相同的标记化和特殊符号,则它们的性能最佳。从你的例子来看,在我看来,你想用一对不同语言的句子来提供模型。此类对通常由特殊标记 [SEP] 分隔。因此,您可能希望使用分词器的 encode_plus method,它可以为您正确编码句子对。

相关问答

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