问题描述
当我运行 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,它可以为您正确编码句子对。