标签: huggingface-transformers

了解 GPU 使用情况 Huggingface 分类 - 总优化步骤

我正在为分类问题训练 Huggingface Longformer 并得到以下输出。

  1. 我很困惑Total optimization steps。由于我有 7000 个训练数据点和 5 个时期,并且Total train batch size (w. parallel, distributed & accumulation) = 64,我不应该获取 7000*5/64步骤吗?那到了546.875?为什么显示 Total optimization steps = 545

  2. 为什么在下面的输出中,有 16 个Input ids are automatically padded from 1500 to 1536 to be a multiple of config.attention_window: 512步骤 [ 23/545 14:24 < 5:58:16, 0.02 it/s, Epoch 0.20/5]?这些步骤是什么?

=================================================== ========

***** Running training *****
  Num examples = 7000
  Num Epochs = 5
  Instantaneous batch …
Run Code Online (Sandbox Code Playgroud)

python nlp gpu huggingface-transformers

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

如何将两个 pandas 数据帧加载到 Hugginface 的数据集对象中?

我正在尝试将训练和测试数据帧加载到数据集对象中。将 pandas 数据帧加载到数据集对象中的常用方法是:

from datasets import Dataset
import pandas as pd
df = pd.DataFrame({"a": [1, 2, 3]})
dataset = Dataset.from_pandas(df)
Run Code Online (Sandbox Code Playgroud)

我的问题是如何将训练和测试两个 pandas 数据帧加载到数据集中?

例如,如果我有两个数据框:

from datasets import Dataset
import pandas as pd
df_train = pd.DataFrame({"a": [1, 2, 3]})
df_test = pd.DataFrame({"ab": [1, 2, 3]})
Run Code Online (Sandbox Code Playgroud)

如何加载这两个框架?

python dataframe pandas huggingface-transformers huggingface-datasets

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

具有不同嵌入大小的特定训练模型上的 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
查看次数

Huggingface BERT 模型的预训练层是否已冻结?

我使用 Huggingface 中的以下分类模型:

model = AutoModelForSequenceClassification.from_pretrained("dbmdz/bert-base-german-cased", num_labels=2).to(device)
Run Code Online (Sandbox Code Playgroud)

据我了解,这会在预训练模型的末尾添加一个密集层,该模型有 2 个输出节点。但是之前的所有预训练层都被冻结了吗?或者微调时它们也会更新吗?我在文档中找不到有关该信息的信息...

那么我还需要做这样的事情吗?:

for param in model.bert.parameters():
    param.requires_grad = False
Run Code Online (Sandbox Code Playgroud)

nlp pytorch bert-language-model huggingface-transformers

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

如何从本地磁盘加载huggingface模型/资源?

我位于防火墙后面,并且从我的服务器对外部世界的访问非常有限。我想从本地磁盘加载 Huggingface 模型/资源。

from sentence_transformers import SentenceTransformer
# initialize sentence transformer model

# How to load 'bert-base-nli-mean-tokens' from local disk?
model = SentenceTransformer('bert-base-nli-mean-tokens')
# create sentence embeddings
sentence_embeddings = model.encode(sentences)
Run Code Online (Sandbox Code Playgroud)

我看到一些关于

加载预训练()

等等。但是无法解决上述问题。欢迎任何建议。先感谢您。

local-storage huggingface-transformers sentence-transformers

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

张量 (1011) 的扩展大小必须与非单一维度 1 处的现有大小 (512) 匹配

我从 Huggingface 训练了一个 LayoutLMv2 模型,当我尝试在单个图像上推断它时,它会给出运行时错误。其代码如下:

query = '/Users/vaihabsaxena/Desktop/Newfolder/labeled/Others/Two.pdf26.png'
image = Image.open(query).convert("RGB")
encoded_inputs = processor(image, return_tensors="pt").to(device)
outputs = model(**encoded_inputs)
preds = torch.softmax(outputs.logits, dim=1).tolist()[0]
pred_labels = {label:pred for label, pred in zip(label2idx.keys(), preds)}
pred_labels
Run Code Online (Sandbox Code Playgroud)

当我这样做时就会出现错误model(**encoded_inputs)。该processor目录在 Huggingface 中被称为目录,并与其他 API 一起按如下方式初始化:

feature_extractor = LayoutLMv2FeatureExtractor()
tokenizer = LayoutLMv2Tokenizer.from_pretrained("microsoft/layoutlmv2-base-uncased")
processor = LayoutLMv2Processor(feature_extractor, tokenizer)
Run Code Online (Sandbox Code Playgroud)

