diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..93d2055 --- /dev/null +++ b/.gitignore @@ -0,0 +1,213 @@ +### Python template +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +### JetBrains template +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + diff --git a/cheddar.py b/cheddar.py deleted file mode 100644 index a4b332c..0000000 --- a/cheddar.py +++ /dev/null @@ -1,123 +0,0 @@ -from nltk.chat.util import Chat - -# "cheddar" chatbot - -reflections = { - "jestem": "jestes", - "bylem": "byles", - "bylam": "bylas", - "ja": "ty", - "chcialbym": "chcialbys", - "chcialabym": "chcialabys", - "mam": "masz", - "bede": "bedziesz", - "moj": "twoj", - "twoja": "moja", - "moim": "twoim", - "mojego": "twojego", - "jestes": "jestem", - "byles": "bylem", - "masz": "mam", - "bedziesz": "bede", - "twoj": "moj", - "twoim": "moim", - "twojego": "mojego", - "ty": "ja", - "nasz": "wasz", - "moge": "mozesz" -} - -pairs = ( - ( - r"Potrzebuje (.*)", - ( - "Dlaczego potrzebujesz %1?", - "Czy naprawdę pomogloby Ci zdobycie %1?", - "Czy jestes pewien, ze potrzebujesz %1?", - ), - ), - ( - r"Dlaczego nie moge (.*)", - ( - "Czy uwazasz, ze powinienes moc %1?", - "Gdybys mogl %1, co bys zrobil?", - "Nie wiem, dlaczego nie mozesz %1?", - "Czy naprawde probowales?", - ), - ), - ( - r"Nie moge (.*)", - ( - "Skad wiesz, ze nie mozesz %1?", - "Byc moze moglbys %1, gdybys sprobowal.", - "Co musialbys zrobic zeby %1?", - ), - ), - ( - r"Jestem (.*)", - ( - "Czy rozmawiasz ze mna poniewaz jestes %1?", - "Od jak dawna jestes %1?", - "Jak sie czujesz z tym, ze jestes %1?", - "Jak sie czujesz bedac %1?", - "Dlaczego mowisz mi, ze jestes %1?", - "Dlaczego uwazasz, ze jestes %1?", - ), - ), - ( - r"Czy jestes (.*)", - ( - "Dlaczego ma to znaczenie czy jestem %1?", - "Czy wolabys gdybym nie byl %1?", - "Byc moze uwazasz, ze jestem %1.", - "Byc moze jestem %1, co o tym sadzisz?", - ), - ), - ( - r"Co (.*)", - ( - "Dlaczego pytasz?", - "W jaki sposob pomoglaby ci odpowiedz na to pytanie?", - "Co o tym myslisz?", - ), - ), - ( - r"Jak (.*)", - ( - "Jak sadzisz?", - "Byc moze potrafisz odpowiedziec na swoje wlasne pytanie.", - "O co tak naprawde pytasz?", - ), - ), - ( - r"Poniewaz (.*)", - ( - "Czy to jest prawdziwy powod?", - "Jakie inne powody przychodza Ci na mysl?", - "Czy ten powod odnosi sie do czegos innego?", - "Jesli %1, to co jeszcze musi byc prawda?", - ), - ), - ( - r"quit", ( - "Do uslyszenia", - "Czesc" - ), - ), - ( - r"(.*)", - ( - "Zmienmy na chwile temat, powiedz mi o swojej rodzinie", - "%1?", - "Dlaczego tak mowisz?", - ), - ), -) - -cheddar = Chat(pairs, reflections) - -print("\nNapisz 'quit' aby zakonczyc.") -print("-" * 70) - -print("Witaj. Jak sie dzisiaj czujesz?") -cheddar.converse() \ No newline at end of file diff --git a/eliza.py b/eliza.py deleted file mode 100644 index b032d50..0000000 --- a/eliza.py +++ /dev/null @@ -1,2 +0,0 @@ -from nltk.chat import eliza -eliza.demo() \ No newline at end of file diff --git a/lab/01-rodzaje-systemow-dialogowych.ipynb b/lab/01-rodzaje-systemow-dialogowych.ipynb new file mode 100644 index 0000000..0a30941 --- /dev/null +++ b/lab/01-rodzaje-systemow-dialogowych.ipynb @@ -0,0 +1,137 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "![Logo 1](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech1.jpg)\n", + "
\n", + "

