标签: huggingface-tokenizers

如何使用transformers.BertTokenizer 对多个setence 进行编码?

我想通过使用 transform.BertTokenizer 对多个句子进行编码来创建一个小批量。它似乎适用于单个句子。如何使它适用于几个句子?

from transformers import BertTokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# tokenize a single sentence seems working
tokenizer.encode('this is the first sentence')
>>> [2023, 2003, 1996, 2034, 6251]

# tokenize two sentences
tokenizer.encode(['this is the first sentence', 'another setence'])
>>> [100, 100] # expecting 7 tokens
Run Code Online (Sandbox Code Playgroud)

word-embedding huggingface-transformers huggingface-tokenizers

5
推荐指数
1
解决办法
5434
查看次数

ValueError: TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]] - Tokenizing BERT / Distilbert Error

def split_data(path):
  df = pd.read_csv(path)
  return train_test_split(df , test_size=0.1, random_state=100)

train, test = split_data(DATA_DIR)
train_texts, train_labels = train['text'].to_list(), train['sentiment'].to_list() 
test_texts, test_labels = test['text'].to_list(), test['sentiment'].to_list() 

train_texts, val_texts, train_labels, val_labels = train_test_split(train_texts, train_labels, test_size=0.1, random_state=100)

from transformers import DistilBertTokenizerFast
tokenizer = DistilBertTokenizerFast.from_pretrained('distilbert-base-uncased

train_encodings = tokenizer(train_texts, truncation=True, padding=True)
valid_encodings = tokenizer(valid_texts, truncation=True, padding=True)
test_encodings = tokenizer(test_texts, truncation=True, padding=True)
Run Code Online (Sandbox Code Playgroud)

When I tried to split from the dataframe using BERT tokenizers I got an error us such.

tokenize bert-language-model distilbert huggingface-transformers huggingface-tokenizers

5
推荐指数
4
解决办法
6751
查看次数

在使用 HuggingFace 的 RobertaTokenizer 之前,我是否需要先对文本进行预标记?(不同的打磨)

在 Huggingface 中使用 Roberta 标记器时,我感到很困惑。

>>> tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
>>> x = tokenizer.tokenize("The tiger is ___ (big) than the dog.")
['The', '?tiger', '?is', '?___', '?(', 'big', ')', '?than', '?the', '?dog', '.']
>>> x = tokenizer.tokenize("The tiger is ___ ( big ) than the dog.")
['The', '?tiger', '?is', '?___', '?(', '?big', '?)', '?than', '?the', '?dog', '.']
>>> x = tokenizer.encode("The tiger is ___ (big) than the dog.")
[0, 20, 23921, 16, 2165, 36, 8527, 43, 87, 5, 2335, 4, 2]
>>> …
Run Code Online (Sandbox Code Playgroud)

huggingface-transformers huggingface-tokenizers

4
推荐指数
1
解决办法
1135
查看次数

Colab 的 Huggingface AlBert 标记器 NoneType 错误

我只是尝试了拥抱脸网站的示例代码:https : //huggingface.co/albert-base-v2

`from transformers import AlbertTokenizer, AlbertModel` 
`tokenizer = AlbertTokenizer.from_pretrained('albert-base-v2')`
`text = "Replace me by any text you'd like."`
`encoded_input = tokenizer(text, return_tensors='pt')`
Run Code Online (Sandbox Code Playgroud)

然后在标记器步骤中出现以下错误:----> 5 encoding_input = tokenizer(text, return_tensors='pt')

TypeError: 'NoneType' 对象不可调用

我在本地机器上尝试了相同的代码,没有问题。问题似乎在 Colab 中。但是,我确实需要帮助才能在 colab GPU 上运行此模型。

我在 colab 上的 Python 版本是 Python 3.6.9

google-colaboratory huggingface-transformers huggingface-tokenizers

4
推荐指数
2
解决办法
1621
查看次数

如何进行Tokenizer批处理?- 拥抱脸

在Huggingface 的Tokenizer文档中,调用函数接受 List[List[str]] 并表示:

\n
\n

text (str, List[str], List[List[str]], 可选) \xe2\x80\x94 要编码的序列或一批序列。每个序列可以是一个字符串或字符串列表(预标记化字符串)。如果序列作为字符串列表(预标记化)提供,则必须设置 is_split_into_words=True (以消除一批序列的歧义)。

\n
\n

如果我运行,一切都会正常运行:

\n
 test = ["hello this is a test", "that transforms a list of sentences", "into a list of list of sentences", "in order to emulate, in this case, two batches of the same lenght", "to be tokenized by the hf tokenizer for the defined model"]\n tokenizer = AutoTokenizer.from_pretrained(\'distilbert-base-uncased-finetuned-sst-2-english\')\n tokenized_test = tokenizer(text=test, padding="max_length", is_split_into_words=False, truncation=True, return_tensors="pt")\n
Run Code Online (Sandbox Code Playgroud)\n

但如果我尝试模拟批量句子:

\n …

tokenize batch-processing pytorch huggingface-transformers huggingface-tokenizers

4
推荐指数
1
解决办法
6973
查看次数

来自 HuggingFace 的 BertWordPieceTokenizer 与 BertTokenizer

我有以下代码片段并试图了解 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]']
Run Code Online (Sandbox Code Playgroud)

伯特令牌生成器

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]
Run Code Online (Sandbox Code Playgroud)
  1. 为什么编码在两者中的工作方式不同?在 BertWordPieceTokenizer 中,它给出了 …

