在 HuggingFace 分词器中:如何简单地在空格上分割序列?

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

我正在使用来自

HuggingFace
DistilBertTokenizer 分词器。

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

["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)
split tokenize huggingface-transformers huggingface-tokenizers
2个回答
2
投票

事情不是这样的。 Transformer 库提供了不同类型的tokenizers。就 distilbert 而言,它是一个“wordpiece tokenizer”,具有定义的词汇表,用于训练相应的模型,因此不提供此类修改(据我所知)。你可以做的就是使用 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', '.']



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提议)分割标记,然后在编码时使用已经标记化的文本。

    

© www.soinside.com 2019 - 2024. All rights reserved.