首页 > 解决方案 > 原始 bert 与标记器:哪个标记器具有正确的输出?

问题描述

我尝试使用原始 BERT 库中的分词器和分词器库中的分词器,但没有看到一致的结果,尤其是在使用 huggingface 时。我查看了原始 google bert 的代码,似乎基本的分词器由于标点符号括号将其拆分,因此 [UNK] 等被拆分为“[”、“UNK”、“]”。我希望 tokenizers 库也是如此,但会看到不同的结果。哪一个是对的?同样困惑的拥抱脸以小写字母返回“MASK”。我使用了“BERT-Base, Multilingual Cased (New, Recommended)”中的 cased vocab.txt

vocab_file="vocab.txt"

from bert import tokenization
tokenizer = tokenization.FullTokenizer(vocab_file=vocab_file, do_lower_case=False)
tokens = tokenizer.tokenize('[UNK]')
print(tokens)
tokens = tokenizer.tokenize('[MASK]')
print(tokens)


from tokenizers import BertWordPieceTokenizer
tokenizer = BertWordPieceTokenizer(vocab_file)
tokens = tokenizer.encode("[UNK]").tokens[1:-1]
print(tokens)
tokens = tokenizer.encode("[MASK]").tokens[1:-1]
print(tokens)

输出:

['[', 'UN', '##K', ']']
['[', 'MA', '##S', '##K', ']']
['[UNK]']
['[', 'mask', ']']

标签: tokenizebert-language-modelhuggingface-tokenizers

解决方案


推荐阅读