该模型的定义和训练如下:

model = LayoutLMv2ForSequenceClassification.from_pretrained(
    "microsoft/layoutlmv2-base-uncased",  num_labels=len(label2idx)
)
model.to(device);


optimizer = AdamW(model.parameters(), lr=5e-5)
num_epochs = 3


for epoch in range(num_epochs):
    print("Epoch:", epoch)
    training_loss = 0.0
    training_correct = 0
    #put the …
Run Code Online (Sandbox Code Playgroud)

python machine-learning computer-vision huggingface-transformers

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

如何防止变压器生成函数产生某些单词?

我有以下代码

from transformers import T5Tokenizer, T5ForConditionalGeneration

tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")

input_ids = tokenizer("The <extra_id_0> walks in <extra_id_1> park", return_tensors="pt").input_ids

sequence_ids = model.generate(input_ids)
sequences = tokenizer.batch_decode(sequence_ids)
sequences
Run Code Online (Sandbox Code Playgroud)

目前它生产这个:

['<pad><extra_id_0> park offers<extra_id_1> the<extra_id_2> park.</s>']
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止生成器生成某些单词(例如stopwords = ["park", "offer"])?

python nlp huggingface-transformers generative-pretrained-transformer

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

如何使用 T5 模型的输出来替换输入序列中的屏蔽标记

我正在使用 Hugging Face Transformers 库中的 T5 模型,并且我有一个带有屏蔽标记的输入序列,我想将其替换为模型生成的输出。这是代码

from transformers import T5Tokenizer, T5ForConditionalGeneration

tokenizer = T5Tokenizer.from_pretrained("t5-small")
model = T5ForConditionalGeneration.from_pretrained("t5-small")

input_data = "The <extra_id_0> walks in <extra_id_1> park"
input_ids = tokenizer(input_data, return_tensors="pt").input_ids

sequence_ids = model.generate(input_ids)
output_sequences = tokenizer.batch_decode(sequence_ids)
output_sequences
Run Code Online (Sandbox Code Playgroud)

此代码产生以下输出:

['<pad><extra_id_0> park offers<extra_id_1> the<extra_id_2> park.</s>']
Run Code Online (Sandbox Code Playgroud)

我想要做的是将输入序列中的屏蔽标记<extra_id_0>和替换<extra_id_1>为模型中相应的输出标记,以便最终输出为:

The park offers walks in the park.
Run Code Online (Sandbox Code Playgroud)

我希望有人可以帮助我编写代码来实现这一目标。

请注意,这是对应关系:

mask in input_data -> answer in output_sequences
<extra_id_0> -> <extra_id_0> park offers (so we extract 'park offers' only)
<extra_id_1> -> <extra_id_1> …
Run Code Online (Sandbox Code Playgroud)

python nlp huggingface-transformers generative-pretrained-transformer

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

如何处理 Huggingface Transformer 模型中的溢出令牌?

我正在使用 Huggingface Transformers 训练用于令牌分类的 XLM-RoBERTa 模型。我已经微调过的模型的最大标记长度是 166。我在训练数据中截断了较长的序列并填充了较短的序列。现在,在推理/预测期间,我想预测所有标记,即使是长度超过 166 的序列。但是,如果我正确阅读文档,溢出的标记就会被丢弃。那是对的吗?我不完全确定“return_overflowing_tokens”和 stride 参数的作用。它们可以用来将太长的序列分成两个或更多个较短的序列吗?

我已经尝试将文本数据分割成句子以具有更小的块,但其中一些仍然超过最大标记长度。如果溢出的令牌能够自动添加到附加序列中,那将是理想的。

nlp tokenize huggingface-transformers

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

如何将 Huggingface 预训练的 Transformer 模型直接加载到 GPU?

我想将一个huggingface预训练的变压器模型直接加载到GPU(没有足够的CPU空间),例如加载BERT

from transformers import AutoModelForCausalLM
model = AutoModelForCausalLM.from_pretrained("bert-base-uncased")
Run Code Online (Sandbox Code Playgroud)

会被加载到CPU直到执行

model.to('cuda')
Run Code Online (Sandbox Code Playgroud)

现在模型已加载到 GPU 中

我想在执行时将模型直接加载到GPU中from_pretrained。这可能吗?

python nlp huggingface-transformers

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