Cái gì?!!! Nguyên lai tự trở về mô hình model.generate không thể dùng cho huấn luyện!!??
Chỉ có thể cách dùng forward một lần sinh thành, nhưng dùng một lần chỉ có thể được đến một cái tensor
Chính là ở chỗ này lấy cực đại dẫn tới mô hình thang độ chặt đứt, cho nên không thể dùng model.generate tới huấn luyện, muốn huấn luyện chỉ có thể dùng model.forward
next_tokens=torch.argmax(next_tokens_scores,dim=-1)# phản hồi chỉ định duy độ cực đại tự hào
inverted_mask=1.0-attention_mask
attention_mask=inverted_mask.masked_fill(# dùng value bỏ thêm vào tensor trung cùng mask trung giá trị vì 1 vị trí tương đối ứng nguyên tố
inverted_mask.to(torch.bool),torch.finfo(inputs_embeds.dtype).min)
model.generate
Ởmain.py
Chủ hàm số trung thuyên chuyển, sau đó chuyển tớitransformers/generation/utils.py
Cái này văn kiệnClass GenerationMixin
Trungdef generate
Hàm số –> sau đó tiến vàodef greedy_search
Trong đówhile True:
# ở cái này while tuần hoàn thực hiện tự trở về
Trong đó còn có một cáiself.prepare_inputs_for_generation(input_ids, **model_kwargs)
Dùng cho xử lý model vận hành đưa vào, # có ởmain.py
Trung trọng viết cái này hàm số.
Class GenerationMixin
:Có ích tới đến mỗi cái đoán trước token đạt được hàm số # có sẽ trọng viết hoặc thuyên chuyển cái này hàm sốdef compute_transition_scores(
)# cách dùng thí dụ mẫu
>>>fromtransformersimportGPT2Tokenizer,AutoModelForCausalLM
>>>importnumpyasnp
>>>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: Đóng dấu mỗi cái token đạt được 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(# có đôi khi sẽ ở bên ngoài trọng viết cái này hàm số
...outputs.sequences,outputs.scores,normalize_logits=True
...)
>>># decoder-only models, like the GPT family, and 1;
>>># encoder-decoder models, like BART or T5.
# nói cách khác encoder-decoder chính là đáp án từ đầu bắt đầu; decoder-only là đáp án ở đưa vào phía sau tiếp theo
>>>input_length=1ifmodel.config.is_encoder_decoderelseinputs.input_ids.shape[1]
>>>generated_tokens=outputs.sequences[:,input_length:]
>>>fortok,scoreinzip(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%