diff --git a/README.md b/README.md
index b89af65..2ec0201 100644
--- a/README.md
+++ b/README.md
@@ -14,8 +14,10 @@
---
-## Zadanie 9/10 DST
+## Zadanie 9/10 DST i DP
- implementacja regułowego modułu DST: **src/components DST.py**
+- implementacja regułowego DP, tylko happy path: **src/components DP.py**
+
- wykorzystanie w pliku **src/dialogue_system.py**
diff --git a/lab/09-zarzadzanie-dialogiem-reguly(zmodyfikowany).ipynb b/lab/09-zarzadzanie-dialogiem-reguly(zmodyfikowany).ipynb
new file mode 100644
index 0000000..4032a32
--- /dev/null
+++ b/lab/09-zarzadzanie-dialogiem-reguly(zmodyfikowany).ipynb
@@ -0,0 +1,972 @@
+{
+ "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",
+ " 9. Zarządzanie dialogiem z wykorzystaniem reguł [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": [
+ "Zarządzanie dialogiem z wykorzystaniem reguł\n",
+ "============================================\n",
+ "\n",
+ "Agent dialogowy wykorzystuje do zarządzanie dialogiem dwa moduły:\n",
+ "\n",
+ " - monitor stanu dialogu (dialogue state tracker, DST) — moduł odpowiedzialny za śledzenie stanu dialogu.\n",
+ "\n",
+ " - taktykę prowadzenia dialogu (dialogue policy) — moduł, który na podstawie stanu dialogu\n",
+ " podejmuje decyzję o tym jaką akcję (akt systemu) agent ma podjąć w kolejnej turze.\n",
+ "\n",
+ "Oba moduły mogą być realizowane zarówno z wykorzystaniem reguł jak i uczenia maszynowego.\n",
+ "Mogą one zostać również połączone w pojedynczy moduł zwany wówczas *menedżerem dialogu*.\n",
+ "\n",
+ "Przykład\n",
+ "--------\n",
+ "\n",
+ "Zaimplementujemy regułowe moduły monitora stanu dialogu oraz taktyki dialogowej a następnie\n",
+ "osadzimy je w środowisku *[ConvLab-2](https://github.com/thu-coai/ConvLab-2)*,\n",
+ "które służy do ewaluacji systemów dialogowych.\n",
+ "\n",
+ "**Uwaga:** Niektóre moduły środowiska *ConvLab-2* nie są zgodne z najnowszymi wersjami Pythona,\n",
+ "dlatego przed uruchomieniem poniższych przykładów należy się upewnić, że mają Państwo interpreter\n",
+ "Pythona w wersji 3.7. W przypadku nowszych wersji Ubuntu Pythona 3.7 można zainstalować z\n",
+ "repozytorium `deadsnakes`, wykonując polecenia przedstawione poniżej.\n",
+ "\n",
+ "```\n",
+ "sudo add-apt-repository ppa:deadsnakes/ppa\n",
+ "sudo apt update\n",
+ "sudo apt install python3.7 python3.7-dev python3.7-venv\n",
+ "```\n",
+ "\n",
+ "W przypadku innych systemów można skorzystać np. z narzędzia [pyenv](https://github.com/pyenv/pyenv) lub środowiska [conda](https://conda.io).\n",
+ "\n",
+ "Ze względu na to, że *ConvLab-2* ma wiele zależności zachęcam również do skorzystania ze środowiska\n",
+ "wirtualnego `venv`, w którym moduły zależne mogą zostać zainstalowane.\n",
+ "W tym celu należy wykonać następujące polecenia\n",
+ "\n",
+ "```\n",
+ "python3.7 -m venv convenv # utworzenie nowego środowiska o nazwie convenv\n",
+ "source convenv/bin/activate # aktywacja środowiska w bieżącej powłoce\n",
+ "pip install --ignore-installed jupyter # instalacja jupytera w środowisku convenv\n",
+ "```\n",
+ "\n",
+ "Po skonfigurowaniu środowiska można przystąpić do instalacji *ConvLab-2*, korzystając z\n",
+ "następujących poleceń\n",
+ "\n",
+ "```\n",
+ "mkdir -p l08\n",
+ "cd l08\n",
+ "git clone https://github.com/thu-coai/ConvLab-2.git\n",
+ "cd ConvLab-2\n",
+ "pip install -e .\n",
+ "python -m spacy download en_core_web_sm\n",
+ "cd ../..\n",
+ "```\n",
+ "\n",
+ "Po zakończeniu instalacji należy ponownie uruchomić notatnik w powłoce, w której aktywne jest\n",
+ "środowisko wirtualne *convenv*.\n",
+ "\n",
+ "```\n",
+ "jupyter notebook 08-zarzadzanie-dialogiem-reguly.ipynb\n",
+ "```\n",
+ "\n",
+ "Działanie zaimplementowanych modułów zilustrujemy, korzystając ze zbioru danych\n",
+ "[MultiWOZ](https://github.com/budzianowski/multiwoz) (Budzianowski i in., 2018), który zawiera\n",
+ "wypowiedzi dotyczące m.in. rezerwacji pokoi hotelowych, zamawiania biletów kolejowych oraz\n",
+ "rezerwacji stolików w restauracji.\n",
+ "\n",
+ "### Monitor Stanu Dialogu\n",
+ "\n",
+ "Do reprezentowania stanu dialogu użyjemy struktury danych wykorzystywanej w *ConvLab-2*."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'user_action': [],\n",
+ " 'system_action': [],\n",
+ " 'belief_state': {'cinema': {'book': {'title': '',\n",
+ " 'date': '',\n",
+ " 'time': '',\n",
+ " 'quantity': '',\n",
+ " 'seats': '',\n",
+ " 'area': '',\n",
+ " 'interval': ''},\n",
+ " 'semi': {'goal': ''}}},\n",
+ " 'request_state': {},\n",
+ " 'terminated': False,\n",
+ " 'history': []}"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# from convlab2.util.multiwoz.state import default_state\n",
+ "from utils.state import default_state\n",
+ "default_state()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Metoda `update` naszego monitora stanu dialogu będzie przyjmować akty użytkownika i odpowiednio\n",
+ "modyfikować stan dialogu.\n",
+ "W przypadku aktów typu `inform` wartości slotów zostaną zapamiętane w słownikach odpowiadających\n",
+ "poszczególnym dziedzinom pod kluczem `belief_state`.\n",
+ "W przypadku aktów typu `request` sloty, o które pyta użytkownik zostaną zapisane pod kluczem\n",
+ "`request_state`.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "\"\\nclass SimpleRuleDST(DST):\\n def __init__(self):\\n DST.__init__(self)\\n self.state = default_state()\\n self.value_dict = json.load(open('l08/ConvLab-2/data/multiwoz/value_dict.json'))\\n\\n def update(self, user_act=None):\\n for intent, domain, slot, value in user_act:\\n domain = domain.lower()\\n intent = intent.lower()\\n\\n if domain in ['unk', 'general', 'booking']:\\n continue\\n\\n if intent == 'inform':\\n k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\\n\\n if k is None:\\n continue\\n\\n domain_dic = self.state['belief_state'][domain]\\n\\n if k in domain_dic['semi']:\\n nvalue = normalize_value(self.value_dict, domain, k, value)\\n self.state['belief_state'][domain]['semi'][k] = nvalue\\n elif k in domain_dic['book']:\\n self.state['belief_state'][domain]['book'][k] = value\\n elif k.lower() in domain_dic['book']:\\n self.state['belief_state'][domain]['book'][k.lower()] = value\\n elif intent == 'request':\\n k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\\n\\n if domain not in self.state['request_state']:\\n self.state['request_state'][domain] = {}\\n if k not in self.state['request_state'][domain]:\\n self.state['request_state'][domain][k] = 0\\n\\n return self.state\\n\\n def init_session(self):\\n self.state = default_state()\\n\""
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import json\n",
+ "import os\n",
+ "from convlab2.dst.dst import DST\n",
+ "from convlab2.dst.rule.multiwoz.dst_util import normalize_value\n",
+ "from convlab2.util.multiwoz.multiwoz_slot_trans import REF_SYS_DA\n",
+ "\n",
+ "class SimpleRuleDST(DST):\n",
+ " def __init__(self):\n",
+ " DST.__init__(self)\n",
+ " self.state = default_state()\n",
+ " self.value_dict = json.load(open('utils/value_dict.json'))\n",
+ "\n",
+ " def update(self, user_act=None):\n",
+ " for intent, domain, slot, value in user_act:\n",
+ " domain = domain.lower()\n",
+ " intent = intent.lower()\n",
+ " value = value.lower()\n",
+ "\n",
+ " # if domain in ['unk', 'cinema']:\n",
+ " # continue\n",
+ " k = slot\n",
+ "\n",
+ " if intent == 'inform':\n",
+ " # k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
+ " # if k is None:\n",
+ " # continue\n",
+ "\n",
+ " domain_dic = self.state['belief_state'][domain]\n",
+ "\n",
+ " if k in domain_dic['semi']:\n",
+ " # nvalue = normalize_value(self.value_dict, domain, k, value)\n",
+ " self.state['belief_state'][domain]['semi'][k] = value\n",
+ " elif k in domain_dic['book']:\n",
+ " self.state['belief_state'][domain]['book'][k] = value\n",
+ " elif k.lower() in domain_dic['book']:\n",
+ " self.state['belief_state'][domain]['book'][k.lower()] = value\n",
+ " elif intent == 'request':\n",
+ " # k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
+ "\n",
+ " if domain not in self.state['request_state']:\n",
+ " self.state['request_state'][domain] = {}\n",
+ " if k not in self.state['request_state'][domain]:\n",
+ " self.state['request_state'][domain][k] = 0\n",
+ "\n",
+ " return self.state\n",
+ "\n",
+ " def init_session(self):\n",
+ " self.state = default_state()\n",
+ "\n",
+ "'''\n",
+ "class SimpleRuleDST(DST):\n",
+ " def __init__(self):\n",
+ " DST.__init__(self)\n",
+ " self.state = default_state()\n",
+ " self.value_dict = json.load(open('l08/ConvLab-2/data/multiwoz/value_dict.json'))\n",
+ "\n",
+ " def update(self, user_act=None):\n",
+ " for intent, domain, slot, value in user_act:\n",
+ " domain = domain.lower()\n",
+ " intent = intent.lower()\n",
+ "\n",
+ " if domain in ['unk', 'general', 'booking']:\n",
+ " continue\n",
+ "\n",
+ " if intent == 'inform':\n",
+ " k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
+ "\n",
+ " if k is None:\n",
+ " continue\n",
+ "\n",
+ " domain_dic = self.state['belief_state'][domain]\n",
+ "\n",
+ " if k in domain_dic['semi']:\n",
+ " nvalue = normalize_value(self.value_dict, domain, k, value)\n",
+ " self.state['belief_state'][domain]['semi'][k] = nvalue\n",
+ " elif k in domain_dic['book']:\n",
+ " self.state['belief_state'][domain]['book'][k] = value\n",
+ " elif k.lower() in domain_dic['book']:\n",
+ " self.state['belief_state'][domain]['book'][k.lower()] = value\n",
+ " elif intent == 'request':\n",
+ " k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
+ "\n",
+ " if domain not in self.state['request_state']:\n",
+ " self.state['request_state'][domain] = {}\n",
+ " if k not in self.state['request_state'][domain]:\n",
+ " self.state['request_state'][domain][k] = 0\n",
+ "\n",
+ " return self.state\n",
+ "\n",
+ " def init_session(self):\n",
+ " self.state = default_state()\n",
+ "'''\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "W definicji metody `update` zakładamy, że akty dialogowe przekazywane do monitora stanu dialogu z\n",
+ "modułu NLU są czteroelementowymi listami złożonymi z:\n",
+ "\n",
+ " - nazwy aktu użytkownika,\n",
+ " - nazwy dziedziny, której dotyczy wypowiedź,\n",
+ " - nazwy slotu,\n",
+ " - wartości slotu.\n",
+ "\n",
+ "Zobaczmy na kilku prostych przykładach jak stan dialogu zmienia się pod wpływem przekazanych aktów\n",
+ "użytkownika."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'user_action': [],\n",
+ " 'system_action': [],\n",
+ " 'belief_state': {'cinema': {'book': {'title': '',\n",
+ " 'date': '',\n",
+ " 'time': '',\n",
+ " 'quantity': '',\n",
+ " 'seats': '',\n",
+ " 'area': '',\n",
+ " 'interval': ''},\n",
+ " 'semi': {'goal': ''}}},\n",
+ " 'request_state': {},\n",
+ " 'terminated': False,\n",
+ " 'history': []}"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dst = SimpleRuleDST()\n",
+ "dst.state"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'book': {'title': 'batman',\n",
+ " 'date': '',\n",
+ " 'time': '15:00',\n",
+ " 'quantity': '',\n",
+ " 'seats': '',\n",
+ " 'area': '',\n",
+ " 'interval': ''},\n",
+ " 'semi': {'goal': ''}}"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dst.update([['Inform', 'Cinema', 'time', '15:00'], ['Inform', 'Cinema', 'title', 'Batman']])\n",
+ "dst.state['belief_state']['cinema']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'book': {'title': 'batman',\n",
+ " 'date': '',\n",
+ " 'time': '15:00',\n",
+ " 'quantity': '',\n",
+ " 'seats': '',\n",
+ " 'area': 'na górze na środku',\n",
+ " 'interval': ''},\n",
+ " 'semi': {'goal': ''}}"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dst.update([['Inform', 'Cinema', 'area', 'na górze na środku']])\n",
+ "dst.state['belief_state']['cinema']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'cinema': {'date': 0}}"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dst.update([['Request', 'Cinema', 'date', '?']])\n",
+ "dst.state['request_state']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "dst.update([['Inform', 'Hotel', 'Day', 'tuesday'], ['Inform', 'Hotel', 'People', '2'], ['Inform', 'Hotel', 'Stay', '4']])\n",
+ "dst.state['belief_state']['hotel']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'user_action': [],\n",
+ " 'system_action': [],\n",
+ " 'belief_state': {'cinema': {'book': {'title': 'batman',\n",
+ " 'date': '',\n",
+ " 'time': '15:00',\n",
+ " 'quantity': '',\n",
+ " 'seats': '',\n",
+ " 'area': 'na górze na środku',\n",
+ " 'interval': ''},\n",
+ " 'semi': {'goal': ''}}},\n",
+ " 'request_state': {'cinema': {'date': 0}},\n",
+ " 'terminated': False,\n",
+ " 'history': []}"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dst.state"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Taktyka Prowadzenia Dialogu\n",
+ "\n",
+ "Prosta taktyka prowadzenia dialogu dla systemu rezerwacji pokoi hotelowych może składać się z następujących reguł:\n",
+ "\n",
+ " 1. Jeżeli użytkownik przekazał w ostatniej turze akt typu `Request`, to udziel odpowiedzi na jego\n",
+ " pytanie.\n",
+ "\n",
+ " 2. Jeżeli użytkownik przekazał w ostatniej turze akt typu `Inform`, to zaproponuj mu hotel\n",
+ " spełniający zdefiniowane przez niego kryteria.\n",
+ "\n",
+ " 3. Jeżeli użytkownik przekazał w ostatniej turze akt typu `Inform` zawierający szczegóły\n",
+ " rezerwacji, to zarezerwuj pokój.\n",
+ "\n",
+ "Metoda `predict` taktyki `SimpleRulePolicy` realizuje reguły przedstawione powyżej."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "from collections import defaultdict\n",
+ "import copy\n",
+ "import json\n",
+ "from copy import deepcopy\n",
+ "\n",
+ "from convlab2.policy.policy import Policy\n",
+ "from convlab2.util.multiwoz.dbquery import Database\n",
+ "from convlab2.util.multiwoz.multiwoz_slot_trans import REF_SYS_DA, REF_USR_DA\n",
+ "\n",
+ "\n",
+ "class SimpleRulePolicy(Policy):\n",
+ " def __init__(self):\n",
+ " Policy.__init__(self)\n",
+ " self.db = Database()\n",
+ "\n",
+ " def predict(self, state):\n",
+ " self.results = []\n",
+ " system_action = defaultdict(list)\n",
+ " user_action = defaultdict(list)\n",
+ "\n",
+ " for intent, domain, slot, value in state['user_action']:\n",
+ " user_action[(domain, intent)].append((slot, value))\n",
+ "\n",
+ " for user_act in user_action:\n",
+ " self.update_system_action(user_act, user_action, state, system_action)\n",
+ "\n",
+ " # Reguła 3\n",
+ " if any(True for slots in user_action.values() for (slot, _) in slots if slot in ['Stay', 'Day', 'People']):\n",
+ " if self.results:\n",
+ " system_action = {('Booking', 'Book'): [[\"Ref\", self.results[0].get('Ref', 'N/A')]]}\n",
+ "\n",
+ " system_acts = [[intent, domain, slot, value] for (domain, intent), slots in system_action.items() for slot, value in slots]\n",
+ " state['system_action'] = system_acts\n",
+ " return system_acts\n",
+ "\n",
+ " def update_system_action(self, user_act, user_action, state, system_action):\n",
+ " domain, intent = user_act\n",
+ " constraints = [(slot, value) for slot, value in state['belief_state'][domain.lower()]['semi'].items() if value != '']\n",
+ " self.results = deepcopy(self.db.query(domain.lower(), constraints))\n",
+ "\n",
+ " # Reguła 1\n",
+ " if intent == 'Request':\n",
+ " if len(self.results) == 0:\n",
+ " system_action[(domain, 'NoOffer')] = []\n",
+ " else:\n",
+ " for slot in user_action[user_act]:\n",
+ " kb_slot_name = REF_SYS_DA[domain].get(slot[0], slot[0])\n",
+ "\n",
+ " if kb_slot_name in self.results[0]:\n",
+ " system_action[(domain, 'Inform')].append([slot[0], self.results[0].get(kb_slot_name, 'unknown')])\n",
+ "\n",
+ " # Reguła 2\n",
+ " elif intent == 'Inform':\n",
+ " if len(self.results) == 0:\n",
+ " system_action[(domain, 'NoOffer')] = []\n",
+ " else:\n",
+ " system_action[(domain, 'Inform')].append(['Choice', str(len(self.results))])\n",
+ " choice = self.results[0]\n",
+ "\n",
+ " if domain in [\"Hotel\", \"Attraction\", \"Police\", \"Restaurant\"]:\n",
+ " system_action[(domain, 'Recommend')].append(['Name', choice['name']])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Podobnie jak w przypadku aktów użytkownika akty systemowe przekazywane do modułu NLG są czteroelementowymi listami złożonymi z:\n",
+ "\n",
+ " - nazwy aktu systemowe,\n",
+ " - nazwy dziedziny, której dotyczy wypowiedź,\n",
+ " - nazwy slotu,\n",
+ " - wartości slotu.\n",
+ "\n",
+ "Sprawdźmy jakie akty systemowe zwraca taktyka `SimpleRulePolicy` w odpowiedzi na zmieniający się stan dialogu."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "from convlab2.dialog_agent import PipelineAgent\n",
+ "dst.init_session()\n",
+ "policy = SimpleRulePolicy()\n",
+ "agent = PipelineAgent(nlu=None, dst=dst, policy=policy, nlg=None, name='sys')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response([['Inform', 'Hotel', 'Price', 'cheap'], ['Inform', 'Hotel', 'Parking', 'yes']])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response([['Inform', 'Hotel', 'Area', 'north']])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response([['Request', 'Hotel', 'Area', '?']])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response([['Inform', 'Hotel', 'Day', 'tuesday'], ['Inform', 'Hotel', 'People', '2'], ['Inform', 'Hotel', 'Stay', '4']])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Testy End-to-End\n",
+ "\n",
+ "Na koniec przeprowadźmy dialog łącząc w potok nasze moduły\n",
+ "z modułami NLU i NLG dostępnymi dla MultiWOZ w środowisku `ConvLab-2`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "from convlab2.nlu.svm.multiwoz import SVMNLU\n",
+ "from convlab2.nlg.template.multiwoz import TemplateNLG\n",
+ "\n",
+ "nlu = SVMNLU()\n",
+ "nlg = TemplateNLG(is_user=False)\n",
+ "agent = PipelineAgent(nlu=nlu, dst=dst, policy=policy, nlg=nlg, name='sys')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response(\"I need a cheap hotel with free parking .\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response(\"Where it is located ?\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "lines_to_next_cell": 0
+ },
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response(\"I would prefer the hotel be in the north part of town .\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ },
+ {
+ "ename": "",
+ "evalue": "",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
+ "Run the following command to install 'ipykernel' into the Python environment. \n",
+ "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ ]
+ }
+ ],
+ "source": [
+ "agent.response(\"Yeah , could you book me a room for 2 people for 4 nights starting Tuesday ?\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "Zauważmy, ze nasza prosta taktyka dialogowa zawiera wiele luk, do których należą m.in.:\n",
+ "\n",
+ " 1. Niezdolność do udzielenia odpowiedzi na przywitanie, prośbę o pomoc lub restart.\n",
+ "\n",
+ " 2. Brak reguł dopytujących użytkownika o szczegóły niezbędne do dokonania rezerwacji takie, jak długość pobytu czy liczba osób.\n",
+ "\n",
+ "Bardziej zaawansowane moduły zarządzania dialogiem zbudowane z wykorzystaniem reguł można znaleźć w\n",
+ "środowisku `ConvLab-2`. Należą do nich m.in. monitor [RuleDST](https://github.com/thu-coai/ConvLab-2/blob/master/convlab2/dst/rule/multiwoz/dst.py) oraz taktyka [RuleBasedMultiwozBot](https://github.com/thu-coai/ConvLab-2/blob/master/convlab2/policy/rule/multiwoz/rule_based_multiwoz_bot.py).\n",
+ "\n",
+ "Zadania\n",
+ "-------\n",
+ " 1. Zaimplementować w projekcie monitor stanu dialogu.\n",
+ "\n",
+ " 2. Zaimplementować w projekcie taktykę prowadzenia dialogu.\n",
+ "\n",
+ "Termin: 24.05.2021, godz. 23:59.\n",
+ "\n",
+ "Literatura\n",
+ "----------\n",
+ " 1. Pawel Budzianowski, Tsung-Hsien Wen, Bo-Hsiang Tseng, Iñigo Casanueva, Stefan Ultes, Osman Ramadan, Milica Gasic, MultiWOZ - A Large-Scale Multi-Domain Wizard-of-Oz Dataset for Task-Oriented Dialogue Modelling. EMNLP 2018, pp. 5016-5026\n",
+ " 2. Cathy Pearl, Basic principles for designing voice user interfaces, https://www.oreilly.com/content/basic-principles-for-designing-voice-user-interfaces/ data dostępu: 21 marca 2021\n",
+ " 3. Cathy Pearl, Designing Voice User Interfaces, Excerpts from Chapter 5: Advanced Voice User Interface Design, https://www.uxmatters.com/mt/archives/2018/01/designing-voice-user-interfaces.php data dostępu: 21 marca 2021"
+ ]
+ }
+ ],
+ "metadata": {
+ "author": "Marek Kubis",
+ "email": "mkubis@amu.edu.pl",
+ "interpreter": {
+ "hash": "91e2b0d1baa6ebb76863bdb1d11380bf032a6a1fc1b919194f041a5133852891"
+ },
+ "jupytext": {
+ "cell_metadata_filter": "-all",
+ "main_language": "python",
+ "notebook_metadata_filter": "-all"
+ },
+ "kernelspec": {
+ "display_name": "Python 3.7.9 ('venv': venv)",
+ "language": "python",
+ "name": "python3"
+ },
+ "lang": "pl",
+ "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.7.9"
+ },
+ "subtitle": "9.Zarządzanie dialogiem z wykorzystaniem reguł[laboratoria]",
+ "title": "Systemy Dialogowe",
+ "year": "2021"
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
diff --git a/lab/09-zarzadzanie-dialogiem-reguly.ipynb b/lab/09-zarzadzanie-dialogiem-reguly.ipynb
index 4032a32..bce9113 100644
--- a/lab/09-zarzadzanie-dialogiem-reguly.ipynb
+++ b/lab/09-zarzadzanie-dialogiem-reguly.ipynb
@@ -95,7 +95,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 1,
"metadata": {},
"outputs": [
{
@@ -103,27 +103,43 @@
"text/plain": [
"{'user_action': [],\n",
" 'system_action': [],\n",
- " 'belief_state': {'cinema': {'book': {'title': '',\n",
- " 'date': '',\n",
- " 'time': '',\n",
- " 'quantity': '',\n",
- " 'seats': '',\n",
+ " 'belief_state': {'police': {'book': {'booked': []}, 'semi': {}},\n",
+ " 'hotel': {'book': {'booked': [], 'people': '', 'day': '', 'stay': ''},\n",
+ " 'semi': {'name': '',\n",
" 'area': '',\n",
- " 'interval': ''},\n",
- " 'semi': {'goal': ''}}},\n",
+ " 'parking': '',\n",
+ " 'pricerange': '',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}},\n",
+ " 'attraction': {'book': {'booked': []},\n",
+ " 'semi': {'type': '', 'name': '', 'area': ''}},\n",
+ " 'restaurant': {'book': {'booked': [], 'people': '', 'day': '', 'time': ''},\n",
+ " 'semi': {'food': '', 'pricerange': '', 'name': '', 'area': ''}},\n",
+ " 'hospital': {'book': {'booked': []}, 'semi': {'department': ''}},\n",
+ " 'taxi': {'book': {'booked': []},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'departure': '',\n",
+ " 'arriveBy': ''}},\n",
+ " 'train': {'book': {'booked': [], 'people': ''},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'day': '',\n",
+ " 'arriveBy': '',\n",
+ " 'departure': ''}}},\n",
" 'request_state': {},\n",
" 'terminated': False,\n",
" 'history': []}"
]
},
- "execution_count": 3,
+ "execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "# from convlab2.util.multiwoz.state import default_state\n",
- "from utils.state import default_state\n",
+ "from convlab2.util.multiwoz.state import default_state\n",
"default_state()"
]
},
@@ -141,20 +157,9 @@
},
{
"cell_type": "code",
- "execution_count": 34,
+ "execution_count": 2,
"metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "\"\\nclass SimpleRuleDST(DST):\\n def __init__(self):\\n DST.__init__(self)\\n self.state = default_state()\\n self.value_dict = json.load(open('l08/ConvLab-2/data/multiwoz/value_dict.json'))\\n\\n def update(self, user_act=None):\\n for intent, domain, slot, value in user_act:\\n domain = domain.lower()\\n intent = intent.lower()\\n\\n if domain in ['unk', 'general', 'booking']:\\n continue\\n\\n if intent == 'inform':\\n k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\\n\\n if k is None:\\n continue\\n\\n domain_dic = self.state['belief_state'][domain]\\n\\n if k in domain_dic['semi']:\\n nvalue = normalize_value(self.value_dict, domain, k, value)\\n self.state['belief_state'][domain]['semi'][k] = nvalue\\n elif k in domain_dic['book']:\\n self.state['belief_state'][domain]['book'][k] = value\\n elif k.lower() in domain_dic['book']:\\n self.state['belief_state'][domain]['book'][k.lower()] = value\\n elif intent == 'request':\\n k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\\n\\n if domain not in self.state['request_state']:\\n self.state['request_state'][domain] = {}\\n if k not in self.state['request_state'][domain]:\\n self.state['request_state'][domain][k] = 0\\n\\n return self.state\\n\\n def init_session(self):\\n self.state = default_state()\\n\""
- ]
- },
- "execution_count": 34,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
+ "outputs": [],
"source": [
"import json\n",
"import os\n",
@@ -162,55 +167,12 @@
"from convlab2.dst.rule.multiwoz.dst_util import normalize_value\n",
"from convlab2.util.multiwoz.multiwoz_slot_trans import REF_SYS_DA\n",
"\n",
+ "\n",
"class SimpleRuleDST(DST):\n",
" def __init__(self):\n",
" DST.__init__(self)\n",
" self.state = default_state()\n",
- " self.value_dict = json.load(open('utils/value_dict.json'))\n",
- "\n",
- " def update(self, user_act=None):\n",
- " for intent, domain, slot, value in user_act:\n",
- " domain = domain.lower()\n",
- " intent = intent.lower()\n",
- " value = value.lower()\n",
- "\n",
- " # if domain in ['unk', 'cinema']:\n",
- " # continue\n",
- " k = slot\n",
- "\n",
- " if intent == 'inform':\n",
- " # k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
- " # if k is None:\n",
- " # continue\n",
- "\n",
- " domain_dic = self.state['belief_state'][domain]\n",
- "\n",
- " if k in domain_dic['semi']:\n",
- " # nvalue = normalize_value(self.value_dict, domain, k, value)\n",
- " self.state['belief_state'][domain]['semi'][k] = value\n",
- " elif k in domain_dic['book']:\n",
- " self.state['belief_state'][domain]['book'][k] = value\n",
- " elif k.lower() in domain_dic['book']:\n",
- " self.state['belief_state'][domain]['book'][k.lower()] = value\n",
- " elif intent == 'request':\n",
- " # k = REF_SYS_DA[domain.capitalize()].get(slot, slot)\n",
- "\n",
- " if domain not in self.state['request_state']:\n",
- " self.state['request_state'][domain] = {}\n",
- " if k not in self.state['request_state'][domain]:\n",
- " self.state['request_state'][domain][k] = 0\n",
- "\n",
- " return self.state\n",
- "\n",
- " def init_session(self):\n",
- " self.state = default_state()\n",
- "\n",
- "'''\n",
- "class SimpleRuleDST(DST):\n",
- " def __init__(self):\n",
- " DST.__init__(self)\n",
- " self.state = default_state()\n",
- " self.value_dict = json.load(open('l08/ConvLab-2/data/multiwoz/value_dict.json'))\n",
+ " self.value_dict = json.load(open('ConvLab-2/data/multiwoz/value_dict.json'))\n",
"\n",
" def update(self, user_act=None):\n",
" for intent, domain, slot, value in user_act:\n",
@@ -246,8 +208,7 @@
" return self.state\n",
"\n",
" def init_session(self):\n",
- " self.state = default_state()\n",
- "'''\n"
+ " self.state = default_state()\n"
]
},
{
@@ -268,7 +229,7 @@
},
{
"cell_type": "code",
- "execution_count": 35,
+ "execution_count": 3,
"metadata": {
"lines_to_next_cell": 0
},
@@ -278,20 +239,37 @@
"text/plain": [
"{'user_action': [],\n",
" 'system_action': [],\n",
- " 'belief_state': {'cinema': {'book': {'title': '',\n",
- " 'date': '',\n",
- " 'time': '',\n",
- " 'quantity': '',\n",
- " 'seats': '',\n",
+ " 'belief_state': {'police': {'book': {'booked': []}, 'semi': {}},\n",
+ " 'hotel': {'book': {'booked': [], 'people': '', 'day': '', 'stay': ''},\n",
+ " 'semi': {'name': '',\n",
" 'area': '',\n",
- " 'interval': ''},\n",
- " 'semi': {'goal': ''}}},\n",
+ " 'parking': '',\n",
+ " 'pricerange': '',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}},\n",
+ " 'attraction': {'book': {'booked': []},\n",
+ " 'semi': {'type': '', 'name': '', 'area': ''}},\n",
+ " 'restaurant': {'book': {'booked': [], 'people': '', 'day': '', 'time': ''},\n",
+ " 'semi': {'food': '', 'pricerange': '', 'name': '', 'area': ''}},\n",
+ " 'hospital': {'book': {'booked': []}, 'semi': {'department': ''}},\n",
+ " 'taxi': {'book': {'booked': []},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'departure': '',\n",
+ " 'arriveBy': ''}},\n",
+ " 'train': {'book': {'booked': [], 'people': ''},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'day': '',\n",
+ " 'arriveBy': '',\n",
+ " 'departure': ''}}},\n",
" 'request_state': {},\n",
" 'terminated': False,\n",
" 'history': []}"
]
},
- "execution_count": 35,
+ "execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
@@ -303,7 +281,7 @@
},
{
"cell_type": "code",
- "execution_count": 36,
+ "execution_count": 4,
"metadata": {
"lines_to_next_cell": 0
},
@@ -311,29 +289,29 @@
{
"data": {
"text/plain": [
- "{'book': {'title': 'batman',\n",
- " 'date': '',\n",
- " 'time': '15:00',\n",
- " 'quantity': '',\n",
- " 'seats': '',\n",
+ "{'book': {'booked': [], 'people': '', 'day': '', 'stay': ''},\n",
+ " 'semi': {'name': '',\n",
" 'area': '',\n",
- " 'interval': ''},\n",
- " 'semi': {'goal': ''}}"
+ " 'parking': 'yes',\n",
+ " 'pricerange': 'cheap',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}}"
]
},
- "execution_count": 36,
+ "execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "dst.update([['Inform', 'Cinema', 'time', '15:00'], ['Inform', 'Cinema', 'title', 'Batman']])\n",
- "dst.state['belief_state']['cinema']"
+ "dst.update([['Inform', 'Hotel', 'Price', 'cheap'], ['Inform', 'Hotel', 'Parking', 'yes']])\n",
+ "dst.state['belief_state']['hotel']"
]
},
{
"cell_type": "code",
- "execution_count": 37,
+ "execution_count": 5,
"metadata": {
"lines_to_next_cell": 0
},
@@ -341,29 +319,29 @@
{
"data": {
"text/plain": [
- "{'book': {'title': 'batman',\n",
- " 'date': '',\n",
- " 'time': '15:00',\n",
- " 'quantity': '',\n",
- " 'seats': '',\n",
- " 'area': 'na górze na środku',\n",
- " 'interval': ''},\n",
- " 'semi': {'goal': ''}}"
+ "{'book': {'booked': [], 'people': '', 'day': '', 'stay': ''},\n",
+ " 'semi': {'name': '',\n",
+ " 'area': 'north',\n",
+ " 'parking': 'yes',\n",
+ " 'pricerange': 'cheap',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}}"
]
},
- "execution_count": 37,
+ "execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "dst.update([['Inform', 'Cinema', 'area', 'na górze na środku']])\n",
- "dst.state['belief_state']['cinema']"
+ "dst.update([['Inform', 'Hotel', 'Area', 'north']])\n",
+ "dst.state['belief_state']['hotel']"
]
},
{
"cell_type": "code",
- "execution_count": 38,
+ "execution_count": 6,
"metadata": {
"lines_to_next_cell": 0
},
@@ -371,45 +349,42 @@
{
"data": {
"text/plain": [
- "{'cinema': {'date': 0}}"
+ "{'hotel': {'area': 0}}"
]
},
- "execution_count": 38,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "dst.update([['Request', 'Cinema', 'date', '?']])\n",
+ "dst.update([['Request', 'Hotel', 'Area', '?']])\n",
"dst.state['request_state']"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
+ "data": {
+ "text/plain": [
+ "{'book': {'booked': [], 'people': '2', 'day': 'tuesday', 'stay': '4'},\n",
+ " 'semi': {'name': '',\n",
+ " 'area': 'north',\n",
+ " 'parking': 'yes',\n",
+ " 'pricerange': 'cheap',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}}"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -419,7 +394,7 @@
},
{
"cell_type": "code",
- "execution_count": 39,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
@@ -427,20 +402,40 @@
"text/plain": [
"{'user_action': [],\n",
" 'system_action': [],\n",
- " 'belief_state': {'cinema': {'book': {'title': 'batman',\n",
- " 'date': '',\n",
- " 'time': '15:00',\n",
- " 'quantity': '',\n",
- " 'seats': '',\n",
- " 'area': 'na górze na środku',\n",
- " 'interval': ''},\n",
- " 'semi': {'goal': ''}}},\n",
- " 'request_state': {'cinema': {'date': 0}},\n",
+ " 'belief_state': {'police': {'book': {'booked': []}, 'semi': {}},\n",
+ " 'hotel': {'book': {'booked': [],\n",
+ " 'people': '2',\n",
+ " 'day': 'tuesday',\n",
+ " 'stay': '4'},\n",
+ " 'semi': {'name': '',\n",
+ " 'area': 'north',\n",
+ " 'parking': 'yes',\n",
+ " 'pricerange': 'cheap',\n",
+ " 'stars': '',\n",
+ " 'internet': '',\n",
+ " 'type': ''}},\n",
+ " 'attraction': {'book': {'booked': []},\n",
+ " 'semi': {'type': '', 'name': '', 'area': ''}},\n",
+ " 'restaurant': {'book': {'booked': [], 'people': '', 'day': '', 'time': ''},\n",
+ " 'semi': {'food': '', 'pricerange': '', 'name': '', 'area': ''}},\n",
+ " 'hospital': {'book': {'booked': []}, 'semi': {'department': ''}},\n",
+ " 'taxi': {'book': {'booked': []},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'departure': '',\n",
+ " 'arriveBy': ''}},\n",
+ " 'train': {'book': {'booked': [], 'people': ''},\n",
+ " 'semi': {'leaveAt': '',\n",
+ " 'destination': '',\n",
+ " 'day': '',\n",
+ " 'arriveBy': '',\n",
+ " 'departure': ''}}},\n",
+ " 'request_state': {'hotel': {'area': 0}},\n",
" 'terminated': False,\n",
" 'history': []}"
]
},
- "execution_count": 39,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -471,30 +466,9 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
- "outputs": [
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from collections import defaultdict\n",
"import copy\n",
@@ -575,32 +549,11 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {
"lines_to_next_cell": 0
},
- "outputs": [
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- }
- ],
+ "outputs": [],
"source": [
"from convlab2.dialog_agent import PipelineAgent\n",
"dst.init_session()\n",
@@ -610,30 +563,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
+ "data": {
+ "text/plain": [
+ "[['Inform', 'Hotel', 'Choice', '10'],\n",
+ " ['Recommend', 'Hotel', 'Name', 'alexander bed and breakfast']]"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -642,30 +586,21 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 13,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
+ "data": {
+ "text/plain": [
+ "[['Inform', 'Hotel', 'Choice', '2'],\n",
+ " ['Recommend', 'Hotel', 'Name', 'city centre north b and b']]"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -674,30 +609,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 14,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
+ "data": {
+ "text/plain": [
+ "[['Inform', 'Hotel', 'Area', 'north']]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -706,28 +631,18 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"metadata": {},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
+ "data": {
+ "text/plain": [
+ "[['Book', 'Booking', 'Ref', '00000013']]"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
}
],
"source": [
@@ -746,27 +661,16 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {},
"outputs": [
{
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[]\n",
+ "loading saved Classifier\n",
+ "loaded.\n"
]
}
],
@@ -781,29 +685,27 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
+ "ename": "AttributeError",
+ "evalue": "'SVC' object has no attribute '_impl'",
"output_type": "error",
"traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_13500\\3260802613.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0magent\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresponse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"I need a cheap hotel with free parking .\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\dialog_agent\\agent.py\u001b[0m in \u001b[0;36mresponse\u001b[1;34m(self, observation)\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;31m# get dialog act\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 121\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 122\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobservation\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcontext\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 123\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 124\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mobservation\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\multiwoz\\nlu.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, utterance, context)\u001b[0m\n\u001b[0;32m 74\u001b[0m ]\n\u001b[0;32m 75\u001b[0m }\n\u001b[1;32m---> 76\u001b[1;33m \u001b[0mslu_hyps\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode_sent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"decode\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"output\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 77\u001b[0m \u001b[0mact_list\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mhyp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mslu_hyps\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode_sent\u001b[1;34m(self, sentinfo, output_fname, config)\u001b[0m\n\u001b[0;32m 320\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 321\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mextractFeatures2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 322\u001b[1;33m \u001b[0mdecode_results\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 323\u001b[0m \u001b[0mcounter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdefaultdict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 324\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 258\u001b[0m \u001b[0mbaseXs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseX_pointers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 259\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtoSparse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdictionary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 260\u001b[1;33m \u001b[0mresults\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclassifiers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 261\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m 496\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 497\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 498\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 499\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 500\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36mpredict_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 588\u001b[0m \u001b[0mdatasets\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 589\u001b[0m \"\"\"\n\u001b[1;32m--> 590\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_check_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 591\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_predict_proba\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 592\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36m_check_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 557\u001b[0m raise AttributeError(\"predict_proba is not available when \"\n\u001b[0;32m 558\u001b[0m \" probability=False\")\n\u001b[1;32m--> 559\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_impl\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'c_svc'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'nu_svc'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 560\u001b[0m raise AttributeError(\"predict_proba only implemented for SVC\"\n\u001b[0;32m 561\u001b[0m \" and NuSVC\")\n",
+ "\u001b[1;31mAttributeError\u001b[0m: 'SVC' object has no attribute '_impl'"
]
}
],
@@ -813,29 +715,27 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
+ "ename": "AttributeError",
+ "evalue": "'SVC' object has no attribute '_impl'",
"output_type": "error",
"traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_13500\\2723043776.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0magent\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresponse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Where it is located ?\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\dialog_agent\\agent.py\u001b[0m in \u001b[0;36mresponse\u001b[1;34m(self, observation)\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;31m# get dialog act\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 121\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 122\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobservation\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcontext\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 123\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 124\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mobservation\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\multiwoz\\nlu.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, utterance, context)\u001b[0m\n\u001b[0;32m 74\u001b[0m ]\n\u001b[0;32m 75\u001b[0m }\n\u001b[1;32m---> 76\u001b[1;33m \u001b[0mslu_hyps\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode_sent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"decode\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"output\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 77\u001b[0m \u001b[0mact_list\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mhyp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mslu_hyps\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode_sent\u001b[1;34m(self, sentinfo, output_fname, config)\u001b[0m\n\u001b[0;32m 320\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 321\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mextractFeatures2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 322\u001b[1;33m \u001b[0mdecode_results\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 323\u001b[0m \u001b[0mcounter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdefaultdict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 324\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 258\u001b[0m \u001b[0mbaseXs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseX_pointers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 259\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtoSparse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdictionary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 260\u001b[1;33m \u001b[0mresults\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclassifiers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 261\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m 496\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 497\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 498\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 499\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 500\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36mpredict_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 588\u001b[0m \u001b[0mdatasets\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 589\u001b[0m \"\"\"\n\u001b[1;32m--> 590\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_check_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 591\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_predict_proba\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 592\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36m_check_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 557\u001b[0m raise AttributeError(\"predict_proba is not available when \"\n\u001b[0;32m 558\u001b[0m \" probability=False\")\n\u001b[1;32m--> 559\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_impl\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'c_svc'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'nu_svc'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 560\u001b[0m raise AttributeError(\"predict_proba only implemented for SVC\"\n\u001b[0;32m 561\u001b[0m \" and NuSVC\")\n",
+ "\u001b[1;31mAttributeError\u001b[0m: 'SVC' object has no attribute '_impl'"
]
}
],
@@ -845,29 +745,27 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {
"lines_to_next_cell": 0
},
"outputs": [
{
- "ename": "",
- "evalue": "",
+ "ename": "AttributeError",
+ "evalue": "'SVC' object has no attribute '_impl'",
"output_type": "error",
"traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m~\\AppData\\Local\\Temp\\ipykernel_13500\\871593950.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0magent\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mresponse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"I would prefer the hotel be in the north part of town .\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\dialog_agent\\agent.py\u001b[0m in \u001b[0;36mresponse\u001b[1;34m(self, observation)\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;31m# get dialog act\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 121\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 122\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnlu\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobservation\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcontext\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 123\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 124\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0minput_action\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mobservation\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\multiwoz\\nlu.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, utterance, context)\u001b[0m\n\u001b[0;32m 74\u001b[0m ]\n\u001b[0;32m 75\u001b[0m }\n\u001b[1;32m---> 76\u001b[1;33m \u001b[0mslu_hyps\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode_sent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mconfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"decode\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"output\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 77\u001b[0m \u001b[0mact_list\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 78\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mhyp\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mslu_hyps\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode_sent\u001b[1;34m(self, sentinfo, output_fname, config)\u001b[0m\n\u001b[0;32m 320\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 321\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mextractFeatures2\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msentinfo\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlog_input_key\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 322\u001b[1;33m \u001b[0mdecode_results\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdecode\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 323\u001b[0m \u001b[0mcounter\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdefaultdict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mint\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 324\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mdecode\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 258\u001b[0m \u001b[0mbaseXs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mindex\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mindex\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbaseX_pointers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 259\u001b[0m \u001b[0mX\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mtoSparse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mbaseXs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdictionary\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 260\u001b[1;33m \u001b[0mresults\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclassifiers\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mthis_tuple\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 261\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mresults\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\develop\\wmi\\aitech\\sem1\\systemy dialogowe\\lab\\convlab-2\\convlab2\\nlu\\svm\\Classifier.py\u001b[0m in \u001b[0;36mpredict\u001b[1;34m(self, X)\u001b[0m\n\u001b[0;32m 496\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 497\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mpredict\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 498\u001b[1;33m \u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmodel\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mX\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 499\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0my\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 500\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36mpredict_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 588\u001b[0m \u001b[0mdatasets\u001b[0m\u001b[1;33m.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 589\u001b[0m \"\"\"\n\u001b[1;32m--> 590\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_check_proba\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 591\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_predict_proba\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 592\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
+ "\u001b[1;32mc:\\Develop\\wmi\\AITECH\\sem1\\Systemy dialogowe\\lab\\venv\\lib\\site-packages\\sklearn\\svm\\base.py\u001b[0m in \u001b[0;36m_check_proba\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 557\u001b[0m raise AttributeError(\"predict_proba is not available when \"\n\u001b[0;32m 558\u001b[0m \" probability=False\")\n\u001b[1;32m--> 559\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_impl\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[1;33m(\u001b[0m\u001b[1;34m'c_svc'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'nu_svc'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 560\u001b[0m raise AttributeError(\"predict_proba only implemented for SVC\"\n\u001b[0;32m 561\u001b[0m \" and NuSVC\")\n",
+ "\u001b[1;31mAttributeError\u001b[0m: 'SVC' object has no attribute '_impl'"
]
}
],
@@ -879,28 +777,7 @@
"cell_type": "code",
"execution_count": null,
"metadata": {},
- "outputs": [
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- },
- {
- "ename": "",
- "evalue": "",
- "output_type": "error",
- "traceback": [
- "\u001b[1;31mRunning cells with 'Python 3.6.15 ('sysdial')' requires ipykernel package.\n",
- "Run the following command to install 'ipykernel' into the Python environment. \n",
- "Command: 'conda install -n sysdial ipykernel --update-deps --force-reinstall'"
- ]
- }
- ],
+ "outputs": [],
"source": [
"agent.response(\"Yeah , could you book me a room for 2 people for 4 nights starting Tuesday ?\")"
]
diff --git a/src/components/DP.py b/src/components/DP.py
index 7f5feed..927e69d 100644
--- a/src/components/DP.py
+++ b/src/components/DP.py
@@ -1,11 +1,31 @@
-# Martyna
+from urllib import request
+
+
class DP:
- def __init__(self, slots):
- self.slots = slots
+ def __init__(self):
+ pass
- def getAct(slots):
- # iterate over slots
- # find empty
- # returns system act
- pass
\ No newline at end of file
+ def getAction(self, lastUserAct, emptySlots, systemSlots):
+ systemAct = None
+ slotVal = None
+ if ((lastUserAct == "hello") | (lastUserAct == "inform") | (lastUserAct == None)):
+ # there are no empty slots
+ if not emptySlots:
+ systemAct = "inform"
+ slotVal = systemSlots
+ # there are empty slots
+ else:
+ for slot in systemSlots:
+ if slot in emptySlots:
+ systemAct = "request"
+ slotVal = slot
+ break
+ return ["Cinema", systemAct, slotVal, ""]
+ elif (lastUserAct == "request"):
+ # todo policy for user request
+ return ["Cinema", "", "", ""]
+ else:
+ systemAct = "repeat"
+ return ["Cinema", systemAct, "", ""]
+
\ No newline at end of file
diff --git a/src/components/DST.py b/src/components/DST.py
index cb23947..1699122 100644
--- a/src/components/DST.py
+++ b/src/components/DST.py
@@ -5,10 +5,13 @@ class DST:
# self.value_dict = json.load(open('utils/value_dict.json'))
def update(self, user_act=None):
+ intentVal = None
for intent, domain, slot, value in user_act:
domain = domain.lower()
intent = intent.lower()
value = value.lower()
+
+ if intentVal is None : intentVal = intent
k = slot
@@ -22,15 +25,38 @@ class DST:
self.state['belief_state'][domain]['book'][k] = value
elif k.lower() in domain_dic['book']:
self.state['belief_state'][domain]['book'][k.lower()] = value
- elif intent == 'request':
+ elif intent == 'reqmore':
if domain not in self.state['request_state']:
self.state['request_state'][domain] = {}
if k not in self.state['request_state'][domain]:
self.state['request_state'][domain][k] = 0
-
+ self.state['user_action'].append(intentVal)
return self.state
+ def addSystemAct(self, act):
+ self.state["system_action"].append(act)
+
+ def getLastUserAct(self):
+ try:
+ return self.state["user_action"][-1]
+ except:
+ return None
+
+ def getEmptySlots(self):
+ result = []
+ for key in self.state['belief_state']["cinema"]["book"].keys():
+ if self.state['belief_state']["cinema"]["book"][key] == "":
+ result.append(key)
+ return result
+
+ def getSystemSlots(self):
+ result = []
+ for key in self.state['belief_state']["cinema"]["book"].keys():
+ if key != "interval":
+ result.append(key)
+ return result
+
def init_session(self):
self.state = self.default_state()
diff --git a/src/dialogue_system.py b/src/dialogue_system.py
index 9de65ca..41ca86e 100644
--- a/src/dialogue_system.py
+++ b/src/dialogue_system.py
@@ -1,6 +1,7 @@
from components.NLU import NLU
from components.NLG import NLG
from components.DST import DST
+from components.DP import DP
def chatbot():
@@ -9,6 +10,7 @@ def chatbot():
# NLU
nlu = NLU()
dst = DST()
+ dp = DP()
# hello message
print("wpisz /exit aby zakończyć")
@@ -22,6 +24,10 @@ def chatbot():
isActive = False
else:
nluPred = nlu.predict(sentence=userMessage)
+ # print(nluPred)
dst.update(nluPred)
- print(dst.state)
+ # print(dst.state)
+ dpAct = dp.getAction(dst.getLastUserAct(), dst.getEmptySlots(), dst.getSystemSlots())
+ print(dpAct)
+ # todo update DST system act
chatbot()
\ No newline at end of file