Add zajecia 10

This commit is contained in:
Ryszard Staruch 2024-12-18 13:30:06 +01:00
parent 224f2c9bbb
commit f66e958cf0
2 changed files with 130 additions and 1 deletions

View File

@ -53,7 +53,7 @@
"source": [
"### Zadanie 2\n",
"\n",
"Na podstawie pliku https://git.wmi.amu.edu.pl/ryssta/spam-classification/src/branch/master/train/in.tsv oraz pliku https://git.wmi.amu.edu.pl/ryssta/spam-classification/src/branch/master/train/expected.tsv podziel teksty względem klasy spam/nie spam. Oblicz wartość IDF osobno dla tekstów klasy spam oraz dla tekstów klasy nie spam, dla słów:\n",
"Na podstawie pliku https://git.wmi.amu.edu.pl/ryssta/spam-classification/src/branch/master/train/in.tsv oraz pliku https://git.wmi.amu.edu.pl/ryssta/spam-classification/src/branch/master/train/expected.tsv podziel teksty względem klasy spam/nie spam. Oblicz wartość IDF (bez korzystania z gotowych bibliotek) osobno dla tekstów klasy spam oraz dla tekstów klasy nie spam, dla słów:\n",
"* free\n",
"* send\n",
"* are\n",

129
10_neural_networks.ipynb Normal file
View File

@ -0,0 +1,129 @@
{
"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
}