Merge pull request 'dialogue_system' (#3) from dialogue_system into master
Reviewed-on: #3 Reviewed-by: Iwona Christop <iwochr2@st.amu.edu.pl> Reviewed-by: Adrian Charkiewicz <adrcha2@st.amu.edu.pl>
This commit is contained in:
commit
316afb5eef
214
.gitignore
vendored
Normal file
214
.gitignore
vendored
Normal file
@ -0,0 +1,214 @@
|
|||||||
|
### 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
|
||||||
|
|
||||||
|
.idea
|
134
cheddar.py
134
cheddar.py
@ -1,134 +0,0 @@
|
|||||||
import re
|
|
||||||
import random
|
|
||||||
|
|
||||||
|
|
||||||
class Elizabeth:
|
|
||||||
questions = ((r'Potrzebuję (.*)',
|
|
||||||
('Czemu potrzebujesz %1?',
|
|
||||||
'Naprawdę pomogłoby, gdybyś miał %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?')),
|
|
||||||
('Jesteś (.*)',
|
|
||||||
('Czemu to ważne, że jestem %1?',
|
|
||||||
'Chciałbyś, abym nie był %1?',
|
|
||||||
'Mozę to ty uważasz, że jestem %1.',
|
|
||||||
'Mogę być %1, co o tym sądzisz?')),
|
|
||||||
(r'Co (.*)',
|
|
||||||
('Czemu pytasz?',
|
|
||||||
'W jaki sposób odpowiedź na to pytania by ci pomogą?',
|
|
||||||
'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 %1?', 'Naprawdę tak myślisz?', "Ale nie jesteś pewien czy %1?")),
|
|
||||||
(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ś dostał %1?',
|
|
||||||
'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'(.*)\\?',
|
|
||||||
('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?')),
|
|
||||||
|
|
||||||
(
|
|
||||||
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?",
|
|
||||||
))
|
|
||||||
)
|
|
||||||
|
|
||||||
def ask(self, question):
|
|
||||||
question = question.lower()
|
|
||||||
for i in self.questions:
|
|
||||||
result = re.match(i[0], question)
|
|
||||||
if result:
|
|
||||||
print(random.choice(i[1]))
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
ela = Elizabeth()
|
|
||||||
|
|
||||||
print("Cześć, o czym chcesz porozmawiać?")
|
|
||||||
while True:
|
|
||||||
question = input().lower()
|
|
||||||
if question == "cześć" or question == "do widzenia":
|
|
||||||
print("Do widzenia")
|
|
||||||
break
|
|
||||||
ela.ask(question)
|
|
137
lab/01-rodzaje-systemow-dialogowych.ipynb
Normal file
137
lab/01-rodzaje-systemow-dialogowych.ipynb
Normal file
@ -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",
|
||||||
|
"<div class=\"alert alert-block alert-info\">\n",
|
||||||
|
"<h1> Systemy Dialogowe </h1>\n",
|
||||||
|
"<h2> 1. <i>Rodzaje system\u00f3w dialogowych</i> [laboratoria]</h2> \n",
|
||||||
|
"<h3> Marek Kubis (2021)</h3>\n",
|
||||||
|
"</div>\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 <cite>(Jurafsky and Martin, 2020)</cite>:\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) <cite>(Weizenbaum, 1966)</cite>.\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 <cite>(Bobrow, 1977)</cite> 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
|
||||||
|
}
|
122
lab/02-analiza-wymagan.ipynb
Normal file
122
lab/02-analiza-wymagan.ipynb
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
{
|
||||||
|
"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",
|
||||||
|
"<div class=\"alert alert-block alert-info\">\n",
|
||||||
|
"<h1> Systemy Dialogowe </h1>\n",
|
||||||
|
"<h2> 2. <i>Analiza wymaga\u0144</i> [laboratoria]</h2> \n",
|
||||||
|
"<h3> Marek Kubis (2021)</h3>\n",
|
||||||
|
"</div>\n",
|
||||||
|
"\n",
|
||||||
|
"![Logo 2](https://git.wmi.amu.edu.pl/AITech/Szablon/raw/branch/master/Logotyp_AITech2.jpg)"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Analiza Wymaga\u0144\n",
|
||||||
|
"===============\n",
|
||||||
|
"\n",
|
||||||
|
"Projektowanie system\u00f3w dialogowych\n",
|
||||||
|
"----------------------------------\n",
|
||||||
|
"\n",
|
||||||
|
"Projektowanie systemu dialogowego jest procesem [zorientowanym na u\u017cytkownika](https://en.wikipedia.org/wiki/User-centered_design) <cite>(por. Jurafsky and Martin, 2020; Gould and Lewis, 1985)</cite>, kt\u00f3ry wymaga:\n",
|
||||||
|
"\n",
|
||||||
|
" 1. Analizy tego kim jest docelowy u\u017cytkownik systemu i na czym polegaj\u0105 zadania (cele), kt\u00f3re chce on zrealizowa\u0107.\n",
|
||||||
|
"\n",
|
||||||
|
" 2. Budowy symulator\u00f3w i prototyp\u00f3w.\n",
|
||||||
|
"\n",
|
||||||
|
" 3. Przyrostowego rozwoju i testowania z udzia\u0142em u\u017cytkownik\u00f3w.\n",
|
||||||
|
"\n",
|
||||||
|
"Punktami 2 i 3 zajmiemy si\u0119 na kolejnych zaj\u0119ciach. Tematem dzisiejszych zaj\u0119\u0107 jest punkt 1.\n",
|
||||||
|
"\n",
|
||||||
|
"Zadania\n",
|
||||||
|
"-------\n",
|
||||||
|
" 1. Wybra\u0107 temat projektu.\n",
|
||||||
|
"\n",
|
||||||
|
" 2. Zidentyfikowa\u0107 podstawowe zadania (cele), kt\u00f3re u\u017cytkownik chce zrealizowa\u0107 korzystaj\u0105c z systemu.\n",
|
||||||
|
"\n",
|
||||||
|
" 3. Dla ka\u017cdego zidentyfikowanego zadania napisa\u0107 przyk\u0142adowy dialog, w toku kt\u00f3rego system zrealizuje cel u\u017cytkownika.\n",
|
||||||
|
"\n",
|
||||||
|
" 4. Dialogi zapisa\u0107 w dokumencie `requirements-analysis.md` i umie\u015bci\u0107 w katalogu g\u0142\u00f3wnym ga\u0142\u0119zi\n",
|
||||||
|
" `master` repozytorium projektowego. Dokument prosz\u0119 przygotowa\u0107 korzystaj\u0105c z\n",
|
||||||
|
" [szablonu](requirements-analysis.md).\n",
|
||||||
|
"\n",
|
||||||
|
"Przyk\u0142adowe tematy projekt\u00f3w\n",
|
||||||
|
"----------------------------\n",
|
||||||
|
"\n",
|
||||||
|
" - System przyjmowania zam\u00f3wie\u0144 w restauracji\n",
|
||||||
|
"\n",
|
||||||
|
" - System rezerwacji pokoi hotelowych\n",
|
||||||
|
"\n",
|
||||||
|
" - System rezerwacji wizyt u lekarza\n",
|
||||||
|
"\n",
|
||||||
|
" - System sprzeda\u017cy bilet\u00f3w kinowych\n",
|
||||||
|
"\n",
|
||||||
|
" - System sprzeda\u017cy bilet\u00f3w kolejowych\n",
|
||||||
|
"\n",
|
||||||
|
" - System obs\u0142ugi wypo\u017cycze\u0144 w bibliotece\n",
|
||||||
|
"\n",
|
||||||
|
" - Asystent zarz\u0105dzaj\u0105cy kalendarzem spotka\u0144\n",
|
||||||
|
"\n",
|
||||||
|
" - Asystent wykonuj\u0105cy podstawowe czynno\u015bci w systemie operacyjnym"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"Metody pozyskiwania danych do budowy system\u00f3w dialogowych\n",
|
||||||
|
"---------------------------------------------------------\n",
|
||||||
|
" 1. Eksperymenty typu Czarnoksi\u0119\u017cnik z Oz (temat naszych nast\u0119pnych zaj\u0119\u0107).\n",
|
||||||
|
"\n",
|
||||||
|
" 2. Zapisy rozm\u00f3w z operatorami infolinii (RODO!).\n",
|
||||||
|
"\n",
|
||||||
|
" 3. Dokumenty typu FAQ.\n",
|
||||||
|
"\n",
|
||||||
|
" 3. Dialogi z innych, zbli\u017conych dziedzin.\n",
|
||||||
|
"\n",
|
||||||
|
" 4. Dane dialogowe og\u00f3lnego 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. 24, Chatbots and Dialogue Systems,\n",
|
||||||
|
" https://web.stanford.edu/~jurafsky/slp3/24.pdf,\n",
|
||||||
|
" data dost\u0119pu: 14 lutego 2021.\n",
|
||||||
|
"\n",
|
||||||
|
" 2. Gould, J. D. and Lewis, C. (1985). Designing for usability:\n",
|
||||||
|
" Key principles and what designers think. CACM 28(3), 300\u2013311.\n",
|
||||||
|
" http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.84.8860&rep=rep1&type=pdf,\n",
|
||||||
|
" data dost\u0119pu: 21 lutego 2021."
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"metadata": {
|
||||||
|
"jupytext": {
|
||||||
|
"cell_metadata_filter": "-all",
|
||||||
|
"main_language": "python",
|
||||||
|
"notebook_metadata_filter": "-all"
|
||||||
|
},
|
||||||
|
"author": "Marek Kubis",
|
||||||
|
"email": "mkubis@amu.edu.pl",
|
||||||
|
"lang": "pl",
|
||||||
|
"subtitle": "2.Analiza wymaga\u0144[laboratoria]",
|
||||||
|
"title": "Systemy Dialogowe",
|
||||||
|
"year": "2021"
|
||||||
|
},
|
||||||
|
"nbformat": 4,
|
||||||
|
"nbformat_minor": 4
|
||||||
|
}
|
8
tasks/zad1/cheddar.py
Normal file
8
tasks/zad1/cheddar.py
Normal file
@ -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()
|
117
tasks/zad1/consts.py
Normal file
117
tasks/zad1/consts.py
Normal file
@ -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ę"
|
||||||
|
}
|
124
tasks/zad2/requirements-analysis.md
Normal file
124
tasks/zad2/requirements-analysis.md
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
Nachos dialogue system
|
||||||
|
==============
|
||||||
|
|
||||||
|
Zadanie 1: Dokonanie rezerwacji
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos, jak mogę Ci pomóc?
|
||||||
|
|
||||||
|
*user:* Dzień dobry, chciałbym dokonać rezerwacji
|
||||||
|
|
||||||
|
*system:* Jaki film Cię interesuje?
|
||||||
|
|
||||||
|
*user:* Alicja w Krainie Czarów?
|
||||||
|
|
||||||
|
*system:* Film nie znajduje się w repertuarze, podaj inny tytuł.
|
||||||
|
|
||||||
|
*user:* Batman
|
||||||
|
|
||||||
|
*system:* Jaki termin Cię interesuje?
|
||||||
|
|
||||||
|
*user:* Dzisiaj, popołudniu?
|
||||||
|
|
||||||
|
*system:* Dostępne godziny to: 13:30, 15:20, 17:45
|
||||||
|
|
||||||
|
*user:* 15:20
|
||||||
|
|
||||||
|
*system:* Ile potrzebujesz biletów?
|
||||||
|
|
||||||
|
*user:* 2
|
||||||
|
|
||||||
|
*system:* Gdzie chciałbyś usiąść?
|
||||||
|
|
||||||
|
*user:* Z tyłu, na środku
|
||||||
|
|
||||||
|
*system:* Zostały Ci przydzielone miejsca H15, H16, numer Twojej rezerwacji to 123431.
|
||||||
|
|
||||||
|
|
||||||
|
Zadanie 2: Anulowanie rezerwacji
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Dzień dobry, chciałbym anulować rezerwację.
|
||||||
|
|
||||||
|
*system:* Proszę podać numer rezerwacji.
|
||||||
|
|
||||||
|
*user:* 123431
|
||||||
|
|
||||||
|
*system:* Rezerwacja nr 123431 w dniu 16.03 na godzinę 15:20 zostałą anulowana.
|
||||||
|
|
||||||
|
*user:* Dziękuję <3
|
||||||
|
|
||||||
|
Zadanie 3: Podawanie aktualnego repertuaru
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Chciałbym dowiedzieć się, co jest teraz grane.
|
||||||
|
|
||||||
|
*system:* Obecnie w repertuarze znajdują się: Batman, To nie wypanda, Inni ludzie, Ambulans, Uncharted, Ups 2, Nasze magiczne Encanto.
|
||||||
|
|
||||||
|
Zadanie 4: Zmiana terminu rezerwacji
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Chciałbym zmienić termin rezerwacji
|
||||||
|
|
||||||
|
*system:* Proszę o podanie numeru rezerwacji.
|
||||||
|
|
||||||
|
*user:* 123431
|
||||||
|
|
||||||
|
*system:* Proszę podać nowy termin rezerwacji.
|
||||||
|
|
||||||
|
*user:* środa 18:30
|
||||||
|
|
||||||
|
*system:* Zmiana została dokonana.
|
||||||
|
|
||||||
|
|
||||||
|
Zadanie 5: Podanie oferty gastronomicznej
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Co można zakupić w barze?
|
||||||
|
|
||||||
|
*system:* W barze dostępne są obecnie: zestaw z solonym, słodkim lub maślany popcornem, wraz z colą/fantą/sprite lub zestaw *Nachosów* z wybranym dipem.
|
||||||
|
|
||||||
|
|
||||||
|
Zadanie 6: Pytanie o dostępne metody płatności
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Czy można płacić kartą?
|
||||||
|
|
||||||
|
*system:* Możliwymi metodami płatności przy kasie są: gotówka, karta płatnicza, kod BLIK, przelew bankowy. Na stronie zakupu można dokonać kodem blikem, przelewem bankowym a także PayU.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Zadanie 7: Pytanie o nadchodzące premiery
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Jakie filmy wejdą do kin niedługo?
|
||||||
|
|
||||||
|
*system:* W naszym repetuarze będą obecne: Morbius - od 1 kwietnia, Zaginione miasto - od 1 kwietnia, Fanastyczne zwierzęta: tajemnice Dumbledorea - od 8 kwietnia, doktor strange w multiwersum obłędu - od 6 maja.
|
||||||
|
|
||||||
|
|
||||||
|
Zadanie 8: Podawanie aktualnego repertuaru z podziałem na kategorię
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
*system:* Witamy w systemie kinowym Nachos.
|
||||||
|
|
||||||
|
*user:* Czy puszczane są teraz jakieś komedie romantyczne?
|
||||||
|
|
||||||
|
*system:* Obecnie w repertuarze w podanej kategorii znajdują się: Najgorszy człowiek na świecie.
|
||||||
|
|
||||||
|
*user:* A czy są jakieś komedie?
|
||||||
|
|
||||||
|
*system:* Obecnie w repertuarze w podanej kategorii znajdują się: Pies oraz To nie wypanda.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user