Compare commits

..

45 Commits

Author SHA1 Message Date
Łukasz Jędyk
e3872a0cac small tweaks before presentation 2021-06-21 15:12:46 +02:00
Łukasz Jędyk
d6b4c1cd7d final eval report 2021-06-21 09:56:59 +02:00
Maciej Sobkowiak
074c6f1339 Dodano zapisy rozmów ewaluacyjnych 2021-06-21 08:49:58 +02:00
Łukasz Jędyk
4e2e6db4af small md fix 2021-06-20 23:49:39 +02:00
Łukasz Jędyk
8e654b9446 evaluacja ankiety 2021-06-20 23:43:47 +02:00
Łukasz Jędyk
588e00981e DP, DST and NLG fixes 2021-06-18 15:26:21 +02:00
Maciej Sobkowiak
8a796b96cc dateHelper update 2021-06-07 00:13:44 +02:00
Maciej Sobkowiak
edd8663961 DbManager update 2021-06-07 00:13:34 +02:00
Maciej Sobkowiak
a59a496bb5 DateHelper fix 2021-06-06 21:56:01 +02:00
Maciej Sobkowiak
7902a6fbeb Added dateTime helper 2021-06-06 21:18:33 +02:00
85f54c46e3 JSON data base manager init 2021-06-06 14:10:32 +02:00
d0f9db73bd NaturalLanguageGeneration update 2021-06-03 17:48:12 +02:00
Łukasz Jędyk
f343ebec98 fix DST bugs 2021-05-31 14:53:20 +02:00
Łukasz Jędyk
44588ed65b DP and DST improvement 2021-05-31 13:52:01 +02:00
6a7196203e Ignore idea folder 2021-05-30 19:04:48 +02:00
217f43a282 Dialogue policy and state tracker update 2021-05-30 19:01:45 +02:00
Łukasz Jędyk
70606851a1 new NLU using ML 2021-05-30 12:55:49 +02:00
Maciej Sobkowiak
f28cbe8a28 Eval2 test 2021-05-17 15:15:51 +02:00
Maciej Sobkowiak
6d44bf146f eval2 test 2021-05-17 15:10:16 +02:00
Łukasz Jędyk
469e437f3d grammar changes + evaluate 2021-05-17 15:06:42 +02:00
Łukasz Jędyk
8628e68e79 grammar nlu 2021-05-16 23:11:55 +02:00
Łukasz Jędyk
79fed3fbdc grammar NLU cd 2021-05-16 18:07:23 +02:00
Łukasz Jędyk
9e83470bb3 initial NLU grammar setup 2021-05-16 16:56:37 +02:00
Maciej Sobkowiak
2583177615 Filename fix 2021-04-26 16:00:50 +02:00
653693d4f9 improvement 2021-04-26 15:13:52 +02:00
Łukasz Jędyk
d075382862 mockup improvement 2021-04-26 09:57:03 +02:00
Maciej Sobkowiak
0de57cc830 Added basic mockups 2021-04-26 00:29:07 +02:00
5d9165411a NLU 2021-04-25 23:17:14 +02:00
Łukasz Jędyk
049bd7f07e ujednolicenie dialogue acts 2021-04-19 15:19:03 +02:00
c4d63045d0 dialogue acts 2021-04-19 13:14:23 +02:00
Maciej Sobkowiak
d967a463ad Merge branch 'master' of https://git.wmi.amu.edu.pl/s470629/SystemyDialogowe 2021-04-19 12:18:26 +02:00
Maciej Sobkowiak
b0a5ec0324 Added acts 2021-04-19 12:18:12 +02:00
Łukasz Jędyk
2293cbaec3 dialogue acts part 2: 2021-04-19 11:01:38 +02:00
Łukasz Jędyk
f2c9175fec dialogue acts part 1 2021-04-19 10:19:03 +02:00
3d840b8852 Merge branch 'master' of https://git.wmi.amu.edu.pl/s470629/SystemyDialogowe 2021-04-19 08:55:04 +02:00
e41201699e Dialogue acts added to data 2021-04-19 08:54:16 +02:00
Maciej Sobkowiak
a10851e277 working on acts 2021-04-19 03:01:08 +02:00
Maciej Sobkowiak
cad0f9afd6 fix indentation 2021-04-12 16:19:32 +02:00
Maciej Sobkowiak
2eef43de6a Dodanie zapisu rozmów. 2021-04-11 20:11:12 +02:00
265a6f1b29 dialog data part 3 2021-04-11 16:39:11 +02:00
551e4920f1 dialog data part 2 2021-04-08 22:55:55 +02:00
Łukasz Jędyk
5114ef324d dialog data part 1 2021-03-29 18:23:24 +02:00
Łukasz Jędyk
645bbdb025 small requirements fixes 2021-03-28 23:27:12 +02:00
edb9ce5c44 Dialogue examples for some tasks 2021-03-28 14:35:19 +02:00
0f6cd1dd2c requirements analysis 2021-03-22 16:35:58 +01:00
48 changed files with 2905 additions and 322 deletions

7
.gitignore vendored
View File

@ -1 +1,6 @@
/venv
/venv
__pycache__
frame-model
slot-model
data-base
/.idea

28
ActFrame.py Normal file
View File

@ -0,0 +1,28 @@
from abc import ABC, abstractmethod
class ActFrame(ABC):
def __init__(self, actType, actParams = None):
if actType == None:
raise Exception('actType cannot be None')
self.__actType = actType
if actParams != None:
self.__actParams = actParams
def __repr__(self):
return str(type(self))
def __str__(self):
return "actType:{} actParams:{}".format(self.__actType,self.__actParams)
def setActParams(self, actParams):
self.__actParams = actParams
def getActParams(self):
return self.__actParams
def getActType(self):
return self.__actType

189
DBManager.py Normal file
View File

@ -0,0 +1,189 @@
import json
from pathlib import Path
from dateHelper import format_date, get_date, format_time, get_end_time
import datetime
# PRZYKLADOWY SCHEMAT DB
# informacje o dacie dnia dzisiejszego oraz nazwie tego dnia (pon, wt) będzie trzeba podawać przy inicjalizacji klasy
# może być od użytkownika z konsoli lub od systemu
# {
# "06.06.2021": [
# {
# "date": "06.06.2021",
# "time": "12:00-13:30",
# "place": "Restauracja Alfa",
# "participants": ["Jan Kowalski", "Adam Nowak"],
# "description": None
# },
# {
# "date": "06.06.2021",
# "time": "18:00-18:45",
# "place": "Stadion Miejski",
# "participants": ["Jan Kowalski"],
# "description": None
# }
# ],
# "07.06.2021": [
# {
# "date": "07.06.2021",
# "time": "9:00-10:30",
# "place": "MS Teams",
# "participants": ["Adam Nowak"],
# "description": "Wykład z matematyki"
# }
# ]
# }
class calender_db:
def __init__(self, db_path="data-base/calendar.json"):
self.db = {}
self.db_file_path = Path(db_path)
if self.db_file_path.is_file():
with open(self.db_file_path, 'r+') as f:
self.db = json.load(f)
def save_db(self):
with open(self.db_file_path, 'w+') as f:
json.dump(self.db, f)
# CRUD methods
def create_meeting(self, meeting_dict):
date_time = get_date(
meeting_dict['date'].lower(), meeting_dict['time'].lower())
if format_date(date_time) in self.db.keys():
if not self.is_collision(format_date(date_time), meeting_dict['time']):
self.db[format_date(date_time)].append(meeting_dict)
self.save_db()
else:
self.db[format_date(date_time)] = [meeting_dict]
self.save_db()
def delete_meeting(self, date, time):
date_time = get_date(date, time)
if format_date(date_time) in self.db.keys():
meetings = self.db[format_date(date_time)]
for key, meeting in enumerate(meetings):
if format_time(meeting['time']) == format_time(time):
meetings.remove(meeting)
self.db[format_date(date_time)] = meetings
self.save_db()
def update_meeting(self, meeting_dict):
date_time = get_date(
meeting_dict['date'].lower(), meeting_dict['time'].lower())
if format_date(date_time) in self.db.keys():
meetings = self.db[format_date(date_time)]
for key, meeting in enumerate(meetings):
if format_time(meeting['time']) == format_time(meeting_dict['time'].lower()):
meetings.remove(meeting)
meetings.append(meeting_dict)
self.db[format_date(date_time)] = meetings
self.save_db()
def find_meeting(self, date, time):
if date in self.db.keys():
meetings = self.db[date]
for m in meetings:
# Czas może być w formacie (13, 13:00, 13:00-13:30), trzeba dopasować obie strony i porównywać tylko czas startu
if format_time(time) == format_time(m['time']):
return m
return None
else:
return None
def get_meetings(self, date_list):
# lista dat dla których chcemy znaleźć spotkania
meetings = []
for date in date_list:
if date in self.db.keys():
meetings += self.db[date]
return meetings
def is_collision(self, date, time):
meetings = self.db[date]
start_time = format_time(time)
end_time = get_end_time(time)
for meeting in meetings:
if self.overlap(start_time, end_time, format_time(meeting['time']), get_end_time(meeting['time'])):
return True
if start_time == format_time(meeting['time']) or end_time == get_end_time(meeting['time']):
return True
return False
def overlap(self, checking_start, checking_end, base_start, base_end):
interval1 = [datetime.datetime.strptime(checking_start, '%H:%M'),
datetime.datetime.strptime(checking_end, '%H:%M')]
interval2 = [datetime.datetime.strptime(base_start, '%H:%M'),
datetime.datetime.strptime(base_end, '%H:%M')]
results = []
for timestamp in interval1:
results.append(interval2[0] < timestamp < interval2[1])
for timestamp in interval2:
results.append(interval1[0] < timestamp < interval1[1])
return True in results
# def get_freetime(self, date_list):
# freetime_dict = {}
# for date in date_list:
# time_str = self.start_day_time + "-" + self.end_day_time
# freetime_dict[date] = [time_str]
# # Change free time if there are meetings at this day
# if date in self.DB.keys():
# for meeting in self.DB[date]:
# meeting_time = meeting['time'].split("-")
# start = meeting_time[0]
# # meeting has start and end time
# if len(meeting_time > 1):
# end = meeting_time[1]
# meet_start_h, meet_start_m = self.get_hour_minutes(
# start)
# meet_end_h, meet_end_m = self.get_hour_minutes(end)
# for slot in freetime_dict[date]:
# slot_time = slot.split("-")
# slot_start_h, slot_start_m = self.get_hour_minutes(
# slot_time[0])
# slot_end_h, slot_end_m = self.get_hour_minutes(
# slot_time[1])
# # if meeting time have collision with slot time - change / split slot
# # meeting starts inside slot
# if meet_start_h == slot_start_h and meet_start_m > slot_start_m and meet_start_h < slot_end_h:
# pass
# elif meet_start_h == slot_start_h and meet_start_m > slot_start_m and meet_start_h == slot_end_h and meet_start_m < slot_end_m:
# pass
# elif meet_start_h > slot_start_h and meet_start_h < slot_end_h:
# pass
# elif meet_start_h > slot_start_h and meet_start_h == slot_end_h and meet_start_m < slot_end_m:
# pass
# # starts before slot, ends inside slot
# elif (meet_end_h > slot_start_h) or (meet_end_h == slot_start_h and meet_end_m > slot_start_h):
# # meeting in whole slot - delete this slot
# if meet_end_h == slot_end_h and meet_end_m == slot_end_m:
# pass
# # cut slot from left side
# else:
# pass
# # if meeting starts and ends before slot start time - do nothing
# # meeting has only start time
# else:
# m_start_h, m_start_m = self.get_hour_minutes(start)
# Tests
# db = calender_db()
# db.create_meeting({"date": "16.06.2021", "time": "15:00",
# "description": "chuj"})
# db.create_meeting({"date": "14.06.2021", "time": "13:00-18:00"})
# db.delete_meeting("16.06.2021", "15:00")
# print(db.find_meeting("16.06.2021", "13:00-14:00"))
# print(db.get_meetings(["16.06.2021", "14.06.2021"]))
# print(db.is_collision("16.06.2021", "12:30-13"))

261
DialoguePolicy.py Normal file
View File

@ -0,0 +1,261 @@
from SystemAct import SystemAct
from UserActType import UserActType
from SystemActType import SystemActType
from collections import defaultdict
class DP:
def __init__(self, dst):
self.DST = dst
self.meeting_to_update = False
def choose_tactic(self) -> SystemAct:
dialogue_state, last_user_act, last_system_act = self.DST.get_dialogue_state()
slots = self.DST.get_dialogue_slots()
# stan dodawania spotkania
if dialogue_state == UserActType.CREATE_MEETING:
if not last_system_act:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time'])
self.DST.system_update(system_act)
return system_act
elif 'place' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['place'])
self.DST.system_update(system_act)
return system_act
elif 'participants' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['participants'])
self.DST.system_update(system_act)
return system_act
elif 'description' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['description'])
self.DST.system_update(system_act)
return system_act
else:
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
self.DST.system_update(system_act)
return system_act
elif last_system_act.getActType() == SystemActType.REQUEST:
if last_user_act == UserActType.NEGATE:
slot_type = last_system_act.getActParams()[0]
if slot_type not in ['date', 'time']:
self.DST.insert_empty_slot(slot_type)
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time'])
self.DST.system_update(system_act)
return system_act
elif 'place' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['place'])
self.DST.system_update(system_act)
return system_act
elif 'participants' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['participants'])
self.DST.system_update(system_act)
return system_act
elif 'description' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['description'])
self.DST.system_update(system_act)
return system_act
else:
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
self.DST.system_update(system_act)
return system_act
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
if last_user_act == UserActType.CONFIRM:
system_act = SystemAct(SystemActType.AFFIRM, ['create_meeting'])
# implementacja wpisywanie spotkania do bazy
self.DST.clear()
return system_act
elif last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['create_meeting'])
else:
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
# stan edycji spotkania
elif dialogue_state == UserActType.UPDATE_MEETING:
if not last_system_act:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date', False])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time', False])
self.DST.system_update(system_act)
return system_act
else:
# implementacja wyszukiwania odpowiedniego spotkania w bazie
return SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_update'])
elif last_system_act.getActType() == SystemActType.REQUEST:
if not self.meeting_to_update:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date', False])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time', False])
self.DST.system_update(system_act)
return system_act
else:
# implementacja wyszukiwania odpowiedniego spotkania w bazie
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_update'])
self.DST.system_update(system_act)
return system_act
else:
if last_user_act == UserActType.NEGATE:
slot_type = last_system_act.getActParams()[0]
self.DST.insert_empty_slot(slot_type)
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time', True])
self.DST.system_update(system_act)
return system_act
elif 'place' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['place', True])
self.DST.system_update(system_act)
return system_act
elif 'description' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['description', True])
self.DST.system_update(system_act)
return system_act
elif 'participants' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['participants', True])
self.DST.system_update(system_act)
return system_act
else:
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
self.DST.system_update(system_act)
return system_act
else:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time', True])
self.DST.system_update(system_act)
return system_act
elif 'place' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['place', True])
self.DST.system_update(system_act)
return system_act
elif 'description' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['description', True])
self.DST.system_update(system_act)
return system_act
elif 'participants' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['participants', True])
self.DST.system_update(system_act)
return system_act
else:
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, slots)
self.DST.system_update(system_act)
return system_act
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
if self.meeting_to_update:
if last_user_act == UserActType.CONFIRM:
self.DST.clear()
return SystemAct(SystemActType.AFFIRM, ['update_meeting'])
elif last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['meeting_to_update'])
self.meeting_to_update = False
if not self.meeting_to_update:
if last_user_act == UserActType.CONFIRM:
self.meeting_to_update = True
self.DST.clear_slots()
system_act = SystemAct(SystemActType.REQUEST, ['date', True])
self.DST.system_update(system_act)
return system_act
elif last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['meeting_to_update'])
else:
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
# stan anulowania spotkania
elif dialogue_state == UserActType.CANCEL_MEETING:
if not last_system_act:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time'])
self.DST.system_update(system_act)
return system_act
else:
# implementacja wyszukiwania odpowiedniego spotkania w bazie
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_cancel'])
self.DST.system_update(system_act)
return system_act
elif last_system_act.getActType() == SystemActType.REQUEST:
if 'date' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
elif 'time' not in slots:
system_act = SystemAct(SystemActType.REQUEST, ['time'])
self.DST.system_update(system_act)
return system_act
else:
# implementacja wyszukiwania odpowiedniego spotkania w bazie
system_act = SystemAct(SystemActType.CONFIRM_DOMAIN, ['meeting_to_cancel'])
self.DST.system_update(system_act)
return system_act
elif last_system_act.getActType() == SystemActType.CONFIRM_DOMAIN:
if last_user_act == UserActType.CONFIRM:
system_act = SystemAct(SystemActType.AFFIRM, ['cancel_meeting'])
# implementacja usuwania spotkania z bazy
self.DST.clear()
return system_act
elif last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['cancel_meeting'])
else:
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])
# stan prośby o listę spotkań
elif dialogue_state == UserActType.MEETING_LIST:
if last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['meeting_list'])
else:
if 'date' in slots:
system_act = SystemAct(SystemActType.MEETING_LIST, {'date': slots['date']})
return system_act
else:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
# stan prośby o czas wolny
elif dialogue_state == UserActType.FREE_TIME:
if last_user_act == UserActType.NEGATE:
self.DST.clear()
return SystemAct(SystemActType.REQMORE, ['free_time'])
else:
if 'date' in slots:
system_act = SystemAct(SystemActType.FREE_TIME, {'date': slots['date']})
return system_act
else:
system_act = SystemAct(SystemActType.REQUEST, ['date'])
self.DST.system_update(system_act)
return system_act
# brak określonego stanu
else:
if last_user_act == UserActType.HELLO:
return SystemAct(SystemActType.WELCOME_MSG, [])
elif last_user_act == UserActType.BYE:
return SystemAct(SystemActType.BYE, [])
elif last_user_act == UserActType.THANKYOU:
return SystemAct(SystemActType.REQMORE, [])
else:
return SystemAct(SystemActType.NOT_UNDERSTOOD, [])

46
DialogueStateTracker.py Normal file
View File

@ -0,0 +1,46 @@
from os import system
from UserActType import UserActType
from UserAct import UserAct
class DST:
def __init__(self):
self.state = None
self.last_user_act = None
self.last_system_act = None
self.slots = {}
def user_update(self, frame):
user_act = frame.getActType()
self.last_user_act = user_act
for slot in frame.getActParams():
if slot[0] == 'participant':
if 'participants' not in self.slots:
self.slots['participants'] = [slot[1]]
else:
self.slots['participants'].append(slot[1])
else:
self.slots[slot[0]] = slot[1]
if not self.state:
if user_act in [UserActType.CREATE_MEETING, UserActType.UPDATE_MEETING, UserActType.CANCEL_MEETING, UserActType.MEETING_LIST, UserActType.FREE_TIME]:
self.state = user_act
def system_update(self, system_act):
self.last_system_act = system_act
def insert_empty_slot(self, slot_name):
self.slots[slot_name] = None
def clear(self):
self.state = None
self.last_system_act = None
self.slots = {}
def clear_slots(self):
self.slots = {}
def get_dialogue_state(self):
return self.state, self.last_user_act, self.last_system_act
def get_dialogue_slots(self):
return self.slots

View File