Systemy Dialogowe

\n", + "

1. Rodzaje system\u00f3w dialogowych [laboratoria]

\n", + "

Marek Kubis (2021)

\n", + "
\n", + "\n", + "![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rodzaje system\u00f3w dialogowych\n", + "============================\n", + "\n", + "Wprowadzenie\n", + "------------\n", + "\n", + "Systemy dialogowe mo\u017cna zgrubnie podzieli\u0107 na dwie kategorie (Jurafsky and Martin, 2020):\n", + "\n", + " 1. chatboty,\n", + "\n", + " 2. systemy ukierunkowane na wykonywanie zada\u0144 (ang. task-oriented dialogue agents).\n", + "\n", + "### Chatboty\n", + "Przeznaczeniem chatbota\n", + "jest prowadzenie swobodnej dyskusji z u\u017cytkownikiem na dowolny (nienarzucony z g\u00f3ry) temat.\n", + "Konwersacja z chatbotem nie s\u0142u\u017cy wype\u0142nieniu \u017cadnego z g\u00f3ry okre\u015blonego zadania.\n", + "\n", + "Klasycznym przyk\u0142adem chatbota jest [ELIZA](https://en.wikipedia.org/wiki/ELIZA) (Weizenbaum, 1966).\n", + "Program ten,\n", + "udaj\u0105c psychoanalityka, mia\u0142 zademonstrowa\u0107 potencja\u0142 tkwi\u0105cy w komunikacji cz\u0142owieka z komputerem w\n", + "j\u0119zyku naturalnym. Jego pythonow\u0105 implementacj\u0119 znajdziemy w pakiecie [nltk](www.nltk.org)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from nltk.chat import eliza\n", + "eliza.demo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "ELIZA sk\u0142ada si\u0119 ze zbioru wzorc\u00f3w, kt\u00f3re s\u0105 dopasowywane do wypowiedzi u\u017cytkownika.\n", + "Z ka\u017cdym wzorcem jest powi\u0105zany zestaw szablon\u00f3w, kt\u00f3re s\u0105 wykorzystywane do przygotowania\n", + "odpowiedzi dla u\u017cytkownika." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "eliza.pairs[:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Systemy dialogowe ukierunkowane na wykonywanie zada\u0144\n", + "Systemy ukierunkowane na wykonywanie zada\u0144 b\u0119d\u0105 stanowi\u0107 g\u0142\u00f3wny temat tego przedmiotu.\n", + "Dla uproszenia b\u0119dziemy je nazywa\u0107 *agentami dialogowymi*.\n", + "\n", + "Pierwotnie agenty dialogowe by\u0142y ukierunkowywane na jedno, \u015bci\u015ble okre\u015blone zadanie.\n", + "Systemem tego typu by\u0142 GUS (Bobrow, 1977) umo\u017cliwiaj\u0105cy planowanie podr\u00f3\u017cy.\n", + "\n", + "Obecnie zar\u00f3wno w praktyce badawczej jak i w zastosowaniach przemys\u0142owych rozwijane s\u0105 systemy\n", + "ukierunkowane na wykonywanie wielu zada\u0144 r\u00f3wnocze\u015bnie.\n", + "*Inteligentne asystenty osobiste* (ang. *IPA*, *Intelligent Personal Assistant*) takie, jak:\n", + "\n", + " - [Alexa](https://developer.amazon.com/en-US/alexa),\n", + " - [Bixby](http://bixby.samsung.com/),\n", + " - [Google Assistant](https://assistant.google.com/),\n", + " - [Siri](https://www.apple.com/siri/)\n", + "\n", + "realizuj\u0105 wiele cel\u00f3w u\u017cytkownika, do kt\u00f3rych nale\u017c\u0105 m.in.:\n", + "\n", + " - wyszukiwanie kontakt\u00f3w w ksi\u0105\u017cce adresowej,\n", + " - zarz\u0105dzanie kalendarzem,\n", + " - zmiana ustawie\u0144 telefonu.\n", + "\n", + "Zadanie\n", + "-------\n", + "Zaimplementowa\u0107 program typu ELIZA prowadz\u0105cy konwersacj\u0119 w j\u0119zyku polskim.\n", + "Kod \u017ar\u00f3d\u0142owy umie\u015bci\u0107 w ga\u0142\u0119zi `chatbot` repozytorium projektowego.\n", + "\n", + "Literatura\n", + "----------\n", + " 1. Dan Jurafsky and James H. Martin, *Speech and Language Processing*, 3rd ed. draft,\n", + "\tch. 24, Chatbots and Dialogue Systems,\n", + " https://web.stanford.edu/~jurafsky/slp3/24.pdf\n", + " data dost\u0119pu: 14 marca 2021.\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\u0119pu: 14 marca 2021.\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\u2013173." + ] + } + ], + "metadata": { + "jupytext": { + "cell_metadata_filter": "-all", + "main_language": "python", + "notebook_metadata_filter": "-all" + }, + "author": "Marek Kubis", + "email": "mkubis@amu.edu.pl", + "lang": "pl", + "subtitle": "1.Rodzaje system\u00f3w dialogowych[laboratoria]", + "title": "Systemy Dialogowe", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +} \ No newline at end of file diff --git a/tasks/zad1/cheddar.py b/tasks/zad1/cheddar.py new file mode 100644 index 0000000..c8c845a --- /dev/null +++ b/tasks/zad1/cheddar.py @@ -0,0 +1,8 @@ +from nltk.chat.util import Chat +import consts as consts + +cheddy = Chat(consts.questions, reflections=consts.reflections) +print("\nNapisz 'quit' aby zakonczyc.") +print("-" * 70) +print("Witaj. Co chcesz mi powiedzieć?") +cheddy.converse() diff --git a/tasks/zad1/consts.py b/tasks/zad1/consts.py new file mode 100644 index 0000000..0b37d87 --- /dev/null +++ b/tasks/zad1/consts.py @@ -0,0 +1,117 @@ +# questions and reflections for cheddar chatbot + +questions = [(r"Potrzebuję (.*)", + ('Czemu potrzebujesz %1?', + 'Czy aby na pewno potrzebujesz %1?')), + (r'Jestem (.*)', + ('Czy przyszedłeś dziś do mnie, ponieważ jesteś %1?', + 'Jak długo jesteś %1?', + 'Jak czujesz się z byciem %1?')), + (r'Jesteś (.*)', + ('Czemu to ważne, że jestem %1?', + 'Chciałbyś, abym nie był %1?', + 'Możę to ty uważasz, że jestem %1.', + 'Mogę być %1, co o tym sądzisz?', + "Czy rozmawiasz że mną, ponieważ jesteś %1?", + "Od jak dawna jesteś %1?", + "Dlaczego mówisz mi, że jesteś %1?", + "Dlaczego uważasz, że jesteś %1?" + )), + (r'Co (.*)', + ('Czemu pytasz?', + 'W jaki sposób odpowiedź na to pytania by ci pomogła?', + 'A co ty myślisz?')), + (r'Jak (.*)', + ('A jak myślisz?', + 'Może sam odpowiedz sobie na to pytanie', + "Jakie jest twoje PRAWDZIWE pytanie")), + (r'Ponieważ (.*)', + ('Czy to na pewno prawdziwy powód?', + 'Jakie inne powody przychodzą ci na myśl?', + 'Skoro %1, to jakie inne powody są prawdziwe?')), + (r'(.*) przepraszam (.*)', + ('Nie masz za co przepraszać', + 'Jakie uczucia masz w sobie, gdy przepraszasz?')), + (r'Myślę, że (.*)', + ('Jesteś niepewny co do tego?', 'Naprawdę tak myślisz?', "Ale nie jesteś pewien?")), + (r'Dlaczego (.*)', + ("Czemu to ty nie powiesz mi dlaczego %1?", 'Czemu myślisz, że %1?')), + (r'Chcę (.*)', + ('Co to by dla ciebie oznaczało, gdybyś to dostał?', + 'Czemu chcesz %1?', + 'Co byś zrobił, gdybyś dostał %1?', + 'Gdybyś dostał %1, to co byś zrobił?')), + (r'(.*)matka(.*)', + ('Powiedz mi więcej o swojej matce.', + 'Jak wyglądałą relacja z twoją matką?', + 'Jakie są twoje uczucia dziś?')), + (r'(.*) ojciec(.*)', + ('Powiedz mi więcej o swoim ojcu.', + 'Jak twój ojciec sprawia, że się czujesz?')), + (r"Nie mogę (.*)", + ("Skąd wiesz, że nie możesz %1?", + "Byc może mogłbyś %1, gdybyś spróbował.", + "Co musialbyś zrobić żeby %1?")), + (r"Czy jesteś (.*)", + ("Dlaczego ma to znaczenie czy jestem %1?", + "Czy wolabys gdybym nie był %1?", + "Byc moze uważasz, że jestem %1.", + "Byc moze jestem %1, co o tym sadzisz?",)), + (r"Co (.*)", + ("Dlaczego pytasz?", + "W jaki sposob pomogłaby ci odpowiedz na to pytanie?", + "Co o tym myślisz?",)), + (r"Jak (.*)", + ("Jak sadzisz?", + "Byc moze potrafisz odpowiedziec na swoje wlasne pytanie.", + "O co tak naprawde pytasz?",)), + (r"Poniewaz (.*)", + ("Czy to jest prawdziwy powod?", + "Jakie inne powody przychodzą Ci na myśl?", + "Czy ten powod odnosibędącdo czegoś innego?", + "Jesli %1, to co jeszcze musi byc prawda?", + )), + (r'quit', + ('Do usłyszenia!', + 'Miłego dnia!',)), + (r'(.*)\?', + ('Być może odpowiedź jest w tobie?', + 'Czemu to TY nie powiesz MI?', + "Czemu o to pytasz?")), + (r'(.*)', + ('Proszę, powiedz mi więcej', + "Zmieńmy temat... opowiedz mi o swojej rodzinie.", + 'Możesz rozwinąć?', + 'Możesz powiedzieć mi więcej o %1?', + 'Rozumiem.', + 'To bardzo interesujące', + 'Rozumiem.. i co Ci to mówi?', + 'Jakie uczucia to w tobie wywołuje?', + 'Jak się czujesz, mówiąc to?')), + ] + +reflections = { + "jestem": "jesteś", + "byłem": "byłeś", + "byłam": "byłaś", + "ja": "ty", + "chciałbym": "chciałbyś", + "chciałabym": "chciałabyś", + "mam": "masz", + "będę": "będziesz", + "mój": "twój", + "twoja": "moja", + "moim": "twoim", + "mojego": "twojego", + "jesteś": "jestem", + "byleś": "byłem", + "masz": "mam", + "będziesz": "będę", + "twój": "mój", + "twoim": "moim", + "twojego": "mojego", + "ty": "ja", + "nasz": "wasz", + "mogę": "możesz", + "mnie": "cię" + } \ No newline at end of file