Зафайнтюнил модельку (distilgpt2), натренировал 220+ эпох (100000 шагов), всё должно быть идеально, но ИИ в ответе повторяется несколько раз.
Вот запуск модели:
def generate(msg):
question = "Question: "+msg
inputs = tokenizer(question, return_tensors="pt").to("cuda:0")
attention_mask = inputs["attention_mask"]
outputs = model.generate(
inputs["input_ids"],
attention_mask=attention_mask,
max_length=256,
num_return_sequences=1,
do_sample=True, # Enable sampling for varied output
top_k=50, # Limit to top 50 probable tokens
top_p=0.95, # Use nucleus sampling
pad_token_id=tokenizer.eos_token_id # Explicitly set padding token
)
# Decode and print the raw output for debugging
raw_output = tokenizer.decode(outputs[0], skip_special_tokens=True)
##decoded_output = bytes(raw_output, "latin-1'").decode("unicode_escape")
#print("Raw output:", repr(raw_output)) # Show exact string with quotes
#print("Visible output:", raw_output) # Show what’s printed
return decode_escapes(raw_output.replace(question, "").split('Answer: ')[-1])
А вот пример:
Запрос:
напиши код на C++, выводящий на экран надпись "тест"
Ответ:
Вот код на C++, выводящий на экран "тест":
```#include <iostream>
int main() {
std::cout << "тест":
```#include <iostream>
int main() {
std::cout << "тест":
```#include <iostream>
экран return 0;
}```
А вот и одна из строчек датасета (использовались случайные символы и кучу подобных примеров, чтобы модель понимала, что менять в зависимости от запроса):
"Напиши код на C++, выводящий на экран ""OwKф71У4hХLЮh""","Вот код на C++, выводящий на экран ""OwKф71У4hХLЮh"":\n```#include <iostream>\nint main() {\n std::cout << ""OwKф71У4hХLЮh"" << std::endl;\n return 0;\n}```"
Что можно сделать? На Реддите нашёл причину - скорее всего <EOS> токены