0

我正在使用HuggingFaceDistilBertTokenizer的标记器。

我想通过在空间上简单地拆分来标记我的文本:

["Don't", "you", "love", "", "Transformers?", "We", "sure", "do."]

而不是默认行为,如下所示:

["Do", "n't", "you", "love", "", "Transformers", "?", "We", "sure", "do", "."]

我阅读了他们关于Tokenization的文档以及专门关于BERT Tokenizer的文档,但找不到这个简单问题的答案:(

我假设它应该是加载 Tokenizer 时的参数,但我在参数列表中找不到它...

编辑:重现的最小代码示例:

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('distilbert-base-cased')

tokens = tokenizer.tokenize("Don't you love  Transformers? We sure do.")
print("Tokens: ", tokens)
4

2 回答 2

2

这不是它的工作方式。转换器库提供了不同类型的标记器。在 distilbert 的情况下,它是一个wordpiece 分词器,具有用于训练相应模型的已定义词汇表,因此不提供此类修改(据我所知)。你可以做的是使用python 字符串的split()方法:

text = "Don't you love  Transformers? We sure do."
tokens = text.split()
print("Tokens: ", tokens)

输出:

Tokens:  ["Don't", 'you', 'love', '', 'Transformers?', 'We', 'sure', 'do.']

如果您正在寻找更复杂的标记化并考虑标点符号,您可以使用 basic_tokenizer:

from transformers import DistilBertTokenizer

tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-cased')
tokens = tokenizer.basic_tokenizer.tokenize(text)
print("Tokens: ", tokens)

输出:

Tokens:  ['Don', "'", 't', 'you', 'love', '', 'Transformers', '?', 'We', 'sure', 'do', '.']
于 2021-02-06T07:31:45.630 回答
0

编辑:这不符合我在评论中指出的要求。

这是我尝试过的一个想法:

from transformers import DistilBertModel, DistilBertTokenizer
import torch

text_str = "also du fängst an mit der Stadtrundfahrt"

# create DistilBERT tokenizer and model
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-german-cased')
model = DistilBertModel.from_pretrained('distilbert-base-german-cased')

# check if tokens are correct
tokens = tokenizer.basic_tokenizer.tokenize(text_str)
print("Tokens: ", tokens)

# Encode the curent text
input_ids = torch.tensor(tokenizer.encode(tokens)).unsqueeze(0)
outputs = model(input_ids)
last_hidden_states = outputs[0]
print(last_hidden_states.shape)
print(last_hidden_states[0,1:-1].shape)

print(last_hidden_states)

关键是首先使用BasicTokenizer(如@cronoik 建议的那样)分割标记,然后在编码时使用已经标记化的文本。

于 2021-02-08T09:14:12.637 回答