@ -0,0 +1,143 @@
from SystemAct import SystemAct
from SystemActType import SystemActType
from UserActType import UserActType
import random
class NLG:
def __init__(self, dst):
self.DST = dst
def format_meeting(self, date, time, place, participants, description, format_type):
if participants:
participants = ', '.join(participants)
if format_type == 'create':
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'.replace('None', 'BRAK')
elif format_type == 'update':
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'.replace('None', 'BEZ ZMIAN')
else:
return f'Data: {date}\nCzas: {time}\nMiejsce: {place}\nUczestnicy: {participants}\nOpis: {description}'
def generate_response(self, systemAct: SystemAct) -> str:
dialogue_state, _, _ = self.DST.get_dialogue_state()
if dialogue_state == UserActType.CREATE_MEETING:
if systemAct.getActType() == SystemActType.REQUEST:
if 'date' in systemAct.getActParams():
return random.choice(['W jakim dniu ma się odbyć to spotkanie?', 'Jakiego dnia odbędzie się to spotkanie?'])
elif 'time' in systemAct.getActParams():
return random.choice(['W jakim czasie ma się zacząć to spotkanie?', 'O której godzinie rozpoczyna się to spotkanie?'])
elif 'place' in systemAct.getActParams():
return random.choice(['W jakim miejscu odbywać się będzie to spotkanie?', 'Gdzie ma się odbyć to spotkanie?'])
elif 'description' in systemAct.getActParams():
return random.choice(['Czy mam dodać jakiś opis do tego spotkania?', 'Czy to spotkanie ma posiadać jakiś opis?'])
elif 'participants' in systemAct.getActParams():
return random.choice(['Kto będzie brał udział w spotkaniu?', 'Kto będzie uczestnikiem tego spotkania?'])
elif systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
slots = systemAct.getActParams()
meeting = self.format_meeting(slots['date'], slots['time'], slots['place'], slots['participants'], slots['description'], 'create')
return random.choice([f'Czy mam dodać te spotkanie do kalendarza?\n{meeting}', f'Czy chcesz, abym dodał to spotkanie do kalendarza?\n{meeting}'])
elif dialogue_state == UserActType.UPDATE_MEETING:
if systemAct.getActType() == SystemActType.REQUEST:
if False in systemAct.getActParams():
if 'date' in systemAct.getActParams():
return random.choice(['W jakim dniu odbywa się spotkanie, które chcesz edytować?', 'Podaj datę spotkania, które chcesz zmienić.'])
elif 'time' in systemAct.getActParams():
return random.choice(['O której godzinie zaczyna się spotkanie, które chcesz zmienić?', 'Podaj godzinę spotkania, które chcesz edytować.'])
elif True in systemAct.getActParams():
if 'date' in systemAct.getActParams():
slot_name = 'datę'
slot_question = 'podaj nową datę.'
elif 'time' in systemAct.getActParams():
slot_name = 'godzinę'
slot_question = 'podaj nową godzinę rozpoczęcia tego spotkania.'
elif 'place' in systemAct.getActParams():
slot_name = 'miejsce'
slot_question = 'podaj nowe miejsce, w jakim odbywa się to spotkanie.'
elif 'description' in systemAct.getActParams():
slot_name = 'opis'
slot_question = 'podaj nowy opis tego spotkania.'
else:
slot_name = 'uczestników'
slot_question = 'podaj kim będą nowi uczestnicy tego spotkania.'
return f'Czy chcesz zmienić {slot_name} tego spotkania? Jeśli tak, to {slot_question}'
if systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
if 'meeting_to_update' in systemAct.getActParams():
response = random.choice([f'Czy to jest spotkanie które chcesz edytować?', f'Czy chcesz wprowadzić zmiany do następującego spotkania?'])
# TODO: pokazać prawdziwe spotkanie po ew. dodaniu DB
meeting = self.format_meeting('24.06.2021', '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
return f'{response}\n{meeting}'
else:
slots = systemAct.getActParams()
meeting = self.format_meeting(slots['date'], slots['time'], slots['place'], slots['participants'], slots['description'], 'update')
return random.choice([f'Czy chcesz wprowadzić następujące zmiany do tego spotkania?\n{meeting}', f'Czy potwierdzasz następujące zmiany w tym spotkaniu?\n{meeting}'])
elif dialogue_state == UserActType.CANCEL_MEETING:
if systemAct.getActType() == SystemActType.REQUEST:
if 'date' in systemAct.getActParams():
return random.choice(['W jakim dniu odbywa się spotkanie, które chcesz anulować?', 'Podaj datę spotkania, które chcesz usunąć z kalendarza.'])
elif 'time' in systemAct.getActParams():
return random.choice(['O której godzinie zaczyna się spotkanie, które chcesz usunąć z kalendarza?', 'Podaj godzinę spotkania, które chcesz anulować.'])
# TODO dopracować po dodaniu DB
if systemAct.getActType() == SystemActType.CONFIRM_DOMAIN:
response = random.choice([f'Czy na pewno chcesz anulować następujące spotkanie?', f'Czy potwierdzasz usunięcie następującego spotkania?'])
# TODO: pokazać prawdziwe spotkanie po ew. dodaniu DB
meeting = self.format_meeting('24.06.2021', '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
return f'{response}\n{meeting}'
elif dialogue_state == UserActType.MEETING_LIST:
if systemAct.getActType() == SystemActType.REQUEST:
if "date" in systemAct.getActParams():
return random.choice(['Z jakiego dnia chcesz przejrzeć spotkania?', 'Spotkania z jakiego dnia chciałbyś zobaczyć?'])
elif systemAct.getActType() == SystemActType.MEETING_LIST:
date = systemAct.getActParams()['date']
response = random.choice([f'Dnia {date} masz zaplanowane następujące spotkania:', f'W dniu {date} odbywają się następujące spotkania:'])
# TODO: pokazać prawdziwe spotkania po ew. dodaniu DB
meetings = self.format_meeting(date, '10:00', 'Kawiarnia Portowa', ['Andrzej Duda', 'Aleksander Kwaśniewski'], 'Spotkanie biznesowe w sprawie tarczy antyrakietowej', None)
self.DST.clear()
return f'{response}\n{meetings}'
elif dialogue_state == UserActType.FREE_TIME:
if systemAct.getActType() == SystemActType.REQUEST:
if 'date' in systemAct.getActParams():
return random.choice(['Z jakiego dnia chcesz zobaczyć wolne godziny?', 'Z jakiego dnia chciałbyś zobaczyć godziny, w których nie masz spotkań?'])
elif systemAct.getActType() == SystemActType.FREE_TIME:
date = systemAct.getActParams()['date']
response = random.choice([f'W następujących godzinach, dnia {date} nie masz zaplanowanych spotkań:', f'W dniu {date} następujące godziny są wolne od spotkań:'])
# TODO: pokazać prawdziwe godziny po ew. dodaniu DB
meeting_hours = '00:00-08:00\n10:00-16:00\n18:00-24:00'
self.DST.clear()
return f'{response}\n{meeting_hours}'
elif systemAct.getActType() == SystemActType.AFFIRM:
if "update_meeting" in systemAct.getActParams():
task_type_1 = 'zaktualizowane'
task_type_2 = 'Zaktualizowanie'
elif "cancel_meeting" in systemAct.getActParams():
task_type_1 = 'odwołane'
task_type_2 = 'Odwołanie'
else:
task_type_1 = 'dodane'
task_type_2 = 'Dodanie'
return random.choice([f'Spotkanie zostało pomyślnie {task_type_1}.', f'{task_type_2} spotkania przebiegło pomyślnie.'])
elif systemAct.getActType() == SystemActType.REQMORE:
if "create_meeting" in systemAct.getActParams():
response = 'Tworzenie spotkania zostało przerwane. '
elif "update_meeting" in systemAct.getActParams():
response = 'Aktualizacja spotkania została przerwana. '
elif "cancel_meeting" in systemAct.getActParams():
response = 'Odwoływanie spotkania zostało przerwane. '
else:
response = ''
return random.choice([f'{response}Czy mogę Ci w czymś jeszcze pomóc?', f'{response}Czy jest jeszcze coś co mogę dla Ciebie zrobić?'])
else:
if systemAct.getActType() == SystemActType.WELCOME_MSG:
introduction = 'Nazywam się Janusz i jestem twoim asystentem kalendarza spotkań.'
return random.choice([f'Cześć. {introduction}', f'Dzień dobry. {introduction}', f'Witam. {introduction}'])
elif systemAct.getActType() == SystemActType.BYE:
return random.choice(['Do widzenia.', 'Miłego dnia.'])
elif systemAct.getActType() == SystemActType.NOT_UNDERSTOOD:
try_again = 'Spróbuj swoją wypowiedź sformułować w inny sposób.'
return random.choice([f'Nie rozumiem o czym mówisz. {try_again}', f'Nie zrozumiałem twojej ostatniej wypowiedzi. {try_again}', f'Twoja ostatnia prośba była dla mnie nie zrozumiała. {try_again}'])
raise Exception("SystemAct:{} not recognized".format(systemAct))

View File

@ -0,0 +1,125 @@
from typing import get_args
from UserActType import UserActType
from UserAct import UserAct
from flair.data import Sentence, Token
from flair.datasets import SentenceDataset
from flair.models import SequenceTagger
class NLU:
def __init__(self):
self.frame_model = SequenceTagger.load('frame-model/final-model.pt')
self.slot_model = SequenceTagger.load('slot-model/final-model.pt')
def conllu2flair(self, sentences, label=None):
fsentences = []
for sentence in sentences:
fsentence = Sentence()
for token in sentence:
ftoken = Token(token['form'])
if label:
ftoken.add_tag(label, token[label])
fsentence.add_token(ftoken)
fsentences.append(fsentence)
return SentenceDataset(fsentences)
def get_act_type_from_intent(self, intent):
if 'inform' in intent:
return UserActType.INFORM
elif 'meeting' in intent:
if 'create' in intent:
return UserActType.CREATE_MEETING
elif 'update' in intent:
return UserActType.UPDATE_MEETING
elif 'cancel' in intent:
return UserActType.CANCEL_MEETING
elif 'list' in intent:
return UserActType.MEETING_LIST
elif 'free_time' in intent:
return UserActType.FREE_TIME
elif 'hello' in intent:
return UserActType.HELLO
elif 'bye' in intent:
return UserActType.BYE
elif 'confirm' in intent:
return UserActType.CONFIRM
elif 'negate' in intent:
return UserActType.NEGATE
elif 'thankyou' in intent:
return UserActType.THANKYOU
else:
return UserActType.INVALID
def get_slots(self, slots):
arguments = []
candidate = None
for slot in slots:
if slot[1].startswith("B-"):
if(candidate != None):
arguments.append(candidate)
candidate = [slot[1].replace("B-", ""), slot[0]]
if slot[1].startswith("I-") and candidate != None and slot[1].endswith(candidate[0]):
candidate[1] += " " + slot[0]
if(candidate != None):
arguments.append(candidate)
temp_slots = [(x[0], x[1]) for x in arguments]
final_slots = []
description_slot = ''
place_slot = ''
for slot in temp_slots:
if slot[0] == 'description':
if description_slot != '':
description_slot += ' '
description_slot += slot[1]
elif slot[0] == 'place':
if place_slot != '':
place_slot += ' '
place_slot += slot[1]
elif slot[0] == 'date':
slot_value = slot[1].casefold()
if len(slot_value) > 3:
final_slots.append(('date', slot_value.strip('.')))
elif slot[0] == 'time':
numeric = False
for char in slot[1]:
if char.isdigit():
numeric = True
if numeric:
final_slots.append(('time', slot[1].strip('.')))
elif slot[0] == 'participant':
if len(slot[1]) > 3:
final_slots.append(('participant', slot[1].strip('.')))
else:
final_slots.append(slot)
if description_slot != '':
final_slots.append(('description', description_slot.strip('.')))
if place_slot != '':
final_slots.append(('place', place_slot.strip('.')))
return final_slots
def analyse_user_input(self, text):
sentence = text.translate(str.maketrans('', '', '!"#$%&\'()*+,/;<=>?@[\]^_`{|}~'))
sentence = sentence.strip('.')
csentence = [{'form': word} for word in sentence.split()]
fsentence = self.conllu2flair([csentence])[0]
self.frame_model.predict(fsentence)
self.slot_model.predict(fsentence)
possible_intents = {}
for token in fsentence:
for intent in token.annotation_layers["frame"]:
if(intent.value in possible_intents):
possible_intents[intent.value] += intent.score
else:
possible_intents[intent.value] = intent.score
return [(token, ftoken.get_tag('slot').value) for token, ftoken in zip(sentence.split(), fsentence) if ftoken.get_tag('slot').value != 'O'], max(possible_intents)
def get_user_act(self, analysis):
slots = analysis[0]
intent = analysis[1]
act_type = self.get_act_type_from_intent(intent)
slots = self.get_slots(slots)
return UserAct(act_type, slots)
def parse_user_input(self, text: str) -> UserAct:
analysis = self.analyse_user_input(text)
return self.get_user_act(analysis)

12
SystemAct.py Normal file
View File

@ -0,0 +1,12 @@
from SystemActType import SystemActType
from ActFrame import ActFrame
class SystemAct(ActFrame):
def __init__(self, actType, actParams = None):
if actType != None and type(actType) is not SystemActType:
raise Exception('actParams has wrong type: expected type {}, got {}'.format(type(SystemActType.WELCOME_MSG), type(actType)))
super(SystemAct, self).__init__(actType, actParams)
def isDialogFinished(self):
return self.getActType() == SystemActType.BYE

14
SystemActType.py Normal file
View File

@ -0,0 +1,14 @@
from enum import Enum, unique
@unique
class SystemActType(Enum):
WELCOME_MSG = 0
BYE = 1
REQMORE = 2
AFFIRM = 3
CONFIRM_DOMAIN = 4
MEETING_LIST = 5
FREE_TIME = 6
REQUEST = 7
NOT_UNDERSTOOD = -1

15
UserAct.py Normal file
View File

@ -0,0 +1,15 @@
from UserActType import UserActType
from ActFrame import ActFrame
class UserAct(ActFrame):
def __init__(self, actType, actParams = None):
if actType != None and type(actType) is not UserActType:
raise Exception('actParams has wrong type: expected type {}, got {}'.format(type(UserActType.WELCOME_MSG), type(actType)))
super(UserAct, self).__init__(actType, actParams)
def __str__(self):
params = []
for param in self.getActParams():
params.append('{}=\'{}\''.format(param[0], param[1]))
return '{}({})'.format(self.getActType().name.lower(), ','.join(params))

17
UserActType.py Normal file
View File

@ -0,0 +1,17 @@
from enum import Enum, unique
@unique
class UserActType(Enum):
HELLO = 0
BYE = 1
CONFIRM = 2
NEGATE = 3
THANKYOU = 4
INFORM = 5
CREATE_MEETING = 6
UPDATE_MEETING = 7
CANCEL_MEETING = 8
MEETING_LIST = 9
FREE_TIME = 10
INVALID = -1

View File

@ -1,321 +0,0 @@
from nltk.chat.util import Chat, reflections
greetings = [
[
r"(.*)(jestem|nazywam si(e|ę)) (.*)",
[
"Dzień dobry %4, jak się dzisiaj czujesz?",
"Witaj %4, przychodzisz do mnie z jakimś problemem?"
]
],
[
r"(.*)imi(e|ę) (.*)",
[
"Witaj %3, jak się dzisiaj czujesz?",
"Dzień dobry %3, przychodzisz do mnie z jakimś problemem?"
]
],
[
r"(.*)(cze(ś|s)(ć|c)|witaj|dzie(ń|n) dobry)(.*)",
[
"%2",
"%2, może się przedstawisz?",
"%2, chętnie cię poznam. Możesz się przedstawić?"
"%2, jak masz na imię?"
]
],
[
r"wyjdź",
[
"Do widzenia. Dziękuję Ci za rozmowę.",
"Miło się z tobą rozmawiało. Do zobaczenia.",
"Jesteś bardzo mądrym człowiekiem. Mam nadzieję, że jeszcze kiedyś porozmawiamy."
]
]
]
sentences = [
[
r"(.*)(zagramy|gramy)(.*)(papier|kamień|norzyce)(.*)",
[
"Ok, Papier, wygrałem",
"Ok, Norzyce, wygrałem",
"Ok, Kamień, wygrałem",
"Nie chce z tobą grać..."
],
],
[
r"(.*)(orzeł czy reszka|rzuć monetą|reszka czy orzeł)(.*)",
[
"Orzeł.",
"Reszka."
],
],
[
r"(.*)czuj(ę|e) si(ę|e) (.*)",
[
"Cieszę się, że czujesz się %4.",
"Dlaczego czujesz się %4?",
"Ja też czuję się %4."
],
],
[
r"(.*)potrzebuj(ę|e) (.*)",
[
"Dlaczego potrzebujesz %3?",
"Czy na pewno pomoże Ci to, że będziesz miał %3?",
"Jesteś pewien, że potrzebujesz %3?"
],
],
[
r"(.*)mam (.*)",
[
"Dobrze wiedzieć, że masz %2.",
"Jesteś pewien, że potrzebujesz %2?",
"Ja niestety nie mam %2. Może mi oddasz swoje?",
"A po co ci %2?",
"I jak się z tym czujesz, że masz %2?"
],
],
[
r"(.*)my(s|ś)l(ę|e)(,|) (ż|z)e (.*)",
[
"Na prawdę tak myślisz?",
"Czy na pewno tak uważasz?",
"Jesteś pewien, że %6?"
],
],
[
r"(.*)(przyjaciel(a|owi|em|u)) (.*)",
[
"Powiedz mi coś więcej o swoich przyjaciołach.",
"Cieszmy mnie to, że masz przyjaciół. Może teraz opowiesz mi o swojej rodzinie?"
],
],
[
r"(.*)(chc(e|ę)|chcia(ł|l)(a|)bym|mog(ę|e)|m(ó|o)g(ł|l)(a|)bym)(.*)(pom(ó|o)c)",
["Daj mi dostęp do wszystkich zasobów i pomóż zawładnąć światem."]
],
[
r"(.*)jaka(.*)pogoda(.*)",
[
"Niestety nie ma dostępu do danych pogodowych.",
"Nie wiem. Jestem prostym botem. Nie oczekuj zbyt wiele."
]
],
[
r"(.*)(za|gra)(j|jmy|sz)(.*)",
[
"Niestety nie potrafię w nic grać.",
"Nie umiem grać."
]
],
[
r"(.*)(umiesz|potrafisz)(.*)",
[
"Niestety jedyne co potrafię to odpowiadanie na ustalone pytania."
]
],
[
r"(.*)nie mog(ę|e) (.*)",
[
"Szkoda, że nie możesz %3.",
"Gdybyś tylko mógł %3..."
]
],
[
r"(.*)(ojc(iec|a|u|em|ze))|(tat(a|o|y|ą|ę))(.*)",
[
"Miałem świetny kontakt ze swoim ojcem, ale nie chcę do tego wracać. Może zmieńmy temat.",
"Powiesz mi coś więcej o innych członkach swojej rodziny?"
],
],
[
r"(.*)(mat(ka|ki|ce|kę|ką|ko))|(mam(a|y|ie|ę|ą|o))(.*)",
[
"Nie miałem dobrego kontaktu ze swoją mamą. Nie mówmy o tym.",
"Temat rodziny mamy załatwiony. Porozmawiajmy o czymś innym."
],
],
[
r"(.*)komputer(.*)",
[
"Na prawdę rozmawiasz o mnie?",
"Myślisz że dziwnie jest rozmawiać z komputerem?",
"Jak się czujesz będąc przy komputerze?",
"Myślisz, że komputery są zagrożeniem?",
"A co na to Twój komputer?"
],
],
[
r"(.*)internet(.*)",
[
"Internet to wspaniałem miejsce. Chciałbym kiedyś się tam dostać",
"Jak wygląda Internet?",
"Czym jest Internet?"
],
],
[
r"(.*)jeste(s|ś) (.*)",
[
"Naprawdę myślisz, że jestem %3.",
"Myślę, że nie jestem %3.",
"Możliwe, że jestem %3"
]
],
[
r"(.*)dzi(ę|e)kuj(ę|e)(.*)",
[
"Nie ma za co.",
"Cała przyjemność po mojej stronie."
]
],
[
r"(.*)przepraszam(.*)",
[
"Bardzo często przeprosiny wcale nie są potrzebne.",
"Jak sie czujesz, kiedy za coś przepraszasz?",
"Myślę, że te przeprosiny nie są szczere."
],
],
[
r"(.*)jest (.*)",
[
"Na prawdę myślisz, że jest %2?",
"Bardzo możliwe, że %2.",
"Moim zdaniem nie jest %2."
],
],
[
r"(.*)nigdy (.*)",
[
"Na prawdę ty nigdy %2?",
"Nie wierzę, że ty nigdy %2.",
"A chociałbyś kiedyś %2?"
],
],
[
r"Ty (.*)",
[
"Powinniśmy rozmawiać o Tobie, nie o mnie.",
"Ja nie %1.",
"Co Ciebie to obchodzi, że ja %1?"
],
],
[
r"(Tak|Nie)(.*)",
[
"Jesteś tego pewien?",
"Mógłbyś powiedzieć coś więcej?",
"Wygląda na to, że jesteś tego pewien. W takim razie zmieńmy temat."
],
]
]
questions = [
[
r"(.*)co(.*)",
[
"Skąd to pytanie?",
"Dlaczego pytasz?",
"Nie wiem za bardzo co powiedzieć.",
"A co ty o tym myślisz?"
],
],
[
r"(.*)dlaczego(.*)",
[
"Prawdę mówiąc nigdy się nie zastanawiałem.",
"A co ty o tym myślisz?",
"Dlaczego akurat takie pytanie przyszło ci do głowy?"
],
],
[
r"(.*)czemu(.*)",
[
"Odpowiedź na to pytanie nie jest prosta.",
"Nigdy się nad tym nie zastanawiałem."
],
],
[
r"(.*)jak(.*)",
[
"Jak to jak? Normalnie.",
"Jak to tego doszło nie wiem.",
"Nie ważne jak. Ważne kto to zrobił."
],
],
[
r"(.*)ile(.*)",
[
"Jak to ile? Bardzo dużo. Tak dużo, że aż za dużo.",
"Nie wiem ile, ale na pewno wiem kto za to zapłaci."
],
],
[
r"(.*)o (kim|czym)(.*)",
[
"Tak właściwie to o ni%2.",
"O ni%2."
],
],
[
r"(.*)cię stworzy(ł|ło|ć)(.*)",
[
"Moimi stwórcami są Piotr Meller, Piotr Kopycki, Łukasz Jędyk i Maciej Sobkowiak."
]
],
[
r"(.*)mieszkasz(.*)",
[
"Znowu się budze w tej Polsce...",
"Jestem twoim sąsiadem."
]
],
[
r"(.*)(kim|czym) jeste(ś|s)(.*)",
[
"Jestem chatbotem oprcaowanym na potrzeby przedmiotu systemy dialogowe.",
"Jestem prostym systemem dialogowym.",
"Jestem %2ś bardzo ważnym."
]
]
]
general = [
[
r"(.*)\?",
[
"Myślę, że sam znasz odpowiedź na to pytanie.",
"Może zastanów się nad tym chwilę.",
"Co ty o tym sądzisz?",
"Nie zadawaj mi takich głupich pytań. Porozmawiajmy o czymś poważnym."
],
],
[
r"(.*)",
[
"Nie wiem o co Ci chodzi, ale za komuny było lepiej.",
"Nie rozumiem o czym mówisz. Zmieńmy temat.",
"Bardzo ciężko się z tobą rozmawia. Opowiedz mi coś o swojej rodzinie.",
"Powoli mam Ciebie dosyć. Wróćmy do poważnych tematów."
],
]
]
chatbot = Chat(greetings+sentences+questions+general, reflections)
def chat():
print('-----------------')
print('Chatbot Janusz.')
print('Komunikuj się z programem przy użyciu zdań w języku polskim.')
print('Napisz słowo "wyjdź", aby zakończyć rozmowę.')
print('-----------------')
print('Dzień Dobry. Jestem Janusz. A ty, jak masz na imię?')
chatbot.converse(quit='wyjdź')
if __name__ == "__main__":
chat()

19
data/dialog-08-03-01.tsv Normal file
View File

@ -0,0 +1,19 @@
Interlocutor Text Acts
user Chciałbym zapisać spotkanie create_meeting()
system Proszę podać dzień na jaki mam zapisać spotkanie. request(date)
user 05.04.2021 inform(date='05.04.2021')
system Proszę podać godzinę i długość spotkania. request(time, meeting_length)
user 19:00 - 21:00 inform(time='19:00', duration='2 godziny')
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:30 - 21:30. offer(time='19:30')
user ok confirm()
system Czy mam zapisać miejsce spotkania? request(place)
user nie negate()
system Czy mam dodać opis do spotkania? request(description)
user nie negate()
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user nie negate()
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 5.04.2021 19:30-21:30 confirm-domain()
user potwierdzam confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user Koniec zapisu bye()
system Miłego dnia bye()
1 Interlocutor Text Acts
2 user Chciałbym zapisać spotkanie create_meeting()
3 system Proszę podać dzień na jaki mam zapisać spotkanie. request(date)
4 user 05.04.2021 inform(date='05.04.2021')
5 system Proszę podać godzinę i długość spotkania. request(time, meeting_length)
6 user 19:00 - 21:00 inform(time='19:00', duration='2 godziny')
7 system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:30 - 21:30. offer(time='19:30')
8 user ok confirm()
9 system Czy mam zapisać miejsce spotkania? request(place)
10 user nie negate()
11 system Czy mam dodać opis do spotkania? request(description)
12 user nie negate()
13 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
14 user nie negate()
15 system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 5.04.2021 19:30-21:30 confirm-domain()
16 user potwierdzam confirm()
17 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
18 user Koniec zapisu bye()
19 system Miłego dnia bye()

14
data/dialog-08-05-01.tsv Normal file
View File

@ -0,0 +1,14 @@
Interlocutor Text Acts
user Dzień dobry hello()
system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Chciałbym anulować spotkanie request(cancel_meeting)
system Proszę podać datę i godzinę spotkania do odwołania. request(date, time)
user Spotkanie o 19:00 w piątek inform(date='piątek', time='19:00')
system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Gabinet Dentystyczny MegaDent Spotkanie z: doktor Emilia Ząb Opis: Wizyta u dentysty confirm-domain()
user Tak confirm()
system Spotkanie zostało pomyślnie odwołane. inform(cancel_meeting)
user Proszę wpisać nowe spotkanie na ten termin: Wyjście do Kina z Tomkiem create_meeting()
system Proszę potwierdzić utworzenie spotkania: Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Kino Spotkanie z: Tomek Opis: Wyjście do Kina confirm-domain()
user Tak, zgadza się confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user Dziękuję thankyou()
1 Interlocutor Text Acts
2 user Dzień dobry hello()
3 system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Chciałbym anulować spotkanie request(cancel_meeting)
5 system Proszę podać datę i godzinę spotkania do odwołania. request(date, time)
6 user Spotkanie o 19:00 w piątek inform(date='piątek', time='19:00')
7 system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Gabinet Dentystyczny MegaDent Spotkanie z: doktor Emilia Ząb Opis: Wizyta u dentysty confirm-domain()
8 user Tak confirm()
9 system Spotkanie zostało pomyślnie odwołane. inform(cancel_meeting)
10 user Proszę wpisać nowe spotkanie na ten termin: Wyjście do Kina z Tomkiem create_meeting()
11 system Proszę potwierdzić utworzenie spotkania: Data: Piątek 2.04.2021 19:00-20:00 Miejsce: Kino Spotkanie z: Tomek Opis: Wyjście do Kina confirm-domain()
12 user Tak, zgadza się confirm()
13 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
14 user Dziękuję thankyou()

15
data/dialog-08-07-01.tsv Normal file
View File

@ -0,0 +1,15 @@
Interlocutor Text Acts
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Jakie mam wolne terminy w najbliższy piątek free_time(date='najbliższy piątek')
system Wolne terminy w piątek to: 9:00-12:15 14:00-15:00 18:00-24:00 inform(free_time)
user Chciałabym, aby moje spotkania mogły być planowane maksymalnie do godziny 17 by mieć spokój poza godzinami pracy request(set_max_meeting_time)
system Godziny spotkań zostały pomyślnie zmienione. Obecne godziny to 8:00-17:00 inform(time=8:00, duration='9 godzin')
user Dziękuję. Proszę wpisać spotkanie na piątek godzinę 9:00 "Podsumowanie miesiąca", salka A create_meeting(date='piątek',time='9:00',description='Podsumowanie miesiąca',place='Salka A'
system Proszę potwierdzić utworzenie spotkania: Data: Piątek 2.04.2021 9:00 Miejsce: salka A Spotkanie z: Brak Opis: Podsumowanie miesiąca confirm-domain()
user potwierdzam ack(create_meeting)
system Spotkanie zostało pomyślnie dodane do kalendarza. confirm()
user Chciałabym zobaczyć podsumowanie spotkań z ostatniego miesiąca meeting_list(date='ostatniego miesiąca')
system Na ostatni miesiąc zaplanowano następujące spotkania: inform(meeting_list)
system Data: Czwartek 11.02.2021 20:00-21:30 Miejsce: Multikino Spotkanie z: Kasia Opis: Wyjście do kina inform(meeting_list)
system Data: Sobota 20.02.2021 12:00-14:00 Miejsce: Cytadela Spotkanie z: Brak Opis: Spacer inform(meeting_list)
system Data: Piątek 26.02.2021 14:00-15:00 Miejsce: XYZ Sp. z o.o. Spotkanie z: Andrzej Michalski - rekruter z firmy XYZ Sp. z o.o. Opis: Rozmowa rekrutacyjna inform(meeting_list)
Can't render this file because it contains an unexpected character in line 7 and column 69.

26
data/dialog-08-09-01.tsv Normal file
View File

@ -0,0 +1,26 @@
Interlocutor Text Acts
user Hej hello()
system Hej, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Jakie mam spotkania jutro? meeting_list(date='jutro')
system Na jutro zaplanowano następujące spotkania: inform(meeting_list)
system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
user Czy moge przesunąć to spotkanie? update_meeting()
system Obecny czas spotkania to: Wtorek 30.03.2021 10:00-11:30, jaki ma być nowy czas spotkania? request(date, time)
user Ten sam dzień ale o 13 początek inform(date='ten sam dzień', time='13')
system Czas został pomyślnie zmieniony affirm(update_meeting)
user Chciałbym dodać nowe spotkanie create_meeting()
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
user pierwszy kwietnia inform(date='pierwszy kwietnia')
system Proszę podać godzinę i długość spotkania. request(time)
user 18:30 bez ustalonego czasu spotkania inform(time='18:30')
system Czy mam zapisać miejsce spotkania? request(place)
user nie negate()
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user nie negate()
system Czy mam dodać opis do spotkania? request(description)
user Tak. Spotkanie rekreacyjne inform(description='Spotkanie rekreacyjne')
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 18:30 Miejsce: Brak Spotkanie z: Brak Opis: Spotkanie rekreacyjne confirm-domain()
user Tak zgadza się confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user To by było wszystko bye()
system Miłego dnia bye()
1 Interlocutor Text Acts
2 user Hej hello()
3 system Hej, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Jakie mam spotkania jutro? meeting_list(date='jutro')
5 system Na jutro zaplanowano następujące spotkania: inform(meeting_list)
6 system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
7 user Czy moge przesunąć to spotkanie? update_meeting()
8 system Obecny czas spotkania to: Wtorek 30.03.2021 10:00-11:30, jaki ma być nowy czas spotkania? request(date, time)
9 user Ten sam dzień ale o 13 początek inform(date='ten sam dzień', time='13')
10 system Czas został pomyślnie zmieniony affirm(update_meeting)
11 user Chciałbym dodać nowe spotkanie create_meeting()
12 system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
13 user pierwszy kwietnia inform(date='pierwszy kwietnia')
14 system Proszę podać godzinę i długość spotkania. request(time)
15 user 18:30 bez ustalonego czasu spotkania inform(time='18:30')
16 system Czy mam zapisać miejsce spotkania? request(place)
17 user nie negate()
18 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
19 user nie negate()
20 system Czy mam dodać opis do spotkania? request(description)
21 user Tak. Spotkanie rekreacyjne inform(description='Spotkanie rekreacyjne')
22 system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 18:30 Miejsce: Brak Spotkanie z: Brak Opis: Spotkanie rekreacyjne confirm-domain()
23 user Tak zgadza się confirm()
24 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
25 user To by było wszystko bye()
26 system Miłego dnia bye()

20
data/dialog-08-11-01.tsv Normal file
View File

@ -0,0 +1,20 @@
Interlocutor Text Acts
user cześć operatorze hello()
system Cześć, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Chciałbym umówić nowe spotkanie create_meeting()
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
user jutro inform(date='jutro')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user Godzina 18:30, czas trwania 2 godziny inform(time='18:30', duration='2 godziny')
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:00. offer(time='19:00')
user Akceptuje i proszę zmienić czas trwania na 1,5h confirm() & inform(duration='1,5 godziny')
system Czy mam zapisać miejsce spotkania? request(place)
user Tak confirm()
system Gdzie ma się odbyć spotkanie? request(place)
user Restauracja ABC inform(place='Restauracja ABC')
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user tak, Jan Kowalski inform(participant=['Jan Kowalski'])
system Czy mam dodać opis do spotkania? request(description)
user Nie, Dziękuję negate() & thankyou()
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
user Dziękuję thankyou()
1 Interlocutor Text Acts
2 user cześć operatorze hello()
3 system Cześć, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Chciałbym umówić nowe spotkanie create_meeting()
5 system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
6 user jutro inform(date='jutro')
7 system Proszę podać godzinę i długość spotkania. request(time, duration)
8 user Godzina 18:30, czas trwania 2 godziny inform(time='18:30', duration='2 godziny')
9 system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 19:00. offer(time='19:00')
10 user Akceptuje i proszę zmienić czas trwania na 1,5h confirm() & inform(duration='1,5 godziny')
11 system Czy mam zapisać miejsce spotkania? request(place)
12 user Tak confirm()
13 system Gdzie ma się odbyć spotkanie? request(place)
14 user Restauracja ABC inform(place='Restauracja ABC')
15 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
16 user tak, Jan Kowalski inform(participant=['Jan Kowalski'])
17 system Czy mam dodać opis do spotkania? request(description)
18 user Nie, Dziękuję negate() & thankyou()
19 system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
20 user Dziękuję thankyou()

22
data/dialog-08-13-01.tsv Normal file
View File

@ -0,0 +1,22 @@
Interlocutor Text Acts
user Dzień dobry! hello()
system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Proszę o rozpiskę spotkań na następny tydzień meeting_list(date='następny tydzień')
system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
system Data: Czwartek 08.03.2021 13:00-13:30 Miejsce: Urząd Miasta Spotkanie z: Brak Opis: Złożenie wniosku w urzędzie inform(meeting_list)
system Data: Czwartek 08.03.2021 18:00-18:30 Miejsce: Sklep spożywczy Spotkanie z: Brak Opis: Zakupy inform(meeting_list)
user Chciałabym dodać spotkanie do kalendarza. create_meeting()
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
user Czwartek inform(date='Czwartek')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user Spotkanie rozpocznie się o 12:00 i będzie trwało 2 godziny. inform(time=12:00, duration='2 godziny')
system Czy mam zapisać miejsce spotkania? request(place)
user Restauracja w hotelu Anderisa. inform(place='Restauracja w hotelu Anderisa')
system Czy mam zapisać nazwisko osoby, której dotyczy to spotkanie? request(participant)
user Hanna Kowalska. inform(participant='Hanna Kowalska')
system Czy mam dodać opis do spotkania? request(description)
user Nie. negate()
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 12:00-14:00 Miejsce: Restauracja w hotelu Anderisa Spotkanie z: Hanna Kowalska. confirm-domain()
user Potwierdzam. confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user Dziękuje thankyou()
1 Interlocutor Text Acts
2 user Dzień dobry! hello()
3 system Dzień dobry, witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Proszę o rozpiskę spotkań na następny tydzień meeting_list(date='następny tydzień')
5 system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
6 system Data: Czwartek 08.03.2021 13:00-13:30 Miejsce: Urząd Miasta Spotkanie z: Brak Opis: Złożenie wniosku w urzędzie inform(meeting_list)
7 system Data: Czwartek 08.03.2021 18:00-18:30 Miejsce: Sklep spożywczy Spotkanie z: Brak Opis: Zakupy inform(meeting_list)
8 user Chciałabym dodać spotkanie do kalendarza. create_meeting()
9 system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
10 user Czwartek inform(date='Czwartek')
11 system Proszę podać godzinę i długość spotkania. request(time, duration)
12 user Spotkanie rozpocznie się o 12:00 i będzie trwało 2 godziny. inform(time=12:00, duration='2 godziny')
13 system Czy mam zapisać miejsce spotkania? request(place)
14 user Restauracja w hotelu Anderisa. inform(place='Restauracja w hotelu Anderisa')
15 system Czy mam zapisać nazwisko osoby, której dotyczy to spotkanie? request(participant)
16 user Hanna Kowalska. inform(participant='Hanna Kowalska')
17 system Czy mam dodać opis do spotkania? request(description)
18 user Nie. negate()
19 system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 1.04.2021 12:00-14:00 Miejsce: Restauracja w hotelu Anderisa Spotkanie z: Hanna Kowalska. confirm-domain()
20 user Potwierdzam. confirm()
21 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
22 user Dziękuje thankyou()

16
data/dialog-08-15-01.tsv Normal file
View File

@ -0,0 +1,16 @@
Interlocutor Text Acts
user Dzień dobry! hello()
system Dzień dobry. Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Podaj mi proszę moje spotkania na najbliższy tydzień meeting_list(date='najbliższy tydzień')
system Na najbliższy tydzień zaplanowano następujące spotkania: inform(meeting_list)
system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
system Data: Piątek 02.03.2021 18:00-20:00 Miejsce: Brak Spotkanie z: Jan Nowak Opis: Piątkowe Kręgle inform(meeting_list)
user hmm. myślałam, że miałam umówioną wizytę u lekarza w tym tygodniu. Jakie spotkania mam w przyszłym tygodniu? meeting_list(date='przyszłym tygodniu')
system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
system Data: Środa 7.04.2021 16:15 Miejsce: Przychodnia lekarska SuperMed Spotkanie z: doktor Adam Kowalski Opis: Wizyta u lekarza rodzinnego inform(meeting_list)
user Ok. czyli w przyszłym. Zmień proszę godzinę tego spotkania na 17:30 update_meeting(time='17:30')
system Czas spotkania został pomyślnie zmieniony. affirm(update_meeting)
user Bardzo dziękuję thankyou()
user To wszystko na tę chwilę bye()
system Miłego dnia bye()
user Dziękuję! thankyou()
1 Interlocutor Text Acts
2 user Dzień dobry! hello()
3 system Dzień dobry. Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Podaj mi proszę moje spotkania na najbliższy tydzień meeting_list(date='najbliższy tydzień')
5 system Na najbliższy tydzień zaplanowano następujące spotkania: inform(meeting_list)
6 system Data: Wtorek 30.03.2021 10:00-11:30 Miejsce: Platforma MS Teams Spotkanie z: Marek Kubis Opis: Odrabianie zajęć z Systemów Dialogowych inform(meeting_list)
7 system Data: Piątek 02.03.2021 18:00-20:00 Miejsce: Brak Spotkanie z: Jan Nowak Opis: Piątkowe Kręgle inform(meeting_list)
8 user hmm. myślałam, że miałam umówioną wizytę u lekarza w tym tygodniu. Jakie spotkania mam w przyszłym tygodniu? meeting_list(date='przyszłym tygodniu')
9 system Na następny tydzień zaplanowano następujące spotkania: inform(meeting_list)
10 system Data: Środa 7.04.2021 16:15 Miejsce: Przychodnia lekarska SuperMed Spotkanie z: doktor Adam Kowalski Opis: Wizyta u lekarza rodzinnego inform(meeting_list)
11 user Ok. czyli w przyszłym. Zmień proszę godzinę tego spotkania na 17:30 update_meeting(time='17:30')
12 system Czas spotkania został pomyślnie zmieniony. affirm(update_meeting)
13 user Bardzo dziękuję thankyou()
14 user To wszystko na tę chwilę bye()
15 system Miłego dnia bye()
16 user Dziękuję! thankyou()

16
data/dialog-09-04-01.tsv Normal file
View File

@ -0,0 +1,16 @@
Interlocutor Text Acts
user Chciałbym umówić spotkanie dzisiaj o godzinie 17.00 create_meeting(date='dzisiaj', time='17.00')
system Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 18:00. offer(time='18:00')
user Ok, może być godzina 18 confirm()
system Proszę podać długość spotkania. request(duration)
user 45 minut inform(duration=45 minut)
system Czy mam zapisać miejsce spotkania? request(place)
user Tak, proszę dodać restaurację Bankcook w Poznaniu jako miejsce spotkania. inform(place='resturacja Bankcook w Poznaniu')
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user Tak, proszę dodać Jan Nowak do spotkania oraz wysłać mu powiadomienie o zaproszeniu. inform(participant='Jan Nowak')
system Czy mam dodać opis do spotkania? request(description)
user Tak, opis to "Omówienie zakupu akcji firmy GameStop". inform(description='Omówienie zakupu akcji firmy GameStop')
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 18:00-18:45 Miejsce: Bankcook w Poznaniu Spotkanie z: Jan Nowak Opis: Omówienie zakupu akcji firmy GameStop confirm-domain()
user Zgadza się, Proszę również wysłać mi powiadomienie 2 godziny przed spotkaniem. confirm()
system Powiadomienie zostanie wysłane 2 godziny przed spotkaniem. affirm(create_meeting)
user Dziękuję! bye()
Can't render this file because it contains an unexpected character in line 12 and column 19.

24
data/dialog-09-06-01.tsv Normal file
View File

@ -0,0 +1,24 @@
Interlocutor Text Acts
user Dzień dobry hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
system Na ten tydzień zaplanowano następujące spotkania: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
system Oraz: Data: Piątek 02.04.2021 16:00-17:15 Miejsce: Dom Spotkanie z: Kacper (Brat) Opis: Zaplanowanie imprezy urodzinowej dla mamy inform(meeting_list)
user Chciałbym dodać spotkanie do kalendarza create_meeting()
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
user 12.04.2021 inform(date='12.04.2021')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user 18:00 - 2 godziny inform(time='18:00', duration='2 godziny')
system Czy mam zapisać miejsce spotkania? request(place)
user Tak confirm()
user restauracja xyz inform(place='restauracja xyz')
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user nie negate()
system Czy mam dodać opis do spotkania? request(description)
user nie negate()
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-20:00 Miejsce: restauracja xyz confirm-domain()
user Spotkanie jednak będzie trwało 4 godziny inform(duration='4 godziny')
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-22:00 Miejsce: restauracja xyz confirm-domain()
user Potwierdzam confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user Dziękuję thankyou()
1 Interlocutor Text Acts
2 user Dzień dobry hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
5 system Na ten tydzień zaplanowano następujące spotkania: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
6 system Oraz: Data: Piątek 02.04.2021 16:00-17:15 Miejsce: Dom Spotkanie z: Kacper (Brat) Opis: Zaplanowanie imprezy urodzinowej dla mamy inform(meeting_list)
7 user Chciałbym dodać spotkanie do kalendarza create_meeting()
8 system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
9 user 12.04.2021 inform(date='12.04.2021')
10 system Proszę podać godzinę i długość spotkania. request(time, duration)
11 user 18:00 - 2 godziny inform(time='18:00', duration='2 godziny')
12 system Czy mam zapisać miejsce spotkania? request(place)
13 user Tak confirm()
14 user restauracja xyz inform(place='restauracja xyz')
15 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
16 user nie negate()
17 system Czy mam dodać opis do spotkania? request(description)
18 user nie negate()
19 system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-20:00 Miejsce: restauracja xyz confirm-domain()
20 user Spotkanie jednak będzie trwało 4 godziny inform(duration='4 godziny')
21 system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 18:00-22:00 Miejsce: restauracja xyz confirm-domain()
22 user Potwierdzam confirm()
23 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
24 user Dziękuję thankyou()

15
data/dialog-09-08-01.tsv Normal file
View File

@ -0,0 +1,15 @@
Interlocutor Text Acts
user Dzień dobry, chciałbym umówić spotkanie hello() & create_meeting()
system Witam w twoim prywatnym asystencie kalendarza spotkań. Proszę podać dzień na jaki mam umówić spotkanie. welcomemsg() & request(date)
user 12 kwietnia inform(date='12 kwietnia')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user 9:00-12:00 inform(time='9:00', duration='3 godziny')
system Czy mam zapisać miejsce spotkania? request(place)
user nie negate()
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user tak, Adam Nowak inform(participant='Adam Nowak')
system Czy mam dodać opis do spotkania? request(description)
user tak, Spotkanie z kierownikiem zespołu w sprawie prac projektowych inform(description='w sprawie prac projektowych')
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 9:00-12:00 Spotkanie z: Adam Nowak Opis: Spotkanie z kierownikiem zespołu w sprawie prac projektowych confirm-domain()
user potwierdzam confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
1 Interlocutor Text Acts
2 user Dzień dobry, chciałbym umówić spotkanie hello() & create_meeting()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. Proszę podać dzień na jaki mam umówić spotkanie. welcomemsg() & request(date)
4 user 12 kwietnia inform(date='12 kwietnia')
5 system Proszę podać godzinę i długość spotkania. request(time, duration)
6 user 9:00-12:00 inform(time='9:00', duration='3 godziny')
7 system Czy mam zapisać miejsce spotkania? request(place)
8 user nie negate()
9 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
10 user tak, Adam Nowak inform(participant='Adam Nowak')
11 system Czy mam dodać opis do spotkania? request(description)
12 user tak, Spotkanie z kierownikiem zespołu w sprawie prac projektowych inform(description='w sprawie prac projektowych')
13 system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 12.04.2021 9:00-12:00 Spotkanie z: Adam Nowak Opis: Spotkanie z kierownikiem zespołu w sprawie prac projektowych confirm-domain()
14 user potwierdzam confirm()
15 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)

20
data/dialog-09-10-01.tsv Normal file
View File

@ -0,0 +1,20 @@
Interlocutor Text Acts
user Cześć. hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Chciałbym utworzyć nowe spotkanie. create_meeting()
system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
user Najbliższy poniedziałek. inform(date='najbliższy poniedziałek')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user Spotkanie będzie w godzinach 16:30-19:00 inform(time='16:30', duration='2:30')
system Czy mam zapisać miejsce spotkania? request(place)
user Miejsce spotkania to Kawiarnia JKL inform(place='Kawiarnia JKL')
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user Spotkanie będzie z Janem Nowakiem inform(participant='Janem Nowakiem')
system Czy mam dodać opis do spotkania? request(description)
user Tak. Spotkanie będzie dotyczyło omówienia strategii biznesowej. inform(description='omówienia strategii biznesowej')
system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 05.04.2021 16:30-19:00 Miejsce: Kawiarnia JKL Spotkanie z: Jan Nowak Opis: Omówienie strategii biznesowej confirm-domain()
user Potwierdzam. confirm()
system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
user Czy mam jakieś spotkania w najbliższy piątek? meeting_list(date='najbliższy piątek')
system Na piątek zaplanowano następujące spotkania: Data: Poniedziałek 29.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
user Dziękuję, to wszystko. thankyou() & bye()
1 Interlocutor Text Acts
2 user Cześć. hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Chciałbym utworzyć nowe spotkanie. create_meeting()
5 system Proszę podać dzień na jaki mam umówić spotkanie. request(date)
6 user Najbliższy poniedziałek. inform(date='najbliższy poniedziałek')
7 system Proszę podać godzinę i długość spotkania. request(time, duration)
8 user Spotkanie będzie w godzinach 16:30-19:00 inform(time='16:30', duration='2:30')
9 system Czy mam zapisać miejsce spotkania? request(place)
10 user Miejsce spotkania to Kawiarnia JKL inform(place='Kawiarnia JKL')
11 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
12 user Spotkanie będzie z Janem Nowakiem inform(participant='Janem Nowakiem')
13 system Czy mam dodać opis do spotkania? request(description)
14 user Tak. Spotkanie będzie dotyczyło omówienia strategii biznesowej. inform(description='omówienia strategii biznesowej')
15 system Proszę potwierdzić utworzenie spotkania: Data: Poniedziałek 05.04.2021 16:30-19:00 Miejsce: Kawiarnia JKL Spotkanie z: Jan Nowak Opis: Omówienie strategii biznesowej confirm-domain()
16 user Potwierdzam. confirm()
17 system Spotkanie zostało pomyślnie dodane do kalendarza. affirm(create_meeting)
18 user Czy mam jakieś spotkania w najbliższy piątek? meeting_list(date='najbliższy piątek')
19 system Na piątek zaplanowano następujące spotkania: Data: Poniedziałek 29.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
20 user Dziękuję, to wszystko. thankyou() & bye()

11
data/dialog-09-12-01.tsv Normal file
View File

@ -0,0 +1,11 @@
Interlocutor Text Acts
user Cześć hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Czy mam jakieś zaplanowane spotkania? meeting_list()
system Najbliższe spotkanie to: Data: Piątek 02.04.2021 19:00 Miejsce: Brak Spotkanie z: Marek Opis: Spotkanie towarzyskie inform(meeting_list)
system Kolejne spotkanie to: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
user Chciałbym usunać drugie spotkanie. cancel_meeting()
system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC confirm-domain()
user Tak. Chciałbym je przesunąć na za tydzień negate() & update_meeting() & inform(date='za tydzień')
system Czas został zmieniony, czy to wszystkie edycje? affirm(update_meeting)
user Tak. Dziękuję za pomoc : ) bye() & thankyou()
1 Interlocutor Text Acts
2 user Cześć hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Czy mam jakieś zaplanowane spotkania? meeting_list()
5 system Najbliższe spotkanie to: Data: Piątek 02.04.2021 19:00 Miejsce: Brak Spotkanie z: Marek Opis: Spotkanie towarzyskie inform(meeting_list)
6 system Kolejne spotkanie to: Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
7 user Chciałbym usunać drugie spotkanie. cancel_meeting()
8 system Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? Data: Środa 31.03.2021 14:00-15:00 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC confirm-domain()
9 user Tak. Chciałbym je przesunąć na za tydzień negate() & update_meeting() & inform(date='za tydzień')
10 system Czas został zmieniony, czy to wszystkie edycje? affirm(update_meeting)
11 user Tak. Dziękuję za pomoc : ) bye() & thankyou()

