【发布时间】:2020-10-05 20:44:58
【问题描述】:
我有以下代码片段,并试图了解 BertWordPieceTokenizer 和 BertTokenizer 之间的区别。
BertWordPieceTokenizer(基于 Rust)
from tokenizers import BertWordPieceTokenizer
sequence = "Hello, y'all! How are you Tokenizer ???? ?"
tokenizer = BertWordPieceTokenizer("bert-base-uncased-vocab.txt")
tokenized_sequence = tokenizer.encode(sequence)
print(tokenized_sequence)
>>>Encoding(num_tokens=15, attributes=[ids, type_ids, tokens, offsets, attention_mask, special_tokens_mask, overflowing])
print(tokenized_sequence.tokens)
>>>['[CLS]', 'hello', ',', 'y', "'", 'all', '!', 'how', 'are', 'you', 'token', '##izer', '[UNK]', '?', '[SEP]']
BertTokenizer
from transformers import BertTokenizer
tokenizer = BertTokenizer("bert-base-cased-vocab.txt")
tokenized_sequence = tokenizer.encode(sequence)
print(tokenized_sequence)
#Output: [19082, 117, 194, 112, 1155, 106, 1293, 1132, 1128, 22559, 17260, 100, 136]
- 为什么编码在两者中的工作方式不同?在 BertWordPieceTokenizer 中,它提供 Encoding 对象,而在 BertTokenizer 中,它提供 vocab 的 id。
- BertWordPieceTokenizer 和 BertTokenizer 从根本上来说有什么区别,因为据我了解,BertTokenizer 也在后台使用 WordPiece。
谢谢
【问题讨论】:
标签: nlp huggingface-transformers bert-language-model huggingface-tokenizers