pytorch T5型号产生短路输出

5lhxktic  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(171)

我对T5基本型进行了微调(来自拥抱脸)在一个新的任务中,每个输入和目标都是256个单词的句子。损失收敛到低值,但是当我使用generate方法时,输出总是太短。我尝试为该方法提供最小和最大长度值,但似乎不够。我怀疑这个问题与以下事实有关:标记化之前的句子长度是256,而标记化之后的句子长度不是常数(在训练过程中使用填充来确保所有输入的长度相同)。

model = transformers.T5ForConditionalGeneration.from_pretrained('t5-base')
tokenizer = T5Tokenizer.from_pretrained('t5-base')
generated_ids = model.generate(
input_ids=ids,
attention_mask=attn_mask,
max_length=1024,
min_length=256,
num_beams=2,
early_stopping=False,
repetition_penalty=10.0

)
preds = [tokenizer.decode(g, skip_special_tokens=True, clean_up_tokenization_spaces=True) for g in generated_ids][0]
preds = preds.replace("<pad>", "").replace("</s>", "").strip().replace("  ", " ")
target = [tokenizer.decode(t, skip_special_tokens=True, clean_up_tokenization_spaces=True) for t in reference][0]
target = target.replace("<pad>", "").replace("</s>", "").strip().replace("  ", " ")

输入是使用创建的

tokens = tokenizer([f"task: {text}"], return_tensors="pt", max_length=1024, padding='max_length')
inputs_ids = tokens.input_ids.squeeze().to(dtype=torch.long)
attention_mask = tokens.attention_mask.squeeze().to(dtype=torch.long)
labels = self.tokenizer([target_text], return_tensors="pt", max_length=1024, padding='max_length')
label_ids = labels.input_ids.squeeze().to(dtype=torch.long)
label_attention = labels.attention_mask.squeeze().to(dtype=torch.long)
wz3gfoph

wz3gfoph1#

不管是谁,我发现问题出在生成方法的max_length参数上,它限制了令牌的最大数量**,包括**输入令牌,在我的例子中,需要设置max_new_tokens=1024而不是问题中提供的参数。

相关问题