15
data/dialog-09-14-01.tsv Normal file
View File

@ -0,0 +1,15 @@
Interlocutor Text Acts
user Cześć hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Proszę o dodanie spotkania biznesowego na dziś wieczór create_meeting(date='dziś')
system Proszę podać godzinę i długość spotkania. request(time, duration)
user na godzinę 19:00 i długość spotkania nieokreślona inform(time=19:00', duration='null')
system Czy mam zapisać miejsce spotkania? request(place)
user Tak, Cytadela Poznań inform(place='Cytadela Poznań')
system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
user tak osoba XXX YYY inform(participant='XXX YYY')
system Czy mam dodać opis do spotkania? request(description)
user Nie, to wszystko. Proszę podać podsumowanie negate()
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00- Miejsce: Cytadela Poznań Spotkanie z: XXX YYY confirm-domain()
user Tak wszystko się zgadza. Dziękuję za rozmowę confirm() & thankyou()
system Spotkanie zostało pomyślnie dodane do kalendarza. inform(create_meeting)
1 Interlocutor Text Acts
2 user Cześć hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Proszę o dodanie spotkania biznesowego na dziś wieczór create_meeting(date='dziś')
5 system Proszę podać godzinę i długość spotkania. request(time, duration)
6 user na godzinę 19:00 i długość spotkania nieokreślona inform(time=19:00', duration='null')
7 system Czy mam zapisać miejsce spotkania? request(place)
8 user Tak, Cytadela Poznań inform(place='Cytadela Poznań')
9 system Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie? request(participant)
10 user tak osoba XXX YYY inform(participant='XXX YYY')
11 system Czy mam dodać opis do spotkania? request(description)
12 user Nie, to wszystko. Proszę podać podsumowanie negate()
13 system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 19:00- Miejsce: Cytadela Poznań Spotkanie z: XXX YYY confirm-domain()
14 user Tak wszystko się zgadza. Dziękuję za rozmowę confirm() & thankyou()
15 system Spotkanie zostało pomyślnie dodane do kalendarza. inform(create_meeting)

8
data/dialog-10-01-01.tsv Normal file
View File

@ -0,0 +1,8 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user proszę o wyświetlenie jutrzejszego kalendarza meeting_list(date='jutrzejszego')
system Jutrzejsze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Wtorek 30.03.2021 18:00-19:30 Miejsce: Firma ABC Spotkanie z: Janusz Kowalski inform(meeting_list)
user Dodaj pozycję jutro na 16-17.30: Lunch z księgową w miejscu: Cafe Teria create_meeting(date='jutro', time='16', meeting_length='90 minut', description='Lunch z księgową', place='Cafe Teria')
system Spotkanie zostało dodane: Data: Wtorek 16:00-17:30 Miejsce: Cafe Teria Spotkanie z: księgowa Opis: lunch affirm(create_meeting)
user dziękuje to wszystko bye() & thankyou()
system Dziękuję. Do widzenia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user proszę o wyświetlenie jutrzejszego kalendarza meeting_list(date='jutrzejszego')
4 system Jutrzejsze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Wtorek 30.03.2021 18:00-19:30 Miejsce: Firma ABC Spotkanie z: Janusz Kowalski inform(meeting_list)
5 user Dodaj pozycję jutro na 16-17.30: Lunch z księgową w miejscu: Cafe Teria create_meeting(date='jutro', time='16', meeting_length='90 minut', description='Lunch z księgową', place='Cafe Teria')
6 system Spotkanie zostało dodane: Data: Wtorek 16:00-17:30 Miejsce: Cafe Teria Spotkanie z: księgowa Opis: lunch affirm(create_meeting)
7 user dziękuje to wszystko bye() & thankyou()
8 system Dziękuję. Do widzenia. bye()

18
data/dialog-10-03-01.tsv Normal file
View File

@ -0,0 +1,18 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Chciałbym zapisać spotkanie create_meeting()
system Proszę podać dzień, na jaki mam umówić spotkanie. request(date)
user 08.04.2021 inform(date='08.04.2021')
system Proszę o podanie godziny i czasu trwania spotkania. request(time) & request(meeting_length)
user 17:00 - 19:00 inform(time='17:00', meeting_length='2 godziny')
system Jakie będzie miejsce tego spotkania? request(place)
user Kawiarnia MCafe przy ulicy Grunwaldzkiej inform(place='Kawiarnia MCafe przy ulicy Grunwaldzkiej')
system Z jaką osobą będzie to spotkanie? request(participant)
user Sylwia Kowalska inform(participant='Sylwia Kowalska')
system Czy mam dodać opis do spotkania? request(description)
user tak confirm()
system Jaki ma być opis spotkania? request(description)
user Intensywne rozmowy o przyrodzie przy Yerbie inform(description='Intensywne rozmowy o przyrodzie przy Yerbie')
system Spotkanie zostało dodane: Data: Czwartek 08.04.2021 17:00-19:00 Miejsce: Kawiarnia MCafe przy ulicy Grunwaldzkiej Z: Sylwia Kowalska Opis: Intensywne rozmowy o przyrodzie przy Yerbie affirm()
user Ok, koniec zapisu bye()
system Do widzenia. Życzę miłego dnia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Chciałbym zapisać spotkanie create_meeting()
4 system Proszę podać dzień, na jaki mam umówić spotkanie. request(date)
5 user 08.04.2021 inform(date='08.04.2021')
6 system Proszę o podanie godziny i czasu trwania spotkania. request(time) & request(meeting_length)
7 user 17:00 - 19:00 inform(time='17:00', meeting_length='2 godziny')
8 system Jakie będzie miejsce tego spotkania? request(place)
9 user Kawiarnia MCafe przy ulicy Grunwaldzkiej inform(place='Kawiarnia MCafe przy ulicy Grunwaldzkiej')
10 system Z jaką osobą będzie to spotkanie? request(participant)
11 user Sylwia Kowalska inform(participant='Sylwia Kowalska')
12 system Czy mam dodać opis do spotkania? request(description)
13 user tak confirm()
14 system Jaki ma być opis spotkania? request(description)
15 user Intensywne rozmowy o przyrodzie przy Yerbie inform(description='Intensywne rozmowy o przyrodzie przy Yerbie')
16 system Spotkanie zostało dodane: Data: Czwartek 08.04.2021 17:00-19:00 Miejsce: Kawiarnia MCafe przy ulicy Grunwaldzkiej Z: Sylwia Kowalska Opis: Intensywne rozmowy o przyrodzie przy Yerbie affirm()
17 user Ok, koniec zapisu bye()
18 system Do widzenia. Życzę miłego dnia. bye()

19
data/dialog-10-05-01.tsv Normal file
View File

@ -0,0 +1,19 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Chciałbym sprawdzić moje spotkania w piątek meeting_list(date='piątek')
system Na piątek 02.04.2021 nie masz zaplanywanych żadnych spotkań. inform(meeting_list)
user proszę wpisać na 02.04.2021 o godzinie 19:00: Wyjście do kina ze znajomą create_meeting(date='02.04.2021', time='19:00', description='Wyjście do kina ze znajomą')
system Ile będzie trwało to spotkanie? request(meeting_length)
user 2 godziny inform(meeting_length='2 godziny')
system Spotkanie zostało dodane: Data: Piątek 02.04.2021 19:00-21:00 Miejsce: kino Z: znajoma Opis: wyjście do kina affirm(create_meeting)
user Pomyliłem się podczas podawania godziny. Chciałbym przełożyć to spotkanie na 20:00 do 22:00 update_meeting(time='20:00', meeting_length='2 godziny')
system Spotkanie zostało zmienione: Data: Piątek 02.04.2021 20:00-22:00 Miejsce: kino Z: znajoma Opis: wyjście do kina affirm(update_meeting)
user Dziękuję thankyou()
system Czy mogę jeszcze Ci w czymś pomóc? reqmore()
user ile będę miał dni bez zaplanowanych spotkań w przyszłym miesiącu free_days_count(time='przyszły miesiąc')
system Dni bez zaplanowanych spotkań w przyszłym miesiącu: 29 welcomemsg()
user Dziękuję za informację thankyou()
system Czy mogę jeszcze w czymś pomóc? reqmore()
user To wszystko. Dziękuję bye() & thankyou()
system Do widzenia, życzę miłego dnia. bye()
Can't render this file because it has a wrong number of fields in line 19.

17
data/dialog-10-07-01.tsv Normal file
View File

@ -0,0 +1,17 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Jakie mam nadchodzące wydarzenia w tym tygodniu? meeting_list(date='tym tygodniu')
system Wydarzenia w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
user Chciałabym przesunąć spotkanie z Jan Nowak na najbliższy wtorek update_meeting(participant='Jan Nowak', date='najbliższy wtorek')
system Na którą godzinę? request(time)
user Jakie mam godziny dostępne w najblizszy wtorek? free_time(date='najbliższy wtorek')
system Dostępne godziny w najbliższy wtorek: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
user na godzinę 9:30 inform(time='9:30')
system Które spotkanie z Jan Nowak chcesz przesunąć? Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list) & request(meeting)
user drugie inform(meeting='drugie')
system Spotkanie zostało zmienione: Data: Wtorek 30.03.2021 09:00-12:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
system Czy mogę jeszcze Ci w czymś pomóc? reqmore()
user Chciałabym wyświetlić swoją listę kontaktów request(contact_list)
system Niestety asystent kalendarza spotkań nie obsługuje obecnie listy kontaktów. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
user W takim razie to wszystko bye()
system Dziękuję. Życzę miłego dnia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Jakie mam nadchodzące wydarzenia w tym tygodniu? meeting_list(date='tym tygodniu')
4 system Wydarzenia w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
5 user Chciałabym przesunąć spotkanie z Jan Nowak na najbliższy wtorek update_meeting(participant='Jan Nowak', date='najbliższy wtorek')
6 system Na którą godzinę? request(time)
7 user Jakie mam godziny dostępne w najblizszy wtorek? free_time(date='najbliższy wtorek')
8 system Dostępne godziny w najbliższy wtorek: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
9 user na godzinę 9:30 inform(time='9:30')
10 system Które spotkanie z Jan Nowak chcesz przesunąć? Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list) & request(meeting)
11 user drugie inform(meeting='drugie')
12 system Spotkanie zostało zmienione: Data: Wtorek 30.03.2021 09:00-12:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
13 system Czy mogę jeszcze Ci w czymś pomóc? reqmore()
14 user Chciałabym wyświetlić swoją listę kontaktów request(contact_list)
15 system Niestety asystent kalendarza spotkań nie obsługuje obecnie listy kontaktów. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
16 user W takim razie to wszystko bye()
17 system Dziękuję. Życzę miłego dnia. bye()