nlp bert-language-model huggingface-transformers huggingface-tokenizers

3
推荐指数
1
解决办法
4382
查看次数

如何将 SQuAD 数据中的令牌索引映射到 BERT 令牌生成器中的令牌?

我正在使用 SQuaD 数据集进行答案范围选择。使用 来BertTokenizer标记段落后,对于某些示例,答案的开始和结束索引不再与段落标记中的真实答案范围位置匹配。如何解决这个问题呢?一种方法是相应地修改答案索引(也是训练目标)?但怎么做呢?

transformer-model nlp-question-answering bert-language-model squad huggingface-tokenizers

3
推荐指数
1
解决办法
4010
查看次数

AttributeError:“GPT2TokenizerFast”对象没有属性“max_len”

我只是使用 Huggingface 转换器库,并在运行 run_lm_finetuning.py 时收到以下消息: AttributeError: 'GPT2TokenizerFast' object has no attribute 'max_len'。其他人有这个问题或知道如何解决它吗?谢谢!

我的完整实验运行:mkdir 实验

对于 5 中的纪元,执行 python run_lm_finetuning.py
--model_name_or_path distilgpt2
--model_type gpt2
--train_data_filesmall_dataset_train_preprocessed.txt
--output_direxperiments/epochs_$epoch
--do_train
--overwrite_output_dir
--per_device_train_batch_size 4
--num_train_epochs $epoch 完成

transformer-model tokenize huggingface-transformers huggingface-tokenizers gpt-2

3
推荐指数
1
解决办法
1万
查看次数

运行时错误:张量 (585) 的扩展大小必须与非单一维度 1 处的现有大小 (514) 匹配

我想使用 Huggingface 来预测数千个句子的情绪。


from transformers import pipeline
model_path = "cardiffnlp/twitter-xlm-roberta-base-sentiment"
pipe = pipeline("sentiment-analysis", model=model_path, tokenizer=model_path)

from datasets import load_dataset

data_files = {
    "train": "/content/data_customer.csv"
}

dataset = load_dataset("csv", data_files=data_files)

dataset = dataset.map(lambda examples: dict(pipe(examples['text'])))

Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。

RuntimeError: The expanded size of the tensor (585) must match the existing size (514) at non-singleton dimension 1.  Target sizes: [1, 585].  Tensor sizes: [1, 514]
Run Code Online (Sandbox Code Playgroud)

这篇文章提出了一种解决该问题的方法,但没有说明如何在管道中解决它。 在非单一维度 1 处,张量 a (707) 的大小必须与张量 b (512) 的大小匹配

huggingface-transformers huggingface-tokenizers huggingface-datasets

3
推荐指数
1
解决办法
1万
查看次数

具有不同嵌入大小的特定训练模型上的 resize_token_embeddings

我想问一下如何改变训练模型的嵌入大小。

我有一个训练有素的模型models/BERT-pretrain-1-step-5000.pkl。现在,我正在向标记器添加一个新标记[TRA],并尝试使用resize_token_embeddings相关标记。

from pytorch_pretrained_bert_inset import BertModel #BertTokenizer 
from transformers import AutoTokenizer
from torch.nn.utils.rnn import pad_sequence
import tqdm

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model_bert = BertModel.from_pretrained('bert-base-uncased', state_dict=torch.load('models/BERT-pretrain-1-step-5000.pkl', map_location=torch.device('cpu')))

#print(tokenizer.all_special_tokens) #--> ['[UNK]', '[SEP]', '[PAD]', '[CLS]', '[MASK]']
#print(tokenizer.all_special_ids)    #--> [100, 102, 0, 101, 103]

num_added_toks = tokenizer.add_tokens(['[TRA]'], special_tokens=True)
model_bert.resize_token_embeddings(len(tokenizer))  # --> Embedding(30523, 768)
print('[TRA] token id: ', tokenizer.convert_tokens_to_ids('[TRA]'))  # --> 30522
Run Code Online (Sandbox Code Playgroud)

但我遇到了错误:

AttributeError: 'BertModel' object has no attribute 'resize_token_embeddings'
Run Code Online (Sandbox Code Playgroud)

我认为这是因为model_bert(BERT-pretrain-1-step-5000.pkl)我有不同的嵌入大小。我想知道是否有任何方法可以适应我修改后的标记器的嵌入大小以及我想用作初始权重的模型。

多谢!!

word-embedding pytorch bert-language-model huggingface-transformers huggingface-tokenizers

3
推荐指数
1
解决办法
8122
查看次数