bert-base-chinese
对于dinner
这种英语词汇,表现不佳,
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")
输出如下,除去收尾的占位符,dinner被分成了3个词,差不多是每两个字符当一个词。这样分词是不合理的。
{‘input_ids’: [101, 9796, 12866, 8180, 102], ‘token_type_ids’: [0, 0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1, 1]}
该分词器将dinner分为了[di, nne, r]三组,如何证明?只需要让其处理dinne,可见两者的分词结果前缀相等。
res = tokenizer("dinner")
print(res)
print(tokenizer.decode(res.input_ids))print(tokenizer("dinne"))
输出如下:
{‘input_ids’: [101, 9796, 12866, 8180, 102], ‘token_type_ids’: [0, 0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1, 1]}
[CLS] dinner [SEP]
{‘input_ids’: [101, 9796, 12866, 102], ‘token_type_ids’: [0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1]}
hfl/chinese-bert-wwm-ext
tokenizer = AutoTokenizer.from_pretrained("hfl/chinese-bert-wwm-ext")res = tokenizer("dinner")
print(res)
print(tokenizer.decode(res.input_ids))print(tokenizer("dinne"))
print(tokenizer("dinn"))
得到基本一致的结果
{‘input_ids’: [101, 9796, 12866, 8180, 102], ‘token_type_ids’: [0, 0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1, 1]}
[CLS] dinner [SEP]
{‘input_ids’: [101, 9796, 12866, 102], ‘token_type_ids’: [0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1]}
{‘input_ids’: [101, 9796, 9502, 102], ‘token_type_ids’: [0, 0, 0, 0], ‘attention_mask’: [1, 1, 1, 1]}
bert-base-chinese
输出居然和上面的也一样。