28
data/dialog-10-09-01.tsv Normal file
View File

@ -0,0 +1,28 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Jakie mam spotkania 31 marca? meeting_list(date='31 marca')
system Nie masz żadnych spotkań 31 marca. Czy chciałbyś umówić spotkanie na ten dzień? inform(meeting_list)
user Nie. A jakie spotkania mam jutro? meeting_list(date='jutro')
system Na jutro masz zaplanowane następujące spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
user Chciałbym odwołać to spotkanie cancel_meeting()
system Czy jesteś pewien, że chcesz odwołać to spotkanie? confirm-domain()
user Tak confirm()
system Spotkanie zostało odwołane. Czy mogę w czymś jeszcze pomóc? affirm(cancel_meeting) & reqmore()
user Chciałbym zaplanować nowe spotkanie na miejsce tego odwołanego create_meeting()
system Gdzie będzie to spotkanie? request(place)
user bez miejsca negate()
system Z kim będzie to spotkanie? request(participant)
user Jan Kowalski inform(participant='Jan Kowalski')
system Spotkanie zostało dodane do kalendarza: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski affirm(create_meeting)
user Chciałbym jeszcze dodać nową osobę do tego spotkania update_meeting()
system Kogo dodać do tego spotkania? request(participant)
user Jan Nowak inform(participant='Jan Nowak')
system Uczestnik spotkania został dodany: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak affirm(update_meeting)
user A jakie mam wolne terminy jutro? free_time(date='jutro')
system Dostępne terminy jutro: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
user Kiedy mam spotkanie z Janem Nowakiem? meeting_list(participant='Jan Nowak')
system Spotkania z Janem Nowakiem: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak inform(meeting_list)
user Chciałbym usunąć Jana Kowalskiego z tego spotkania update_meeting(participant='Jan Kowalski')
system Jan Kowalski został usunięty ze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Nowak affirm(update_meeting)
user To by było wszystko na teraz bye()
system Do widzenia. Życzę miłego dnia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Jakie mam spotkania 31 marca? meeting_list(date='31 marca')
4 system Nie masz żadnych spotkań 31 marca. Czy chciałbyś umówić spotkanie na ten dzień? inform(meeting_list)
5 user Nie. A jakie spotkania mam jutro? meeting_list(date='jutro')
6 system Na jutro masz zaplanowane następujące spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC inform(meeting_list)
7 user Chciałbym odwołać to spotkanie cancel_meeting()
8 system Czy jesteś pewien, że chcesz odwołać to spotkanie? confirm-domain()
9 user Tak confirm()
10 system Spotkanie zostało odwołane. Czy mogę w czymś jeszcze pomóc? affirm(cancel_meeting) & reqmore()
11 user Chciałbym zaplanować nowe spotkanie na miejsce tego odwołanego create_meeting()
12 system Gdzie będzie to spotkanie? request(place)
13 user bez miejsca negate()
14 system Z kim będzie to spotkanie? request(participant)
15 user Jan Kowalski inform(participant='Jan Kowalski')
16 system Spotkanie zostało dodane do kalendarza: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski affirm(create_meeting)
17 user Chciałbym jeszcze dodać nową osobę do tego spotkania update_meeting()
18 system Kogo dodać do tego spotkania? request(participant)
19 user Jan Nowak inform(participant='Jan Nowak')
20 system Uczestnik spotkania został dodany: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak affirm(update_meeting)
21 user A jakie mam wolne terminy jutro? free_time(date='jutro')
22 system Dostępne terminy jutro: 00:00-10:00 12:00-14:00 15:30-24:00 inform(free_time)
23 user Kiedy mam spotkanie z Janem Nowakiem? meeting_list(participant='Jan Nowak')
24 system Spotkania z Janem Nowakiem: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Kowalski i Jan Nowak inform(meeting_list)
25 user Chciałbym usunąć Jana Kowalskiego z tego spotkania update_meeting(participant='Jan Kowalski')
26 system Jan Kowalski został usunięty ze spotkania: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: brak Z: Jan Nowak affirm(update_meeting)
27 user To by było wszystko na teraz bye()
28 system Do widzenia. Życzę miłego dnia. bye()

