From 90df9097d01c49d5acd3e30bb9cadcdd92ebf008 Mon Sep 17 00:00:00 2001 From: Klaudia Date: Thu, 16 Mar 2023 17:27:16 +0100 Subject: [PATCH] add notebooks --- notebooks/00-wymagania.ipynb | 81 ++++++++++++ .../01-rodzaje-systemow-dialogowych.ipynb | 125 ++++++++++++++++++ notebooks/02-analiza-wymagan.ipynb | 120 +++++++++++++++++ 3 files changed, 326 insertions(+) create mode 100644 notebooks/00-wymagania.ipynb create mode 100644 notebooks/01-rodzaje-systemow-dialogowych.ipynb create mode 100644 notebooks/02-analiza-wymagan.ipynb diff --git a/notebooks/00-wymagania.ipynb b/notebooks/00-wymagania.ipynb new file mode 100644 index 0000000..dd821a1 --- /dev/null +++ b/notebooks/00-wymagania.ipynb @@ -0,0 +1,81 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "61117c67", + "metadata": {}, + "source": [ + "Systemy dialogowe\n", + "=================\n", + "\n", + "Wymagania\n", + "---------\n", + " - W ramach zajęć studenci realizują zadania w 3-4 osobowych grupach\n", + "\n", + " - Każda grupa powinna założyć wspólne repozytorium kodu na wydziałowym serwerze Git .\n", + "\n", + " - Skład zespołu oraz link do repozytorium kodu proszę wkleić na kanale ogólnym.\n", + "\n", + "Zaliczenie\n", + "----------\n", + "\n", + "Zaliczenie można otrzymać po spełnieniu następujących warunków:\n", + "\n", + " 1. Uzyskanie min. 50% punktów.\n", + " 2. Obecność na zajęciach (zgodnie z regulaminem)." + ] + }, + { + "cell_type": "markdown", + "id": "63922655", + "metadata": {}, + "source": [ + "Harmonogram i punktacja\n", + "-----------------------\n", + "\n", + "Zadania są realizowane zgodnie z następującym harmonogramem.\n", + "\n", + "| **Termin piątkowy** | **Punkty** | **Temat** |\n", + "|--------------------:|-----------:|:--------------------------------------------------|\n", + "| 10.03 | 2 | Chatboty |\n", + "| 10.03 | 2 | Analiza wymagań |\n", + "| 24.03 | 2 | Eksperymenty typu „Czarnoksiężnik z OZ” |\n", + "| 24.03 | 2 | Struktura dialogu |\n", + "| 31.03 | 2 | Architektura systemu dialogowego |\n", + "| 31.03 | 2 | Parsing semantyczny, ujednoznacznianie wypowiedzi |\n", + "| 21.04 | 2 | Zarządzanie dialogiem |\n", + "| 21.04 | 2 | Generowanie odpowiedzi |\n", + "| 5.05 | 2 | Ewaluacja systemów dialogowych |\n", + "| 5.05 | 2 | Ocena końcowa, systemy end-to-end |" + ] + }, + { + "cell_type": "markdown", + "id": "ef2f18e7", + "metadata": {}, + "source": [ + "Łącznie jest do zdobycia 20 punktów.\n", + "\n", + "Ocena jest wystawiana na postawie poniższej tabeli.\n", + "\n", + "| Punkty | Ocena |\n", + "|--------------|-------|\n", + "| $[18,20]$ | bdb |\n", + "| $[17,18)$ | db+ |\n", + "| $[14,17)$ | db |\n", + "| $[13,14)$ | dst+ |\n", + "| $[10,13)$ | dst |\n", + "| $[0,10)$ | ndst |" + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/01-rodzaje-systemow-dialogowych.ipynb b/notebooks/01-rodzaje-systemow-dialogowych.ipynb new file mode 100644 index 0000000..f267a05 --- /dev/null +++ b/notebooks/01-rodzaje-systemow-dialogowych.ipynb @@ -0,0 +1,125 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "b2f59df0", + "metadata": {}, + "source": [ + "Rodzaje systemów dialogowych\n", + "============================\n", + "\n", + "Wprowadzenie\n", + "------------\n", + "\n", + "Systemy dialogowe można zgrubnie podzielić na dwie kategorie (Jurafsky and Martin, 2020):\n", + "\n", + " 1. chatboty,\n", + "\n", + " 2. systemy ukierunkowane na wykonywanie zadań (ang. task-oriented dialogue agents).\n", + "\n", + "### Chatboty\n", + "Przeznaczeniem chatbota\n", + "jest prowadzenie swobodnej dyskusji z użytkownikiem na dowolny (nienarzucony z góry) temat.\n", + "Konwersacja z chatbotem nie służy wypełnieniu żadnego z góry określonego zadania.\n", + "\n", + "Klasycznym przykładem chatbota jest [ELIZA](https://en.wikipedia.org/wiki/ELIZA) (Weizenbaum, 1966).\n", + "Program ten,\n", + "udając psychoanalityka, miał zademonstrować potencjał tkwiący w komunikacji człowieka z komputerem w\n", + "języku naturalnym. Jego pythonową implementację znajdziemy w pakiecie [nltk](www.nltk.org)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2301a9e", + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.chat import eliza\n", + "eliza.demo()" + ] + }, + { + "cell_type": "markdown", + "id": "ae7a5568", + "metadata": {}, + "source": [ + "ELIZA składa się ze zbioru wzorców, które są dopasowywane do wypowiedzi użytkownika.\n", + "Z każdym wzorcem jest powiązany zestaw szablonów, które są wykorzystywane do przygotowania\n", + "odpowiedzi dla użytkownika." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "05c53336", + "metadata": {}, + "outputs": [], + "source": [ + "eliza.pairs[:3]" + ] + }, + { + "cell_type": "markdown", + "id": "f3622915", + "metadata": {}, + "source": [ + "### Systemy dialogowe ukierunkowane na wykonywanie zadań\n", + "Systemy ukierunkowane na wykonywanie zadań będą stanowić główny temat tego przedmiotu.\n", + "Dla uproszenia będziemy je nazywać *agentami dialogowymi*.\n", + "\n", + "Pierwotnie agenty dialogowe były ukierunkowywane na jedno, ściśle określone zadanie.\n", + "Systemem tego typu był GUS (Bobrow, 1977) umożliwiający planowanie podróży.\n", + "\n", + "Obecnie zarówno w praktyce badawczej jak i w zastosowaniach przemysłowych rozwijane są systemy\n", + "ukierunkowane na wykonywanie wielu zadań równocześnie, do których należą:\n", + "\n", + " 1. inteligentne asystenty osobiste (ang. *IPA*, *Intelligent Personal Assistant*), np.\n", + "\n", + " - [Alexa](https://developer.amazon.com/en-US/alexa),\n", + " - [Bixby](https://www.samsung.com/us/apps/bixby/),\n", + " - [Google Assistant](https://assistant.google.com/),\n", + " - [Siri](https://www.apple.com/siri/),\n", + "\n", + " które realizują spersonalizowane cele użytkownika (wyszukiwanie kontaktów w książce adresowej, zarządzanie kalendarzem, zakup produktów).\n", + "\n", + " 2. modele językowe dostosowane do wykonywania poleceń, np.\n", + "\n", + " - [ChatGPT](https://openai.com/blog/chatgpt/),\n", + " - [InstructGPT](https://openai.com/blog/instruction-following/),\n", + " - [FLAN-T5](https://arxiv.org/pdf/2210.11416.pdf),\n", + "\n", + " które realizują zadania niewymagające pełnej personalizacji.\n", + "\n", + "Zadanie\n", + "-------\n", + "Zaimplementować program typu ELIZA prowadzący konwersację w języku polskim.\n", + "Kod źródłowy umieścić w gałęzi `chatbot` repozytorium projektowego.\n", + "\n", + "Literatura\n", + "----------\n", + " 1. Dan Jurafsky and James H. Martin, *Speech and Language Processing*, 3rd ed. draft,\n", + "\tch. 15, Chatbots and Dialogue Systems,\n", + " https://web.stanford.edu/~jurafsky/slp3/15.pdf\n", + " data dostępu: 10 marca 2023.\n", + "\n", + " 2. J. Weizenbaum, ELIZA - A Computer Program For the Study of Natural Language Communication\n", + " Between Man And Machine Communications of the ACM, Vol 9, No 1, January 1966,\n", + " https://cse.buffalo.edu/~rapaport/572/S02/weizenbaum.eliza.1966.pdf\n", + " data dostępu: 10 marca 2023.\n", + "\n", + " 3. Bobrow, D. G., Kaplan, R. M., Kay, M., Norman, D. A., Thompson, H., and Winograd, T. (1977).\n", + " GUS, A frame driven dialog system. Artificial Intelligence 8, 155–173." + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/02-analiza-wymagan.ipynb b/notebooks/02-analiza-wymagan.ipynb new file mode 100644 index 0000000..b8d936f --- /dev/null +++ b/notebooks/02-analiza-wymagan.ipynb @@ -0,0 +1,120 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "136728fe", + "metadata": {}, + "source": [ + "Analiza Wymagań\n", + "===============\n", + "\n", + "Projektowanie systemów dialogowych\n", + "----------------------------------\n", + "\n", + "Projektowanie systemu dialogowego jest procesem [zorientowanym na użytkownika](https://en.wikipedia.org/wiki/User-centered_design) (por. Jurafsky and Martin, 2020; Gould and Lewis, 1985), który wymaga:\n", + "\n", + " 1. Analizy tego kim jest docelowy użytkownik systemu i na czym polegają zadania (cele), które chce on zrealizować.\n", + "\n", + " 2. Budowy symulatorów i prototypów.\n", + "\n", + " 3. Przyrostowego rozwoju i testowania z udziałem użytkowników.\n", + "\n", + "Punktami 2 i 3 zajmiemy się na kolejnych zajęciach. Tematem dzisiejszych zajęć jest punkt 1.\n", + "\n", + "Zadania\n", + "-------\n", + " 1. Wybrać temat projektu.\n", + "\n", + " 2. Zidentyfikować podstawowe zadania (cele), które użytkownik chce zrealizować korzystając z systemu.\n", + "\n", + " 3. Dla każdego zidentyfikowanego zadania napisać przykładowy dialog, w toku którego system zrealizuje cel użytkownika.\n", + "\n", + " 4. Dialogi zapisać w dokumencie `requirements-analysis.md` i umieścić w katalogu głównym gałęzi\n", + " `master` repozytorium projektowego. Dokument proszę przygotować korzystając z\n", + " [szablonu](requirements-analysis.md).\n", + "\n", + "Tematy projektów\n", + "----------------\n", + "\n", + "### Umawianie wizyt u lekarza\n", + "\n", + "Celem projektu jest zbudowanie agenta dialogowego, który ma za zadanie umówić rozmówcę do lekarza pierwszego kontaktu, chyba że system uzna że konieczna jest wizyta u specjalisty.\n", + "Sytuacja komunikacyjna przypomina obsługę pacjenta dzwoniącego do przychodni i chcącego umówić się na wizytę. Podczas rozmowy system ma za zadanie rozpoznać potrzebę dzwoniącego, w szczególności:\n", + "\n", + " - Czy chce umówić się do lekarza pierwszego kontaktu, czy do specjalisty?\n", + "\n", + " - Czy pacjent jest pewny do jakiego specjalisty – system powinien zadać pytania kontrolne dotyczące stanu zdrowia, aby system mógł wybrać odpowiedniego specjalistę\n", + "\n", + " - Czy objawy wskazują na bardzo pilną potrzebę umówienia wizyty?\n", + "\n", + "### Zamawianie produktów w sklepie\n", + "\n", + "Celem projektu jest zbudowanie agenta dialogowego, który pozwoli (np. jadąc samochodem) zrobić zakupy w sklepie spożywczym/wielobranżowym.\n", + "System pozwala na wybranie produktów z listy, bądź takich wskazanych przez rozmówcę (np. na pytanie „Jakie sery pleśniowe masz w ofercie?” system wylicza produkty, bądź prosi o sprecyzowanie oczekiwań, gdy lista jest za duża).\n", + "Podczas rozmowy system ma za zadanie rozpoznać potrzebę dzwoniącego, w szczególności:\n", + "\n", + " - Jeżeli danego produktu nie ma w ofercie, to proponuje inny z tej samej kategorii.\n", + "\n", + " - System stara się zachęcić klienta do zakupów przez komunikaty z propozycją zniżek (np. „Jeżeli jesteś wegetarianinem, mamy dzisiaj rabaty na produkty wegetariańskie”). Komunikaty te powinny pojawiać się na różnych etapach dialogu (na początku/w trakcie/pod koniec).\n", + "\n", + "Na koniec zakupów system pyta się o numer karty rabatowej i „ufa” rozmówcy, gdy w danym momencie nie może tego numeru karty rabatowej sprawdzić.\n", + "\n", + "### Przyjmowania zamówień w restauracji\n", + "\n", + "Celem projektu jest zbudowanie agenta dialogowego przyjmującego zamówienia w restauracji.\n", + "System powinien rekomendować pozycje z menu na podstawie preferencji klienta oraz udzielać podstawowych informacji dotyczących zamówionego posiłków.\n", + "Agent powinien wykazywać elastyczność, adaptując się do potrzeb klienta, np. umożliwiać pominięcie lub dodanie pewnych składników do posiłku.\n", + "\n", + "### Rezerwacja pokoi hotelowych\n", + "Celem projektu jest zbudowanie agenta dialogowego pozwalającego rezerwować pokoje hotelowe (w wielu hotelach jednocześnie).\n", + "Oprócz podstawowych danych takich jak termin czy liczba osób system powinien również uwzględniać inne oczekiwania klienta (darmowe wifi, odległość od centrum miasta, przedział cenowy, liczbę gwiazdek itp.), proponując odpowiednie obiekty.\n", + "Agent powinien również umożliwiać odwołanie rezerwacji oraz zmianę jej parametrów." + ] + }, + { + "cell_type": "markdown", + "id": "a26eda52", + "metadata": {}, + "source": [ + "Metody pozyskiwania danych do budowy systemów dialogowych\n", + "---------------------------------------------------------\n", + " 1. Eksperymenty typu Czarnoksiężnik z Oz (temat naszych następnych zajęć).\n", + "\n", + " 2. Zapisy rozmów z operatorami infolinii (RODO!).\n", + "\n", + " 3. Dokumenty typu FAQ.\n", + "\n", + " 3. Dialogi z innych, zbliżonych dziedzin.\n", + "\n", + " 4. Dane dialogowe ogólnego przeznaczenia:\n", + "\n", + " - napisy filmowe: [OpenSubtitles](https://opus.nlpl.eu/OpenSubtitles-v2018.php)\n", + "\n", + " - logi z IRCa: [Ubuntu Dialogue Corpus](https://github.com/rkadlec/ubuntu-ranking-dataset-creator)\n", + "\n", + " - dyskusje na twitterze.\n", + "\n", + "Literatura\n", + "----------\n", + " 1. Dan Jurafsky and James H. Martin, *Speech and Language Processing*, 3rd ed. draft,\n", + "\tch. 15, Chatbots and Dialogue Systems,\n", + " https://web.stanford.edu/~jurafsky/slp3/15.pdf,\n", + " data dostępu: 10 marca 2023.\n", + "\n", + " 2. Gould, J. D. and Lewis, C. (1985). Designing for usability:\n", + " Key principles and what designers think. CACM 28(3), 300–311.\n", + " http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.84.8860&rep=rep1&type=pdf,\n", + " data dostępu: 10 marca 2023." + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}