130 lines
4.1 KiB
Plaintext
130 lines
4.1 KiB
Plaintext
|
{
|
||
|
"cells": [
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Zajęcia 10: Neural Networks\n",
|
||
|
"\n",
|
||
|
"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`).\n",
|
||
|
"\n",
|
||
|
"Nie należy usuwać komórek z treścią zadań.\n",
|
||
|
"\n",
|
||
|
"Należy wyświetlać outputy przy pomocy `print`"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"### Zadanie 1\n",
|
||
|
"\n",
|
||
|
"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.\n",
|
||
|
"\n",
|
||
|
"Na podstawie odpowiedzi z modelu dokonaj ekstrakcji wartości liczbowej z outputu modelu a następnie:\n",
|
||
|
"1. Oblicz wartość metryki RMSE (na podstawie predykcji i prawdziwych labeli - można skorzystać z sklearn) dla outputów z obu promptów.\n",
|
||
|
"2. Napisz wnioski odnośnie tego, czy model radzi sobie dobrze z tym zadaniem (mimo że nie był uczony na danych treningowych).\n",
|
||
|
"3. Napisz wnioski, czy dwie różne wersje prompta wpływają na wyniki.\n",
|
||
|
"\n",
|
||
|
"W celu przyspieszenia obliczeń można skorzystać z platformy Google Colab i uruchomić model na karcie graficznej.\n",
|
||
|
"\n",
|
||
|
"Opis wariantów (wersji prompta):\n",
|
||
|
"\n",
|
||
|
"1. Wariant prosty prompta - prosta, krótka instrukcja (podejście zero-shot)\n",
|
||
|
"2. Wariant złożony prompta - złożona instrukcja, można podać przykład kilku tekstów i ich ocen (technika few-shot)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": null,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"from transformers import AutoModelForCausalLM, AutoTokenizer\n",
|
||
|
"\n",
|
||
|
"model_name = \"Qwen/Qwen2.5-0.5B-Instruct\"\n",
|
||
|
"\n",
|
||
|
"model = AutoModelForCausalLM.from_pretrained(\n",
|
||
|
" model_name,\n",
|
||
|
" torch_dtype=\"auto\"\n",
|
||
|
" # device_map=\"auto\" - uncomment it on google colab\n",
|
||
|
")\n",
|
||
|
"tokenizer = AutoTokenizer.from_pretrained(model_name)"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 20,
|
||
|
"metadata": {},
|
||
|
"outputs": [
|
||
|
{
|
||
|
"name": "stdout",
|
||
|
"output_type": "stream",
|
||
|
"text": [
|
||
|
"Review score: 2\n"
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"source": [
|
||
|
"prompt = \"\"\"Rate the following review from 1 to 5. 1 means negative review, 5 means positive review. The review:\n",
|
||
|
"\n",
|
||
|
"It was not amazing experience.\n",
|
||
|
"\n",
|
||
|
"Answer using only single number.\"\"\"\n",
|
||
|
"\n",
|
||
|
"messages = [\n",
|
||
|
" {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n",
|
||
|
" {\"role\": \"user\", \"content\": prompt}\n",
|
||
|
"]\n",
|
||
|
"\n",
|
||
|
"text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)\n",
|
||
|
"model_inputs = tokenizer([text], return_tensors=\"pt\").to(model.device)\n",
|
||
|
"\n",
|
||
|
"generated_ids = model.generate(**model_inputs, max_new_tokens=2)\n",
|
||
|
"generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]\n",
|
||
|
"\n",
|
||
|
"response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]\n",
|
||
|
"print(f\"Review score: {response}\")"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "markdown",
|
||
|
"metadata": {},
|
||
|
"source": [
|
||
|
"## Solution"
|
||
|
]
|
||
|
},
|
||
|
{
|
||
|
"cell_type": "code",
|
||
|
"execution_count": 19,
|
||
|
"metadata": {},
|
||
|
"outputs": [],
|
||
|
"source": [
|
||
|
"SIMPLE_PROMPT = \"\"\n",
|
||
|
"COMPLEX_PROMPT = \"\""
|
||
|
]
|
||
|
}
|
||
|
],
|
||
|
"metadata": {
|
||
|
"kernelspec": {
|
||
|
"display_name": "base",
|
||
|
"language": "python",
|
||
|
"name": "python3"
|
||
|
},
|
||
|
"language_info": {
|
||
|
"codemirror_mode": {
|
||
|
"name": "ipython",
|
||
|
"version": 3
|
||
|
},
|
||
|
"file_extension": ".py",
|
||
|
"mimetype": "text/x-python",
|
||
|
"name": "python",
|
||
|
"nbconvert_exporter": "python",
|
||
|
"pygments_lexer": "ipython3",
|
||
|
"version": "3.11.5"
|
||
|
}
|
||
|
},
|
||
|
"nbformat": 4,
|
||
|
"nbformat_minor": 2
|
||
|
}
|