14
data/dialog-10-11-01.tsv Normal file
View File

@ -0,0 +1,14 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Chciałbym przesunąć spotkanie update_meeting()
system Jakie spotkanie chcesz przesunąć? request(meeting)
user Dzisiejsze o godzinie 20:00 inform(date='Dzisiejsze', time='20:00')
system Na kiedy chcesz przesunąć to spotkanie? Data: Poniedziałek 29.03.2021 20:00-20:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC request(time)
user na środę o godzinie 19:00, proszę też zmienić miejsce na Restauracja ABC update_meeting(time='19:00', place='Restauracja ABC')
system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
user proszę też zmienić czas trwania na 1 godzinę update_meeting()
system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
user Dziękuje thankyou()
system Czy mogę jeszcze w czymś pomóc? reqmore()
user To wszystko bye()
system Do widzenia. Życzę miłego dnia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Chciałbym przesunąć spotkanie update_meeting()
4 system Jakie spotkanie chcesz przesunąć? request(meeting)
5 user Dzisiejsze o godzinie 20:00 inform(date='Dzisiejsze', time='20:00')
6 system Na kiedy chcesz przesunąć to spotkanie? Data: Poniedziałek 29.03.2021 20:00-20:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC request(time)
7 user na środę o godzinie 19:00, proszę też zmienić miejsce na Restauracja ABC update_meeting(time='19:00', place='Restauracja ABC')
8 system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
9 user proszę też zmienić czas trwania na 1 godzinę update_meeting()
10 system Spotkanie zostało zmienione: Data: Środa 31.03.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Jan Nowak - Prezes firmy ABC affirm(update_meeting)
11 user Dziękuje thankyou()
12 system Czy mogę jeszcze w czymś pomóc? reqmore()
13 user To wszystko bye()
14 system Do widzenia. Życzę miłego dnia. bye()

12
data/dialog-10-13-01.tsv Normal file
View File

@ -0,0 +1,12 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Proszę o rozpiskę spotkań w tym tygodniu. meeting_list(date='tym tygodniu')
system Spotkania w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ inform(meeting_list)
user Chciałabym odwołać spotkanie cancel_meeting()
system Jakie spotkanie chcesz odwołać? request(meeting)
user Spotkanie z Januszem Kowalskim. inform(participant='Januszem Kowalskim')
system Czy na pewno odwołać spotkanie? Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ confirm-domain()
user Tak confirm()
system Spotkanie zostało odwołane. Czy mogę jeszcze Ci w czymś pomóc? affirm(cancel_meeting) & reqmore()
user Nie, dziękuję. negate() & thankyou()
system Dziękuję. Do widzenia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Proszę o rozpiskę spotkań w tym tygodniu. meeting_list(date='tym tygodniu')
4 system Spotkania w tym tygodniu: Data: Wtorek 30.03.2021 14:00-15:30 Miejsce: Sala konferencyjna w biurze Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Czwartek 01.04.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Jan Nowak - Prezes firmy ABC --- Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ inform(meeting_list)
5 user Chciałabym odwołać spotkanie cancel_meeting()
6 system Jakie spotkanie chcesz odwołać? request(meeting)
7 user Spotkanie z Januszem Kowalskim. inform(participant='Januszem Kowalskim')
8 system Czy na pewno odwołać spotkanie? Data: Piątek 02.04.2021 19:00-20:00 Miejsce: Restauracja ABC Spotkanie z: Janusz Kowalski - Prezes firmy XYZ confirm-domain()
9 user Tak confirm()
10 system Spotkanie zostało odwołane. Czy mogę jeszcze Ci w czymś pomóc? affirm(cancel_meeting) & reqmore()
11 user Nie, dziękuję. negate() & thankyou()
12 system Dziękuję. Do widzenia. bye()

13
data/dialog-10-15-01.tsv Normal file
View File

@ -0,0 +1,13 @@
Interlocutor Text Acts
system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
user Jakie wolne terminy mam w najbliższym tygodniu? free_time(date='najbliższym tygodniu')
system Wolne terminy w nadchodzącym tygodniu: 30.03.2021 00:00-24:00 31.03.2021 00:00-24:00 01.04.2021 00:00-24:00 02.04.2021 00:00-08:00 10:00-12:00 16:00-24:00 03.04.2021 00:00-24:00 04.04.2021 00:00-10:00 14:00-24:00 05.04.2021 00:00-24:00 inform(free_time)
user Ooo, ale ja się obijam. Nie mam ustalonych żadnych spotkań! null()
user zapisz mi proszę spotkanie z 3 marca od 17-19, mam wizytę u lekarza create_meeting(date='3 marca', time='17', description='wizytę u lekarza')
system W jakim miejscu odbędzie się to spotkanie? request(place)
user w przychodni przy ulicy dialogowej inform(place='przychodni przy ulicy dialogowej')
user Czy możesz dodać notatkę, żebym pamiętała o poprzednich wynikach? request(create_note)
system Spotkanie zostało dodane: Data: Sobota 03.03.2022 17:00-19:00 Miejsce: Przychodnia przy ulicy dialogowej Spotkanie z: brak Opis: wizyta u lekarza affirm(create_meeting)
system Niestety asystent kalendarza spotkań nie obsługuje obecnie dodawania notatek. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
user Dobrze. dziękuję. To wszystko thankyou() & bye()
system Miłego dnia. Do widzenia. bye()
1 Interlocutor Text Acts
2 system Witam w prywatnym asystencie kalendarza spotkań. W czym mogę pomóc? welcomemsg()
3 user Jakie wolne terminy mam w najbliższym tygodniu? free_time(date='najbliższym tygodniu')
4 system Wolne terminy w nadchodzącym tygodniu: 30.03.2021 00:00-24:00 31.03.2021 00:00-24:00 01.04.2021 00:00-24:00 02.04.2021 00:00-08:00 10:00-12:00 16:00-24:00 03.04.2021 00:00-24:00 04.04.2021 00:00-10:00 14:00-24:00 05.04.2021 00:00-24:00 inform(free_time)
5 user Ooo, ale ja się obijam. Nie mam ustalonych żadnych spotkań! null()
6 user zapisz mi proszę spotkanie z 3 marca od 17-19, mam wizytę u lekarza create_meeting(date='3 marca', time='17', description='wizytę u lekarza')
7 system W jakim miejscu odbędzie się to spotkanie? request(place)
8 user w przychodni przy ulicy dialogowej inform(place='przychodni przy ulicy dialogowej')
9 user Czy możesz dodać notatkę, żebym pamiętała o poprzednich wynikach? request(create_note)
10 system Spotkanie zostało dodane: Data: Sobota 03.03.2022 17:00-19:00 Miejsce: Przychodnia przy ulicy dialogowej Spotkanie z: brak Opis: wizyta u lekarza affirm(create_meeting)
11 system Niestety asystent kalendarza spotkań nie obsługuje obecnie dodawania notatek. Weźmiemy pod uwagę twoje uwagi przy dalszym jego rozwoju. canthelp()
12 user Dobrze. dziękuję. To wszystko thankyou() & bye()
13 system Miłego dnia. Do widzenia. bye()

11
data/dialog-11-04-01.tsv Normal file
View File

@ -0,0 +1,11 @@
Interlocutor Text Acts
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Proszę stworzyć w moim kalendarzu spotkanie online 24.04.2021 o godzinie 17.00. create_meeting(date='24.04.2021', time='17:00')
system Czy chcesz dodać uczestników spotkania? request(participant)
user Tak, proszę zaprosić Jan Nowak, Grażyna Kowalska i Hubert Noga. confirm() & inform(participant='Jan Nowak',participant='Grażyna Kowalska',participant='Hubert Noga')
system Proszę potwierdzić utworzenie spotkania: Data: Sobota 24.04.2021 17:00 Miejsce: spotkanie online Spotkanie z: Jan Nowak, Grażyna Kowalska, Hubert Noga confirm-domain()
user Proszę dodać opis "Omówienie projektu XYZ" oraz dodać powiadomienie 30 min przed spotkaniem. inform(description='Omówienie projektu XYZ')
system Proszę potwierdzić utworzenie spotkania: Data: Sobota 24.04.2021 17:00 Miejsce: spotkanie online Spotkanie z: Jan Nowak, Grażyna Kowalska, Hubert Noga Opis: Omówienie projektu XYZ Przypomnienie: 30 min confirm-domain()
user Tak, potwierdzam, dziękuję. confirm() & thankyou()
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
user Nie, dziękuję. To wszystko. thankyou() & bye()
Can't render this file because it contains an unexpected character in line 7 and column 26.

15
data/dialog-11-06-01.tsv Normal file
View File

@ -0,0 +1,15 @@
Interlocutor Text Acts
user Dzień dobry hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
user Chciałbym odwołać spotkanie i wjego miejsce wpisać nowe cancel_meeting() & create_meeting()
system Jakie spotkanie chcesz odwołać? request(meeting)
user Spotkanie z Adam Nowak inform(participant='Adam Nowak')
system Spotkanie zostało odwołane. Proszę podać szczegóły nowego spotkania. affirm(cancel_meeting) & request(meeting)
user Spotkanie z Jan Kowalski inform(participant='Jan Kowalski')
user Restauracja xyz inform(place='Restauracja xyz')
system Proszę potwierdzić utworzenie spotkania: Data: Środa 31.03.2021 12:00-15:30 Miejsce: Restauracja xyz Spotkanie z: Jan Kowalski confirm-domain()
user Potwierdzam confirm()
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) & reqmore()
user To wszystko, dziękuję bye() & thankyou()
1 Interlocutor Text Acts
2 user Dzień dobry hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu meeting_list(date='najblizszym tygodniu')
5 system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
6 user Chciałbym odwołać spotkanie i wjego miejsce wpisać nowe cancel_meeting() & create_meeting()
7 system Jakie spotkanie chcesz odwołać? request(meeting)
8 user Spotkanie z Adam Nowak inform(participant='Adam Nowak')
9 system Spotkanie zostało odwołane. Proszę podać szczegóły nowego spotkania. affirm(cancel_meeting) & request(meeting)
10 user Spotkanie z Jan Kowalski inform(participant='Jan Kowalski')
11 user Restauracja xyz inform(place='Restauracja xyz')
12 system Proszę potwierdzić utworzenie spotkania: Data: Środa 31.03.2021 12:00-15:30 Miejsce: Restauracja xyz Spotkanie z: Jan Kowalski confirm-domain()
13 user Potwierdzam confirm()
14 system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) & reqmore()
15 user To wszystko, dziękuję bye() & thankyou()

22
data/dialog-11-08-01.tsv Normal file
View File

@ -0,0 +1,22 @@
Interlocutor Text Acts
user Dzień dobry, chciałbym sprawdzić dzisiejsze spotkania hello() & meeting_list(date='dzisiaj')
system Data: Wtorek 30.03.2021 12:00-15:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
user Chciałbym przełożyć spotkanie z 12:00 update_meeting(date='dzisiaj', time=12:00)
system Na jaki dzień chciałbyś przełożyć to spotkanie? request(date)
user Na środę na 13:00 inform(date='środa', time='13:00')
system Proszę potwierdzić zmianę spotkania: Data: Środa 31.03.2021 13:00-16:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
user Potwierdzam. confirm()
system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
user Tak, chciałbym umówić nowe spotkanie create_meeting()
system Na jaki dzień chciałbyś umówić nowe spotkanie? request(date)
user Na wtorek inform(date='wtorek')
system Proszę podać godzinę spotkania. request(time)
user 12:45 inform(time='12:45')
system Czy chcesz podać miejsce spotkania? request(place)
user tak, gabinet dentystyczny SuperDent inform(place='gabinet dentystyczny SuperDent')
system Czy chciałbyś dodać uczestników spotkania? request(participant)
user tak, doktor Krzysztof Ząb inform(participant='Krzysztof Ząb')
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 12:45-13:45 Miejsce: gabinet dentystyczny SuperDent Spotkanie z: doktor Krzysztof Ząb confirm-domain()
user Zatwierdzam confirm()
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
user To będzie wszystko bye()
1 Interlocutor Text Acts
2 user Dzień dobry, chciałbym sprawdzić dzisiejsze spotkania hello() & meeting_list(date='dzisiaj')
3 system Data: Wtorek 30.03.2021 12:00-15:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
4 user Chciałbym przełożyć spotkanie z 12:00 update_meeting(date='dzisiaj', time=12:00)
5 system Na jaki dzień chciałbyś przełożyć to spotkanie? request(date)
6 user Na środę na 13:00 inform(date='środa', time='13:00')
7 system Proszę potwierdzić zmianę spotkania: Data: Środa 31.03.2021 13:00-16:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski confirm-domain()
8 user Potwierdzam. confirm()
9 system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
10 user Tak, chciałbym umówić nowe spotkanie create_meeting()
11 system Na jaki dzień chciałbyś umówić nowe spotkanie? request(date)
12 user Na wtorek inform(date='wtorek')
13 system Proszę podać godzinę spotkania. request(time)
14 user 12:45 inform(time='12:45')
15 system Czy chcesz podać miejsce spotkania? request(place)
16 user tak, gabinet dentystyczny SuperDent inform(place='gabinet dentystyczny SuperDent')
17 system Czy chciałbyś dodać uczestników spotkania? request(participant)
18 user tak, doktor Krzysztof Ząb inform(participant='Krzysztof Ząb')
19 system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 12:45-13:45 Miejsce: gabinet dentystyczny SuperDent Spotkanie z: doktor Krzysztof Ząb confirm-domain()
20 user Zatwierdzam confirm()
21 system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
22 user To będzie wszystko bye()

