主页 > 软件开发  > 

语言模型transformers调用部分(Tobecontinue...


什么?!!!原来自回归模型的model.generate不能用于训练!!??

只能用法forward一次生成,但一次性只能得到一个tensor 就是在这里取最大值导致模型梯度断了,所以不能用model.generate来训练,要训练只能用model.forward

next_tokens = torch.argmax(next_tokens_scores, dim=-1)#返回指定维度最大值的序号 inverted_mask = 1.0 - attention_mask attention_mask = inverted_mask.masked_fill( #用value填充tensor中与mask中值为1位置相对应的元素 inverted_mask.to(torch.bool), torch.finfo(inputs_embeds.dtype).min)

model.generate 在main.py的主函数中调用,然后转到transformers/generation/utils.py 这个文件的Class GenerationMixin 中 def generate函数–>然后进入def greedy_search 其中while True: # 在这个while循环里实现自回归 其中还有一个self.prepare_inputs_for_generation(input_ids, **model_kwargs)用于处理model运行的输入,# 有的在main.py中重写这个函数。

Class GenerationMixin:中用来得到每个预测token的得分函数 # 有的会重写或调用这个函数 def compute_transition_scores()# 用法示例

>>> from transformers import GPT2Tokenizer, AutoModelForCausalLM >>> import numpy as np >>> tokenizer = GPT2Tokenizer.from_pretrained("gpt2") >>> model = AutoModelForCausalLM.from_pretrained("openai-community/gpt2") >>> tokenizer.pad_token_id = tokenizer.eos_token_id >>> inputs = tokenizer(["Today is"], return_tensors="pt") >>> # Example 1: 打印每个token的得分 with Greedy Search >>> outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True) >>> transition_scores = model.compute_transition_scores(# 有时候会在外面重写这个函数 ... outputs.sequences, outputs.scores, normalize_logits=True ... ) >>> # decoder-only models, like the GPT family, and 1; >>> # encoder-decoder models, like BART or T5. # 也就是说encoder-decoder就是答案从头开始; decoder-only是答案在输入后边接着 >>> input_length = 1 if model.config.is_encoder_decoder else inputs.input_ids.shape[1] >>> generated_tokens = outputs.sequences[:, input_length:] >>> for tok, score in zip(generated_tokens[0], transition_scores[0]): ... # | token | token string | log probability | probability ... print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.3f} | {np.exp(score.numpy()):.2%}") | 262 | the | -1.414 | 24.33% | 1110 | day | -2.609 | 7.36% | 618 | when | -2.010 | 13.40% | 356 | we | -1.859 | 15.58% | 460 | can | -2.508 | 8.14%
标签:

语言模型transformers调用部分(Tobecontinue...由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“语言模型transformers调用部分(Tobecontinue...