将 HuggingFace 慢速分词器转换为快速分词器

问题描述 投票:0回答:1

我有一个使用慢标记器训练到磁盘的模型:

from transformers import convert_slow_tokenizer
from transformers import BertTokenizer, BertForSequenceClassificationa

mybert = BertForSequenceClassification.from_pretrained(PATH,
                                                        local_files_only=True,
                                                        )
tokenizer = BertTokenizer.from_pretrained(PATH, 
                                          local_files_only=True, 
                                          use_fast=True)

我可以用它来标记,如下所示:

tokenized_example = tokenizer(
    mytext,
    max_length=100,
    truncation="only_second",
    return_overflowing_tokens=True,
    stride=50
)

但是,它并不快:

tokenized_example.is_fast
False

我尝试将其转换为快速的,看起来很成功

tokenizer = convert_slow_tokenizer.convert_slow_tokenizer(tokenizer)

但是,现在运行它给了我:

tokenized_example = tokenizer(
    mytext,
    max_length=100,
    truncation="only_second",
    return_overflowing_tokens=True,
    stride=50
)


TypeError: 'tokenizers.Tokenizer' object is not callable

如何将这个慢速分词器转换为快速分词器?

我已经看到这个答案并且我安装了sentencepiece——这并没有解决我的问题。

python huggingface-transformers huggingface-tokenizers
1个回答
0
投票

@Mittenchops, tokenized_example.is_fast 为 False 的原因显然是因为它不是“FastTokenizer”。 您可以使用 Huggingface 的 FastTokenizer,而不是转换慢速标记器。

你的代码看起来像这样:

from transformers import convert_slow_tokenizer
from transformers import BertTokenizerFast, BertForSequenceClassification

mybert = BertForSequenceClassification.from_pretrained(PATH,
                                                local_files_only=True,)
tokenizer = BertTokenizerFast.from_pretrained(PATH, 
                                      local_files_only=True, 
                                      use_fast=True)

tokenized_example = tokenizer(
mytext,
max_length=100,
truncation="only_second",
return_overflowing_tokens=True,
stride=50)

# In this case: tokenized_example.is_fast will yield True
© www.soinside.com 2019 - 2024. All rights reserved.