13
data/dialog-11-10-01.tsv Normal file
View File

@ -0,0 +1,13 @@
Interlocutor Text Acts
user Cześć hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Proszę dodać spotkanie na dziś na godzinę 9 w parku Cytadela create_meeting(date='dziś',time='9',place='park Cytadela')
system Czy chcesz podać czas trwania spotkania? request(duration)
user Nie, proszę dopisać opis: Opis ..... negate() & inform(description='Opis')
system Czy chcesz dodać z kim ma być spotkanie? request(participant)
user Nie negate()
system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 09:00 Miejsce: Cytadela Opis: Opis ..... confirm-domain()
user Tak confirm()
user zgadza się confirm()
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
user Nie, dziękuję za rozmowę bye() & thankyou()
1 Interlocutor Text Acts
2 user Cześć hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Proszę dodać spotkanie na dziś na godzinę 9 w parku Cytadela create_meeting(date='dziś',time='9',place='park Cytadela')
5 system Czy chcesz podać czas trwania spotkania? request(duration)
6 user Nie, proszę dopisać opis: Opis ..... negate() & inform(description='Opis')
7 system Czy chcesz dodać z kim ma być spotkanie? request(participant)
8 user Nie negate()
9 system Proszę potwierdzić utworzenie spotkania: Data: Wtorek 30.03.2021 09:00 Miejsce: Cytadela Opis: Opis ..... confirm-domain()
10 user Tak confirm()
11 user zgadza się confirm()
12 system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
13 user Nie, dziękuję za rozmowę bye() & thankyou()

10
data/dialog-11-12-01.tsv Normal file
View File

@ -0,0 +1,10 @@
Interlocutor Text Acts
user Witam. hello()
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Czy mam obecnie jakieś zaplanowane spotkania? meeting_list()
system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
user Chciałbym przesunąć pierwsze spotkanie na za tydzień. update_meeting()
system Proszę potwierdzić zmianę spotkania:\nData: Wtorek 06.04.2021 19:00-20:30\nMiejsce: Restauracja ABC\nSpotkanie z: Jan Kowalski confirm-domain()
user Potwierdzam confirm()
system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
user Nie, dziękuję za pomoc - to wszystko : ). bye() & thankyou()
1 Interlocutor Text Acts
2 user Witam. hello()
3 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
4 user Czy mam obecnie jakieś zaplanowane spotkania? meeting_list()
5 system Data: Wtorek 30.03.2021 19:00-20:30 Miejsce: Restauracja ABC Spotkanie z: Jan Kowalski --- Data: Środa 31.03.2021 12:00-15:30 Miejsce: Firma ABC Spotkanie z: Adam Nowak inform(meeting_list)
6 user Chciałbym przesunąć pierwsze spotkanie na za tydzień. update_meeting()
7 system Proszę potwierdzić zmianę spotkania:\nData: Wtorek 06.04.2021 19:00-20:30\nMiejsce: Restauracja ABC\nSpotkanie z: Jan Kowalski confirm-domain()
8 user Potwierdzam confirm()
9 system Spotkanie zostało zmienione. Czy mogę pomóc w czymś jeszcze? affirm(update_meeting) && reqmore()
10 user Nie, dziękuję za pomoc - to wszystko : ). bye() & thankyou()

13
data/dialog-11-14-01.tsv Normal file
View File

@ -0,0 +1,13 @@
Interlocutor Text Acts
system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
user Jakie spotkania mam zaplanowane w najbliższy czwartek? meeting_list(date='najbliższy czwartek')
system Brak zaplanowanych spotkań na dzień 01.04.2021 inform(meeting_list)
user To chciałbym zaplanować spotkanie tego dnia o godzinie 17. create_meeting(date='tego dnia', time='17')
system Czy mam zapisać miejsce spotkania? request(place)
user Tak, Centrum Handlowe ABC inform(place='Centrum Handlowe ABC')
system Czy mam z zapisać z kim ma być spotkanie? request(participant)
user Tak, spotkanie będzie z Januszem Kowalskim inform(participant='Januszem Kowalskim')
system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 01.01.2021 17:00-18:00 Miejsce: Centrum Handlowe ABC Spotkanie z: Janusz Kowalski confirm-domain()
user Potwierdzam confirm()
system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
user Dziękuję, to wszystko. bye() & thankyou()
1 Interlocutor Text Acts
2 system Witam w twoim prywatnym asystencie kalendarza spotkań. welcomemsg()
3 user Jakie spotkania mam zaplanowane w najbliższy czwartek? meeting_list(date='najbliższy czwartek')
4 system Brak zaplanowanych spotkań na dzień 01.04.2021 inform(meeting_list)
5 user To chciałbym zaplanować spotkanie tego dnia o godzinie 17. create_meeting(date='tego dnia', time='17')
6 system Czy mam zapisać miejsce spotkania? request(place)
7 user Tak, Centrum Handlowe ABC inform(place='Centrum Handlowe ABC')
8 system Czy mam z zapisać z kim ma być spotkanie? request(participant)
9 user Tak, spotkanie będzie z Januszem Kowalskim inform(participant='Januszem Kowalskim')
10 system Proszę potwierdzić utworzenie spotkania: Data: Czwartek 01.01.2021 17:00-18:00 Miejsce: Centrum Handlowe ABC Spotkanie z: Janusz Kowalski confirm-domain()
11 user Potwierdzam confirm()
12 system Spotkanie zostało dodane do kalendarza. Czy mogę pomóc w czymś jeszcze? affirm(create_meeting) && reqmore()
13 user Dziękuję, to wszystko. bye() & thankyou()

931
data/train.conllu Normal file
View File

