4.4 KiB
Zajęcia 10: Neural Networks
Wszystkie zadania ćwiczeniowe należy rozwiązywać w języku Python w kopii Jupyter Notebook'a dla danych zajęć w wyznaczonych miejscach (komórki z komentarzem # Solution
).
Nie należy usuwać komórek z treścią zadań.
Należy wyświetlać outputy przy pomocy print
Zadanie 1
Na podstawie zbioru treningowego https://git.wmi.amu.edu.pl/ryssta/tripadvisor-review-prediction/src/branch/master/train zmodyfikuj zmienną prompt w dwóch różnych wariantach (prosty i złożony) i dokonaj predykcji dla 20 wybranych przykładów (po 4 dla każdej oceny od 1 do 5) przy pomocy modelu języka Qwen/Qwen2.5-0.5B-Instruct.
Na podstawie odpowiedzi z modelu dokonaj ekstrakcji wartości liczbowej z outputu modelu a następnie:
- Oblicz wartość metryki RMSE (na podstawie predykcji i prawdziwych labeli - można skorzystać z sklearn) dla outputów z obu promptów.
- Napisz wnioski odnośnie tego, czy model radzi sobie dobrze z tym zadaniem (mimo że nie był uczony na danych treningowych).
- Napisz wnioski, czy dwie różne wersje prompta wpływają na wyniki.
W celu przyspieszenia obliczeń można skorzystać z platformy Google Colab i uruchomić model na karcie graficznej.
Opis wariantów (wersji prompta):
- Wariant prosty prompta - prosta, krótka instrukcja (podejście zero-shot)
- Wariant złożony prompta - złożona instrukcja, można podać przykład kilku tekstów i ich ocen (technika few-shot)
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen2.5-0.5B-Instruct"
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto"
# device_map="auto" - uncomment it on google colab
)
tokenizer = AutoTokenizer.from_pretrained(model_name)
prompt = """Rate the following review from 1 to 5. 1 means negative review, 5 means positive review. The review:
It was not amazing experience.
Answer using only single number."""
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
generated_ids = model.generate(**model_inputs, max_new_tokens=2)
generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(f"Review score: {response}")
Review score: 2
response
'2'
Solution
SIMPLE_PROMPT = ""
COMPLEX_PROMPT = ""