tokenize - 原始 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', ']']
解决方案
推荐阅读
- javascript - 如何在 getusermedia 中更改 640*480 分辨率的 FPS?
- android - 无法更新 React-native
- javascript - 如何在 HTML 构建的表单中使用 JavaScript 对某些总值进行排名?
- python - 如何使用学生的功能来排序他们的平均值?
- excel - VBA插入列标题并在列上填充公式
- c# - 在包含数值的字符串字段上使用 datareader.getString() 时出现 InvalidCastException
- angular - jasmine callFake 未被使用;真正的函数仍然被调用
- python - CTRL_C_EVENT 发送到子进程杀死父进程
- gtk3 - 在没有 UI 的情况下更改选择后,TreeView 多选无法正常工作
- java - Java结合类正确