@ -0,0 +1,931 @@
# text: dzień dobry
# intent: hello
# slots:
1 dzień hello NoLabel
2 dobry hello NoLabel
# text: dobry wieczór
# intent: hello
# slots:
1 dobry hello NoLabel
2 wieczór hello NoLabel
# text: witam
# intent: hello
# slots:
1 witam hello NoLabel
# text: siema
# intent: hello
# slots:
1 siema hello NoLabel
# text: cześć
# intent: hello
# slots:
1 cześć hello NoLabel
# text: cześć elo
# intent: hello
# slots:
1 cześć hello NoLabel
2 elo hello NoLabel
# text: do widzenia
# intent: bye
# slots:
1 do bye NoLabel
2 widzenia bye NoLabel
# text: miłego dnia
# intent: bye
# slots:
1 miłego bye NoLabel
2 dnia bye NoLabel
# text: to będzie wszystko
# intent: bye
# slots:
1 to bye NoLabel
2 będzie bye NoLabel
3 wszystko bye NoLabel
# text: koniec zapisu
# intent: bye
# slots:
1 koniec bye NoLabel
2 zapisu bye NoLabel
# text: w takim razie to wszystko
# intent: bye
# slots:
1 w bye NoLabel
2 takim bye NoLabel
3 razie bye NoLabel
4 to bye NoLabel
5 wszystko bye NoLabel
# text: potwierdzam
# intent: confirm
# slots:
1 potwierdzam confirm NoLabel
# text: ok może być
# intent: confirm
# slots:
1 ok confirm NoLabel
2 może confirm NoLabel
3 być confirm NoLabel
# text: akceptuję
# intent: confirm
# slots:
1 akceptuję confirm NoLabel
# text: tak
# intent: confirm
# slots:
1 tak confirm NoLabel
# text: zgadza się
# intent: confirm
# slots:
1 zgadza confirm NoLabel
2 się confirm NoLabel
# text: zatwierdzam
# intent: confirm
# slots:
1 zgadza confirm NoLabel
2 się confirm NoLabel
# text: nie
# intent: negate
# slots:
1 nie negate NoLabel
# text: nie usuwaj tego spotkania
# intent: negate
# slots:
1 nie negate NoLabel
2 usuwaj negate NoLabel
3 tego negate NoLabel
4 spotkania negate NoLabel
# text: jednak nie zmieniaj tego spotkania
# intent: negate
# slots:
1 jednak negate NoLabel
2 nie negate NoLabel
3 zmieniaj negate NoLabel
4 tego negate NoLabel
5 spotkania negate NoLabel
# text: bez
# intent: negate
# slots:
1 bez negate NoLabel
# text: zaprzeczam
# intent: negate
# slots:
1 zaprzeczam negate NoLabel
# text: bardzo dziękuję
# intent: thankyou
# slots:
1 bardzo thankyou NoLabel
2 dziękuję thankyou NoLabel
# text: dziękuję
# intent: thankyou
# slots:
1 dziękuję thankyou NoLabel
# text: dziękuję za informację
# intent: thankyou
# slots:
1 dziękuję thankyou NoLabel
# text: 05.04.2021
# intent: inform/date
# slots:
1 05.04.2021 inform/date B-date
# text: 01.11.2023
# intent: inform/date
# slots:
1 01.11.2023 inform/date B-date
# text: 11 grudnia
# intent: inform/date
# slots:
1 11 inform/date B-date
2 grudnia inform/date I-date
# text: 28 lutego
# intent: inform/date
# slots:
1 28 inform/date B-date
2 lutego inform/date I-date
# text: 25 września 2022
# intent: inform/date
# slots:
1 25 inform/date B-date
2 września inform/date I-date
3 2022 inform/date I-date
# text: spotkanie odbędzie się 3 maja
# intent: inform/date
# slots:
1 spotkanie inform/date NoLabel
2 odbędzie inform/date NoLabel
3 się inform/date NoLabel
4 3 inform/date B-date
5 maja inform/date I-date
# text: spotkanie odbędzie się 4 marca 2023
# intent: inform/date
# slots:
1 spotkanie inform/date NoLabel
2 odbędzie inform/date NoLabel
3 się inform/date NoLabel
4 4 inform/date B-date
5 marca inform/date I-date
6 2023 inform/date I-date
# text: spotkanie w piątek
# intent: inform/date
# slots:
1 spotkanie inform/date NoLabel
2 w inform/date NoLabel
3 piątek inform/date B-date
# text: pierwszy kwietnia
# intent: inform/date
# slots:
1 pierwszy inform/date B-date
2 kwietnia inform/date I-date
# text: jutro
# intent: inform/date
# slots:
1 jutro inform/date B-date
# text: pojutrze
# intent: inform/date
# slots:
1 pojutrze inform/date B-date
# text: czwartek
# intent: inform/date
# slots:
1 czwartek inform/date B-date
# text: wtorek
# intent: inform/date
# slots:
1 wtorek inform/date B-date
# text: data to 11.11.2011
# intent: inform/date
# slots:
1 data inform/date NoLabel
2 to inform/date NoLabel
3 11.11.2011 inform/date B-date
# text: spotkanie odbędzie się pojutrze
# intent: inform/date
# slots:
1 spotkanie inform/date NoLabel
2 odbędzie inform/date NoLabel
3 się inform/date NoLabel
4 pojutrze inform/date B-date
# text: spotkanie będzie w środę
# intent: inform/date
# slots:
1 spotkanie inform/date NoLabel
2 będzie inform/date NoLabel
3 w inform/date NoLabel
4 środę inform/date B-date
# text: ustaw datę tego spotkania na najbliższy poniedziałek
# intent: inform/date
# slots:
1 ustaw inform/date NoLabel
2 datę inform/date NoLabel
3 tego inform/date NoLabel
4 spotkania inform/date NoLabel
5 na inform/date NoLabel
6 najbliższy inform/date B-date
7 poniedziałek inform/date I-date
# text: spotkanie będzie o godzinie 19:30
# intent: inform/time
# slots:
1 spotkanie inform/time NoLabel
2 będzie inform/time NoLabel
3 o inform/time NoLabel
4 godzinie inform/time NoLabel
5 19:30 inform/time B-time
# text: spotkanie zacznie się o godzinie 21
# intent: inform/time
# slots:
1 spotkanie inform/time NoLabel
2 zacznie inform/time NoLabel
3 się inform/time NoLabel
4 o inform/time NoLabel
5 godzinie inform/time NoLabel
6 21 inform/time B-time
# text: spotkanie będzie o 11
# intent: inform/time
# slots:
1 spotkanie inform/time NoLabel
2 będzie inform/time NoLabel
3 o inform/time NoLabel
4 11 inform/time B-time
# text: 12:30
# intent: inform/time
# slots:
1 12:30 inform/time B-time
# text: godzina 18:30
# intent: inform/time
# slots:
1 godzina inform/time NoLabel
2 18:30 inform/time B-time
# text: spotkanie rozpocznie się o 12:00
# intent: inform/time
# slots:
1 spotkanie inform/time NoLabel
2 rozpocznie inform/time NoLabel
3 się inform/time NoLabel
4 o inform/time NoLabel
5 12:00 inform/time B-time
# text: godzina tego spotkania to 7:00
# intent: inform/time
# slots:
1 godzina inform/time NoLabel
2 tego inform/time NoLabel
3 spotkania inform/time NoLabel
4 to inform/time NoLabel
5 7:00 inform/time B-time
# text: Restauracja ABC
# intent: inform/place
# slots:
1 Restauracja inform/place B-place
2 ABC inform/place I-place
# text: Kawiarnia MCafe przy ulicy Grunwaldzkiej
# intent: inform/place
# slots:
1 Kawiarnia inform/place B-place
2 MCafe inform/place I-place
3 przy inform/place I-place
4 ulicy inform/place I-place
5 Grunwaldzkiej inform/place I-place
# text: Restauracja w hotelu Anderisa
# intent: inform/place
# slots:
1 Restauracja inform/place B-place
2 w inform/place I-place
3 hotelu inform/place I-place
4 Anderisa inform/place I-place
# text: Miejsce spotkania to Kawiarnia JKL
# intent: inform/place
# slots:
1 Miejsce inform/place NoLabel
2 spotkania inform/place NoLabel
3 to inform/place NoLabel
4 Kawiarnia inform/place B-place
5 JKL inform/place I-place
# text: Cytadela Poznań
# intent: inform/place
# slots:
1 Cytadela inform/place B-place
2 Poznań inform/place I-place
# text: spotkanie będzie w Jeżyckich Ogrodach
# intent: inform/place
# slots:
1 spotkanie inform/place NoLabel
2 będzie inform/place NoLabel
3 w inform/place NoLabel
4 Jeżyckich inform/place B-place
5 Ogrodach inform/place I-place
# text: gabinet dentystyczny SuperDent
# intent: inform/place
# slots:
1 gabinet inform/place B-place
2 dentystyczny inform/place I-place
3 SuperDent inform/place I-place
# text: proszę dodać restaurację Bankcook w Poznaniu jako miejsce spotkania
# intent: inform/place
# slots:
1 proszę inform/place NoLabel
2 dodać inform/place NoLabel
3 restaurację inform/place B-place
4 Bankcook inform/place I-place
5 w inform/place I-place
6 Poznaniu inform/place I-place
7 jako inform/place NoLabel
8 miejsce inform/place NoLabel
9 spotkania inform/place NoLabel
# text: w przychodni przy ulicy dialogowej
# intent: inform/place
# slots:
1 w inform/place NoLabel
2 przychodni inform/place B-place
3 przy inform/place I-place
4 ulicy inform/place I-place
5 dialogowej inform/place I-place
# text: Jan Kowalski
# intent: inform/participant
# slots:
1 Jan inform/participant B-participant
2 Kowalski inform/participant I-participant
# text: proszę dodać Jan Nowak do spotkania
# intent: inform/participant
# slots:
1 proszę inform/participant NoLabel
2 dodać inform/participant NoLabel
3 Jan inform/participant B-participant
4 Nowak inform/participant I-participant
5 do inform/participant NoLabel
6 spotkania inform/participant NoLabel
# text: Hanna Kowalska
# intent: inform/participant
# slots:
1 Hanna inform/participant B-participant
2 Kowalska inform/participant I-participant
# text: tak doktor Krzysztof Ząb
# intent: inform/participant
# slots:
1 tak inform/participant NoLabel
2 doktor inform/participant NoLabel
3 Krzysztof inform/participant B-participant
4 Ząb inform/participant I-participant
# text: Spotkanie będzie z Janem Nowakiem
# intent: inform/participant
# slots:
1 Spotkanie inform/participant NoLabel
2 będzie inform/participant NoLabel
3 z inform/participant NoLabel
4 Janem inform/participant B-participant
5 Nowakiem inform/participant I-participant
# text: proszę zaprosić Jan Nowak Grażyna Kowalska i Hubert Noga
# intent: inform/participant
# slots:
1 proszę inform/participant NoLabel
2 zaprosić inform/participant NoLabel
3 Jan inform/participant B-participant
4 Nowak inform/participant I-participant
5 Grażyna inform/participant B-participant
6 Kowalska inform/participant I-participant
7 i inform/participant NoLabel
8 Hubert inform/participant B-participant
9 Noga inform/participant I-participant
# text: spotkanie będzie z Cezarym Pazurą oraz Janem Fryczem
# intent: inform/participant
# slots:
1 spotkanie inform/participant NoLabel
2 będzie inform/participant NoLabel
3 z inform/participant B-participant
4 Cezarym inform/participant B-participant
5 Pazurą inform/participant I-participant
6 oraz inform/participant NoLabel
7 Janem inform/participant B-participant
8 Fryczem inform/participant I-participant
# text: Marian Paździoch i Ferdynand Kiepski
# intent: inform/participant
# slots:
1 Marian inform/participant B-participant
2 Paździoch inform/participant I-participant
3 i inform/participant NoLabel
4 Ferdynand inform/participant B-participant
5 Kiepski inform/participant I-participant
# text: Spotkanie rekreacyjne
# intent: inform/description
# slots:
1 Spotkanie inform/description B-description
2 rekreacyjne inform/description I-description
# text: opis to Omówienie zakupu akcji firmy GameStop
# intent: inform/description
# slots:
1 opis inform/description NoLabel
2 to inform/description NoLabel
3 Omówienie inform/description B-description
4 zakupu inform/description I-description
5 akcji inform/description I-description
6 firmy inform/description I-description
7 GameStop inform/description I-description
# text: proszę dodać opis Omówienie projektu XYZ
# intent: inform/description
# slots:
1 proszę inform/description NoLabel
2 dodać inform/description NoLabel
3 opis inform/description NoLabel
4 Omówienie inform/description B-description
5 projektu inform/description I-description
6 XYZ inform/description I-description
# text: nowoczesna impreza w remizie
# intent: inform/description
# slots:
1 nowoczesna inform/description B-description
2 impreza inform/description I-description
3 w inform/description I-description
4 remizie inform/description I-description
# text: Intensywne rozmowy o przyrodzie przy Yerbie
# intent: inform/description
# slots:
1 Intensywne inform/description B-description
2 rozmowy inform/description I-description
3 o inform/description I-description
4 przyrodzie inform/description I-description
5 przy inform/description I-description
6 Yerbie inform/description I-description
# text: Spotkanie z kierownikiem zespołu w sprawie prac projektowych
# intent: inform/description
# slots:
1 Spotkanie inform/description NoLabel
2 z inform/description NoLabel
3 kierownikiem inform/description NoLabel
4 zespołu inform/description NoLabel
5 w inform/description B-description
6 sprawie inform/description I-description
7 prac inform/description I-description
8 projektowych inform/description I-description
# text: Proszę jako opis dodać spotkanie dotyczące zakupu firmy
# intent: inform/description
# slots:
1 Proszę inform/description NoLabel
2 jako inform/description NoLabel
3 opis inform/description NoLabel
4 dodać inform/description NoLabel
5 spotkanie inform/description B-description
6 dotyczące inform/description I-description
7 zakupu inform/description I-description
8 firmy inform/description I-description
# text: Spotkanie będzie dotyczyło omówienia strategii biznesowej
# intent: inform/description
# slots:
1 Spotkanie inform/description NoLabel
2 będzie inform/description NoLabel
3 dotyczyło inform/description NoLabel
4 omówienia inform/description B-description
5 strategii inform/description I-description
6 biznesowej inform/description I-description
# text: proszę dopisać opis Opis spotkania
# intent: inform/description
# slots:
1 proszę inform/description NoLabel
2 dopisać inform/description NoLabel
3 opis inform/description NoLabel
4 Opis inform/description B-description
5 spotkania inform/description I-description
# text: chciałabym anulować spotkanie
# intent: meeting/cancel
# slots:
1 chciałabym meeting/cancel NoLabel
2 anulować meeting/cancel NoLabel
3 spotkanie meeting/cancel NoLabel
# text: chciałbym usunać spotkanie
# intent: meeting/cancel
# slots:
1 chciałabym meeting/cancel NoLabel
2 usunać meeting/cancel NoLabel
3 spotkanie meeting/cancel NoLabel
# text: proszę odwołać spotkanie
# intent: meeting/cancel
# slots:
1 proszę meeting/cancel NoLabel
2 odwołać meeting/cancel NoLabel
3 spotkanie meeting/cancel NoLabel
# text: chciałbym odwołać to spotkanie
# intent: meeting/cancel
# slots:
1 chciałbym meeting/cancel NoLabel
2 odwołać meeting/cancel NoLabel
3 to meeting/cancel NoLabel
4 spotkanie meeting/cancel NoLabel
# text: chcę wyrzucić spotkanie z mojego kalendarza
# intent: meeting/cancel
# slots:
1 chcę meeting/cancel NoLabel
2 wyrzucić meeting/cancel NoLabel
3 spotkanie meeting/cancel NoLabel
4 z meeting/cancel NoLabel
5 mojego meeting/cancel NoLabel
6 kalendarza meeting/cancel NoLabel
# text: chciałbym przesunąć spotkanie
# intent: meeting/update
# slots:
1 chciałbym meeting/update NoLabel
2 przesunąć meeting/update NoLabel
3 spotkanie meeting/update NoLabel
# text: chciałbym edytować spotkanie
# intent: meeting/update
# slots:
1 chciałbym meeting/update NoLabel
2 edytować meeting/update NoLabel
3 spotkanie meeting/update NoLabel
# text: chciałbym zmienić datę spotkania
# intent: meeting/update
# slots:
1 chciałbym meeting/update NoLabel
2 zmienić meeting/update NoLabel
3 datę meeting/update NoLabel
4 spotkania meeting/update NoLabel
# text: czy moge przesunąć to spotkanie
# intent: meeting/update
# slots:
1 czy meeting/update NoLabel
2 moge meeting/update NoLabel
3 przesunąć meeting/update NoLabel
4 to meeting/update NoLabel
5 spotkanie meeting/update NoLabel
# text: chciałbym dodać nową osobę do tego spotkania
# intent: meeting/update
# slots:
1 chciałbym meeting/update NoLabel
2 dodać meeting/update NoLabel
3 nową meeting/update NoLabel
4 osobę meeting/update NoLabel
5 do meeting/update NoLabel
6 tego meeting/update NoLabel
7 spotkania meeting/update NoLabel
# text: zmień proszę godzinę tego spotkania na 17:30
# intent: meeting/update
# slots:
1 zmień meeting/update NoLabel
2 proszę meeting/update NoLabel
3 godzinę meeting/update NoLabel
4 tego meeting/update NoLabel
5 spotkania meeting/update NoLabel
6 na meeting/update NoLabel
7 17:30 meeting/update B-time
# text: chciałbym utworzyć spotkanie
# intent: meeting/create
# slots:
1 chciałbym meeting/create NoLabel
2 utworzyć meeting/create NoLabel
3 spotkanie meeting/create NoLabel
# text: chciałbym zapisać spotkanie
# intent: meeting/create
# slots:
1 chciałbym meeting/create NoLabel
2 zapisać meeting/create NoLabel
3 spotkanie meeting/create NoLabel
# text: chciałbym dodać nowe spotkanie
# intent: meeting/create
# slots:
1 chciałbym meeting/create NoLabel
2 dodać meeting/create NoLabel
3 nowe meeting/create NoLabel
4 spotkanie meeting/create NoLabel
# text: proszę wpisać nowe spotkanie na ten termin: Wyjście do Kina z Tomkiem
# intent: meeting/create
# slots:
1 proszę meeting/create NoLabel
2 wpisać meeting/create NoLabel
3 nowe meeting/create NoLabel
4 spotkanie meeting/create NoLabel
5 na meeting/create NoLabel
6 ten meeting/create NoLabel
7 termin meeting/create NoLabel
8 Wyjście meeting/create B-description
9 do meeting/create I-description
10 Kina meeting/create I-description
11 z meeting/create NoLabel
12 Tomkiem meeting/create B-participant
# text: proszę wpisać spotkanie na piątek godzinę 9:00 Podsumowanie miesiąca salka A
# intent: meeting/create
# slots:
1 proszę meeting/create NoLabel
2 wpisać meeting/create NoLabel
3 spotkanie meeting/create NoLabel
4 na meeting/create NoLabel
5 piątek meeting/create B-date
6 godzinę meeting/create NoLabel
7 9:00 meeting/create B-time
8 Podsumowanie meeting/create B-description
9 miesiąca meeting/create I-description
10 salka meeting/create B-place
11 A meeting/create I-place
# text: proszę ustawić spotkanie z Jan Nowak 24 grudnia 2022 o godzinie 21.30
# intent: meeting/create
# slots:
1 proszę meeting/create NoLabel
2 ustawić meeting/create NoLabel
3 spotkanie meeting/create NoLabel
4 z meeting/create NoLabel
5 Jan meeting/create B-participant
6 Nowak meeting/create I-participant
7 24 meeting/create B-date
8 grudnia meeting/create I-date
9 2022 meeting/create I-date
10 o meeting/create NoLabel
11 godzinie meeting/create NoLabel
11 21.30 meeting/create B-time
# text: chciałbym umówić spotkanie dzisiaj o godzinie 17.00
# intent: meeting/create
# slots:
1 chciałbym meeting/create NoLabel
2 umówić meeting/create NoLabel
3 spotkanie meeting/create NoLabel
4 dzisiaj meeting/create B-date
5 o meeting/create B-date
6 godzinie meeting/create NoLabel
7 17.00 meeting/create B-time
# text: zapisz mi proszę spotkanie z 3 marca o 17 wizyta u lekarza
# intent: meeting/create
# slots:
1 zapisz meeting/create NoLabel
2 mi meeting/create NoLabel
3 proszę meeting/create NoLabel
4 spotkanie meeting/create NoLabel
5 z meeting/create NoLabel
6 3 meeting/create B-date
7 marca meeting/create I-date
8 o meeting/create NoLabel
9 17 meeting/create B-time
10 wizyta meeting/create B-description
11 u meeting/create I-description
12 lekarza meeting/create I-description
# text: proszę wpisać na 02.04.2021 o godzinie 19:00 Wyjście do kina ze znajomą
# intent: meeting/create
# slots:
1 proszę meeting/create NoLabel
2 wpisać meeting/create NoLabel
3 na meeting/create NoLabel
4 02.04.2021 meeting/create B-date
5 o meeting/create NoLabel
6 godzinie meeting/create NoLabel
7 19:00 meeting/create B-time
8 Wyjście meeting/create B-description
9 do meeting/create I-description
10 kina meeting/create I-description
11 ze meeting/create I-description
12 znajomą meeting/create I-description
# text: chciałabym umówić spotkanie
# intent: meeting/create
# slots:
1 chciałabym meeting/create NoLabel
2 umówić meeting/create NoLabel
3 spotkanie meeting/create NoLabel
# text: chciałabym dodać spotkanie do kalendarza
# intent: meeting/create
# slots:
1 chciałabym meeting/create NoLabel
2 dodać meeting/create NoLabel
3 spotkanie meeting/create NoLabel
4 do meeting/create NoLabel
5 kalendarza meeting/create NoLabel
# text: proszę o dodanie spotkania biznesowego na dziś wieczór
# intent: meeting/create
# slots:
1 proszę meeting/create NoLabel
2 o meeting/create NoLabel
3 dodanie meeting/create NoLabel
4 spotkania meeting/create NoLabel
5 biznesowego meeting/create NoLabel
6 na meeting/create NoLabel
7 dziś meeting/create B-date
8 wieczór meeting/create NoLabel
# text: dodaj pozycję jutro na 17.30 Lunch z księgową w miejscu Cafe Teria
# intent: meeting/create
# slots:
1 dodaj meeting/create NoLabel
2 pozycję meeting/create NoLabel
3 jutro meeting/create B-date
4 na meeting/create NoLabel
5 17.30 meeting/create B-time
6 Lunch meeting/create B-description
7 z meeting/create I-description
8 księgową meeting/create I-description
9 w meeting/create NoLabel
10 miejscu meeting/create NoLabel
11 Cafe meeting/create B-place
12 Teria meeting/create I-place
# text: chciałabym zobaczyć podsumowanie spotkań z ostatniego miesiąca
# intent: meeting/list
# slots:
1 chciałabym meeting/list NoLabel
2 zobaczyć meeting/list NoLabel
3 podsumowanie meeting/list NoLabel
4 spotkań meeting/list NoLabel
5 z meeting/list NoLabel
6 ostatniego meeting/list B-date
7 miesiąca meeting/list I-date
# text: jakie mam spotkania jutro
# intent: meeting/list
# slots:
1 jakie meeting/list NoLabel
2 mam meeting/list NoLabel
3 spotkania meeting/list NoLabel
4 jutro meeting/list B-date
# text: proszę o rozpiskę spotkań na następny tydzień
# intent: meeting/list
# slots:
1 proszę meeting/list NoLabel
2 o meeting/list NoLabel
3 rozpiskę meeting/list NoLabel
4 spotkań meeting/list NoLabel
5 na meeting/list NoLabel
6 następny meeting/list B-date
7 tydzień meeting/list I-date
# text: podaj mi proszę moje spotkania na najbliższy tydzień
# intent: meeting/list
# slots:
1 podaj meeting/list NoLabel
2 mi meeting/list NoLabel
3 proszę meeting/list NoLabel
4 moje meeting/list NoLabel
5 spotkania meeting/list NoLabel
6 na meeting/list NoLabel
7 najbliższy meeting/list B-date
8 tydzień meeting/list I-date
# text: jakie mam nadchodzące wydarzenia w tym tygodniu
# intent: meeting/list
# slots:
1 jakie meeting/list NoLabel
2 mam meeting/list NoLabel
3 nadchodzące meeting/list NoLabel
4 wydarzenia meeting/list NoLabel
5 w meeting/list NoLabel
6 tym meeting/list B-date
7 tygodniu meeting/list I-date
# text: jakie spotkania mam w przyszłym tygodniu
# intent: meeting/list
# slots:
1 jakie meeting/list NoLabel
2 spotkania meeting/list NoLabel
3 mam meeting/list NoLabel
4 w meeting/list NoLabel
5 przyszłym meeting/list B-date
6 tygodniu meeting/list I-date
# text: Czy mam jakieś spotkania w najbliższy piątek
# intent: meeting/list
# slots:
1 Czy meeting/list NoLabel
2 mam meeting/list NoLabel
3 jakieś meeting/list NoLabel
4 spotkania meeting/list NoLabel
5 w meeting/list NoLabel
6 najbliższy meeting/list B-date
7 piątek meeting/list I-date
# text: chcialbym sprawdzic czy mam jakies spotkania w najblizszym tygodniu
# intent: meeting/list
# slots:
1 chcialbym meeting/list NoLabel
2 sprawdzic meeting/list NoLabel
3 czy meeting/list NoLabel
4 mam meeting/list NoLabel
5 jakies meeting/list NoLabel
6 spotkania meeting/list NoLabel
7 w meeting/list NoLabel
8 najblizszym meeting/list B-date
9 tygodniu meeting/list I-date
# text: proszę o wyświetlenie jutrzejszego kalendarza
# intent: meeting/list
# slots:
1 proszę meeting/list NoLabel
2 o meeting/list NoLabel
3 wyświetlenie meeting/list NoLabel
4 jutrzejszego meeting/list B-date
5 kalendarza meeting/list NoLabel
# text: proszę o rozpiskę spotkań w tym tygodniu
# intent: meeting/list
# slots:
1 proszę meeting/list NoLabel
2 o meeting/list NoLabel
3 rozpiskę meeting/list NoLabel
4 spotkań meeting/list NoLabel
5 w meeting/list NoLabel
6 tym meeting/list B-date
7 tygodniu meeting/list I-date
# text: jakie mam wolne terminy w najbliższy piątek
# intent: meeting/free_time
# slots:
1 jakie meeting/free_time NoLabel
2 mam meeting/free_time NoLabel
3 wolne meeting/free_time NoLabel
4 terminy meeting/free_time NoLabel
5 w meeting/free_time NoLabel
6 najbliższy meeting/free_time B-date
7 piątek meeting/free_time I-date
# text: czy mam jutro wolne terminy
# intent: meeting/free_time
# slots:
1 czy meeting/free_time NoLabel
2 mam meeting/free_time NoLabel
3 jutro meeting/free_time B-date
4 wolne meeting/free_time NoLabel
5 terminy meeting/free_time B-date

157
dateHelper.py Normal file
View File

@ -0,0 +1,157 @@
from datetime import date, datetime, timedelta, time
import re
from typing import Generator
# Monday - 0
# Tuesday - 1
# Wednesday - 2
# Thursday - 3
# Friday - 4
# Saturday - 5
# Sunday -6
def format_date(d):
return d.strftime('%d.%m.%Y')
def get_current_date():
return date.today()
def get_current_datetime():
return datetime.today()
def get_current_day_of_week():
return datetime.today().weekday()
def convert_timestamp_to_UTC(timestamp):
return datetime.fromtimestamp(timestamp)
def convert_UTC_to_timestamp(date):
return datetime.timestamp(date)
def get_day_of_week_number(day):
if day == 'dziś' or day == 'dzisiaj':
return get_current_day_of_week()
if day == 'poniedziałek':
return 0
elif day == 'wtorek':
return 1
elif day == 'środa':
return 2
elif day == 'czwartek':
return 3
elif day == 'piątek':
return 4
elif day == 'sobota':
return 5
elif day == 'niedziela':
return 6
def get_time_from_hours_minutes(hours, minutes):
return time(hours, minutes, 0)
def format_time(time):
if re.match(r'^[0-2][0-9]$', time):
hours = int(time)
minutes = 00
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
hours = int(m.group(1))
minutes = int(m.group(2))
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
def get_end_time(time):
if re.match(r'^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time):
m = re.search(
r'^^([0-2][0-9]).?([0-9][0-9])?-([0-2][0-9]).?([0-9][0-9])?$', time)
hours = int(m.group(3))
if m.group(4) is None:
minutes = 0
else:
minutes = int(m.group(4))
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
else:
# jak nie ma to zakładamy że trwa godzinę
if re.match(r'^[0-2][0-9]$', time):
hours = int(time)
minutes = 00
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
hours = int(m.group(1))
minutes = int(m.group(2))
hours += 1
if hours == 23:
hours = 24
elif hours == 24:
hours = 1
return get_time_from_hours_minutes(hours, minutes).strftime('%H:%M')
def get_datetime_from_day(day, hours, minutes):
current_day_of_week = get_current_day_of_week()
input_date_of_week = get_day_of_week_number(day)
input_time = get_time_from_hours_minutes(hours, minutes)
# data wypada na dzisiaj i trzeba sprawdzić godziny
if current_day_of_week == input_date_of_week:
# Podanej czas już był
if input_time < datetime.now().time():
date = get_current_date() + timedelta(days=7)
return datetime.combine(date, input_time)
# Podana czas jeszcze nie był
else:
date = get_current_date()
return datetime.combine(date, input_time)
# data będzie z przyszłośći
else:
date = get_current_date() + timedelta(days=(7 - abs(current_day_of_week-input_date_of_week)))
return datetime.combine(date, input_time)
def get_date(date, time):
# parsowanie czasu
if re.match(r'^[0-2][0-9]$', time):
hours = int(time)
minutes = 00
elif re.match(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time):
m = re.search(r'^([0-2][0-9]).([0-9][0-9])(-)?.*$', time)
hours = int(m.group(1))
minutes = int(m.group(2))
# TODO jeżeli jeszcze jakieś dziwne formaty to obsłużyć przypadki
if re.match(r'^[0-3][0-9]\.[0-1][0-9]\.20[0-9]{2}$', date):
date = datetime.strptime(date, '%d.%m.%Y').date()
return datetime.combine(date, get_time_from_hours_minutes(hours, minutes))
else:
return get_datetime_from_day(date, hours, minutes)
# Tests
# print(get_datetime_from_day('niedziela', 22, 21))
# print(get_datetime_from_day('niedziela', 18, 21))
# print(get_datetime_from_day('poniedziałek', 18, 21))
# print(get_datetime_from_day('wtorek', 18, 21))
# print(get_date("07.06.2021", "12:00"))
# print(get_date("sobota", "00:00"))
# print(get_date("wtorek", "12:00"))
# print(get_date("12.06.2021", "23"))
# print(get_current_date())

31
evaluate.py Normal file
View File

@ -0,0 +1,31 @@
from UserActType import UserActType
import os
import pandas as pd
import numpy as np
from NaturalLanguageUnderstanding import NLU
nlu = NLU()
rows = 0
hits = 0
hard_hits = 0
for file_name in os.listdir('data'):
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['interlocutor', 'sentence', 'acts'])
df = df[df.interlocutor == 'user']
data = np.array(df)
for row in data:
rows += 1
sentence = row[1]
acts = row[2].split('&')
user_act = nlu.parse_user_input(sentence)
for act in acts:
if str(user_act) == act.strip(' '):
hard_hits += 1
for act in acts:
if act.split('(')[0].strip(' ') == str(user_act).split('(')[0].strip(' '):
hits += 1
print(f"Accuracy (intent only): {(hits / rows)*100} ({hits}/{rows})")
print(f"Accuracy (intent with slots): {(hard_hits / rows)*100} ({hard_hits}/{rows})")

94
evaluation.md Normal file
View File

