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