4

当我运行 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,   168,   168,   168,   168,   168,   168,
       168,   168,   168,   168,   168,   168,   168,   168,   168, 10114,
     10105, 18458,   119,   102]]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

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

4

1 回答 1

2

__call__标记器的方法有一个属性add_special_tokens,默认为True. 这意味着在开头添加 BOS(句子开头)标记,在结尾添加 EOS(句子结尾)标记。如果不想使用这些符号,可以设置add_special_tokensFalse

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

于 2020-12-21T09:40:09.417 回答