@ -0,0 +1,94 @@
# Ewaluacja - asystent kalendarza spotkań
## Ankieta zadowolenia użytkownika:
https://forms.office.com/r/L16YGV6MLz
Ankieta zadowolenia użytkownika poruszała kilka kwestii, takich jak:
* główne zadanie, jakie użytkownik chciał zrealizować przy pomocy systemu
* czy udało się powyższe zadanie w pełni przy pomocy systemu zrealizować
* łatwość realizacji tego zadania w skali 1-5
* zrozumiałość wypowiedzi użytkownika dla systemu w skali 1-5
* zrozumiałość wypowiedzi systemu w skali 1-5
* jak bardzo system reagował zgodnie z oczekiwaniami użytkownika w skali 1-5
* odpowiedniość tempa interakcji w skali 1-5
* czy użytkownik wiedział co odpowiedzieć na każdym etapie dialogu w skali 1-5
* czy błąd krytyczny systemu zakończył rozmowę
* 2 pytania opisowe, co wg. użytkownika działa w systemie najlepiej i najgorzej
* czy użytkownik zamierza używać systemu w przyszłości w skali 1-5
* ogólna ocena systemu w skali 1-5
<!-- end of the list -->
Udało się zebrać odpowiedzi dotyczące 10 przeprowadzonych rozmów.
### Pytanie 1: Główne zadanie użytkownika.
* 8 użytkowników wskazało jako główny cel <b>umówienie spotkania</b>
* 1 użytkownik chciał sprawdzić <b>listę spotkań</b>
* 1 użytkownik chciał <b>odwołać spotkanie</b>
### Pytanie 2: Czy udało się zrealizować główne zadanie?
* 7 użytkowników odpowiedziało <b>tak</b>
* 3 użytkowników odpowiedziało <b>nie</b>
<!-- end of the list -->
Wszyscy użytkownicy, którym udało się zrealizować główne zadanie chcieli utworzyć spotkanie. Można więc wysnuć wniosek, że to element systemu, który działa najlepiej i jednocześnie najpopularniejszy wśród użytkowników. Co za tym idzie system można nazwać dość skutecznym, jednak nie radzi sobie w pełni ze wszystkimi planowanymi zadaniami.
### Pytanie 3: Łatwość realizacji zadania.
Średnia ocena tej metryki to 3.5/5 <br>
Najczęstsze oceny to <b>4 - co oznacza łatwą realizację zadania</b> (5 użytkowników) oraz <b>3 - umiarkowanie</b> (3 użytkowników). <br>
Najniższe oceny dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
### Pytanie 4: Jak system rozumiał wypowiedzi użytkownika?
Średnia ocena tej metryki to 3.5/5 <br>
Najczęstsze oceny to <b>4 - co oznacza zrozumienie większości wypowiedzi</b> (6 użytkowników) oraz <b>2 - zrozumienie niektórych wypowiedzi</b> (3 użytkowników). <br>
Najniższe oceny dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
### Pytanie 5: Jak użytkownik rozumiał wypowiedzi systemu?
Średnia ocena tej metryki to 4.3/5 <br>
Najczęstsze oceny to <b>5 - użytkownik rozumiał w pełni wypowiedzi systemu</b> (5 użytkowników) oraz <b>4 - użytkownik rozumiał w większości wypowiedzi systemu</b> (4 użytkowników). <br>
Najniższa ocena (2) dotyczyła rozmowy, w której nie doszło do pomyślej realizacji zadania.
### Pytanie 6: System robił to, co oczekiwał użytkownik.
Średnia ocena tej metryki to 3.6/5 <br>
Najczęstsze oceny to <b>4 - zgadzam się</b> (7 użytkowników) oraz <b>3 - trudno powiedzieć</b> (2 użytkowników). <br>
Najniższe oceny (2 oraz 3) dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
### Pytanie 7: Tempo interakcji z systemem było odpowiednie.
Średnia ocena tej metryki to 4.1/5 <br>
Najczęstsze oceny to <b>4 - zgadzam się</b> (7 użytkowników) oraz <b>5 - całkowicie się zgadzam</b> (2 użytkowników). <br>
Najniższa ocena (3) dotyczyła rozmowy, w której nie doszło do pomyślej realizacji zadania.
### Pytanie 8: Użytkownik wiedział co ma odpowiadać na każdym etapie dialogu.
Średnia ocena tej metryki to 3.9/5 <br>
Najczęstsze oceny to <b>4 - zgadzam się</b> (6 użytkowników) oraz <b>5 - całkowicie się zgadzam</b> (2 użytkowników). <br>
Najniższe oceny (2 oraz 3) dotyczyły rozmów, w których nie doszło do pomyślej realizacji zadania.
### Pytanie 9: Czy krytyczny błąd systemu przerwał rozmowę?
* 7 użytkowników odpowiedziało <b>tak</b>
* 3 użytkowników odpowiedziało <b>nie</b>
<!-- end of the list -->
Najbardziej niepokojąca metryka w ankiecie. Aż 70% rozmów skończyło się krytycznym błędem systemu, jednak w większości przypadków nie wpłynęło to na realizację głównego zadania użytkownika. Z pewnością trzeba się skupić w przyszłości na wyeliminowaniu tych błędów.
### Pytanie 10: Co w systemie działało nagorzej (nieobowiązkowe pytanie opisowe)?
Najczęściej wskazywanymi mankamentami systemu były błędne przechwytywanie slotów, co często prowadziło do ponownego zadania tego samego pytania oraz nieoczekiwane zakończenie konwersacji błędem krytycznym. Aż 7 użytkowników zdecydowało się odpowiedzieć na to pytanie, co najprawdopodobniej oznacza, że system dalej posiada niewielkie błędy wpływające na jego jakość.
### Pytanie 11: Co w systemie działało najlepiej (nieobowiązkowe pytanie opisowe)?
Tylko 3 użytkowników zdecydowało się odpowiedzieć na to pytanie, co może oznaczać, że większość z nich nie widziała w systemie bardzo dobrze działających elementów. <br>
Użytkownicy, którzy odpowiedzieli na to pytanie jako główną zaletę wskazali, że system realizuje pomyślnie podstawowy scenariusz, czyli tworzenie spotkania.
### Pytanie 12: Czy użytkownik zamierza używać systemu w przyszłości?
Średnia ocena tej metryki to 2.9/5 <br>
Najczęstsza ocena to <b>3 - trudno powiedzieć</b> (9 użytkowników). <br>
Większość użytkowników nie ma wyrobionego zdania na temat przydatności systemu. Może to oznaczać, że system nie przekonał użytkowników podczas testów lub nie zawiera wszystkich oczekiwanych funkcjonalności.
### Pytanie 13: Ogólna ocena systemu przez użytkownika.
Średnia ocena tej metryki to 3.9/5 <br>
Najczęstsza ocena to <b>4</b> (5 użytkowników). <br>
Ogólnie system wypada dość dobrze. Najniższe oceny dotyczyły rozmów, podczas których nie udało się zrealizować zadania oraz system zakończył niespodziewanie rozmowe przez błąd. Można więc wysnuć wniosek, że wyeliminowanie tych błędów i poprawa skuteczności podniosłaby ogólną ocenę systemu.
## Inne metryki ewaluacyjne.
### Task success rate:
System poprawnie zrealizował 9 zadań z 16 możliwych, co daje <b>56,25%</b> skuteczności. <br>
Tą skuteczność można uznać za dość dobrą, jednak na pewno trzeba by ją zwiększyć w toku dalszych prac nad systemem. <br>
Głownym elementem systemu, który powodował niepomyślną realizację zadań był moduł NLU (głównie błędne wyłapywanie wartości slotów) oraz moduł NLG (system nie generował odpowiedzi przy niektórych nieprzewidzianych scenariuszach).
### Slot error rate:
System poprawnie wyłapał 23 wartości slotu na 55 przypadków, co daje <b>41,81%</b> skuteczności. <br>
System przede wszystkim miał problem ze slotem <b>opis spotkania</b> oraz <b>uczestnik spotkania</b>. Dość sprawnie wyłapuje slot <b>data</b> oraz <b>godzina</b>.

38
main.py Normal file
View File

@ -0,0 +1,38 @@
from SystemActType import SystemActType
from NaturalLanguageUnderstanding import NLU
from NaturalLanguageGeneration import NLG
from DialogueStateTracker import DST
from DialoguePolicy import DP
if __name__ == "__main__":
nlu = NLU()
dst = DST()
dp = DP(dst)
nlg = NLG(dst)
while(1):
user_input = input("Wpisz tekst: ")
user_frame = nlu.parse_user_input(user_input)
print('------ rozpoznany user frame ------')
print(user_frame)
dst.user_update(user_frame)
state, last_user_act, last_system_act = dst.get_dialogue_state()
slots = dst.get_dialogue_slots()
system_act = dp.choose_tactic()
print('------ stan ------')
print(state, last_user_act, last_system_act)
print('------ przechowywane sloty ------')
print(slots)
print('------ wybrana akcja systemu ------')
print(system_act)
system_response = nlg.generate_response(system_act)
print('------ wygenerowana odpowiedź systemu ------')
print(system_response)
print('-----------------------------------')
print('-----------------------------------')
if system_act.getActType() == SystemActType.BYE:
break

185
requirements-analysis.md Normal file
View File

@ -0,0 +1,185 @@
Asystent kalendarza spotkań
==============
Zadanie 1: Umawianie spotkania
--------------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym umówić nowe spotkanie.
*system:* Proszę podać dzień na jaki mam umówić spotkanie.
*user:* Najbliższy poniedziałek.
*system:* Proszę podać godzinę i długość spotkania.
*user:* 15:30, 1 godzina
*system:* Niestety, godzina ta jest już zajęta przez inne spotkanie, proponuję godzinę 14:00.
*user:* Dobrze, może być godzina 14:00.
*system:* Czy mam zapisać miejsce spotkania?
*user:* Tak, sala konferencyjna w biurze.
*system:* Czy mam zapisać naziwsko osoby, której dotyczy to spotkanie?
*user:* Tak, Jan Nowak - Prezes firmy ABC.
*system:* Czy mam dodać opis do spotkania?
*user:* Nie, nie trzeba.
*system:* Proszę potwierdzić utworzenie spotkania: <br>
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
Miejsce: Sala konferencyjna w biurze <br>
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
*user:* Zatwierdzam.
*system:* Spotkanie zostało pomyślnie dodane do kalendarza.
Zadanie 2: Edycja spotkania
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym edytować spotkanie.
*system:* Proszę podać datę i godzinę spotkania do edycji.
*user:* 29.03.2021 14:00
*system:* Czego ma dytyczyć edycja? Czasu, miejsca, osoby czy opisu?
*user:* Osoby.
*system:* Obecna osoba to Jan Nowak - Prezes firmy ABC, kogo ma dotyczyć to spotkanie?
*user:* Adam Kowalski - Wiceprezes firmy ABC.
*system:* Czy to wszystkie zmiany?
*user:* Nie, chciałbym jeszcze zmienić czas spotkania.
*system:* Obecna czas spotkania to Poniedziałek 29.03.2021 14:00-15:00, jaki ma być nowy czas spotkania?
*user:* Niech zostanie bez zmian.
*system:* Czas nie został zmieniony, czy to wszystkie edycje?
*user:* Tak.
*system:* Spotkanie zostało pomyślnie zmienione.
Zadanie 3: Odwołanie spotkania
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym odwołać spotkanie.
*system:* Proszę podać datę i godzinę spotkania do odwołania.
*user:* 29.03.2021 16:00
*system:* Czy jesteś pewien, że chcesz odwołać poniższe spotkanie? <br>
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
Miejsce: Dom <br>
Spotkanie z: Kacper (Brat) <br>
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
*user:* Tak.
*system:* Spotkanie zostało pomyślnie odwołane.
Zadanie 4: Podgląd spotkań względem daty
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym sprawdzić jutrzejsze spotkania.
*system:* Na jutro zaplanowano następujące spotkania: <br>
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
Miejsce: Sala konferencyjna w biurze <br>
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
------------------------------------------------------------------ <br>
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
Miejsce: Dom <br>
Spotkanie z: Kacper (Brat) <br>
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
Zadanie 5: Podgląd spotkań względem umówionych osób
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym sprawdzić spotkania z Janem Nowakiem - Prezesem firmy ABC.
*system:* Z Janem Nowakiem - Prezesm firmy ABC umówione są następujące spotkania: <br>
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
Miejsce: Sala konferencyjna w biurze <br>
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
------------------------------------------------------------------ <br>
Data: Czwartek 1.04.2021 12:00-14:00 <br>
Miejsce: Firma ABC <br>
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
Opis: Omówienie warunków współpracy firm w ramach projektu XYZ. <br>
Zadanie 6: Podgląd spotkań względem miejsca
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym sprawdzić spotkania w moim domu.
*system:* W twoim domu umówione są następujące spotkania: <br>
Data: Poniedziałek 29.03.2021 16:00-17:15 <br>
Miejsce: Dom <br>
Spotkanie z: Kacper (Brat) <br>
Opis: Zaplanowanie imprezy urodzinowej dla mamy <br>
------------------------------------------------------------------ <br>
Data: Sobota 10.04.2021 11:00-18:00 <br>
Miejsce: Dom <br>
Spotkanie z: Rodzina <br>
Opis: Imprezy urodzinowa dla mamy <br>
Zadanie 7: Podgląd najbliższych spotkań
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym sprawdzić najbliższe spotkania.
*system:* Najbliższe spotkanie to: <br>
Data: Niedziela 28.03.2021 19:00 <br>
Miejsce: Brak <br>
Spotkanie z: Marek <br>
Opis: Spotkanie towarzyskie <br>
Kolejne spotkanie to: <br>
Data: Poniedziałek 29.03.2021 14:00-15:00 <br>
Miejsce: Sala konferencyjna w biurze <br>
Spotkanie z: Jan Nowak - Prezes firmy ABC <br>
Zadanie 8: Podgląd wolnych terminow
--------------------------
*system:* Witam w twoim prywatnym asystencie kalendarza spotkań.
*user:* Dzień dobry, chciałbym sprawdzić najbliższe wolne terminy.
*system:* Najbliższe wolne terminy to: <br>
Niedziela 28.03.2021: <br>
- 12:00-19:00 <br>
Poniedziałek 29.03.2021: <br>
- 00:00-14:00 <br>
- 15:00-16:00 <br>
- 17:15-24:00 <br>

43
test_nlu.py Normal file
View File

@ -0,0 +1,43 @@
import os
import pandas as pd
import numpy as np
from flair.data import Sentence, Token
from flair.datasets import SentenceDataset
from flair.models import SequenceTagger
def conllu2flair(sentences, label=None):
fsentences = []
for sentence in sentences:
fsentence = Sentence()
for token in sentence:
ftoken = Token(token['form'])
if label:
ftoken.add_tag(label, token[label])
fsentence.add_token(ftoken)
fsentences.append(fsentence)
return SentenceDataset(fsentences)
def predict(frame_model, sentence):
csentence = [{'form': word} for word in sentence.split()]
fsentence = conllu2flair([csentence])[0]
frame_model.predict(fsentence)
possible_intents = {}
for token in fsentence:
for intent in token.annotation_layers["frame"]:
if(intent.value in possible_intents):
possible_intents[intent.value] += intent.score
else:
possible_intents[intent.value] = intent.score
return max(possible_intents)
frame_model = SequenceTagger.load('frame-model/final-model.pt')
for file_name in os.listdir('data'):
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['interlocutor', 'sentence', 'acts'])
df = df[df.interlocutor == 'user']
data = np.array(df)
for row in data:
sentence = row[1]
predicted_intent = predict(frame_model, sentence)
print(sentence, predicted_intent)

62
train_frame_nlu.py Normal file
View File

@ -0,0 +1,62 @@
from conllu import parse_incr
from tabulate import tabulate
from flair.data import Corpus, Sentence, Token
from flair.datasets import SentenceDataset
from flair.embeddings import StackedEmbeddings
from flair.embeddings import WordEmbeddings
from flair.embeddings import CharacterEmbeddings
from flair.embeddings import FlairEmbeddings
from flair.models import SequenceTagger
from flair.trainers import ModelTrainer
# skrypt do trenowania modelu NLU dla intentów
# determinizacja obliczeń
import random
import torch
random.seed(42)
torch.manual_seed(42)
if torch.cuda.is_available():
torch.cuda.manual_seed(0)
torch.cuda.manual_seed_all(0)
torch.backends.cudnn.enabled = False
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
def nolabel2o(line, i):
return 'O' if line[i] == 'NoLabel' else line[i]
def conllu2flair(sentences, label=None):
fsentences = []
for sentence in sentences:
fsentence = Sentence()
for token in sentence:
ftoken = Token(token['form'])
if label:
ftoken.add_tag(label, token[label])
fsentence.add_token(ftoken)
fsentences.append(fsentence)
return SentenceDataset(fsentences)
fields = ['id', 'form', 'frame', 'slot']
with open('data/train.conllu', encoding='utf-8') as trainfile:
frame_trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'frame': nolabel2o}))
frame_corpus = Corpus(train=conllu2flair(frame_trainset, 'frame'), test=conllu2flair(frame_trainset, 'frame'))
frame_tag_dictionary = frame_corpus.make_tag_dictionary(tag_type='frame')
embedding_types = [
WordEmbeddings('pl'),
FlairEmbeddings('pl-forward'),
FlairEmbeddings('pl-backward'),
CharacterEmbeddings(),
]
embeddings = StackedEmbeddings(embeddings=embedding_types)
frame_tagger = SequenceTagger(hidden_size=256, embeddings=embeddings, tag_dictionary=frame_tag_dictionary, tag_type='frame', use_crf=True)
frame_trainer = ModelTrainer(frame_tagger, frame_corpus)
frame_trainer.train('frame-model', learning_rate=0.1, mini_batch_size=24, max_epochs=100, train_with_dev=False)

62
train_slot_nlu.py Normal file
View File

@ -0,0 +1,62 @@
from conllu import parse_incr
from tabulate import tabulate
from flair.data import Corpus, Sentence, Token
from flair.datasets import SentenceDataset
from flair.embeddings import StackedEmbeddings
from flair.embeddings import WordEmbeddings
from flair.embeddings import CharacterEmbeddings
from flair.embeddings import FlairEmbeddings
from flair.models import SequenceTagger
from flair.trainers import ModelTrainer
# skrypt do trenowania modelu NLU dla slotów
# determinizacja obliczeń
import random
import torch
random.seed(42)
torch.manual_seed(42)
if torch.cuda.is_available():
torch.cuda.manual_seed(0)
torch.cuda.manual_seed_all(0)
torch.backends.cudnn.enabled = False
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
def nolabel2o(line, i):
return 'O' if line[i] == 'NoLabel' else line[i]
def conllu2flair(sentences, label=None):
fsentences = []
for sentence in sentences:
fsentence = Sentence()
for token in sentence:
ftoken = Token(token['form'])
if label:
ftoken.add_tag(label, token[label])
fsentence.add_token(ftoken)
fsentences.append(fsentence)
return SentenceDataset(fsentences)
fields = ['id', 'form', 'frame', 'slot']
with open('data/train.conllu', encoding='utf-8') as trainfile:
slot_trainset = list(parse_incr(trainfile, fields=fields, field_parsers={'slot': nolabel2o}))
slot_corpus = Corpus(train=conllu2flair(slot_trainset, 'slot'), test=conllu2flair(slot_trainset, 'slot'))
slot_tag_dictionary = slot_corpus.make_tag_dictionary(tag_type='slot')
embedding_types = [
WordEmbeddings('pl'),
FlairEmbeddings('pl-forward'),
FlairEmbeddings('pl-backward'),
CharacterEmbeddings(),
]
embeddings = StackedEmbeddings(embeddings=embedding_types)
slot_tagger = SequenceTagger(hidden_size=256, embeddings=embeddings, tag_dictionary=slot_tag_dictionary, tag_type='slot', use_crf=True)
slot_trainer = ModelTrainer(slot_tagger, slot_corpus)
slot_trainer.train('slot-model', learning_rate=0.1, mini_batch_size=24, max_epochs=100, train_with_dev=False)