各种huggingface分词器对比

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

输出居然和上面的也一样。

你可能感兴趣的:(AI与ML,人工智能,深度学习)