Compare commits
95 Commits
Author | SHA1 | Date | |
---|---|---|---|
e2e447a601 | |||
0b9a15488c | |||
9c528afc6c | |||
05876dbd24 | |||
bf309fb6fe | |||
73b9e52d31 | |||
78f01cb165 | |||
3316917d47 | |||
e42ae14ceb | |||
fefc6bd7bc | |||
437f5f7d72 | |||
a759108c9e | |||
d1108d9b8a | |||
75fb0f873b | |||
02312cc3b9 | |||
118099bb37 | |||
24f75db1d8 | |||
ac5dcdc06d | |||
ad0b4cf739 | |||
3fb60acd4f | |||
0fda2dbb98 | |||
35a19cc5c0 | |||
4ce52466a2 | |||
10fc617cad | |||
41f41cc692 | |||
e7a8814438 | |||
fded76596b | |||
5f128e7e88 | |||
dfed26e955 | |||
a928c925fc | |||
809079cd56 | |||
4620e53229 | |||
f7ee0ba059 | |||
f4d9bff809 | |||
ff0b4af87c | |||
166dd4886c | |||
a850690dc9 | |||
2b6a8b01a6 | |||
79bf27aca4 | |||
3d820e8d6d | |||
abc098e498 | |||
a90535a68b | |||
4483747021 | |||
caea45471c | |||
72e17d2106 | |||
d789fcc10b | |||
adfea71871 | |||
d02bd4b5ae | |||
b64eb49ba0 | |||
175de22c9b | |||
fbd85d9e34 | |||
6ca7b66fb4 | |||
f0c7b481d1 | |||
4e763a459d | |||
16af0e732c | |||
846c6991e7 | |||
42c224a11a | |||
ffefdc1ee0 | |||
cb0f1eb5de | |||
738710b1f5 | |||
7e47098c8c | |||
da3a8064c0 | |||
e1b691aa9c | |||
6497cd803d | |||
1d62b93328 | |||
6114ec26fd | |||
0d69a1422f | |||
f5dcaf9780 | |||
762d4a0c15 | |||
5fc4451fc9 | |||
06320b8682 | |||
cd8da4bdcd | |||
6e9112bc9b | |||
6683285db1 | |||
20531d729d | |||
c70685682d | |||
a8bf975f12 | |||
abe4577dd6 | |||
44a4e51443 | |||
cec4f7da50 | |||
cc74e9e838 | |||
ab7f96f70a | |||
76b34987bf | |||
82f1c9b0da | |||
c3fb071cbf | |||
bc775bca1d | |||
609e78eee8 | |||
974363c918 | |||
53f734dad9 | |||
fb1581c5ea | |||
298cca9bd6 | |||
3dd01318ee | |||
95263349fc | |||
372625069f | |||
62a2bdb2ba |
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
__pycache__
|
||||
slot-model*
|
||||
frame-model*
|
||||
nlu_cache
|
39
README.md
39
README.md
@ -13,4 +13,41 @@ Agent powinien wykazywać elastyczność, adaptując się do potrzeb klienta, np
|
||||
- s495724 - Michał Kasprowicz
|
||||
- s495726 - Patryk Osiński
|
||||
- s495727 - Krzysztof Bojakowski
|
||||
- s495728 - Sergiusz Kański
|
||||
- s495728 - Sergiusz Kański
|
||||
|
||||
# Akty
|
||||
|
||||
| Typ | Opis |
|
||||
|----------------------------:|:--------------------------------------------------------|
|
||||
| affirm | potwierdzenie |
|
||||
| bye | zakończenie rozmowy |
|
||||
| canthear | „nic nie słyszę” |
|
||||
| confirm-domain | prośba o potwierdzenie dziedziny |
|
||||
| negate | zaprzeczenie |
|
||||
| repeat | prośba o powtórzenie |
|
||||
| reqmore | sprawdzenie czy użytkownik chce dodatkowych informacji |
|
||||
| welcomemsg | przywitanie |
|
||||
| canthelp | „nie mogę pomóc” |
|
||||
| canthelp.missing_slot_value | „potrzebuję poznać wartość slotu, żeby pomóc” |
|
||||
| expl-conf | potwierdzenie (wprost), że slot ma daną wartość |
|
||||
| impl-conf | potwierdzenie (nie wprost), że slot ma daną wartość |
|
||||
| inform | poinformowanie użytkownika, o przyjętej wartości slotu |
|
||||
| offer | rekomendacja (restauracji) |
|
||||
| request | pytanie użytkownika o wartość slotu |
|
||||
| select | prośba o dokonanie wyboru spośród przedstawionych opcji |
|
||||
|
||||
# Obsługa projektu
|
||||
|
||||
- Python 3.10.12
|
||||
- Instalacja dependencies `pip3 install -r requirements.txt`
|
||||
- Centralna część systemu - uruchamiamy `python3 src/main.py` - wymagane są wyuczone modele (patrz niżej)
|
||||
- NLU:
|
||||
- uczenie modeli od zera `python3 nlu_train.py`
|
||||
- Ewaluacja `python3 evaluate.py`
|
||||
|
||||
# Gotowe modele NLU
|
||||
|
||||
- [frame-model-prod](https://1drv.ms/f/s!Ar75ftQiNIxxhcgPS1EOLu0zC_WWzg?e=tJRqbB)
|
||||
- [slot-model-prod](https://1drv.ms/f/s!Ar75ftQiNIxxhcgb2X6pFioRxXHVew?e=ZC6LFI)
|
||||
|
||||
Nazwa folderów jest istotna - muszą byc odpowiednio `frame-model-prod` i `slot-model-prod` oraz znajdować się w głównym katalogu repozytorium.
|
92
attributes.json
Normal file
92
attributes.json
Normal file
@ -0,0 +1,92 @@
|
||||
{
|
||||
"size": ["M", "L", "XL"],
|
||||
"dough": [
|
||||
"thick"
|
||||
],
|
||||
"drink": {
|
||||
"woda": {
|
||||
"price": 5
|
||||
},
|
||||
"pepsi": {
|
||||
"price": 7
|
||||
},
|
||||
"cola": {
|
||||
"price": 8
|
||||
}
|
||||
},
|
||||
"food": [
|
||||
"pizza"
|
||||
],
|
||||
"meat": [
|
||||
"kurczak",
|
||||
"szynka",
|
||||
"tuna"
|
||||
],
|
||||
"sauce": [
|
||||
"garlic",
|
||||
"1000w"
|
||||
],
|
||||
"ingredients": {
|
||||
"kurczak": {},
|
||||
"tuna": {},
|
||||
"ananas": {},
|
||||
"cebula": {},
|
||||
"ser": {},
|
||||
"pomidor": {},
|
||||
"szynka": {},
|
||||
"papryka": {}
|
||||
},
|
||||
"menu": [
|
||||
"capri",
|
||||
"margarita",
|
||||
"hawajska",
|
||||
"barcelona",
|
||||
"tuna"
|
||||
],
|
||||
"pizza": {
|
||||
"capri": {
|
||||
"ingredient": [
|
||||
"tomato",
|
||||
"ham",
|
||||
"mushrooms",
|
||||
"cheese"
|
||||
],
|
||||
"price": 25
|
||||
},
|
||||
"margarita": {
|
||||
"ingredient": [
|
||||
"tomato",
|
||||
"cheese"
|
||||
],
|
||||
"price": 20
|
||||
},
|
||||
"hawajska": {
|
||||
"ingredient": [
|
||||
"tomato",
|
||||
"pineapple",
|
||||
"chicken",
|
||||
"cheese"
|
||||
],
|
||||
"price": 30
|
||||
},
|
||||
"barcelona": {
|
||||
"ingredient": [
|
||||
"tomato",
|
||||
"onion",
|
||||
"ham",
|
||||
"pepper",
|
||||
"cheese"
|
||||
],
|
||||
"price": 40
|
||||
},
|
||||
"tuna": {
|
||||
"ingredient": [
|
||||
"tomato",
|
||||
"tuna",
|
||||
"onion",
|
||||
"cheese"
|
||||
],
|
||||
"price": 40
|
||||
}
|
||||
}
|
||||
}
|
15
conllu_generator.py
Normal file
15
conllu_generator.py
Normal file
@ -0,0 +1,15 @@
|
||||
print("Script to automatically append data to data/dialog.conllu")
|
||||
print("Start typing now. Press Ctrl+C to stop.")
|
||||
|
||||
while True:
|
||||
with open("data/train_dialog.conllu", "a") as f:
|
||||
text = input("Text: ")
|
||||
act = input("Intent: ")
|
||||
slots = text.split(" ")
|
||||
f.write(
|
||||
f"\n# text: {text}\n# intent: {act}\n# slots:\n"
|
||||
)
|
||||
for i, slot in enumerate(slots):
|
||||
label = input(f"{i}/{slot} label: ")
|
||||
f.write(f"{i+1}\t{slot}\t{act}\t{label}\n")
|
||||
print("---")
|
16
data/dialog-04-01-01.tsv
Normal file
16
data/dialog-04-01-01.tsv
Normal file
@ -0,0 +1,16 @@
|
||||
kto treść akt
|
||||
system Dzień dobry, witamy w systemie zamówień na pizzę. Polecam pizzę diavola z dodatkową rukolą. welcomemsg()&offer(pizza=diavola,ingredient=rucola)
|
||||
user ile kosztuje dostawa? request(delivery-price)
|
||||
system Przy zakupie czterech dużych pizz otrzyma Pan dostawę gratis offer(quantity=4,delivery-price=0)
|
||||
user a jakie są dostępne pizze? request(menu)
|
||||
system Mamy wiele rodzajów, czy ma Pan ochotę na coś konkretnego? reqmore()
|
||||
system plecam pizzę ananasową. sos pomidorowy, mozarella, ananas i cebula offer(food=pizza,ingredient=pineapple,sauce=tomato,ingredient=mozarella,ingredient=onion)
|
||||
user świetnie, w takim razie poproszę dwie duże pizze diavola oraz margaritę inform(quantity=2,pizza=diavola,pizza=margarita)
|
||||
system oczywiście, czy chciałby Pan coś do picia? polecam sok z buraka affirm()&offer(drink=beetroot_juice)
|
||||
user tak, poproszę jeden affirm()&inform(quantity=1)
|
||||
system Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos? request(payment-method,collection-method)
|
||||
user zapłacę kartą przy dostawie inform(payment-method=card,collection-method=delivery)
|
||||
system Poproszę podać adres oraz numer karty. Zamówienie będzie gotowe w przeciągu 25 minut request(address)&request(card-number)&inform(time=25)
|
||||
user Grzegorz Brzęczyszczykiewicz, ze Szczebrzeszyna, powiat Łękołody inform(name=Grzegorz Brzęczyszczykiewicz,address=Szczebrzeszyna, powiat Łękołody)
|
||||
system Numer Pańskieg zamówienia: 86753, czy jest jeszcze coś w czym mogę Panu pomóc? inform(order_number=86753)&reqmore()
|
||||
user dziękuję bardzo bye()
|
|
@ -1,24 +1,25 @@
|
||||
user 2024-03-15 7:52 PM Chciałbym zamówić pizze
|
||||
system 2024-03-15 7:54 PM Dzień dobry, dziękujemy za kontakt. Ma Pan ochotę na jakąś konkretną pizzę?
|
||||
user 2024-03-15 7:54 PM wegetariańską
|
||||
system 2024-03-15 7:54 PM oczywiście, jaki rozmiar?
|
||||
user 2024-03-15 7:54 PM a jakie są dostępne?
|
||||
system 2024-03-15 7:55 PM mała (20 cm), średnia (30 cm) i duża (40 cm).
|
||||
user 2024-03-15 7:55 PM dużą poproszę, z czym jest pizza wegetariańska?
|
||||
system 2024-03-15 7:56 PM ser, mozarella, sos pomidorowy, cebula oraz karczochy
|
||||
system 2024-03-15 7:57 PM czy chciałby Pan coś do picia?
|
||||
user 2024-03-15 7:57 PM a ananas?
|
||||
system 2024-03-15 7:57 PM ananasy oczywiście też są, może Pan zamówić wraz z polewą bananową z pędami bambusa
|
||||
user 2024-03-15 7:58 PM do standardowych składników poproszę tylko ananasa, mam uczulenie na banany
|
||||
system 2024-03-15 7:59 PM oczywiście, czy chciałby Pan coś do picia?
|
||||
user 2024-03-15 8:00 PM czy posiadają państwo soki wegańskie?
|
||||
system 2024-03-15 8:01 PM tylko wodę mineralną oraz wegańskie piwo bezalkoholowe typu porter
|
||||
user 2024-03-15 8:01 PM a ile to piwo ma %?
|
||||
system 2024-03-15 8:02 PM 0% alkoholu, 0% cukru, 0% niewegańskich składników
|
||||
user 2024-03-15 8:02 PM wydaje się dobre, poproszę
|
||||
system 2024-03-15 8:04 PM podsuomwując: jedna pizza wegańska z ananasem, bez bananów oraz wegańskie piwo bezalkohlowe. Płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos?
|
||||
user 2024-03-15 8:04 PM Apple pay
|
||||
user 2024-03-15 8:04 PM Na wynos
|
||||
system 2024-03-15 8:05 PM Numer Pańskieg zamówienia: 86750, czy jest jeszcze coś w czym mogę Panu pomóc?
|
||||
user 2024-03-15 8:06 PM to wszystko, dziekuje
|
||||
system 2024-03-15 8:06 PM Dziękujemy za skrzystanie z naszego systemu zamawiania pizzy i życzymy smacznego. Polecamy się na przyszło
|
||||
kto treść akt
|
||||
user Chciałbym zamówić pizze request(pizza)
|
||||
system Dzień dobry, dziękujemy za kontakt. Ma Pan ochotę na jakąś konkretną pizzę? welcomemsg()&reqmore()
|
||||
user wegetariańską inform(ingredient!=meat)
|
||||
system oczywiście, jaki rozmiar? request(size)
|
||||
user a jakie są dostępne? request(size)
|
||||
system mała (20 cm), średnia (30 cm) i duża (40 cm). select(size)
|
||||
user dużą poproszę, z czym jest pizza wegetariańska? inform(size=l)&request(pizza,type)
|
||||
system ser, mozarella, sos pomidorowy, cebula oraz karczochy inform(ingredient=cheese,ingredient=mozarella,sauce=tomato,ingredient=onion,ingredient=artichokes)
|
||||
system czy chciałby Pan coś do picia? request(drink)
|
||||
user a ananas? request(pineapple)
|
||||
system ananasy oczywiście też są, może Pan zamówić wraz z polewą bananową z pędami bambusa affirm()&offer(ingredient=banana_topping,ingredient=bamboo_shoots)
|
||||
user do standardowych składników poproszę tylko ananasa, mam uczulenie na banany inform(ingredient=pineapple)
|
||||
system oczywiście, czy chciałby Pan coś do picia? affirm()&request(drink)
|
||||
user czy posiadają państwo soki wegańskie? request(drink,vegan)
|
||||
system tylko wodę mineralną oraz wegańskie piwo bezalkoholowe typu porter offer(drink=mineral_water,drink=alcoholfree_porter_beer)
|
||||
user a ile to piwo ma %? request(beer,percentage)
|
||||
system 0% alkoholu, 0% cukru, 0% niewegańskich składników inform(alcohol-content=0,sugar-content=0,non-vegan-ingredient=0)
|
||||
user wydaje się dobre, poproszę affirm()
|
||||
system podsuomwując: jedna pizza wegańska z ananasem, bez bananów oraz wegańskie piwo bezalkohlowe. Płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos? inform(order-summary)&request(payment-method)&request(collection-method)
|
||||
user Apple pay inform(payment-method=card)
|
||||
user Na wynos inform(collection-method=pickup)
|
||||
system Numer Pańskieg zamówienia: 86750, czy jest jeszcze coś w czym mogę Panu pomóc? inform(order=86750)&reqmore()
|
||||
user to wszystko, dziekuje bye()
|
||||
system Dziękujemy za skrzystanie z naszego systemu zamawiania pizzy i życzymy smacznego. Polecamy się na przyszło bye()
|
||||
|
|
@ -1,16 +1,17 @@
|
||||
user 2024-03-15 7:18 PM Dzień dobry, chciałbym złożyć zamówienie
|
||||
system 2024-03-15 7:18 PM Dzień dobry, dziękujemy za kontakt. Czy ma Pan wybraną pizzę?
|
||||
user 2024-03-15 7:19 PM A jakie są do wyboru?
|
||||
system 2024-03-15 7:19 PM W naszym menu znajduje się wiele rodzajów pizz. Na co ma Pan ochotę?
|
||||
user 2024-03-15 7:19 PM Na kurczaka
|
||||
system 2024-03-15 7:20 PM Polecam Pizzę di pollo
|
||||
user 2024-03-15 7:20 PM Jakie są inne składniki jej?
|
||||
system 2024-03-15 7:20 PM sos pomidorwy, mozarella, cebula i kawałki kurczaka
|
||||
user 2024-03-15 7:20 PM Okej, ile kosztuje i jaki rozmiar jest dostępny?
|
||||
system 2024-03-15 7:22 PM Nasze pizze oferujemy w rozmiarach maly, średni i duży. Cena zależy od tego czy chce Pan jakieś dodatki, czy wersję klasyczną.
|
||||
user 2024-03-15 7:22 PM Poproszę wersję klasyczną średnią. Ile będzie ona kosztować?
|
||||
system 2024-03-15 7:23 PM 36,99 plus płata klimatyczna. Weterani oraz hnorowi dawcy krwi mają u nas zniżkę 10%
|
||||
user 2024-03-15 7:23 PM Okej, to poproszę tą pizzę
|
||||
system 2024-03-15 7:24 PM Płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos?
|
||||
user 2024-03-15 7:25 PM Na wynos, płatność gotówką
|
||||
system 2024-03-15 7:25 PM Numer Pańskiego zamówienia to 86748, proszę zgłosić się do okienka odbioru.
|
||||
kto treść akt
|
||||
user Dzień dobry, chciałbym złożyć zamówienie welcomemsg()
|
||||
system Dzień dobry, dziękujemy za kontakt. Czy ma Pan wybraną pizzę? welcomemsg()&reqmore(pizza)
|
||||
user A jakie są do wyboru? request(menu)
|
||||
system W naszym menu znajduje się wiele rodzajów pizz. Na co ma Pan ochotę? reqmore()
|
||||
user Na kurczaka inform(ingredient=chicken)
|
||||
system Polecam Pizzę di pollo offer(pizza=di_pollo)
|
||||
user Jakie są inne składniki jej? request(ingredient)
|
||||
system sos pomidorwy, mozarella, cebula i kawałki kurczaka inform(sauce=tomato,ingredient=mozarella,ingredient=onion,ingredient=chicken)
|
||||
user Okej, ile kosztuje i jaki rozmiar jest dostępny? request(price,size)
|
||||
system Nasze pizze oferujemy w rozmiarach maly, średni i duży. Cena zależy od tego czy chce Pan jakieś dodatki, czy wersję klasyczną. select(menu)&reqmore(additional-ingredient)
|
||||
user Poproszę wersję klasyczną średnią. Ile będzie ona kosztować? inform(size=m)&request(price)
|
||||
system 36,99 plus płata klimatyczna. Weterani oraz hnorowi dawcy krwi mają u nas zniżkę 10% inform(price=36.99)&offer(discount=0.1,eligible=veterans,eligible=blood_donors)
|
||||
user Okej, to poproszę tą pizzę affirm()
|
||||
system Płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos? request(payment-method)&request(collection-method)
|
||||
user Na wynos, płatność gotówką inform(payment-method=cash)&inform(collection-method=pickup)
|
||||
system Numer Pańskiego zamówienia to 86748, proszę zgłosić się do okienka odbioru. inform(order-number=86748)&inform(address=local)
|
||||
|
|
@ -1,21 +1,20 @@
|
||||
user 2024-03-15 7:22 PM Dzień dobry
|
||||
system 2024-03-15 7:22 PM Dzień dobry, dziękujemy za kontakt. W czym mogę pmóc?
|
||||
user 2024-03-15 7:25 PM chciałbym zamówić pizzę wegetariańską w średnim rozmiarze
|
||||
system 2024-03-15 7:27 PM Oczywiście, czy chciałby Pan jakieś dodatki?
|
||||
user 2024-03-15 7:28 PM a co znajduje się domyślnie na takiej pizzy?
|
||||
system 2024-03-15 7:32 PM ser, mozarella, sos pomidorowy, cebula oraz karczochy
|
||||
user 2024-03-15 7:33 PM dobrze
|
||||
user 2024-03-15 7:33 PM w takim razie odpowiada
|
||||
user 2024-03-15 7:34 PM a rozmiar średni o ile jest mniejszy od dużego?
|
||||
system 2024-03-15 7:34 PM w jakim rozmiarze chciałby Pan tę pizzę?
|
||||
system 2024-03-15 7:34 PM rozmiar średni: 30 cm
|
||||
system 2024-03-15 7:34 PM rozmiar duży: 40 cm
|
||||
user 2024-03-15 7:37 PM w takim razie rozmiar duży jednak
|
||||
system 2024-03-15 7:38 PM Czy chciałby Pan coś do picia? Polecam dużą colę lub sprite
|
||||
user 2024-03-15 7:38 PM dużą colę poproszę, jednakże bez cukru
|
||||
system 2024-03-15 7:39 PM Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos?
|
||||
user 2024-03-15 7:41 PM Płatność będzie kartą. Zamówienie na wynos, ale odbiorę osobiście, poproszę jedynie podać przybliżony czas przygotowywania dania
|
||||
system 2024-03-15 7:42 PM Pizza powinna być gotowa w ciągu 30 minut. Numer Pańskieg zamówienia: 86749
|
||||
system 2024-03-15 7:42 PM Czy jest jeszcze coś w czym mogę Panu pomóc?
|
||||
user 2024-03-15 7:43 PM nie, dziękuję, to wszystko
|
||||
system 2024-03-15 7:43 PM Dziękujemy za skrzystanie z naszego systemu zamawiania pizzy i życzymy smacznego. Polecamy się na przyszłość
|
||||
kto treść akt
|
||||
user Dzień dobry welcomemsg()
|
||||
system Dzień dobry, dziękujemy za kontakt. W czym mogę pmóc? welcomemsg()
|
||||
user chciałbym zamówić pizzę wegetariańską w średnim rozmiarze inform(pizza=vegan,size=m)
|
||||
system Oczywiście, czy chciałby Pan jakieś dodatki? affirm()&reqmore(additional-ingredient)
|
||||
user a co znajduje się domyślnie na takiej pizzy? request(ingredient)
|
||||
system ser, mozarella, sos pomidorowy, cebula oraz karczochy offer(ingredient=cheese,ingredient=mozarella,sauce=tomato,ingredient=onion,ingredient=artichokes)
|
||||
user dobrze, w takim razie odpowiada affirm()
|
||||
user a rozmiar średni o ile jest mniejszy od dużego? request(size)
|
||||
system rozmiar średni: 30 cm inform(size=m,value=30)
|
||||
system rozmiar duży: 40 cm inform(size=l,value=40)
|
||||
user w takim razie rozmiar duży jednak inform(size=l)
|
||||
system Czy chciałby Pan coś do picia? Polecam dużą colę lub sprite reqmore(drink)&offer(drink=cola,size=l)&offer(drink=sprite)
|
||||
user dużą colę poproszę, jednakże bez cukru inform(drink=cola,sugar=no)
|
||||
system Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos? affirm()&request(payment-method)&request(collection-method)
|
||||
user Płatność będzie kartą. Zamówienie na wynos, ale odbiorę osobiście, poproszę jedynie podać przybliżony czas przygotowywania dania inform(payment-method=card)&inform(collection-method=pickup)&request(time)
|
||||
system Pizza powinna być gotowa w ciągu 30 minut. Numer Pańskieg zamówienia: 86749 inform(time=0.5)&inform(order-number=86749)
|
||||
system Czy jest jeszcze coś w czym mogę Panu pomóc? reqmore()
|
||||
user nie, dziękuję, to wszystko negate()&bye()
|
||||
system Dziękujemy za skrzystanie z naszego systemu zamawiania pizzy i życzymy smacznego. Polecamy się na przyszłość bye()
|
||||
|
|
@ -1,22 +1,23 @@
|
||||
user 2024-03-15 7:47 PM Cześć, jakim systemem jesteś?
|
||||
system 2024-03-15 7:48 PM Dzień dobry, witamy w systemie zamówień na pizzę. Polecam pizzę diavola z dodatkową rukolą.
|
||||
user 2024-03-15 7:49 PM Czy są dostępne jakieś promocje?
|
||||
system 2024-03-15 7:50 PM oczywiście, przy zakupie czterech dużych pizz otrzyma Pan jedną małą gratis
|
||||
user 2024-03-15 7:50 PM czy muszą być to takie same pizze czy mogą być dowolne?
|
||||
system 2024-03-15 7:51 PM oczywiście mogą być dowolne
|
||||
user 2024-03-15 7:52 PM w takim razie jakie są dostępne pizze?
|
||||
system 2024-03-15 7:53 PM Mamy wiele rodzajów, czy ma Pan ochotę na coś konkretnego?
|
||||
user 2024-03-15 7:55 PM chciałbym coś z ananasem
|
||||
system 2024-03-15 7:56 PM plecam pizzę ananasową. sos pomidorowy, mozarella, ananas i cebula
|
||||
user 2024-03-15 7:59 PM świetnie, w takim razie poproszę dwie duże pizzę ananasową, jedną dużą diavola oraz jako tą w gratisie margarite
|
||||
system 2024-03-15 7:59 PM oczywiście, czy chciałby Pan coś do picia?
|
||||
system 2024-03-15 8:00 PM polecam sok ananasowy
|
||||
user 2024-03-15 8:00 PM w takim razie poproszę jeden
|
||||
system 2024-03-15 8:01 PM Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos?
|
||||
user 2024-03-15 8:01 PM zapłacę kartą, dostawa
|
||||
system 2024-03-15 8:02 PM Poproszę podać adres oraz numer karty. Zamówienie będzie gotowe w przeciągu 30 minut
|
||||
user 2024-03-15 8:05 PM adres Lipinki Łużyckie, Łączna 43. Karta XXXXXXX
|
||||
system 2024-03-15 8:05 PM Numer Pańskieg zamówienia: 86751, czy jest jeszcze coś w czym mogę Panu pomóc?
|
||||
user 2024-03-15 8:08 PM tak, wiem że po fakcie, ale chciałbym zapytać ile mnie wyniosło zamówienie
|
||||
system 2024-03-15 8:09 PM zamówienie wynosi 180 zł plus opłata klimatyczna.
|
||||
user 2024-03-15 8:10 PM dziękuję bardzo
|
||||
kto treść akt
|
||||
user Cześć, jakim systemem jesteś? welcomemsg()
|
||||
system Dzień dobry, witamy w systemie zamówień na pizzę. Polecam pizzę diavola z dodatkową rukolą. welcomemsg()&offer(pizza=diavola,additional-ingredient=argula)
|
||||
user Czy są dostępne jakieś promocje? request(promo)
|
||||
system oczywiście, przy zakupie czterech dużych pizz otrzyma Pan jedną małą gratis offer(quantity=4,additional-size=s,price=0)
|
||||
user czy muszą być to takie same pizze czy mogą być dowolne? request(promo,pizza-type)
|
||||
system oczywiście mogą być dowolne inform(pizza-type=various)
|
||||
user w takim razie jakie są dostępne pizze? request(menu)
|
||||
system Mamy wiele rodzajów, czy ma Pan ochotę na coś konkretnego? reqmore()
|
||||
user chciałbym coś z ananasem inform(ingredient=pineapple)
|
||||
system plecam pizzę ananasową. sos pomidorowy, mozarella, ananas i cebula offer(pizza=pineapple,ingredient=tomato_souce,ingredient=mozarella,ingredient=pineapple,ingredient=onion)
|
||||
user świetnie, w takim razie poproszę dwie duże pizzę ananasową, jedną dużą diavola oraz jako tą w gratisie margarite inform(quantity=2,pizza=pineapple,size=l)&inform(quantity=1,pizza=diavola,size=l)&request(pizza=margarita,size=s)
|
||||
system oczywiście, czy chciałby Pan coś do picia? affirm()&reqmore(drink)
|
||||
system polecam sok ananasowy offer(drink=pineapple_juice)
|
||||
user w takim razie poproszę jeden inform(quantity=1)
|
||||
system Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos? request(payment-method)&request(collection-method)
|
||||
user zapłacę kartą, dostawa inform(payment-method=card)&inform(collection-method=pickup)
|
||||
system Poproszę podać adres oraz numer karty. Zamówienie będzie gotowe w przeciągu 30 minut request(card-number)&inform(time=0.5)
|
||||
user adres Lipinki Łużyckie, Łączna 43. Karta XXXXXXX inform(address=Lipinki Łużyckie, Łączna 43)&inform(card-number=XXXXXXX)
|
||||
system Numer Pańskieg zamówienia: 86751, czy jest jeszcze coś w czym mogę Panu pomóc? inform(order-number)&reqmore()
|
||||
user tak, wiem że po fakcie, ale chciałbym zapytać ile mnie wyniosło zamówienie request(price)
|
||||
system zamówienie wynosi 180 zł plus opłata klimatyczna. inform(price=180)
|
||||
user dziękuję bardzo bye()
|
||||
|
|
10
data/dialog-05-02-01.tsv
Normal file
10
data/dialog-05-02-01.tsv
Normal file
@ -0,0 +1,10 @@
|
||||
kto treść akt
|
||||
user Dzień dobry co mogę tu zamówić welcomemsg()&request(menu)
|
||||
system Dzień dobry,\nOferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm) welcomemsg()
|
||||
user chciałabym pizzę capri w rozmiarze M inform(pizza=capri,size=m)
|
||||
system Czy życzy sobie Pani coś jeszcze? reqalts()
|
||||
user nie negate()
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza capri M - 40ł\nPotwierdza Pan zamówienie? request(confirm)
|
||||
user tak gdzie mogę odebrać? affirm()&request(address)
|
||||
system Można odebrać na ulicy Poznańskiej 7.\nZamówienie będzie gotowe za 30min.\nŻyczę smacznego inform(address=Poznańskiej 7,time=30)&bye()
|
||||
user dziękuję bye()
|
|
9
data/dialog-05-04-01.tsv
Normal file
9
data/dialog-05-04-01.tsv
Normal file
@ -0,0 +1,9 @@
|
||||
kto treść akt
|
||||
user Dzień dobry, chciałbym zamówić pizzę. request(menu)
|
||||
system Dzień dobry,\nOferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm) inform(menu)
|
||||
user jaka to jest pizza barcelona? request(barcelona)
|
||||
system Pizza barcelona posiada: pomidory, cebulę i szynkę. inform(pizza=barcelona)
|
||||
user to poproszę inform(pizza=barcelona)
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza barcelona L (szynka parmeńska) - 45ł\nPotwierdza Pan zamówienie? inform(pizza=barcelona,size=l,price=45)
|
||||
user tak, odbiorę na miejscu inform(collection-method=pickup)
|
||||
system Zamówienie będzie gotowe za 30min.\nŻyczę smacznego bye()
|
|
@ -1,16 +1,14 @@
|
||||
kto treść
|
||||
user Dzień dobry.
|
||||
system Dzień dobry. W czym mogę pomóc?
|
||||
user Jakie usługi są oferowane?
|
||||
system Oferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm)
|
||||
user Z czym jest pizza capri?
|
||||
system W pizza capri zawiera się: ser mozzarella, pieczoną szynkę, grzyby, pomidory i karczochy.\nMam dodać do zamówienia?
|
||||
user Tak, tylko karczochy na poproszę do osobnego opakowania.\nTo poproszę capri XL (karczochy osobno), oraz hawajską L.
|
||||
system Życzy Pan sobie jakieś dodatki? Oferujemy napój gazowany pepsi/cola
|
||||
user Poproszę pepsi, najlepiej bez cukru, ale może być z cukrem od biedy.
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza capri XL (karczochy osobno) - 60zł\npizza hawajska L - 20zł\npepsi 200ml - 5zł\nRazem będzie 85zł.\nPotwierdza Pan zamówienie?
|
||||
user Tak.
|
||||
system Poproszę adres dostawy.
|
||||
user Uniwersytetu Poznańskiego 4
|
||||
system Zamówienie otrzyma Pan za 30min.\nŻyczę smacznego
|
||||
user Pozdrawiam.
|
||||
kto treść akt
|
||||
user Dzień dobry. welcomemsg()
|
||||
system Dzień dobry. Oferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm). welcomemsg()
|
||||
user Z czym jest pizza capri? request(pizza,capri)
|
||||
system W pizza capri zawiera się: ser mozzarella, pieczoną szynkę, grzyby, pomidory i karczochy.\nMam dodać do zamówienia? inform(ingredient=ser,ingredient=ham)
|
||||
user Tak, tylko karczochy na poproszę do osobnego opakowania.\nTo poproszę capri XL (karczochy osobno), oraz hawajską L. inform(pizza=capri,size=xl,comment=karczochy osobno)&inform(pizza=hawajska,size=l)
|
||||
system Życzy Pan sobie jakieś dodatki? Oferujemy napój gazowany pepsi/cola. offer(drink=cola)
|
||||
user Poproszę pepsi, najlepiej bez cukru, ale może być z cukrem od biedy. inform(drink=cola,sugar=no)
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza capri XL (karczochy osobno) - 60zł\npizza hawajska L - 20zł\npepsi 200ml - 5zł\nRazem będzie 85zł.\nPotwierdza Pan zamówienie? inform(order)
|
||||
user Tak. affirm()
|
||||
system Poproszę adres dostawy. request(delivery)
|
||||
user Uniwersytetu Poznańskiego 4 inform(address=Uniwersytetu Poznańskiego 4)
|
||||
system Zamówienie otrzyma Pan za 30min.\nŻyczę smacznego. bye()
|
||||
user Pozdrawiam. bye()
|
||||
|
|
@ -1,21 +1,18 @@
|
||||
kto treść
|
||||
user Cześć
|
||||
system Dzień dobry. W czym mogę pomóc?
|
||||
user Kim jesteś?
|
||||
system Jestem wirtualnym asystentem restauracji 'pizzeria'.\nOferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm)
|
||||
user Z czym jest pizza barcelona?
|
||||
system Pizza barcelona posiada: pomidory, cebulę i szynkę.
|
||||
user Jakie dodatki można dodać do tej pizzy?
|
||||
system Do każdej pizzy istnieje ten sam zestaw dodatków są to: szynka, kawałki kurczaka, papryczka jalapeno, czosnek, karczoch, pomidor, papryka czerwona, ser, cebula, mięta
|
||||
user To ja chętnie zamówię pizzę barcelona z dodatkiem świerzej mięty
|
||||
system Życzy Pan sobie do tego jakiś napój?
|
||||
user A jakie so?
|
||||
system Oferujemy: napój gazowany pepsi/cola, sok jabłkowy, sok pomarańczowy, woda
|
||||
user Czy jest woda gazowana?
|
||||
system Niestety, tylko woda kranowa jest dostępna
|
||||
user A jak ona jest dostarczona?
|
||||
system Jest ona nalewana do butelki, i otrzymuję ją Pan razem z resztą zamówienia
|
||||
user to poproszę tę kranówkę\nhttps://www.youtube.com/watch?v=tg11BEX6dHw\nTrzaskowski próbuje wodę z kranu. - YouTube\nPyszna Coca-Cola z Wisły. Palce lizać.
|
||||
system Przepraszam, nie zrozumiałem.
|
||||
user Proszę dodać wodę do zamówienia
|
||||
system Zamówienie to:\nPizza barcelona z dodatkiem świeżej mięty - 40zł\nWoda kranowa 200ml - 10zł\nRazem 50zł.\nPoproszę adres dostawy
|
||||
kto treść akt
|
||||
user Cześć welcomemsg()
|
||||
system Dzień dobry. Jestem wirtualnym asystentem restauracji 'pizzeria'.\nOferujemy pizze:\nmargharita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach M (31cm), L (41cm) , XL (52cm). welcomemsg()
|
||||
user Z czym jest pizza barcelona? request(barcelona)
|
||||
system Pizza barcelona posiada: pomidory, cebulę i szynkę. inform(pizza=barcelona,ingredient=tomato,ingredient=onion,ingredient=ham)
|
||||
user Jakie dodatki można dodać do tej pizzy? request(additional_ingredient)
|
||||
system Do każdej pizzy istnieje ten sam zestaw dodatków są to: szynka, kawałki kurczaka, papryczka jalapeno, czosnek, karczoch, pomidor, papryka czerwona, ser, cebula, mięta inform(additional_ingredient)
|
||||
user To ja chętnie zamówię pizzę barcelona z dodatkiem świeżej mięty request(pizza=barcelona,pizza.ingredient=mint)
|
||||
system Życzy Pan sobie do tego jakiś napój? offer(drink)
|
||||
user A jakie so? request(drink)
|
||||
system Oferujemy: napój gazowany pepsi/cola, sok jabłkowy, sok pomarańczowy, woda inform(drink=pepsi,drink=cola,drink=apple_juice,drink=orange_juice,drink=water)
|
||||
user Czy jest woda gazowana? request(drink=still_water)
|
||||
system Niestety, tylko woda kranowa jest dostępna offer(drink=tap_water)
|
||||
user to poproszę tę kranówkę\nhttps://www.youtube.com/watch?v=tg11BEX6dHw\nTrzaskowski próbuje wodę z kranu. - YouTube\nPyszna Coca-Cola z Wisły. Palce lizać. error()
|
||||
system Przepraszam, nie zrozumiałem. canthelp()
|
||||
user Proszę dodać wodę do zamówienia inform(drink=tap_water)
|
||||
system Zamówienie to:\nPizza barcelona z dodatkiem świeżej mięty - 40zł\nWoda kranowa 200ml - 10zł\nRazem 50zł.\nPoproszę adres dostawy inform(pizza=price=40)
|
||||
user Odbiorę na miejscu inform(delivery=none)
|
||||
|
|
@ -1,21 +1,21 @@
|
||||
kto treść
|
||||
user Jakim systemem jesteś, co oferujesz?
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc?
|
||||
user Chcialbym zamowic pizze peperoni
|
||||
system Niestety w naszym menu nie oferujemy pizzy z pepperoni, dostępne opcje to:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna
|
||||
user A jest cos z salami?
|
||||
system Niestety, do wyboru mamy szynkę, kurczaka lub tuńczyka.
|
||||
user To poprosze margharite, czy jest mozliwosc podmiany sosu pomidorowego na smietanowy?
|
||||
system Niestety nie.
|
||||
user To poprosze margharite zwykla
|
||||
system Oferujemy 3 rozmiary: M, L, XL. Czy interesuję Cie rozmiar M (31cm?)
|
||||
user Tak
|
||||
system Koszt to 25zł, koszt dostawy 5zł. Czy coś jeszcze chce Pan zamówić?
|
||||
user Czy istnieje darmowa dostawa?
|
||||
system Niestety nie.
|
||||
user To prosze o realizacje zamowienia
|
||||
system Jaki adres dostawy?
|
||||
user 1312-123, test, test
|
||||
system Bardzo urokliwa okolica. Sumaryczny koszt to 30zł. Kurier dotrze do Pana w ciągu godziny, dziękuję i zapraszamy ponownie!
|
||||
user Prosze aby kurier zadzwonil na moj numer jak przyjedzie: nr: 31312312312312313
|
||||
system Kurier zostanie poinformowany.
|
||||
kto treść akt
|
||||
user Jakim systemem jesteś, co oferujesz? welcomemsg()
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc? welcomemsg()
|
||||
user Chcialbym zamowic pizze peperoni inform(pizza=peperoni)
|
||||
system Niestety w naszym menu nie oferujemy pizzy z pepperoni, dostępne opcje to:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna canthelp(pizza=pepperoni)&select(menu)
|
||||
user A jest cos z salami? inform(ingredient=salami)
|
||||
system Niestety, do wyboru mamy szynkę, kurczaka lub tuńczyka. canthelp(ingredient=salami)&select(meat)
|
||||
user To poproszę margharite, czy jest mozliwosc podmiany sosu pomidorowego na smietanowy? inform(pizza=margarita,sauce=creamy)
|
||||
system Niestety nie. canthelp(sauce=creamy)
|
||||
user To poproszę margharite zwykla inform(pizza=margarita,size=m)
|
||||
system Oferujemy 3 rozmiary: M, L, XL. Czy interesuję Cie rozmiar M (31cm?) offer(size=m)
|
||||
user Tak affirm()
|
||||
system Koszt to 25zł, koszt dostawy 5zł. Czy coś jeszcze chce Pan zamówić? inform(price=30)&reqmore()
|
||||
user Czy istnieje darmowa dostawa? inform(deliveryprice=free)
|
||||
system Niestety nie. canthelp(deliveryprice=free)
|
||||
user To proszę o realizację zamówienia inform(order=complete)
|
||||
system Jaki adres dostawy? request(address)
|
||||
user Kasztanowa 13/123, Toruń inform(address=Kasztanowa 13/123, Toruń)
|
||||
system Bardzo urokliwa okolica. Sumaryczny koszt to 30zł. Kurier dotrze do Pana w ciągu godziny, dziękuję i zapraszamy ponownie! inform(time=1,price=30)
|
||||
user Proszę aby kurier zadzwonił na mój numer jak przyjedzie: nr: 213 532 212 inform(phone=213532212)
|
||||
system Kurier zostanie poinformowany. affirm()&bye()
|
||||
|
|
@ -1,28 +1,26 @@
|
||||
kto treść
|
||||
user Jestem głodny chciałbym zamówić kebaba
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', niestety w naszej ofercie nie ma kebaba. W naszej ofercie znajduję się tylko pizza.
|
||||
user a jakie rodzaje pizzy? jakie kompozycje składników?
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. Najpopularniejszym wyborem jest 'margharita' - ciasto, sos, ser.
|
||||
user jak duża jest pizza L?\nchciałbym taką z ananasem pizze\nczy jest?
|
||||
system Pizza L ma 41cm średnicy. Mogę zaproponować Panu pizzę 'hawajska' - ciasto, sos, szynka, ser, ananas.
|
||||
user a czy można bez szynki?
|
||||
system Tak.
|
||||
user Jaka cena?
|
||||
system 27zł za pizzę L hawajska bez szynki.
|
||||
user a jaka cena dowozu?
|
||||
system 5zł.
|
||||
user za kilometr?
|
||||
system Zamówienia na terenie miasta, koszt to 5zł.
|
||||
user okej to poproszę, czy są dostępne jakieś sosy?
|
||||
system Tak, sos czosnkowy lub tysiąca wysp.
|
||||
user czy sos dodatkowo kosztuje?
|
||||
system Nie, jest w cenie.
|
||||
user a są do tego jakieś napoje?
|
||||
system Pepsi, Cola, Woda mineralna.
|
||||
user jaka cena coli?
|
||||
system 5zł.
|
||||
user to poprosze\nPotwierdzam zamowienie
|
||||
system Bardzo proszę, pizza L hawajska bez szynki, cola. Koszt 37zł, płatność przy odbiorze. Na jaki adres?
|
||||
user 62-200 Gniezno, osiedle Grunwaldzkie 21/3117\njaki czas oczekiwania?
|
||||
system Kurier dotrze do Pana w przeciągu godziny. Dziękuję i zapraszamy ponownie!
|
||||
user Dziekuje
|
||||
kto treść akt
|
||||
user Jestem głodny chciałbym zamówić kebaba welcomemsg()&inform(food=kebab)
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', niestety w naszej ofercie nie ma kebaba. W naszej ofercie znajduję się tylko pizza. welcomemsg()&canthelp(food=kebab)&inform(food=pizza)
|
||||
user a jakie rodzaje pizzy? jakie kompozycje składników? request(menu)
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. Najpopularniejszym wyborem jest 'margharita' - ciasto, sos, ser. select(menu,ingredient)
|
||||
user jak duża jest pizza L?\nchciałbym taką z ananasem pizze\nczy jest? inform(size=L,pizza=hawajska)
|
||||
system Pizza L ma 41cm średnicy. Mogę zaproponować Panu pizzę 'hawajska' - ciasto, sos, szynka, ser, ananas. impl-conf(size=L)&offer(pizza=hawajska)
|
||||
user a czy można bez szynki? inform(ingredient!=ham)
|
||||
system Tak. expl-conf(ingredient!=ham)
|
||||
user Jaka cena? request(price)
|
||||
system 27zł za pizzę L hawajska bez szynki. inform(price=27,size=L,ingredient!=ham,pizza=hawajska)
|
||||
user a jaka cena dowozu? request(deliveryprice)
|
||||
system 5zł. inform(deliveryprice=5)
|
||||
user okej to poproszę, czy są dostępne jakieś sosy? affirm()&request(sauce)
|
||||
system Tak, sos czosnkowy lub tysiąca wysp. select(sauce)
|
||||
user czy sos dodatkowo kosztuje? request(price)
|
||||
system Nie, jest w cenie. inform(price=0)
|
||||
user a są do tego jakieś napoje? request(drink)
|
||||
system Pepsi, Cola, Woda mineralna. select(drink)
|
||||
user jaka cena coli? inform(drink=cola)&request(price)
|
||||
system 5zł. inform(drink=cola,price=5)
|
||||
user to poproszę. Potwierdzam zamowienie inform(order=complete)
|
||||
system Bardzo proszę, pizza L hawajska bez szynki, cola. Koszt 37zł, płatność przy odbiorze. Na jaki adres? inform(price=37)&request(address)
|
||||
user 62-200 Gniezno, osiedle Grunwaldzkie 21/3117\njaki czas oczekiwania? inform(address=62-200 Gniezno osiedle Grunwaldzkie 21/3117)&request(time)
|
||||
system Kurier dotrze do Pana w przeciągu godziny. Dziękuję i zapraszamy ponownie! inform(time=1)&bye()
|
||||
user Dziekuje bye()
|
||||
|
|
@ -1,11 +1,11 @@
|
||||
kto treść
|
||||
user Dzień dobry, chciałbym zamówić pizzę
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria'. W menu oferujemy:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna
|
||||
user W jakich rozmiarach są pizze?
|
||||
system Pizze są w rozmiarach M (31cm), L (41cm), XL (52cm).
|
||||
user Poprosiłbym Tuna XL
|
||||
system Bardzo proszę, koszt Tuna XL to 45zł. Czy coś jeszcze chce Pan zamówić?
|
||||
user Nie, to wszystko
|
||||
system Bardzo proszę, jaki adres dostawy?
|
||||
user Głogowska 0/4\nKiedy mogę się spodziewać dostawy?
|
||||
system Kurier dotrze do Pana w przeciągu godziny, dziękuję i zapraszamy ponownie!\nlike 1
|
||||
kto treść akt
|
||||
user Dzień dobry, chciałbym zamówić pizzę welcomemsg()
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria'. W menu oferujemy:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna welcomemsg()&select(menu)
|
||||
user W jakich rozmiarach są pizze? request(size)
|
||||
system Pizze są w rozmiarach M (31cm), L (41cm), XL (52cm). select(size)
|
||||
user Poprosiłbym Tuna XL inform(pizza=tuna,size=xl)
|
||||
system Bardzo proszę, koszt Tuna XL to 45zł. Czy coś jeszcze chce Pan zamówić? inform(pizza=tuna,size=xl,price=45)&reqmore()
|
||||
user Nie, to wszystko inform(order=complete)
|
||||
system Bardzo proszę, jaki adres dostawy? request(address)
|
||||
user Głogowska 0/4\nKiedy mogę się spodziewać dostawy? inform(address=Głogowska 0/4)&request(time)
|
||||
system Kurier dotrze do Pana w przeciągu godziny, dziękuję i zapraszamy ponownie!\nlike 1 inform(time=1)&goodbye()
|
||||
|
|
@ -1,14 +1,14 @@
|
||||
kto treść
|
||||
user Dzień dobry
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc?
|
||||
user Chciałbym zamówić pizzę
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. Najpopularniejszym wyborem jest 'margharita', składniki to: ciasto, sos, ser.
|
||||
user Chciałbym pizzę z mięsem
|
||||
system Niestety w naszym menu nie oferujemy pizzy z mięsem, dostępne opcje to:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna
|
||||
user w takim razie poproszę pizzę barcelona w rozmiarze XL
|
||||
system Proszę uprzejmie, jedna pizza barcelona XL (40zł) wraz z dostawą (5zł), to 45zł. Czy coś jeszcze chce Pan zamówić?
|
||||
user Napój typu pepsi cola w puszczce, ale żeby była zimna i bez cukru
|
||||
system Bardzo proszę, informację przekaże kurierowi, koszt to 50zł przy odbiorze. Proszę podać adres dostawy.
|
||||
user ulica niebieska 230/2
|
||||
system Kurier dotrze do Pana w przeciągu godziny. Zapraszamy ponownie!
|
||||
user dziękuję
|
||||
kto treść akt
|
||||
user Dzień dobry welcomemsg()
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc? welcomemsg()
|
||||
user Chciałbym zamówić pizzę request(menu)
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. Najpopularniejszym wyborem jest 'margharita', składniki to: ciasto, sos, ser. select(dough,size)&offer(pizza=margarita)
|
||||
user Chciałbym pizzę z mięsem inform(ingredient=meat)
|
||||
system Niestety w naszym menu nie oferujemy pizzy z mięsem, dostępne opcje to:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna canthelp(ingredient=meat)&select(menu)
|
||||
user w takim razie poproszę pizzę barcelona w rozmiarze XL inform(pizza=barcelona,size=xl)
|
||||
system Proszę uprzejmie, jedna pizza barcelona XL (40zł) wraz z dostawą (5zł), to 45zł. Czy coś jeszcze chce Pan zamówić? expl-conf(pizza=barcelona,price=45,size=xl)
|
||||
user Napój typu pepsi cola w puszczce, ale żeby była zimna i bez cukru inform(drink=pepsi,temperature=cold,sugar=0)
|
||||
system Bardzo proszę, informację przekaże kurierowi, koszt to 50zł przy odbiorze. Proszę podać adres dostawy. inform(price=50)&request(address)
|
||||
user ulica niebieska 230/2 inform(address=ulica niebieska 230/2)
|
||||
system Kurier dotrze do Pana w przeciągu godziny. Zapraszamy ponownie! inform(time=1)&bye()
|
||||
user dziękuję bye()
|
||||
|
|
@ -1,14 +1,14 @@
|
||||
kto treść
|
||||
user Cześć, jakim systemem jesteś?
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc?
|
||||
user Chciałbym zamówić pizzę
|
||||
system Jaką pizzę sobie życzysz? W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL.
|
||||
user Czy jest możliwość zamówienia pizzy pół na pół?
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL.
|
||||
user jakie pizze są w menu?
|
||||
system W ofercie na ten moment mamy:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna
|
||||
user w takim razie poproszę 4x margarite XL
|
||||
system Proszę uprzejmie, koszt zamówienia to 120zł, płatność na miejscu. Na jaki adres?
|
||||
user Lipinki Łużyckie, Łączna 46
|
||||
system Kurier dotrze do Pana z zamówieniem w przeciągu godziny - nr zamówienia to 009871. Zapraszamy ponownie!
|
||||
user Dzięki!
|
||||
kto treść akt
|
||||
user Cześć, jakim systemem jesteś? welcomemsg()
|
||||
system Dzień dobry, witamy w restauracji 'pizzeria', jak mogę pomóc? welcomemsg()
|
||||
user Chciałbym zamówić pizzę request(menu)
|
||||
system Jaką pizzę sobie życzysz? W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. select(dough,size)
|
||||
user Czy jest możliwość zamówienia pizzy pół na pół? inform(pizza=mix)
|
||||
system W ofercie mamy pizzę na grubym cieście, w 3 dostępnych rozmiarach, M, L, XL. canthelp(pizza=mix)&select(dough,size)
|
||||
user jakie pizze są w menu? request(menu)
|
||||
system W ofercie na ten moment mamy:\n- margharita\n- capri\n- hawajska\n- barcelona\n- tuna select(menu)
|
||||
user w takim razie poproszę 4x margarite XL inform(pizza=margarita,size=xl,quantity=4)
|
||||
system Proszę uprzejmie, koszt zamówienia to 120zł, płatność na miejscu. Na jaki adres? inform(price=120,payment=cash)&request(address)
|
||||
user Lipinki Łużyckie, Łączna 46 inform(address=Lipinki Łużyckie Łączna 46)
|
||||
system Kurier dotrze do Pana z zamówieniem w przeciągu godziny - nr zamówienia to 009871. Zapraszamy ponownie! inform(order=009871,time=1)&bye()
|
||||
user Dzięki! bye()
|
||||
|
|
9
data/dialog-07-02-01.tsv
Normal file
9
data/dialog-07-02-01.tsv
Normal file
@ -0,0 +1,9 @@
|
||||
kto treść akt
|
||||
user Dzień dobry, chciałbym zamówić pizzę. welcomemsg()
|
||||
system Dzień dobry. Oferujemy pizze:\nmargarita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach m (31cm), l (41cm) , xl (52cm). welcomemsg()&inform(menu)
|
||||
user Poproszę pizzę hawajską w rozmiarze xl. inform(pizza=hawajska,size=xl)
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza hawajska w rozmiarze xl - 42zł\nPotwierdza Pan zamówienie? affirm()&expl-conf(pizza=hawajska,size=xl)&inform(price=42)
|
||||
user tak, odbiorę na miejscu affirm()&inform(collection-method=pickup)
|
||||
system Poproszę adres request(address)
|
||||
user Kolorowa 3 inform(address=Kolorowa 3)
|
||||
system Kurier będzie u Państwa za około godzinę.\nŻyczę smacznego inform(time=0.5)&bye()
|
|
7
data/dialog-07-04-01.tsv
Normal file
7
data/dialog-07-04-01.tsv
Normal file
@ -0,0 +1,7 @@
|
||||
kto treść akt
|
||||
user Witam, jakie pizze mają pańśtwo w ofercie? welcomemsg()&request(menu)
|
||||
system Dzień dobry. Oferujemy pizze:\nmargarita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach m (31cm), l (41cm) , xl (52cm). welcomemsg()&select(menu)
|
||||
user W takim razie chciałbym pizzę margarita w rozmiarze l. inform(pizza=margarita,size=l)
|
||||
system Rozumiem.\nCałość zamówienia to:\npizza margarita w rozmiarze l - razem 35ł\nZgadza się? affirm()&expl-conf(pizza=margarita,size=l)&inform(price=24)
|
||||
user tak, odbiorę osobiście affirm()&inform(collection-method=pickup)
|
||||
system Zamówienie będzie gotowe do odbioru za około godzinę.\nŻyczę smacznego inform(time=1)&bye()
|
|
@ -1,16 +1,16 @@
|
||||
kto treść
|
||||
user Dzień dobry.
|
||||
system Dzień dobry, witam w naszej pizzeri. W czym mogę pomóc?
|
||||
user Chciałbym zamówić pizzę z kurczakiem, pieczarkami, i serem.
|
||||
system a jaki rozmiar pizzy?\nMamy do wyboru M, L oraz XL
|
||||
user To poproszę L.\nMają Państwo jakieś napoje w ofercie?
|
||||
system tak, mamy soki natrualne oraz lemoniady różnych smakach
|
||||
user to poproszę lemoniadę z cytryny arbuzowej
|
||||
system Niestety, nie posiadamy takiego smaku w ofercie. Mamy do wyboru soki naturalne w smakach: jabłkowy, pomarańczowy, truskawkowy, winogronowy oraz lemioniady: cytrynową, czereśniową oraz truskawkową
|
||||
user to truskawkową lemoniadę poproszę
|
||||
system Dobrze, czy zamówienie będzie z dowozem, czy odbiór osobisty?
|
||||
user Z dowozem.
|
||||
system Dobrze, proszę podać adres
|
||||
user Uniwersytetu Poznańskiego 4
|
||||
system Dobrze, cena końcowa to 36,43zł, kurier będzie u Pana w ciągu 30 minut. Pozdrawiam i zapraszam ponownie
|
||||
user Pozdrawiam.
|
||||
kto treść akt
|
||||
user Dzień dobry. welcomemsg()
|
||||
system Dzień dobry. Oferujemy pizze:\nmargarita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach m (31cm), l (41cm) , xl (52cm). welcomemsg()&inform(menu)
|
||||
user Chciałbym zamówić pizzę barcelona. inform(pizza=barcelona)
|
||||
system a jaki rozmiar pizzy?\nMamy do wyboru m, l oraz xl request(size)&inform(size)
|
||||
user To poproszę l.\nMają Państwo jakieś napoje w ofercie? inform(size=l)&request(drink)
|
||||
system tak, pespi, colę oraz wodę select(drink)
|
||||
user to poproszę sprite inform(drink=sprite)
|
||||
system Niestety, nie posiadamy sprite w ofercie. pespi, colę oraz wodę canthelp(drink=sprite)&select(drink)
|
||||
user to poproszę colę inform(drink=cola)
|
||||
system Dobrze, czy zamówienie będzie z dowozem, czy odbiór osobisty? affirm()&request(delivery)
|
||||
user Z dowozem. inform(collection-method=delivery)
|
||||
system Dobrze, proszę podać adres request(address)
|
||||
user Uniwersytetu Poznańskiego 4 inform(address=Uniwersytetu Poznańskiego 4)
|
||||
system Dobrze, cena końcowa to 58zł, kurier będzie u Pana w ciągu 30 minut. Pozdrawiam i zapraszam ponownie affirm()&inform(price=58)&inform(time=0.5)&bye()
|
||||
user Pozdrawiam. bye()
|
||||
|
|
@ -1,16 +1,16 @@
|
||||
kto treść
|
||||
user Witam
|
||||
system Dzień dobry, witam w naszej restauracji Pizzeria. W czym mogę pomóc?
|
||||
user Chcę jeść pickę
|
||||
system Jaki rodzaj pizzy sobie Pan życzy, oraz jaki rozmiar?
|
||||
user Jakie są w ofercie?
|
||||
system Pizzar romana\nPiadina\nPizza amerkańska\nFritta pizza\npizza siciliana\nPizza wegeteriańska z ananasem\nWszystkie dostępne w rozmiarach mała (18cm), średnia(29cm) lub duża(44cm).
|
||||
user Chciałbym pizzę wegetariańską ale bez ananasa
|
||||
system Manualne dostosowywanie pizzy to dodatkowy koszt 10 zł. Czy to Panu odpowiada?
|
||||
user Nie odpowiada. Sam se ananasa wyjme i wyrzuce
|
||||
system Czyli Pana zamówienie to duża pizza wegetariańska z ananasem?
|
||||
user Tak poproszę
|
||||
system Będzie dowóz czy osobisty odbiór?
|
||||
user Odbiór osobisty
|
||||
system W takim razie zapraszam po odbiór za pół godziny\nPozdrawiam i zapraszam ponownie
|
||||
user Dziękuję serdecznie
|
||||
kto treść akt
|
||||
user Witam welcomemsg()
|
||||
system Dzień dobry, witam w naszej restauracji Pizzeria. W czym mogę pomóc? welcomemsg()&request(order)
|
||||
user Chcę jeść pickę request(pizza)
|
||||
system Jaki rodzaj pizzy sobie Pan życzy, oraz jaki rozmiar? request(type,size)
|
||||
user Jakie są w ofercie? request(menu)
|
||||
system Oferujemy pizze:\nmargarita\ncapri\nhawajska\nbarcelona\ntuna\nWystępują w rozmiarach m (31cm), l (41cm) , xl (52cm). select(menu)
|
||||
user Chciałbym pizzę hawajska ale bez ananasa inform(pizza=hawajska,ingredient!=pineapple)
|
||||
system Manualne dostosowywanie pizzy to dodatkowy koszt 10 zł. Czy to Panu odpowiada? inform(cost=10)
|
||||
user Nie odpowiada. Sam se ananasa wyjme i wyrzuce negate()&inform(pizza=hawajska)
|
||||
system Czyli Pana zamówienie to duża pizza wegetariańska z ananasem? expl-conf(pizza=hawajska)
|
||||
user Tak poproszę affirm(pizza=hawajska)
|
||||
system Będzie dowóz czy osobisty odbiór? request(delivery)
|
||||
user Odbiór osobisty inform(delivery=self-pickup)
|
||||
system W takim razie zapraszam po odbiór za pół godziny\nPozdrawiam i zapraszam ponownie inform(time=0.5h)&bye()
|
||||
user Dziękuję serdecznie bye()
|
||||
|
|
30
data/raw/dialog-05-02-01.txt
Normal file
30
data/raw/dialog-05-02-01.txt
Normal file
@ -0,0 +1,30 @@
|
||||
[15.03 20:05] Anna Śmigiel
|
||||
Dzień dobry co mogę tu zamówić
|
||||
[15.03 20:06] Patryk Osiński
|
||||
Dzień dobry,
|
||||
Oferujemy pizze:
|
||||
margharita
|
||||
capri
|
||||
hawajska
|
||||
barcelona
|
||||
tuna
|
||||
Występują w rozmiarach M (31cm), L (41cm) , XL (52cm)
|
||||
[15.03 20:07] Anna Śmigiel
|
||||
chciałabym pizzę capri w rozmiarze M
|
||||
[15.03 20:09] Patryk Osiński
|
||||
Czy życzy sobie Pani coś jeszcze?
|
||||
[15.03 20:10] Anna Śmigiel
|
||||
nie
|
||||
[15.03 20:11] Patryk Osiński
|
||||
Rozumiem.
|
||||
Całość zamówienia to:
|
||||
pizza capri M - 40ł
|
||||
Potwierdza Pan zamówienie?
|
||||
[15.03 20:13] Anna Śmigiel
|
||||
tak gdzie mogę odebrać?
|
||||
[15.03 20:13] Patryk Osiński
|
||||
MNożna odebrać na ulicy Poznańskiej 7.
|
||||
Zamówienie będzie gotowe za 30min.
|
||||
Życzę smacznego
|
||||
[15.03 20:14] Anna Śmigiel
|
||||
dziękuję
|
35
data/raw/dialog-05-04-01.txt
Normal file
35
data/raw/dialog-05-04-01.txt
Normal file
@ -0,0 +1,35 @@
|
||||
[15.03 20:15] Michał Kasprowicz
|
||||
Dzień dobry, chciałbym zamówić pizzę.
|
||||
[15.03 20:16] Patryk Osiński
|
||||
Dzień dobry,
|
||||
Oferujemy pizze:
|
||||
margharita
|
||||
capri
|
||||
hawajska
|
||||
barcelona
|
||||
tuna
|
||||
Występują w rozmiarach M (31cm), L (41cm) , XL (52cm)
|
||||
[15.03 20:17] Michał Kasprowicz
|
||||
jaka to jest pizza barcelona?
|
||||
[15.03 20:19] Patryk Osiński
|
||||
Pizza barcelona posiada: pomidory, cebulę i szynkę.
|
||||
[15.03 20:20] Michał Kasprowicz
|
||||
parmeńską?
|
||||
[15.03 20:24] Patryk Osiński
|
||||
Pizza parmeńska posiada: pomidory, ser parmeński, majeranek
|
||||
[15.03 20:25] Michał Kasprowicz
|
||||
nie, chodziło mi o szynkę. czy pizza barcelona ma szynkę parmeńską
|
||||
[15.03 20:25] Patryk Osiński
|
||||
Tak, możemy dać szynkę parmeńską
|
||||
[15.03 20:26] Michał Kasprowicz
|
||||
to poproszę
|
||||
[15.03 20:26] Patryk Osiński
|
||||
Rozumiem.
|
||||
Całość zamówienia to:
|
||||
pizza barcelona L (szynka parmeńska) - 45ł
|
||||
Potwierdza Pan zamówienie?
|
||||
[15.03 20:26] Michał Kasprowicz
|
||||
tak, odbiorę na miejscu
|
||||
[15.03 20:26] Patryk Osiński
|
||||
Zamówienie będzie gotowe za 30min.
|
||||
Życzę smacznego
|
641
data/test_dialog_46.conllu
Normal file
641
data/test_dialog_46.conllu
Normal file
@ -0,0 +1,641 @@
|
||||
# text: Jakim systemem jesteś, co oferujesz?
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 Jakim welcomemsg NoLabel
|
||||
2 systemem welcomemsg NoLabel
|
||||
3 jesteś, welcomemsg NoLabel
|
||||
4 co welcomemsg NoLabel
|
||||
5 oferujesz? welcomemsg NoLabel
|
||||
|
||||
# text: Chcialbym zamowic pizze peperoni
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Chcialbym inform/order NoLabel
|
||||
2 zamowic inform/order NoLabel
|
||||
3 pizze inform/order B-food
|
||||
4 peperoni inform/order B-pizza
|
||||
|
||||
# text: A jest cos z salami?
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 A inform/order NoLabel
|
||||
2 jest inform/order NoLabel
|
||||
3 cos inform/order NoLabel
|
||||
4 z inform/order NoLabel
|
||||
5 salami? inform/order B-ingredient
|
||||
|
||||
# text: To poproszę margharite
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 To inform/order NoLabel
|
||||
2 poproszę inform/order NoLabel
|
||||
3 margharite, inform/order B-pizza
|
||||
|
||||
# text: czy jest mozliwosc podmiany sosu pomidorowego na smietanowy?
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 jest inform/order NoLabel
|
||||
2 mozliwosc inform/order NoLabel
|
||||
3 podmiany inform/order NoLabel
|
||||
8 sosu inform/order NoLabel
|
||||
4 pomidorowego inform/order I-sauce
|
||||
5 na inform/order NoLabel
|
||||
6 smietanowy? inform/order B-sauce
|
||||
# text: To poproszę margharite zwykla
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 To inform/order NoLabel
|
||||
2 poproszę inform/order NoLabel
|
||||
3 margharite inform/order B-pizza
|
||||
4 zwykla inform/order B-size
|
||||
|
||||
# text: tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 tak affirm NoLabel
|
||||
|
||||
# text: Czy istnieje darmowa dostawa?
|
||||
# intent: request/delivery-price
|
||||
# slots:
|
||||
1 Czy request/delivery-price NoLabel
|
||||
2 istnieje request/delivery-price NoLabel
|
||||
3 darmowa request/delivery-price NoLabel
|
||||
4 dostawa? request/delivery-price NoLabel
|
||||
|
||||
# text: To proszę o realizację zamówienia
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 To inform/order-complete NoLabel
|
||||
2 proszę inform/order-complete NoLabel
|
||||
3 o inform/order-complete NoLabel
|
||||
4 realizację inform/order-complete NoLabel
|
||||
5 zamówienia inform/order-complete NoLabel
|
||||
|
||||
# text: Kasztanowa 13/123, Toruń
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 Kasztanowa inform/address B-address
|
||||
2 13/123, inform/address I-address
|
||||
3 Toruń inform/address I-address
|
||||
|
||||
# text: Proszę aby kurier zadzwonił na mój numer jak przyjedzie: nr: 213 532 212
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 Proszę inform/phone NoLabel
|
||||
2 aby inform/phone NoLabel
|
||||
3 kurier inform/phone NoLabel
|
||||
4 zadzwonił inform/phone NoLabel
|
||||
5 na inform/phone NoLabel
|
||||
6 mój inform/phone NoLabel
|
||||
7 numer inform/phone NoLabel
|
||||
8 jak inform/phone NoLabel
|
||||
9 przyjedzie: inform/phone NoLabel
|
||||
10 nr: inform/phone NoLabel
|
||||
11 213 inform/phone B-phone
|
||||
12 532 inform/phone I-phone
|
||||
13 212 inform/phone I-phone
|
||||
|
||||
# text: Jestem głodny chciałbym zamówić kebaba
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Jestem inform/order NoLabel
|
||||
2 głodny inform/order NoLabel
|
||||
3 chciałbym inform/order NoLabel
|
||||
4 zamówić inform/order NoLabel
|
||||
5 kebaba inform/order B-food
|
||||
|
||||
# text: a jakie rodzaje pizzy? jakie kompozycje składników?
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 a request/menu NoLabel
|
||||
2 jakie request/menu NoLabel
|
||||
3 rodzaje request/menu NoLabel
|
||||
4 pizzy? request/menu NoLabel
|
||||
5 jakie request/menu NoLabel
|
||||
6 kompozycje request/menu NoLabel
|
||||
7 składników? request/menu NoLabel
|
||||
|
||||
# text: jak duża jest pizza L?\?
|
||||
# intent: request/size
|
||||
# slots:
|
||||
1 jak request/size NoLabel
|
||||
2 duża request/size NoLabel
|
||||
3 jest request/size NoLabel
|
||||
4 pizza request/size B-food
|
||||
5 L?\? request/size B-size
|
||||
|
||||
# text: chciałbym taką z ananasem pizze
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 chciałbym inform/order NoLabel
|
||||
2 taką inform/order NoLabel
|
||||
3 z inform/order NoLabel
|
||||
4 ananasem inform/order B-ingredient
|
||||
5 pizze inform/order B-food
|
||||
|
||||
# text: a czy można bez szynki?
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 a inform/order NoLabel
|
||||
2 czy inform/order NoLabel
|
||||
3 można inform/order NoLabel
|
||||
4 bez inform/order B-ingredient/neg
|
||||
5 szynki? inform/order I-ingredient/neg
|
||||
|
||||
# text: Jaka cena?
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 Jaka request/price NoLabel
|
||||
2 cena? request/price NoLabel
|
||||
|
||||
# text: a jaka cena dowozu?
|
||||
# intent: request/delivery-price
|
||||
# slots:
|
||||
1 a request/delivery-price NoLabel
|
||||
2 jaka request/delivery-price NoLabel
|
||||
3 cena request/delivery-price NoLabel
|
||||
4 dowozu? request/delivery-price NoLabel
|
||||
|
||||
# text: okej to poproszę
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 okej affirm NoLabel
|
||||
2 to affirm NoLabel
|
||||
3 poproszę affirm NoLabel
|
||||
|
||||
# text: czy są dostępne jakieś sosy?
|
||||
# intent: request/sauce
|
||||
# slots:
|
||||
1 czy request/sauce NoLabel
|
||||
2 są request/sauce NoLabel
|
||||
3 dostępne request/sauce NoLabel
|
||||
4 jakieś request/sauce NoLabel
|
||||
5 sosy? request/sauce NoLabel
|
||||
|
||||
# text: czy sos dodatkowo kosztuje?
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 czy request/price NoLabel
|
||||
2 sos request/price NoLabel
|
||||
3 dodatkowo request/price NoLabel
|
||||
4 kosztuje? request/price NoLabel
|
||||
|
||||
# text: a są do tego jakieś napoje?
|
||||
# intent: request/drinks
|
||||
# slots:
|
||||
1 a request/drinks NoLabel
|
||||
2 są request/drinks NoLabel
|
||||
3 do request/drinks NoLabel
|
||||
4 tego request/drinks NoLabel
|
||||
5 jakieś request/drinks NoLabel
|
||||
6 napoje? request/drinks NoLabel
|
||||
|
||||
# text: jaka cena coli?
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 jaka request/price NoLabel
|
||||
2 cena request/price NoLabel
|
||||
3 coli? request/price B-drink
|
||||
|
||||
# text: to poproszę. Potwierdzam zamowienie
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 to inform/order-complete NoLabel
|
||||
2 poproszę. inform/order-complete NoLabel
|
||||
3 Potwierdzam inform/order-complete NoLabel
|
||||
4 zamowienie inform/order-complete NoLabel
|
||||
|
||||
# text: 62-200 Gniezno, osiedle Grunwaldzkie 21/3117
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 62-200 inform/address B-address
|
||||
2 Gniezno, inform/address I-address
|
||||
3 osiedle inform/address I-address
|
||||
4 Grunwaldzkie inform/address I-address
|
||||
5 21/3117 inform/address I-address
|
||||
|
||||
# text: jaki czas oczekiwania?
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 jaki request/time NoLabel
|
||||
2 czas request/time NoLabel
|
||||
3 oczekiwania? request/time NoLabel
|
||||
|
||||
# text: Dziekuje
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 Dziekuje bye NoLabel
|
||||
|
||||
# text: Dzień dobry, chciałbym zamówić pizzę
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 Dzień welcomemsg NoLabel
|
||||
2 dobry, welcomemsg NoLabel
|
||||
3 chciałbym welcomemsg NoLabel
|
||||
4 zamówić welcomemsg NoLabel
|
||||
5 pizzę welcomemsg NoLabel
|
||||
|
||||
# text: W jakich rozmiarach są pizze?
|
||||
# intent: request/size
|
||||
# slots:
|
||||
1 W request/size NoLabel
|
||||
2 jakich request/size NoLabel
|
||||
3 rozmiarach request/size NoLabel
|
||||
4 są request/size NoLabel
|
||||
5 pizze? request/size B-food
|
||||
|
||||
# text: Poprosiłbym Tuna XL
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Poprosiłbym inform/order NoLabel
|
||||
2 Tuna inform/order B-pizza
|
||||
3 XL inform/order B-size
|
||||
|
||||
# text: Nie, to wszystko
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 Nie, inform/order-complete NoLabel
|
||||
2 to inform/order-complete NoLabel
|
||||
3 wszystko inform/order-complete NoLabel
|
||||
|
||||
# text: Głogowska 0/4
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 Głogowska inform/address B-address
|
||||
2 0/4 inform/address I-address
|
||||
|
||||
# text: Kiedy mogę się spodziewać dostawy?
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 Kiedy request/time NoLabel
|
||||
2 mogę request/time NoLabel
|
||||
3 się request/time NoLabel
|
||||
4 spodziewać request/time NoLabel
|
||||
5 dostawy? request/time NoLabel
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 Dzień welcomemsg NoLabel
|
||||
2 dobry welcomemsg NoLabel
|
||||
|
||||
# text: Chciałbym zamówić pizzę
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 Chciałbym request/menu NoLabel
|
||||
2 zamówić request/menu NoLabel
|
||||
3 pizzę request/menu B-food
|
||||
|
||||
# text: Chciałbym pizzę z mięsem
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Chciałbym inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 z inform/order NoLabel
|
||||
4 mięsem inform/order B-ingredient
|
||||
|
||||
# text: w takim razie poproszę pizzę barcelona w rozmiarze XL
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 w inform/order NoLabel
|
||||
2 takim inform/order NoLabel
|
||||
3 razie inform/order NoLabel
|
||||
4 poproszę inform/order NoLabel
|
||||
5 pizzę inform/order B-food
|
||||
6 barcelona inform/order B-pizza
|
||||
7 w inform/order NoLabel
|
||||
8 rozmiarze inform/order NoLabel
|
||||
9 XL inform/order B-size
|
||||
|
||||
# text: Napój typu pepsi cola w puszczce, ale żeby była zimna i bez cukru
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Napój inform/order NoLabel
|
||||
2 typu inform/order NoLabel
|
||||
3 pepsi inform/order B-drink
|
||||
4 cola inform/order B-drink
|
||||
5 w inform/order NoLabel
|
||||
6 puszczce, inform/order NoLabel
|
||||
7 ale inform/order NoLabel
|
||||
8 żeby inform/order NoLabel
|
||||
9 była inform/order NoLabel
|
||||
10 zimna inform/order NoLabel
|
||||
11 i inform/order NoLabel
|
||||
12 bez inform/order NoLabel
|
||||
13 cukru inform/order NoLabel
|
||||
|
||||
# text: ulica niebieska 230/2
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 ulica inform/address B-address
|
||||
2 niebieska inform/address I-address
|
||||
3 230/2 inform/address I-address
|
||||
|
||||
# text: dziękuję
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
|
||||
# text: Cześć, jakim systemem jesteś?
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 Cześć, welcomemsg NoLabel
|
||||
2 jakim welcomemsg NoLabel
|
||||
3 systemem welcomemsg NoLabel
|
||||
4 jesteś? welcomemsg NoLabel
|
||||
|
||||
# text: Czy jest możliwość zamówienia pizzy pół na pół?
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Czy inform/order NoLabel
|
||||
2 jest inform/order NoLabel
|
||||
3 możliwość inform/order NoLabel
|
||||
4 zamówienia inform/order NoLabel
|
||||
5 pizzy inform/order B-food
|
||||
6 pół inform/order B-pizza
|
||||
7 na inform/order I-pizza
|
||||
8 pół? inform/order I-pizza
|
||||
|
||||
# text: jakie pizze są w menu?
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 jakie request/menu NoLabel
|
||||
2 pizze request/menu NoLabel
|
||||
3 są request/menu NoLabel
|
||||
4 w request/menu NoLabel
|
||||
5 menu? request/menu NoLabel
|
||||
|
||||
# text: w takim razie poproszę 4x margarite XL
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 w inform/order NoLabel
|
||||
2 takim inform/order NoLabel
|
||||
3 razie inform/order NoLabel
|
||||
4 poproszę inform/order NoLabel
|
||||
5 4x inform/order B-quantity
|
||||
6 margarite inform/order B-pizza
|
||||
7 XL inform/order B-size
|
||||
|
||||
# text: Lipinki Łużyckie, Łączna 46
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 Lipinki inform/address B-address
|
||||
2 Łużyckie, inform/address I-address
|
||||
3 Łączna inform/address I-address
|
||||
4 46 inform/address I-address
|
||||
|
||||
# text: Dzięki!
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 Dzięki! bye NoLabel
|
||||
|
||||
# text: ile kosztuje dostawa?
|
||||
# intent: request/delivery-price
|
||||
# slots:
|
||||
1 ile request/delivery-price NoLabel
|
||||
2 kosztuje request/delivery-price NoLabel
|
||||
3 dostawa? request/delivery-price NoLabel
|
||||
|
||||
# text: a jakie są dostępne pizze?
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 a request/menu NoLabel
|
||||
2 jakie request/menu NoLabel
|
||||
3 są request/menu NoLabel
|
||||
4 dostępne request/menu NoLabel
|
||||
5 pizze? request/menu B-food
|
||||
|
||||
# text: świetnie, w takim razie poproszę trzy duże pizze diavola oraz margaritę
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 świetnie, inform/order NoLabel
|
||||
2 w inform/order NoLabel
|
||||
3 takim inform/order NoLabel
|
||||
4 razie inform/order NoLabel
|
||||
5 poproszę inform/order NoLabel
|
||||
6 trzy inform/order B-quantity
|
||||
7 duże inform/order B-size
|
||||
8 pizze inform/order B-food
|
||||
9 diavola inform/order B-pizza
|
||||
10 oraz inform/order NoLabel
|
||||
11 margaritę inform/order B-pizza
|
||||
|
||||
# text: tak, poproszę jeden
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 tak, affirm NoLabel
|
||||
2 poproszę affirm NoLabel
|
||||
3 jeden affirm B-quantity
|
||||
|
||||
# text: ze Szczebrzeszyna, powiat Łękołody
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 ze inform/address NoLabel
|
||||
2 Szczebrzeszyna, inform/address B-address
|
||||
3 powiat inform/address I-address
|
||||
4 Łękołody inform/address I-address
|
||||
|
||||
# text: Grzegorz Brzęczyszczykiewicz
|
||||
# intent: inform/name
|
||||
# slots:
|
||||
1 Grzegorz inform/name B-name
|
||||
2 Brzęczyszczykiewicz, inform/name I-name
|
||||
|
||||
# text: a jakie są dostępne pizze?
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 a request/menu NoLabel
|
||||
2 jakie request/menu NoLabel
|
||||
3 są request/menu NoLabel
|
||||
4 dostępne request/menu NoLabel
|
||||
5 pizze? request/menu B-food
|
||||
|
||||
# text: świetnie, w takim razie poproszę dwie duże pizze diavola oraz margaritę
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 świetnie, inform/order NoLabel
|
||||
2 w inform/order NoLabel
|
||||
3 takim inform/order NoLabel
|
||||
4 razie inform/order NoLabel
|
||||
5 poproszę inform/order NoLabel
|
||||
6 dwie inform/order B-quantity
|
||||
7 duże inform/order B-size
|
||||
8 pizze inform/order B-food
|
||||
9 diavola inform/order B-pizza
|
||||
10 oraz inform/order NoLabel
|
||||
11 margaritę inform/order B-pizza
|
||||
|
||||
# text: tak, poproszę jeden
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 tak, inform/order NoLabel
|
||||
2 poproszę inform/order NoLabel
|
||||
3 jeden inform/order B-quantity
|
||||
|
||||
# text: zapłacę kartą przy dostawie
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 zapłacę inform/order NoLabel
|
||||
2 kartą inform/order B-payment-method
|
||||
3 przy inform/order NoLabel
|
||||
4 dostawie inform/order B-delivery
|
||||
|
||||
# text: chciałbym zamówić pizzę wegetariańską w średnim rozmiarze
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 chciałbym inform/order NoLabel
|
||||
2 zamówić inform/order NoLabel
|
||||
3 pizzę inform/order B-food
|
||||
4 wegetariańską inform/order B-pizza
|
||||
5 w inform/order NoLabel
|
||||
6 średnim inform/order B-size
|
||||
7 rozmiarze inform/order NoLabel
|
||||
|
||||
# text: a co znajduje się domyślnie na takiej pizzy?
|
||||
# intent: request/ingredients
|
||||
# slots:
|
||||
1 a request/ingredients NoLabel
|
||||
2 co request/ingredients NoLabel
|
||||
3 znajduje request/ingredients NoLabel
|
||||
4 się request/ingredients NoLabel
|
||||
5 domyślnie request/ingredients NoLabel
|
||||
6 na request/ingredients NoLabel
|
||||
7 takiej request/ingredients NoLabel
|
||||
8 pizzy? request/ingredients B-food
|
||||
|
||||
# text: Poproszę wersję klasyczną średnią
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Poproszę inform/order NoLabel
|
||||
2 wersję inform/order NoLabel
|
||||
3 klasyczną inform/order NoLabel
|
||||
4 średnią inform/order B-size
|
||||
|
||||
# text: Ile będzie ona kosztować?
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 Ile request/price NoLabel
|
||||
2 będzie request/price NoLabel
|
||||
3 ona request/price NoLabel
|
||||
4 kosztować? request/price NoLabel
|
||||
|
||||
# text: Okej, to poproszę tą pizzę
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Okej, inform/order NoLabel
|
||||
2 to inform/order NoLabel
|
||||
3 poproszę inform/order NoLabel
|
||||
4 tą inform/order NoLabel
|
||||
5 pizzę inform/order B-food
|
||||
|
||||
# text: Na wynos
|
||||
# intent: inform/delivery
|
||||
# slots:
|
||||
1 Na inform/delivery NoLabel
|
||||
2 wynos inform/delivery B-delivery
|
||||
|
||||
# text: płatność gotówką
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 płatność inform/payment NoLabel
|
||||
2 gotówką inform/payment B-payment-method
|
||||
|
||||
# text: Dzień dobry
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 Dzień welcomemsg NoLabel
|
||||
2 dobry welcomemsg NoLabel
|
||||
|
||||
# text: a rozmiar średni o ile jest mniejszy od dużego?
|
||||
# intent: request/size
|
||||
# slots:
|
||||
1 a request/size NoLabel
|
||||
2 rozmiar request/size NoLabel
|
||||
3 średni request/size B-size
|
||||
4 o request/size NoLabel
|
||||
5 ile request/size NoLabel
|
||||
6 jest request/size NoLabel
|
||||
7 mniejszy request/size NoLabel
|
||||
8 od request/size NoLabel
|
||||
9 dużego? request/size B-size
|
||||
|
||||
# text: dużą colę poproszę, jednakże bez cukru
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 dużą inform/order B-size
|
||||
2 colę inform/order B-drink
|
||||
3 poproszę, inform/order NoLabel
|
||||
4 jednakże inform/order NoLabel
|
||||
5 bez inform/order NoLabel
|
||||
6 cukru inform/order NoLabel
|
||||
|
||||
# text: Płatność będzie kartą.
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 Płatność inform/payment NoLabel
|
||||
2 będzie inform/payment NoLabel
|
||||
3 kartą. inform/payment B-payment-method
|
||||
|
||||
# text: Zamówienie na wynos, ale odbiorę osobiście
|
||||
# intent: inform/delivery
|
||||
# slots:
|
||||
1 Zamówienie inform/delivery NoLabel
|
||||
2 na inform/delivery NoLabel
|
||||
3 wynos, inform/delivery B-delivery
|
||||
4 ale inform/delivery NoLabel
|
||||
5 odbiorę inform/delivery NoLabel
|
||||
6 osobiście inform/delivery B-delivery
|
||||
|
||||
# text: poproszę jedynie podać przybliżony czas przygotowywania dania
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 poproszę request/time NoLabel
|
||||
2 jedynie request/time NoLabel
|
||||
3 podać request/time NoLabel
|
||||
4 przybliżony request/time NoLabel
|
||||
5 czas request/time NoLabel
|
||||
6 przygotowywania request/time NoLabel
|
||||
7 dania request/time NoLabel
|
||||
|
||||
# text: świetnie, w takim razie poproszę dwie duże pizzę ananasową, jedną dużą diavola oraz jako tą w gratisie margarite
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 świetnie, inform/order NoLabel
|
||||
2 w inform/order NoLabel
|
||||
3 takim inform/order NoLabel
|
||||
4 razie inform/order NoLabel
|
||||
5 poproszę inform/order NoLabel
|
||||
6 dwie inform/order B-quantity
|
||||
7 duże inform/order B-size
|
||||
8 pizzę inform/order B-food
|
||||
9 ananasową, inform/order B-pizza
|
||||
10 jedną inform/order B-quantity
|
||||
11 dużą inform/order B-size
|
||||
12 diavola inform/order B-pizza
|
||||
13 oraz inform/order NoLabel
|
||||
14 jako inform/order NoLabel
|
||||
15 tą inform/order NoLabel
|
||||
16 w inform/order NoLabel
|
||||
17 gratisie inform/order NoLabel
|
||||
18 margarite inform/order B-pizza
|
||||
|
||||
# text: w takim razie poproszę jeden
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 w inform/order NoLabel
|
||||
2 takim inform/order NoLabel
|
||||
3 razie inform/order NoLabel
|
||||
4 poproszę inform/order NoLabel
|
||||
5 jeden inform/order B-quantity
|
||||
|
||||
# text: zapłacę kartą
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 zapłacę inform/payment NoLabel
|
||||
2 kartą inform/payment B-payment-method
|
||||
|
||||
# text: dziękuję bardzo
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
2 bardzo bye NoLabel
|
911
data/train_dialog.conllu
Normal file
911
data/train_dialog.conllu
Normal file
@ -0,0 +1,911 @@
|
||||
# text: cześć
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 cześć welcomemsg NoLabel
|
||||
|
||||
# text: witam
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 witam welcomemsg NoLabel
|
||||
|
||||
# text: dzień dobry
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 dzień welcomemsg NoLabel
|
||||
2 dobry welcomemsg NoLabel
|
||||
|
||||
# text: dobry wieczór
|
||||
# intent: welcomemsg
|
||||
# slots:
|
||||
1 dobry welcomemsg NoLabel
|
||||
2 wieczór welcomemsg NoLabel
|
||||
|
||||
# text: dziękuję
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
|
||||
# text: dzięki
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dzięki bye NoLabel
|
||||
|
||||
# text: pozdrawiam
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 pozdrawiam bye NoLabel
|
||||
|
||||
# text: do widzenia
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 do bye NoLabel
|
||||
2 widzenia bye NoLabel
|
||||
|
||||
# text: dziękuję serdecznie
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
2 serdecznie bye NoLabel
|
||||
|
||||
# text: dziękuję bardzo
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 dziękuję bye NoLabel
|
||||
2 bardzo bye NoLabel
|
||||
|
||||
# text: papa
|
||||
# intent: bye
|
||||
# slots:
|
||||
1 papa bye NoLabel
|
||||
|
||||
# text: tak
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 tak affirm NoLabel
|
||||
|
||||
# text: poproszę
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 poproszę affirm NoLabel
|
||||
|
||||
# text: to poproszę
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 to affirm NoLabel
|
||||
2 poproszę affirm NoLabel
|
||||
|
||||
# text: okej
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 okej affirm NoLabel
|
||||
|
||||
# text: okej to poproszę
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 okej affirm NoLabel
|
||||
2 to affirm NoLabel
|
||||
3 poproszę affirm NoLabel
|
||||
|
||||
# text: poproszę pizzę hawajska w rozmiarze dużym
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 hawajska inform/order B-pizza
|
||||
4 w inform/order NoLabel
|
||||
5 rozmiarze inform/order NoLabel
|
||||
6 dużym inform/order B-size
|
||||
|
||||
# text: chciałbym zamówić pizzę
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 chciałbym request/menu NoLabel
|
||||
2 zamówić request/menu NoLabel
|
||||
3 pizzę request/menu B-food
|
||||
|
||||
# text: chciałbym pizzę z kurczakiem
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 chciałbym inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 z inform/order B-ingredient
|
||||
4 kurczakiem inform/order I-ingredient
|
||||
|
||||
# text: proszę pizzę z szynką
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 proszę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 z inform/order NoLabel
|
||||
4 szynką inform/order B-ingredient
|
||||
|
||||
# text: poproszę pizzę barcelona w rozmiarze L
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 barcelona inform/order B-pizza
|
||||
4 w inform/order NoLabel
|
||||
5 rozmiarze inform/order NoLabel
|
||||
6 L inform/order B-size
|
||||
|
||||
# text: jedna pizza tuna, druga pizza hawajska
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 jedna inform/order B-quantity
|
||||
2 pizza inform/order B-food
|
||||
3 tuna, inform/order B-pizza
|
||||
4 druga inform/order B-quantity
|
||||
5 pizza inform/order B-food
|
||||
6 hawajska inform/order B-pizza
|
||||
|
||||
# text: wezmę pizzę capri bez pieczarek
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 wezmę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 capri inform/order B-pizza
|
||||
4 bez inform/order B-ingredient/neg
|
||||
5 pieczarek inform/order I-ingredient/neg
|
||||
|
||||
# text: jakie pizze są w ofercie
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 jakie request/menu NoLabel
|
||||
2 pizze request/menu B-food
|
||||
3 są request/menu NoLabel
|
||||
4 w request/menu NoLabel
|
||||
5 ofercie request/menu NoLabel
|
||||
|
||||
# text: w jakich rozmiarach są pizze
|
||||
# intent: request/size
|
||||
# slots:
|
||||
1 w request/size NoLabel
|
||||
2 jakich request/size NoLabel
|
||||
3 rozmiarach request/size NoLabel
|
||||
4 są request/size NoLabel
|
||||
5 pizze request/size NoLabel
|
||||
|
||||
# text: jakie pizze są w menu
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 jakie request/menu NoLabel
|
||||
2 pizze request/menu B-food
|
||||
3 są request/menu NoLabel
|
||||
4 w request/menu NoLabel
|
||||
5 menu request/menu NoLabel
|
||||
|
||||
# text: chciałbym zamówić pizze
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 chciałbym request/menu NoLabel
|
||||
2 zamówić request/menu NoLabel
|
||||
3 pizze request/menu B-food
|
||||
|
||||
# text: co macie w ofercie
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 co request/menu NoLabel
|
||||
2 macie request/menu NoLabel
|
||||
3 w request/menu NoLabel
|
||||
4 ofercie request/menu NoLabel
|
||||
|
||||
# text: poproszę pizzę margarita
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 margarita inform/order B-pizza
|
||||
|
||||
# text: poproszę pizze hawajską bez ananasa
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 pizze inform/order B-food
|
||||
3 hawajska inform/order B-pizza
|
||||
4 bez inform/order B-ingredient/neg
|
||||
5 ananasa inform/order I-ingredient/neg
|
||||
|
||||
# text: poproszę 5 pizz
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 5 inform/order B-quantity
|
||||
3 pizz inform/order B-food
|
||||
|
||||
# text: porposzę capri w rozmiarze m
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 porposzę inform/order NoLabel
|
||||
2 capri inform/order NoLabel
|
||||
3 w inform/order NoLabel
|
||||
4 rozmiarze inform/order NoLabel
|
||||
5 m inform/order NoLabel
|
||||
|
||||
# text: nie, to wszystko
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 nie, inform/order-complete NoLabel
|
||||
2 to inform/order-complete NoLabel
|
||||
3 wszystko inform/order-complete NoLabel
|
||||
|
||||
# text: kiedy dojdzie dostawa?
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 kiedy request/time NoLabel
|
||||
2 dojdzie request/time NoLabel
|
||||
3 dostawa? request/time NoLabel
|
||||
|
||||
# text: kiedy mogę się spodziewać dostawy?
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 kiedy request/time NoLabel
|
||||
2 mogę request/time NoLabel
|
||||
3 się request/time NoLabel
|
||||
4 spodziewać request/time NoLabel
|
||||
5 dostawy? request/time NoLabel
|
||||
|
||||
# text: kiedy dojedzie kurier?
|
||||
# intent: request/time
|
||||
# slots:
|
||||
1 kiedy request/time NoLabel
|
||||
2 dojedzie request/time NoLabel
|
||||
3 kurier? request/time NoLabel
|
||||
|
||||
# text: to wszystko
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 to inform/order-complete NoLabel
|
||||
2 wszystko inform/order-complete NoLabel
|
||||
|
||||
# text: adres dostawy to Koszalińska 10/15
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 adres inform/address NoLabel
|
||||
2 dostawy inform/address NoLabel
|
||||
3 to inform/address NoLabel
|
||||
4 Koszalińska inform/address B-address
|
||||
5 10/15 inform/address I-address
|
||||
|
||||
# text: proszę dzwonić na numer 320 561 123
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 proszę inform/phone NoLabel
|
||||
2 dzwonić inform/phone NoLabel
|
||||
3 na inform/phone NoLabel
|
||||
4 numer inform/phone NoLabel B-phone
|
||||
5 320 inform/phone NoLabel I-phone
|
||||
6 561 inform/phone NoLabel I-phone
|
||||
7 123 inform/phone NoLabel I-phone
|
||||
|
||||
# text: adres Kołątaja 15
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 adres inform/address NoLabel
|
||||
2 Kołątaja inform/address B-address
|
||||
3 15 inform/address I-address
|
||||
|
||||
# text: Poznań, ul. Piastów 90/13
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 Poznań, inform/address B-address
|
||||
2 ul. inform/address I-address
|
||||
3 Piastów inform/address I-address
|
||||
4 90/13 inform/address I-address
|
||||
|
||||
# text: ul. Piotra Skargi 13
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 ul. inform/address B-address
|
||||
2 Piotra inform/address I-address
|
||||
3 Skargi inform/address I-address
|
||||
4 13 inform/address I-address
|
||||
|
||||
# text: aleje jerozolimskie 10
|
||||
# intent: inform
|
||||
# slots:
|
||||
1 aleje inform/address B-address
|
||||
2 jerozolimskie inform/address I-address
|
||||
3 10 inform/address I-address
|
||||
|
||||
# text: nie
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 nie negate NoLabel
|
||||
|
||||
# text: zaprzeczam
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 zaprzeczam negate NoLabel
|
||||
|
||||
# text: nie dziękuję
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 nie negate NoLabel
|
||||
2 dziękuję negate NoLabel
|
||||
|
||||
# text: co jest w ofercie
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 co request/menu NoLabel
|
||||
2 jest request/menu NoLabel
|
||||
3 w request/menu NoLabel
|
||||
4 ofercie request/menu NoLabel
|
||||
|
||||
# text: chciałbym trzy pizze, hawajskie duże
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 chciałbym inform/order NoLabel
|
||||
2 trzy inform/order B-quantity
|
||||
3 pizze, inform/order B-food
|
||||
4 hawajskie inform/order B-pizza
|
||||
5 duże inform/order B-size
|
||||
|
||||
# text: chciałbym barcelona xl
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 chciałbym inform/order NoLabel
|
||||
2 barcelona inform/order B-pizza
|
||||
3 xl inform/order B-size
|
||||
|
||||
# text: kruszyn krajeński, Polna 34
|
||||
# intent: inform/address
|
||||
# slots:
|
||||
1 kruszyn inform/address B-address
|
||||
2 krajeński, inform/address B-address
|
||||
3 Polna inform/address B-address
|
||||
4 34 inform/address B-address
|
||||
|
||||
# text: odbiorę na miejscu
|
||||
# intent: inform/delivery
|
||||
# slots:
|
||||
1 odbiorę inform/delivery NoLabel
|
||||
2 na inform/delivery NoLabel
|
||||
3 miejscu inform/delivery B-delivery
|
||||
|
||||
# text: poproszę z dowozem
|
||||
# intent: inform/delivery
|
||||
# slots:
|
||||
1 poproszę inform/delivery NoLabel
|
||||
2 z inform/delivery NoLabel
|
||||
3 dowozem inform/delivery B-delivery
|
||||
|
||||
# text: ile całość będzie kosztować
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 ile request/price NoLabel
|
||||
2 całość request/price NoLabel
|
||||
3 będzie request/price NoLabel
|
||||
4 kosztować request/price NoLabel
|
||||
|
||||
# text: jaki koszt
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 jaki request/price NoLabel
|
||||
2 koszt request/price NoLabel
|
||||
|
||||
# text: ile zapłacę
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 ile request/price NoLabel
|
||||
2 zapłacę request/price NoLabel
|
||||
|
||||
# text: prosiłbym o dowóz na 17:30
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 prosiłbym inform/time NoLabel
|
||||
2 o inform/time NoLabel
|
||||
3 dowóz inform/time NoLabel
|
||||
4 na inform/time NoLabel
|
||||
5 17:30 inform/time B-time
|
||||
|
||||
# text: czy można dowieźć na 20?
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 czy inform/time NoLabel
|
||||
2 można inform/time NoLabel
|
||||
3 dowieźć inform/time NoLabel
|
||||
4 na inform/time NoLabel
|
||||
5 20? inform/time B-time
|
||||
|
||||
# text: czy mozżna bez cebuli
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 czy inform/order NoLabel
|
||||
2 mozżna inform/order NoLabel
|
||||
3 bez inform/order B-ingredient/neg
|
||||
4 cebuli inform/order I-ingredient/neg
|
||||
|
||||
# text: bez pieczarek
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 bez inform/order B-ingredient/neg
|
||||
2 pieczarek inform/order I-ingredient/neg
|
||||
|
||||
# text: jaka cena?
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 jaka request/price NoLabel
|
||||
2 cena? request/price NoLabel
|
||||
|
||||
# text: cena
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 cena request/price NoLabel
|
||||
|
||||
# text: jaki koszt
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 jaki request/price NoLabel
|
||||
2 koszt request/price NoLabel
|
||||
|
||||
# text: cena dowozu
|
||||
# intent: request/delivery-price
|
||||
# slots:
|
||||
1 cena request/delivery-price NoLabel
|
||||
2 dowozu request/delivery-price NoLabel
|
||||
|
||||
# text: sos czosnkowy
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 sos inform/order B-sauce
|
||||
2 czosnkowy inform/order I-sauce
|
||||
|
||||
# text: poproszę o realizację zamówienia
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 poproszę inform/order-complete NoLabel
|
||||
2 o inform/order-complete NoLabel
|
||||
3 realizację inform/order-complete NoLabel
|
||||
4 zamówienia inform/order-complete NoLabel
|
||||
|
||||
# text: zamawiam
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 zamawiam inform/order-complete NoLabel
|
||||
|
||||
# text: i to wszystko
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 i inform/order-complete NoLabel
|
||||
2 to inform/order-complete NoLabel
|
||||
3 wszystko inform/order-complete NoLabel
|
||||
|
||||
# text: jaki rozmiar
|
||||
# intent: request/size
|
||||
# slots:
|
||||
1 jaki request/size NoLabel
|
||||
2 rozmiar request/size NoLabel
|
||||
|
||||
# text: złożyć zamówienie
|
||||
# intent: request/menu
|
||||
# slots:
|
||||
1 złożyć request/menu NoLabel
|
||||
2 zamówienie request/menu NoLabel
|
||||
|
||||
# text: poproszę 4 pizze, tuna, hawajska, capri, barcelona, wszystkie w rozmiarze xl
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 4 inform/order B-quantity
|
||||
3 pizze, inform/order B-food
|
||||
4 tuna, inform/order B-pizza
|
||||
5 hawajska, inform/order B-pizza
|
||||
6 capri, inform/order B-pizza
|
||||
7 barcelona, inform/order B-pizza
|
||||
8 wszystkie inform/order NoLabel
|
||||
9 w inform/order NoLabel
|
||||
10 rozmiarze inform/order NoLabel
|
||||
11 xl inform/order B-size
|
||||
|
||||
# text: mój numer to 123 324 534
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 mój inform/phone NoLabel
|
||||
2 numer inform/phone NoLabel
|
||||
3 to inform/phone NoLabel
|
||||
4 123 inform/phone B-phone
|
||||
5 324 inform/phone I-phone
|
||||
6 534 inform/phone I-phone
|
||||
|
||||
# text: 653 321 787
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 653 inform/phone B-phone
|
||||
2 321 inform/phone I-phone
|
||||
3 787 inform/phone I-phone
|
||||
|
||||
# text: wezmę pizzę z szynką, tuńczykiem i cebulą, w rozmiarze L
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 wezmę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 z inform/order NoLabel
|
||||
4 szynką, inform/order B-ingredient
|
||||
5 tuńczykiem inform/order B-ingredient
|
||||
6 i inform/order NoLabel
|
||||
7 cebulą, inform/order B-ingredient
|
||||
8 w inform/order NoLabel
|
||||
9 rozmiarze inform/order NoLabel
|
||||
10 L inform/order B-size
|
||||
|
||||
# text: szynka
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 szynka inform/order B-ingredient
|
||||
|
||||
# text: pieczarki
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 pieczarki inform/order B-ingredient
|
||||
|
||||
# text: cebula
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 cebula inform/order B-ingredient
|
||||
|
||||
# text: papryka
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 papryka inform/order B-ingredient
|
||||
|
||||
# text: pomidor
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 pomidor inform/order B-ingredient
|
||||
|
||||
# text: ser
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 ser inform/order B-ingredient
|
||||
|
||||
# text: ananas kurczak tunczyk cebula
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 ananas inform/order B-ingredient
|
||||
2 kurczak inform/order B-ingredient
|
||||
3 tunczyk inform/order B-ingredient
|
||||
4 cebula inform/order B-ingredient
|
||||
|
||||
# text: barcelona hawajska tuna capri margarita
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 barcelona inform/order B-pizza
|
||||
2 hawajska inform/order B-pizza
|
||||
3 tuna inform/order B-pizza
|
||||
4 capri inform/order B-pizza
|
||||
5 margarita inform/order B-pizza
|
||||
|
||||
# text: poproszę hawajską i tuna XL
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 poproszę inform/order NoLabel
|
||||
2 hawajską inform/order B-pizza
|
||||
3 i inform/order NoLabel
|
||||
4 tuna inform/order B-pizza
|
||||
5 XL inform/order B-size
|
||||
|
||||
# text: wezmę 3x pizze tuna, średnią, dużą i bardzo dużą
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 wezmę inform/order NoLabel
|
||||
2 3x inform/order B-quantity
|
||||
3 pizze inform/order B-food
|
||||
4 tuna, inform/order B-pizza
|
||||
5 średnią, inform/order B-size
|
||||
6 dużą inform/order B-size
|
||||
7 i inform/order NoLabel
|
||||
8 bardzo inform/order B-size
|
||||
9 dużą inform/order I-size
|
||||
|
||||
# text: rozmiar m
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 rozmiar inform/order B-size
|
||||
2 m inform/order I-size
|
||||
|
||||
# text: rozmar l
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 rozmar inform/order B-size
|
||||
2 l inform/order I-size
|
||||
|
||||
# text: rozmiar xl
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 rozmiar inform/order B-size
|
||||
2 xl inform/order I-size
|
||||
|
||||
# text: na godzine 9
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 na inform/time NoLabel
|
||||
2 godzine inform/time B-time
|
||||
3 9 inform/time I-time
|
||||
|
||||
# text: godz 16
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 godz inform/time B-time
|
||||
2 16 inform/time I-time
|
||||
|
||||
# text: na 19 poproszę
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 na inform/time NoLabel
|
||||
2 19 inform/time B-time
|
||||
3 poproszę inform/time NoLabel
|
||||
|
||||
# text: godzine dziesiątą
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 godzine inform/time B-time
|
||||
2 dziesiątą inform/time I-time
|
||||
|
||||
# text: na szóstą
|
||||
# intent: inform/time
|
||||
# slots:
|
||||
1 na inform/time NoLabel
|
||||
2 szóstą inform/time B-time
|
||||
|
||||
# text: tak zgadza się
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 tak affirm NoLabel
|
||||
2 zgadza affirm NoLabel
|
||||
3 się affirm NoLabel
|
||||
|
||||
# text: potwierdzam
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 potwierdzam affirm NoLabel
|
||||
|
||||
# text: nie zgadza się
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 nie negate NoLabel
|
||||
2 zgadza negate NoLabel
|
||||
3 się negate NoLabel
|
||||
|
||||
# text: numer to 333444555
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 numer inform/phone NoLabel
|
||||
2 to inform/phone NoLabel
|
||||
3 333444555 inform/phone B-phone
|
||||
|
||||
# text: numer to 335 23 25 29
|
||||
# intent: inform/phone
|
||||
# slots:
|
||||
1 numer inform/phone NoLabel
|
||||
2 to inform/phone NoLabel
|
||||
3 335 inform/phone B-phone
|
||||
4 23 inform/phone I-phone
|
||||
5 25 inform/phone I-phone
|
||||
6 29 inform/phone I-phone
|
||||
|
||||
# text: dziękuję to wszystko
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 dziękuję inform/order-complete NoLabel
|
||||
2 to inform/order-complete NoLabel
|
||||
3 wszystko inform/order-complete NoLabel
|
||||
|
||||
# text: potwierdzam zamówienie
|
||||
# intent: inform/order-complete
|
||||
# slots:
|
||||
1 potwierdzam inform/order-complete NoLabel
|
||||
2 zamówienie inform/order-complete NoLabel
|
||||
|
||||
# text: bez kurczaka
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 bez inform/order B-ingredient/neg
|
||||
2 kurczaka inform/order I-ingredient/neg
|
||||
|
||||
# text: bez cebuli
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 bez inform/order B-ingredient/neg
|
||||
2 cebuli inform/order I-ingredient/neg
|
||||
|
||||
# text: bez szynki i pieczarek
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 bez inform/order B-ingredient/neg
|
||||
2 szynki inform/order I-ingredient/neg
|
||||
3 i inform/order NoLabel
|
||||
4 pieczarek inform/order B-ingredient/neg
|
||||
|
||||
# text: proszę pizzę z ananasem, kurczakiem i serem
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 proszę inform/order NoLabel
|
||||
2 pizzę inform/order B-food
|
||||
3 z inform/order NoLabel
|
||||
4 ananasem, inform/order B-ingredient
|
||||
5 kurczakiem inform/order B-ingredient
|
||||
6 i inform/order NoLabel
|
||||
7 serem inform/order B-ingredient
|
||||
|
||||
# text: ile płacę
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 ile request/price NoLabel
|
||||
2 płacę request/price NoLabel
|
||||
|
||||
# text: ile zapłacę
|
||||
# intent: request/price
|
||||
# slots:
|
||||
1 ile request/price NoLabel
|
||||
2 zapłacę request/price NoLabel
|
||||
|
||||
# text: sos tysiąca wysp
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 sos inform/order B-sauce
|
||||
2 tysiąca inform/order I-sauce
|
||||
3 wysp inform/order I-sauce
|
||||
|
||||
# text: sos koperkowy
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 sos inform/order B-sauce
|
||||
2 koperkowy inform/order I-sauce
|
||||
|
||||
# text: tak dziękuję
|
||||
# intent: affirm
|
||||
# slots:
|
||||
1 tak affirm NoLabel
|
||||
2 dziękuję affirm NoLabel
|
||||
|
||||
# text: nnie, dziękuję
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 nnie, negate NoLabel
|
||||
2 dziękuję negate NoLabel
|
||||
|
||||
# text: nie dzięki
|
||||
# intent: negate
|
||||
# slots:
|
||||
1 nie negate NoLabel
|
||||
2 dzięki negate NoLabel
|
||||
|
||||
# text: będzie płatność kartą
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 będzie inform/payment NoLabel
|
||||
2 płatność inform/payment NoLabel
|
||||
3 kartą inform/payment B-payment-method
|
||||
|
||||
# text: odbiorę osobiście
|
||||
# intent: inform/delivery
|
||||
# slots:
|
||||
1 odbiorę inform/delivery NoLabel
|
||||
2 osobiście inform/delivery B-delivery
|
||||
|
||||
# text: zapłacę karta
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 zapłacę inform/payment NoLabel
|
||||
2 karta inform/payment B-payment-method
|
||||
|
||||
# text: gotówką
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 gotówką inform/payment B-payment-method
|
||||
|
||||
# text: poproszę z dowozem
|
||||
# intent: inform/payment
|
||||
# slots:
|
||||
1 poproszę inform/payment NoLabel
|
||||
|
||||
# text: a jakie składniki ma barcelona
|
||||
# intent: request/ingredients
|
||||
# slots:
|
||||
1 a request/ingredients NoLabel
|
||||
2 jakie request/ingredients NoLabel
|
||||
3 składniki request/ingredients NoLabel
|
||||
4 ma request/ingredients NoLabel
|
||||
5 domyślnie request/ingredients NoLabel
|
||||
6 barcelona request/ingredients B-pizza
|
||||
|
||||
# text: co to jest pizza tuna
|
||||
# intent: request/ingredients
|
||||
# slots:
|
||||
1 co request/ingredients NoLabel
|
||||
2 to request/ingredients NoLabel
|
||||
3 jest request/ingredients NoLabel
|
||||
4 pizza request/ingredients B-food
|
||||
5 tuna request/ingredients B-pizza
|
||||
|
||||
# text: jakie składniki
|
||||
# intent: request/ingredients
|
||||
# slots:
|
||||
1 jakie request/ingredients NoLabel
|
||||
2 składniki request/ingredients NoLabel
|
||||
|
||||
# text: co jest na pizzy
|
||||
# intent: request/ingredients
|
||||
# slots:
|
||||
1 co request/ingredients NoLabel
|
||||
2 jest request/ingredients NoLabel
|
||||
3 na request/ingredients NoLabel
|
||||
4 pizzy request/ingredients NoLabel
|
||||
|
||||
# text: jakie są napoje
|
||||
# intent: request/drinks
|
||||
# slots:
|
||||
1 jakie request/drinks NoLabel
|
||||
2 są request/drinks NoLabel
|
||||
3 napoje request/drinks NoLabel
|
||||
|
||||
|
||||
# text: co macie za napoje w ofercie
|
||||
# intent: request/drinks
|
||||
# slots:
|
||||
1 co request/drinks NoLabel
|
||||
2 macie request/drinks NoLabel
|
||||
3 za request/drinks NoLabel
|
||||
4 napoje request/drinks NoLabel
|
||||
5 w request/drinks NoLabel
|
||||
6 ofercie request/drinks NoLabel
|
||||
|
||||
# text: co macie do picia
|
||||
# intent: request/drinks
|
||||
# slots:
|
||||
1 co request/drinks NoLabel
|
||||
2 macie request/drinks NoLabel
|
||||
3 do request/drinks NoLabel
|
||||
4 picia request/drinks NoLabel
|
||||
|
||||
# text: czy są dostępne jakieś sosy?
|
||||
# intent: request/sauce
|
||||
# slots:
|
||||
1 czy request/sauce NoLabel
|
||||
2 są request/sauce NoLabel
|
||||
3 dostępne request/sauce NoLabel
|
||||
4 jakieś request/sauce NoLabel
|
||||
5 sosy? request/sauce NoLabel
|
||||
|
||||
# text: Grzegorz Pieczarski
|
||||
# intent: inform/name
|
||||
# slots:
|
||||
1 Grzegorz inform/name B-name
|
||||
2 Pieczarski inform/name I-name
|
||||
|
||||
# text: Sergiusz Kaczmarek
|
||||
# intent: inform/name
|
||||
# slots:
|
||||
1 Sergiusz inform/name B-name
|
||||
2 Kaczmarek inform/name I-name
|
||||
|
||||
# text: jaki koszt dowozu
|
||||
# intent: request/delivery-price
|
||||
# slots:
|
||||
1 jaki request/delivery-price NoLabel
|
||||
2 koszt request/delivery-price NoLabel
|
||||
3 dowozu request/delivery-price NoLabel
|
||||
|
||||
# text: jakie sosy w menu?
|
||||
# intent: request/sauce
|
||||
# slots:
|
||||
1 jakie request/sauce NoLabel
|
||||
2 sosy request/sauce NoLabel
|
||||
3 w request/sauce NoLabel
|
||||
4 menu? request/sauce NoLabel
|
||||
|
||||
# text: Napój pepsi i cola
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 Napój inform/order NoLabel
|
||||
2 pepsi inform/order B-drink
|
||||
3 i inform/order NoLabel
|
||||
4 cola inform/order B-drink
|
||||
|
||||
# text: woda i sok
|
||||
# intent: inform/order
|
||||
# slots:
|
||||
1 woda inform/order B-drink
|
||||
2 i inform/order NoLabel
|
||||
3 sok inform/order B-drink
|
62
evaluate.py
Normal file
62
evaluate.py
Normal file
@ -0,0 +1,62 @@
|
||||
import re
|
||||
import os
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from flair.models import SequenceTagger
|
||||
from conllu import parse_incr
|
||||
from flair.data import Corpus
|
||||
from src.utils.nlu_utils import conllu2flair, nolabel2o, predict_multiple
|
||||
|
||||
# Frame model evaluation
|
||||
frame_model = SequenceTagger.load('frame-model-prod/best-model.pt')
|
||||
with open('data/test_dialog_46.conllu', encoding='utf-8') as trainfile:
|
||||
testset = list(parse_incr(trainfile, fields=['id', 'form', 'frame', 'slot'], field_parsers={}))
|
||||
|
||||
corpus = Corpus(test=conllu2flair(testset, "frame"))
|
||||
result = frame_model.evaluate(corpus.test, mini_batch_size=1, gold_label_type="frame")
|
||||
print(result.detailed_results)
|
||||
|
||||
# Slot model evaluation
|
||||
slot_model = SequenceTagger.load('slot-model-prod/best-model.pt')
|
||||
|
||||
with open('data/test_dialog_46.conllu', encoding='utf-8') as trainfile:
|
||||
testset = list(parse_incr(trainfile, fields=['id', 'form', 'frame', 'slot'], field_parsers={'slot': nolabel2o}))
|
||||
|
||||
corpus = Corpus(test=conllu2flair(testset, "slot"))
|
||||
result = slot_model.evaluate(corpus.test, mini_batch_size=8, gold_label_type="slot")
|
||||
print(result.detailed_results)
|
||||
|
||||
# Custom evaluation
|
||||
def __parse_acts(acts):
|
||||
acts_split = acts.split('&')
|
||||
remove_slot_regex = "[\(\[].*?[\)\]]"
|
||||
return set(re.sub(remove_slot_regex, "", act) for act in acts_split)
|
||||
|
||||
def __parse_predictions(predictions):
|
||||
return set(prediction.split('/')[0] for prediction in predictions)
|
||||
|
||||
total_acts = 0
|
||||
act_correct_predictions = 0
|
||||
slot_correct_predictions = 0
|
||||
|
||||
for file_name in os.listdir('data'):
|
||||
if file_name.split('.')[-1] != 'tsv':
|
||||
continue
|
||||
|
||||
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['kto', 'treść', 'akt'])
|
||||
df = df[df.kto == 'user']
|
||||
all_data = np.array(df)
|
||||
|
||||
for row in all_data:
|
||||
sentence = row[1]
|
||||
acts = __parse_acts(row[2])
|
||||
|
||||
predictions_raw = predict_multiple(frame_model, sentence.split(), 'frame')
|
||||
predictions = __parse_predictions(predictions_raw)
|
||||
|
||||
for act in acts:
|
||||
total_acts += 1
|
||||
if act in predictions:
|
||||
act_correct_predictions += 1
|
||||
|
||||
print(f"Accuracy - predicting acts: {(act_correct_predictions / total_acts)*100} ({act_correct_predictions}/{total_acts})")
|
17
menu.json
17
menu.json
@ -1,17 +0,0 @@
|
||||
{
|
||||
"typ_ciasta": ["grube"],
|
||||
"rozmiar": {
|
||||
|
||||
},
|
||||
"nazwa_pizzy": {
|
||||
"margarita": []
|
||||
},
|
||||
"skladniki": {
|
||||
"cebula" {
|
||||
"id": 1
|
||||
},
|
||||
"ser": {
|
||||
"id": 2
|
||||
}
|
||||
}
|
||||
}
|
41
nlu_train.py
Normal file
41
nlu_train.py
Normal file
@ -0,0 +1,41 @@
|
||||
from conllu import parse_incr
|
||||
from flair.data import Corpus
|
||||
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
|
||||
from src.utils.nlu_utils import conllu2flair, nolabel2o
|
||||
|
||||
import torch
|
||||
if torch.cuda.is_available():
|
||||
torch.backends.cudnn.enabled = False
|
||||
torch.backends.cudnn.benchmark = False
|
||||
torch.backends.cudnn.deterministic = True
|
||||
|
||||
def train_model(label_type, field_parsers = {}):
|
||||
with open('data/train_dialog.conllu', encoding='utf-8') as f:
|
||||
trainset = list(parse_incr(f, fields=['id', 'form', 'frame', 'slot'], field_parsers=field_parsers))
|
||||
with open('data/test_dialog_46.conllu', encoding='utf-8') as f:
|
||||
testset = list(parse_incr(f, fields=['id', 'form', 'frame', 'slot'], field_parsers=field_parsers))
|
||||
|
||||
corpus = Corpus(train=conllu2flair(trainset, label_type), test=conllu2flair(testset, label_type))
|
||||
label_dictionary = corpus.make_label_dictionary(label_type=label_type)
|
||||
|
||||
embedding_types = [
|
||||
WordEmbeddings('pl'),
|
||||
FlairEmbeddings('pl-forward'),
|
||||
FlairEmbeddings('pl-backward'),
|
||||
CharacterEmbeddings(),
|
||||
]
|
||||
|
||||
embeddings = StackedEmbeddings(embeddings=embedding_types)
|
||||
tagger = SequenceTagger(hidden_size=256, embeddings=embeddings, tag_dictionary=label_dictionary, tag_type=label_type, use_crf=True, tag_format="BIO")
|
||||
|
||||
frame_trainer = ModelTrainer(tagger, corpus)
|
||||
frame_trainer.train(f'{label_type}-model', learning_rate=0.1, mini_batch_size=16, max_epochs=75, train_with_dev=False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
train_model("frame")
|
||||
train_model('slot', field_parsers={'slot': nolabel2o})
|
@ -1,38 +1,87 @@
|
||||
Przyjmowania zamówień w restauracji
|
||||
==============
|
||||
|
||||
Zadanie 1: Składanie zamówienia, zdecydowany klient
|
||||
Zadanie 1: Składanie zamówienia, zdecydowany klient (wybiera opcje z menu)
|
||||
--------------------------------
|
||||
|
||||
*system:* ...
|
||||
*system:* Dzień dobry, witamy w systemie zamówień na pizzę. Polecam pizzę diavola z dodatkową rukolą.
|
||||
|
||||
*user:* ...
|
||||
*user:* Chciałbym zamówić pizzę wegetariańską w średnim rozmiarze.
|
||||
|
||||
*system:* ...
|
||||
*system:* Oczywiście, czy chciałby Pan jakieś dodatki?
|
||||
|
||||
Zadanie 2: Składanie zamówienia, niezdecydowany klient
|
||||
*user:* Poproszę dodatkowy ser oraz rukolę.
|
||||
|
||||
*system:* Oczywiście. Czy chciałby Pan coś do picia? Polecam dużą colę lub sprite.
|
||||
|
||||
*user:* Poproszę dużą colę bez cukru
|
||||
|
||||
*system:* Oczywiście, płaci Pan kartą, blikiem, gotówką czy przelewem? Zamówienie na miejscu czy na wynos?
|
||||
|
||||
*user:* Na wynos. Płatność kartą.
|
||||
|
||||
*system:* Oczywiście, zamówienie zostało przyjęte. Za chwilę zostanie Pan przekierowany do bramki płatniczej. Dziękujemy za skorzystanie z naszego systemu zamawiania pizzy i życzymy smacznego. Polecamy się na przyszłość.
|
||||
|
||||
|
||||
Zadanie 2: Składanie zamówienia, niezdecydowany klient (przekazuje jedynie swoje preferencje)
|
||||
--------------------------
|
||||
|
||||
*system:* ...
|
||||
*system:* Dzień dobry, witamy w restauracji "pizzeria", jak mogę pomóc?
|
||||
|
||||
*user:* ...
|
||||
*user:* Dzień dobry, chciałbym zamówić pizzę na wynos z osobistym odbiorem.
|
||||
|
||||
*system:* ...
|
||||
*system:* Jaką pizzę sobie Pan/Pani życzy?
|
||||
|
||||
Zadanie 3: Składanie zamówienia, klient ze specjalnymi wymaganiami
|
||||
*user:* Jakąś nie za dużą, ale żeby dwie osoby się najadły. Ważne, żeby była bezmięsna.
|
||||
|
||||
*system:* Rozumiem, czy w takim razie odpowiada Panu/Pani pizza wegetariańska w rozmiarze średnim, na cienkim cieście?
|
||||
|
||||
*user:* Tak, poproszę taką pizzę.
|
||||
|
||||
*system:* Czy chciałby Pan/Pani zamówić także napój?
|
||||
|
||||
*user:* Tak, poproszę dwa napoje owocowe, niegazowane.
|
||||
|
||||
*system:* Czy mogą być dwa niegazowane soki z pomarańczy?
|
||||
|
||||
*user:* tak
|
||||
|
||||
*system:* Dobrze, zamówienie to: średnia wegetariańska pizza na cienkim cieście oraz dwa napoje z pomarańczy. W jakiej formie preferuje Pan/Pani płatność?
|
||||
|
||||
*user:* Zapłacę gotówką, przy odbiorze zamówienia.
|
||||
|
||||
*system:* W takim razie zapraszam po odbiór zamówienia za około 45 minut. Do zobaczenia!
|
||||
|
||||
Zadanie 3: Składanie zamówienia, klient ze specjalnymi wymaganiami (modyfikuje składniki)
|
||||
--------------------------
|
||||
|
||||
*system:* ...
|
||||
*system:* Dzień dobry, witamy w restauracji "pizzeria", jak mogę pomóc?
|
||||
|
||||
*user:* ...
|
||||
*user:* poproszę średnią hawajską
|
||||
|
||||
*system:* ...
|
||||
*system:* Czy chciałby Pan/Pani zamówić także napój?
|
||||
|
||||
Zadanie 4: Składanie zamówienia, klient który rozmawia na niewłaściwy temat
|
||||
*user:* nie ale ale ta pizza to bez ananasa
|
||||
|
||||
*system:* Rozumiem. Czy życzy Pan/Pani sobie coś jeszcze?
|
||||
|
||||
*user:* nie
|
||||
|
||||
*system:* Dobrze, zamówienie to: średnia pizza hawajska, bez ananasa. W jakiej formie preferuje Pan/Pani płatność?
|
||||
|
||||
*user:* gotówką
|
||||
|
||||
*system:* W takim razie zapraszam po odbiór zamówienia za około 45 minut. Do zobaczenia!
|
||||
|
||||
Zadanie 4: Składanie zamówienia, klient, który rozmawia na niewłaściwy temat
|
||||
--------------------------
|
||||
|
||||
*system:* ...
|
||||
*system:* Dzień dobry, witamy w restauracji "pizzeria", jak mogę pomóc?.
|
||||
|
||||
*user:* ...
|
||||
*user:* Dzień dobry, chciałbym porozmawiać z managerem.
|
||||
|
||||
*system:* ...
|
||||
*system:* Niestety, nie rozumiem. Czy chcesz zamówić pizzę?
|
||||
|
||||
*user:* Połącz mnie z konsultantem!
|
||||
|
||||
*system:* Niestety, nie potrafię Ci pomóc. Do widzenia.
|
||||
|
7
requirements.txt
Normal file
7
requirements.txt
Normal file
@ -0,0 +1,7 @@
|
||||
flair==0.13.1
|
||||
conllu==4.5.3
|
||||
pandas==1.5.3
|
||||
numpy==1.26.4
|
||||
torch==1.13
|
||||
convlab==3.0.2a0
|
||||
scipy==1.12
|
0
src/__init__.py
Normal file
0
src/__init__.py
Normal file
56
src/main.py
Normal file
56
src/main.py
Normal file
@ -0,0 +1,56 @@
|
||||
from service.dialog_state_monitor import DialogStateMonitor
|
||||
from service.dialog_policy import DialogPolicy
|
||||
from service.natural_languag_understanding import NaturalLanguageUnderstanding
|
||||
from service.natural_language_generation import NaturalLanguageGeneration, parse_frame
|
||||
from service.templates import templates
|
||||
|
||||
# initialize classes
|
||||
nlu = NaturalLanguageUnderstanding(use_mocks=False) # NLU
|
||||
monitor = DialogStateMonitor() # DSM
|
||||
dialog_policy = DialogPolicy() # DP
|
||||
language_generation = NaturalLanguageGeneration(templates) # NLG
|
||||
|
||||
def frame_to_dict(frame):
|
||||
return {
|
||||
"act": frame.act,
|
||||
"slots": [{"name": slot.name, "value": slot.value} for slot in frame.slots],
|
||||
"act_understood": frame.act_understood,
|
||||
}
|
||||
|
||||
|
||||
# Main loop
|
||||
dial_num = 0
|
||||
print("CTRL+C aby zakończyć program.")
|
||||
while True:
|
||||
monitor.reset()
|
||||
|
||||
print(f"\n==== Rozpoczynasz rozmowę nr {dial_num} ====\n")
|
||||
user_input = input("Witamy w naszej pizza-przez-internet. W czym mogę pomóc?\n")
|
||||
|
||||
while True:
|
||||
# NLU
|
||||
frame = nlu.predict(user_input)
|
||||
# print("Frame: ", frame)
|
||||
|
||||
# DSM
|
||||
monitor.update(frame)
|
||||
|
||||
# DP
|
||||
system_action = dialog_policy.predict(monitor)
|
||||
system_action_dict = frame_to_dict(system_action) # Ensure system_action is a dictionary
|
||||
# print("System action: ", system_action_dict)
|
||||
|
||||
# NLG
|
||||
response = language_generation.generate(frame, system_action_dict)
|
||||
print(response)
|
||||
|
||||
if system_action.act == "bye_and_thanks" or system_action.act == "bye":
|
||||
monitor.print_order()
|
||||
break
|
||||
|
||||
if frame.act == "bye":
|
||||
print(monitor.print_order())
|
||||
break
|
||||
|
||||
user_input = input(">\n")
|
||||
dial_num += 1
|
0
src/model/__init__.py
Normal file
0
src/model/__init__.py
Normal file
15
src/model/frame.py
Normal file
15
src/model/frame.py
Normal file
@ -0,0 +1,15 @@
|
||||
from .slot import Slot
|
||||
|
||||
class Frame:
|
||||
def __init__(self, source: str, act: str, slots: list[Slot] = [], act_understood = None):
|
||||
self.source = source
|
||||
self.slots = slots
|
||||
self.act = act
|
||||
self.act_understood = act_understood
|
||||
|
||||
def __str__(self):
|
||||
msg = f"Act: {self.act}, Slots: ["
|
||||
for slot in self.slots:
|
||||
msg += f"({slot}), "
|
||||
msg += "]"
|
||||
return msg
|
7
src/model/slot.py
Normal file
7
src/model/slot.py
Normal file
@ -0,0 +1,7 @@
|
||||
class Slot:
|
||||
def __init__(self, name, value=None):
|
||||
self.name = name
|
||||
self.value = value
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"Name: {self.name}, Value: {self.value}"
|
30
src/nlu_example.py
Normal file
30
src/nlu_example.py
Normal file
@ -0,0 +1,30 @@
|
||||
from flair.models import SequenceTagger
|
||||
from utils.nlu_utils import predict_single, predict_multiple, predict_and_annotate
|
||||
|
||||
# Exploratory tests
|
||||
frame_model = SequenceTagger.load('frame-model-prod/best-model.pt')
|
||||
tests = [
|
||||
'chciałbym zamówić pizzę',
|
||||
'na godzinę 12',
|
||||
'prosiłbym o pizzę z pieczarkami',
|
||||
'to wszystko, jaka cena?',
|
||||
'ile kosztuje pizza',
|
||||
'do widzenia',
|
||||
'tak',
|
||||
'nie dziękuję',
|
||||
'dodatkowy ser',
|
||||
'pizzę barcelona bez cebuli',
|
||||
]
|
||||
|
||||
print("=== Exploratory tests - frame model ===")
|
||||
for test in tests:
|
||||
print(f"Sentence: {test}")
|
||||
print(f"Single prediction: {predict_single(frame_model, test.split(), 'frame')}")
|
||||
print(f"Multiple predictions: {predict_multiple(frame_model, test.split(), 'frame')}")
|
||||
print(f"Annotated sentence: {predict_and_annotate(frame_model, test.split(), 'frame')}")
|
||||
|
||||
print("=== Exploratory tests - slot model ===")
|
||||
slot_model = SequenceTagger.load('slot-model-prod/best-model.pt')
|
||||
for test in tests:
|
||||
print(f"Sentence: {test}")
|
||||
print(f"Prediction: {predict_and_annotate(slot_model, test.split(), 'slot')}")
|
0
src/service/__init__.py
Normal file
0
src/service/__init__.py
Normal file
66
src/service/dialog_policy.py
Normal file
66
src/service/dialog_policy.py
Normal file
@ -0,0 +1,66 @@
|
||||
from collections import defaultdict
|
||||
from model.frame import Frame
|
||||
from model.slot import Slot
|
||||
|
||||
class DialogPolicy:
|
||||
def _predict(self, dsm):
|
||||
last_frame = dsm.state['history'][-1]
|
||||
act_processed = dsm.state['was_system_act_processed']
|
||||
if(dsm.state['was_previous_order_invalid'] == False):
|
||||
if last_frame.act == "inform/order-complete":
|
||||
act = last_frame.act
|
||||
elif ("inform" in last_frame.act):
|
||||
act = last_frame.act.split('/')[0]
|
||||
else:
|
||||
act = last_frame.act
|
||||
match(act):
|
||||
case "bye":
|
||||
return Frame(source="system", act = "bye")
|
||||
case "inform/order-complete":
|
||||
return Frame(source="system", act = "bye_and_thanks")
|
||||
case "inform" | "affirm" | "negate":
|
||||
current_active_stage = dsm.get_current_active_stage()
|
||||
if current_active_stage == None:
|
||||
return Frame(source="system", act = "bye_and_thanks")
|
||||
match(current_active_stage['name']):
|
||||
case "collect_food":
|
||||
return Frame(source="system", act = "request/food", slots = [Slot("menu", dsm.state['constants']['menu'])], act_understood=act_processed)
|
||||
case "collect_drinks":
|
||||
return Frame(source="system", act = "request/drinks", slots = [Slot("drink", dsm.state['constants']['drink'])], act_understood=act_processed)
|
||||
case "more_food":
|
||||
return Frame(source="system", act = "request/food-more", slots = [Slot("menu", dsm.state['constants']['menu'])], act_understood=act_processed)
|
||||
case "more_drinks":
|
||||
return Frame(source="system", act = "request/drinks-more", slots = [Slot("drink", dsm.state['constants']['drink'])], act_understood=act_processed)
|
||||
case "collect_address":
|
||||
return Frame(source="system", act = "request/address", act_understood=act_processed)
|
||||
case "collect_payment_method":
|
||||
return Frame(source="system", act = "request/payment-method", act_understood=act_processed)
|
||||
case "collect_phone":
|
||||
return Frame(source="system", act = "request/phone", act_understood=act_processed)
|
||||
case "request/menu":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("menu", dsm.state['constants']['menu'])])
|
||||
case "request/price":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("price", dsm.state['total_cost'])])
|
||||
case "request/ingredients":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("ingredients", dsm.state['constants']['ingredients'])])
|
||||
case "request/sauce":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("sauce", dsm.state['constants']['sauce'])])
|
||||
case "request/time":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("time", dsm.state['belief_state']['time'])])
|
||||
case "request/size":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("size", dsm.state['constants']['size'])])
|
||||
case "request/delivery-price":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("delivery-price", "10")])
|
||||
case "request/drinks":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("drink", dsm.state['constants']['drink'])])
|
||||
case "welcomemsg":
|
||||
return Frame(source="system", act = "inform", slots = [Slot("menu", dsm.state['constants']['menu'])])
|
||||
case "repeat":
|
||||
return Frame(source="system", act = "repeat")
|
||||
|
||||
return Frame(source="system", act = "repeat")
|
||||
|
||||
def predict(self, dsm):
|
||||
frame = self._predict(dsm)
|
||||
dsm.state["system_history"].append(frame)
|
||||
return frame
|
209
src/service/dialog_state_monitor.py
Normal file
209
src/service/dialog_state_monitor.py
Normal file
@ -0,0 +1,209 @@
|
||||
from model.frame import Frame
|
||||
import copy
|
||||
import json
|
||||
|
||||
|
||||
def normalize(value):
|
||||
value = value.lower()
|
||||
if value[-1] in [",", "!", "?" ,"." ,")" ,"(",")"]:
|
||||
value = value[:-1]
|
||||
if value[-2:] == "ie":
|
||||
value = value[:-2] + "a"
|
||||
if value[-1] in ["ę", "ą", "y"]:
|
||||
value = value[:-1] + "a"
|
||||
if value in ["pizz", "pizzy", "pizze", "picce"]:
|
||||
value = "pizza"
|
||||
|
||||
return ' '.join(value.split())
|
||||
|
||||
|
||||
class DialogStateMonitor:
|
||||
def __init__(self, initial_state_file: str = 'attributes.json'):
|
||||
with open(initial_state_file) as file:
|
||||
constants = json.load(file)
|
||||
self.__initial_state = dict(
|
||||
belief_state={
|
||||
'order': [],
|
||||
'address': {},
|
||||
'order-complete': False,
|
||||
'phone': {},
|
||||
'delivery': {},
|
||||
'payment': {},
|
||||
'time': {},
|
||||
'name': {},
|
||||
},
|
||||
total_cost=0,
|
||||
stages=[
|
||||
{'completed': False, 'name': 'collect_food'},
|
||||
{'completed': False, 'name': 'more_food'},
|
||||
{'completed': False, 'name': 'collect_drinks'},
|
||||
{'completed': False, 'name': 'more_drinks'},
|
||||
{'completed': False, 'name': 'collect_address'},
|
||||
{'completed': False, 'name': 'collect_phone'},
|
||||
],
|
||||
was_previous_order_invalid=False,
|
||||
was_system_act_processed=False,
|
||||
constants=constants,
|
||||
history=[],
|
||||
system_history=[],
|
||||
)
|
||||
self.state = copy.deepcopy(self.__initial_state)
|
||||
|
||||
def get_current_active_stage(self) -> str | None:
|
||||
for stage in self.state['stages']:
|
||||
if stage['completed'] is False:
|
||||
# print("Current stage: ", stage['name'])
|
||||
return stage
|
||||
self.state['belief_state']['order-complete'] = True
|
||||
|
||||
def mark_current_stage_completed(self) -> None:
|
||||
for stage in self.state['stages']:
|
||||
if stage['completed'] is False:
|
||||
# print("Stage completed: ", stage['name'])
|
||||
stage['completed'] = True
|
||||
return
|
||||
|
||||
def complete_stage_if_valid(self, stage_name):
|
||||
for stage in self.state['stages']:
|
||||
if stage['name'] != stage_name:
|
||||
continue
|
||||
|
||||
if stage['name'] == "collect_food":
|
||||
for order in self.state['belief_state']['order']:
|
||||
if order.get("pizza"):
|
||||
stage['completed'] = True
|
||||
return
|
||||
elif stage["name"] == "collect_drinks":
|
||||
for order in self.state['belief_state']['order']:
|
||||
if order.get("drink"):
|
||||
stage['completed'] = True
|
||||
return
|
||||
elif stage["name"] == "collect_address":
|
||||
if not len(self.state['belief_state']['address']):
|
||||
return
|
||||
stage['completed'] = True
|
||||
return
|
||||
elif stage["name"] == "collect_phone":
|
||||
if self.state['belief_state']["phone"].get("phone"):
|
||||
stage['completed'] = True
|
||||
return
|
||||
pass
|
||||
|
||||
def item_exists(self, type: str, name: str) -> bool:
|
||||
return normalize(name) in self.state['constants'][type]
|
||||
|
||||
def drink_exists(self, name: str) -> bool:
|
||||
return normalize(name) in self.state['constants']['pizza']
|
||||
|
||||
def get_total_cost(self) -> int:
|
||||
return self.state['total_cost']
|
||||
|
||||
def slot_augmentation(self, slot, value):
|
||||
drink_normalize = ["woda", "pepsi", "cola", "coca cola", "cole", "coca"]
|
||||
if slot.name in ["food", "pizza", "ingredient"]:
|
||||
if value in drink_normalize:
|
||||
slot.name = 'drink'
|
||||
return slot
|
||||
|
||||
def slot_valid(self, slot, act):
|
||||
if act == "inform/order":
|
||||
if slot.name in ["address", "payment-method", 'delivery', 'phone', 'time', 'name']:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def value_valid(self, slot_name, value):
|
||||
if slot_name == "food":
|
||||
if value != "pizza":
|
||||
return False
|
||||
return True
|
||||
|
||||
def update(self, frame: Frame) -> None:
|
||||
self.state['was_system_act_processed'] = False
|
||||
belief_state_copy = copy.deepcopy(self.state["belief_state"])
|
||||
self.state['history'].append(frame)
|
||||
if frame.source != 'user':
|
||||
return
|
||||
if frame.act == 'inform/order':
|
||||
new_order = dict()
|
||||
for slot in frame.slots:
|
||||
value = normalize(slot.value)
|
||||
slot = self.slot_augmentation(slot, value)
|
||||
if not self.slot_valid(slot, frame.act):
|
||||
continue
|
||||
if not self.value_valid(slot.name, value):
|
||||
continue
|
||||
stage_name = self.get_current_active_stage()['name']
|
||||
is_collect_food = (slot.name == 'pizza' and stage_name == 'collect_food')
|
||||
is_more_food = (slot.name == 'pizza' and stage_name == 'more_food')
|
||||
is_collect_drinks = (slot.name == 'drink' and stage_name == 'collect_drinks')
|
||||
is_more_drinks = (slot.name == 'drink' and stage_name == 'more_drinks')
|
||||
if is_collect_food or is_collect_drinks or is_more_food or stage_name == is_more_drinks:
|
||||
if self.item_exists(slot.name, value) is False:
|
||||
self.state['was_previous_order_invalid'] = True
|
||||
return
|
||||
self.state['was_previous_order_invalid'] = False
|
||||
self.state['total_cost'] += self.state['constants'][slot.name][value]['price']
|
||||
if slot.name == "pizza":
|
||||
if new_order.get("pizza"):
|
||||
new_order[slot.name].append({"name": value, "ingredient": [], "ingredient/neg": []})
|
||||
else:
|
||||
new_order[slot.name] = [{"name": value, "ingredient": [], "ingredient/neg": []}]
|
||||
elif slot.name == "drink":
|
||||
if new_order.get("drink"):
|
||||
new_order[slot.name].append({"drink": value})
|
||||
else:
|
||||
new_order[slot.name] = [{"drink": value}]
|
||||
|
||||
elif slot.name in ["ingredient", "ingredient/neg"]:
|
||||
pizzas_list = new_order.get("pizza")
|
||||
if pizzas_list:
|
||||
pizzas_list[-1][slot.name].append(value)
|
||||
|
||||
if len(new_order) > 0:
|
||||
self.state['belief_state']['order'].append(new_order)
|
||||
self.complete_stage_if_valid('collect_food')
|
||||
self.complete_stage_if_valid('collect_drinks')
|
||||
elif frame.act == 'inform/address':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['address'][slot.name] = normalize(slot.value)
|
||||
self.complete_stage_if_valid('collect_address')
|
||||
elif frame.act == 'inform/phone':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['phone'][slot.name] = normalize(slot.value)
|
||||
self.complete_stage_if_valid('collect_phone')
|
||||
elif frame.act == 'inform/order-complete':
|
||||
self.state['belief_state']['order-complete'] = True
|
||||
elif frame.act == 'inform/delivery':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['delivery'][slot.name] = normalize(slot.value)
|
||||
self.complete_stage_if_valid('collect_address')
|
||||
elif frame.act == 'inform/payment':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['payment'][slot.name] = normalize(slot.value)
|
||||
elif frame.act == 'inform/time':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['time'][slot.name] = normalize(slot.value)
|
||||
elif frame.act == 'inform/name':
|
||||
for slot in frame.slots:
|
||||
self.state['belief_state']['name'][slot.name] = normalize(slot.value)
|
||||
elif frame.act == 'negate':
|
||||
if "request" in self.state["system_history"][-1].act:
|
||||
self.mark_current_stage_completed()
|
||||
self.state['was_system_act_processed'] = True
|
||||
|
||||
if self.state["belief_state"] != belief_state_copy and frame.act not in ["repeat", 'affirm', 'negate']:
|
||||
self.state['was_system_act_processed'] = True
|
||||
|
||||
def reset(self) -> None:
|
||||
self.state = copy.deepcopy(self.__initial_state)
|
||||
|
||||
def print_order(self) -> dict:
|
||||
print("\n=== Oto podsumowanie Twojego zamówienia ===")
|
||||
for o in self.state['belief_state']['order']:
|
||||
print(o)
|
||||
print("Adres dostawy: ")
|
||||
print(self.state['belief_state']['address'])
|
||||
print("Numer telefonu: ")
|
||||
print(self.state['belief_state']['phone'])
|
||||
print(f"Czy zostało pomyślnie zrealizowane: {self.state['belief_state']['order-complete']}")
|
108
src/service/natural_languag_understanding.py
Normal file
108
src/service/natural_languag_understanding.py
Normal file
@ -0,0 +1,108 @@
|
||||
from utils.nlu_utils import predict_single, predict_and_annotate
|
||||
from model.frame import Frame, Slot
|
||||
import random
|
||||
"""
|
||||
ACTS:
|
||||
inform/order
|
||||
request/menu
|
||||
inform/address
|
||||
request/price
|
||||
request/ingredients
|
||||
request/sauce
|
||||
inform/phone
|
||||
inform/order-complete
|
||||
request/time
|
||||
request/size
|
||||
welcomemsg
|
||||
affirm
|
||||
inform/delivery
|
||||
inform/payment
|
||||
request/delivery-price
|
||||
bye
|
||||
inform/time
|
||||
request/drinks
|
||||
inform/name
|
||||
negate
|
||||
|
||||
SLOTS:
|
||||
food
|
||||
pizza
|
||||
size
|
||||
address
|
||||
quantity
|
||||
ingredient
|
||||
payment-method
|
||||
delivery
|
||||
drink
|
||||
ingredient/neg
|
||||
name
|
||||
phone
|
||||
sauce
|
||||
"""
|
||||
|
||||
class NaturalLanguageUnderstanding():
|
||||
def __init__(self, use_mocks=False):
|
||||
self.use_mocks = use_mocks
|
||||
if self.use_mocks:
|
||||
return
|
||||
|
||||
from flair.models import SequenceTagger
|
||||
print("\n========================================================")
|
||||
print("Models are loading, it may take a moment, please wait...")
|
||||
print("========================================================\n")
|
||||
|
||||
self.frame_model = SequenceTagger.load('frame-model-prod/best-model.pt')
|
||||
self.slot_model = SequenceTagger.load('slot-model-prod/best-model.pt')
|
||||
|
||||
print("\n========================================================")
|
||||
print("Models loaded. NLU system is ready.")
|
||||
print("========================================================\n")
|
||||
|
||||
def __predict_intention(self, text: str):
|
||||
return predict_single(self.frame_model, text.split(), 'frame')
|
||||
|
||||
def __predict_slot(self, text: str):
|
||||
anootations = predict_and_annotate(self.slot_model, text.split(), 'slot')
|
||||
current_slot = None
|
||||
current_slot_value = ""
|
||||
slots = []
|
||||
|
||||
for annotation in anootations:
|
||||
form = annotation["form"]
|
||||
slot = annotation["slot"]
|
||||
|
||||
if slot[0:2] == "B-":
|
||||
if current_slot != None:
|
||||
slots.append(Slot(name=current_slot, value=current_slot_value))
|
||||
current_slot = slot[2:]
|
||||
current_slot_value = form
|
||||
elif slot[0:2] == "I-":
|
||||
current_slot_value = current_slot_value + " " + form
|
||||
elif slot == "O":
|
||||
if current_slot != None:
|
||||
slots.append(Slot(name=current_slot, value=current_slot_value))
|
||||
current_slot = None
|
||||
current_slot_value = ""
|
||||
|
||||
if current_slot != None:
|
||||
slots.append(Slot(name=current_slot, value=current_slot_value))
|
||||
|
||||
return slots
|
||||
|
||||
def predict(self, text: str):
|
||||
if not self.use_mocks:
|
||||
try:
|
||||
act = self.__predict_intention(text)
|
||||
slots = self.__predict_slot(text)
|
||||
frame = Frame(source = 'user', act = act, slots = slots)
|
||||
return frame
|
||||
except:
|
||||
return Frame(source="user", act = "repeat", slots=[])
|
||||
else:
|
||||
frames = [
|
||||
Frame(source="user", act = "inform/order", slots=[Slot(name="pizza", value="barcelona")]),
|
||||
Frame(source="user", act = "welcomemsg", slots=[]),
|
||||
Frame(source="user", act = "request/menu", slots=[]),
|
||||
]
|
||||
return random.choice(frames)
|
||||
|
43
src/service/natural_language_generation.py
Normal file
43
src/service/natural_language_generation.py
Normal file
@ -0,0 +1,43 @@
|
||||
import re
|
||||
from service.template_selector import select_template
|
||||
import random
|
||||
|
||||
class NaturalLanguageGeneration:
|
||||
def __init__(self, templates):
|
||||
self.templates = templates
|
||||
|
||||
def generate(self, frame, system_action):
|
||||
# Parsowanie frame
|
||||
act, slots = parse_frame(frame)
|
||||
|
||||
# Wybierz szablon na podstawie system_action
|
||||
template = select_template(system_action['act'], system_action['slots'])
|
||||
if template is None:
|
||||
print(f"Brak szablonu dla act: {system_action['act']} z slotami: {system_action['slots']}")
|
||||
template = random.choice(self.templates["default/template"])
|
||||
|
||||
# Zamień sloty na wartości
|
||||
slot_dict = {}
|
||||
for slot in system_action['slots']:
|
||||
if isinstance(slot['value'], list):
|
||||
slot_dict[slot['name']] = ', '.join(slot['value'])
|
||||
elif isinstance(slot['value'], dict):
|
||||
slot_dict[slot['name']] = ', '.join([f"{k}: {v}" for k, v in slot['value'].items()])
|
||||
else:
|
||||
slot_dict[slot['name']] = slot['value']
|
||||
|
||||
response = template.format(**slot_dict)
|
||||
if system_action['act_understood'] == True:
|
||||
response = f"Zrozumiałem. {response}"
|
||||
elif system_action['act_understood'] == False:
|
||||
response = f"Nie zrozumiałem. {response}"
|
||||
return response
|
||||
|
||||
def parse_frame(frame):
|
||||
if not hasattr(frame, 'act') or not hasattr(frame, 'slots'):
|
||||
raise TypeError("Expected a Frame object with 'act' and 'slots' attributes.")
|
||||
|
||||
act = frame.act
|
||||
slots = [{"name": slot.name, "value": slot.value} for slot in frame.slots]
|
||||
|
||||
return act, slots
|
216
src/service/template_selector.py
Normal file
216
src/service/template_selector.py
Normal file
@ -0,0 +1,216 @@
|
||||
import random
|
||||
from service.templates import templates
|
||||
|
||||
def generate_pizza_info(slots):
|
||||
pizza_name = None
|
||||
query_type = None
|
||||
|
||||
for slot in slots:
|
||||
if slot['name'] == 'pizza':
|
||||
pizza_name = slot['value'].lower()
|
||||
elif slot['name'] == 'ingredient':
|
||||
query_type = 'ingredient'
|
||||
elif slot['name'] == 'price':
|
||||
query_type = 'price'
|
||||
|
||||
if pizza_name not in pizza_data:
|
||||
return f"Nie mamy w ofercie pizzy o nazwie {pizza_name}."
|
||||
|
||||
if query_type == 'ingredient':
|
||||
ingredients = pizza_data[pizza_name]['ingredient']
|
||||
return f"Składniki pizzy {pizza_name} to: {', '.join(ingredients)}."
|
||||
elif query_type == 'price':
|
||||
price = pizza_data[pizza_name]['price']
|
||||
return f"Cena pizzy {pizza_name} to {price} zł."
|
||||
|
||||
return f"Informacje o pizzy {pizza_name}: składniki to {', '.join(pizza_data[pizza_name]['ingredient'])}, cena to {pizza_data[pizza_name]['price']} zł."
|
||||
|
||||
|
||||
def generate_ingredients_response(slots):
|
||||
ingredients = [slot['value'] for slot in slots if slot['name'] == 'ingredients']
|
||||
if ingredients:
|
||||
ingredient_list = []
|
||||
for ingredient in ingredients:
|
||||
ingredient_list.extend(ingredient.keys())
|
||||
response = f"Dostępne składniki to: {', '.join(ingredient_list)}."
|
||||
return response
|
||||
return "Nie podano składników."
|
||||
|
||||
|
||||
def generate_drinks_response(slots, act):
|
||||
more = 'drinks-more' in act
|
||||
drinks = [slot['value'] for slot in slots if slot['name'] == 'drink']
|
||||
if drinks:
|
||||
drink_details = []
|
||||
for drink in drinks:
|
||||
for name, details in drink.items():
|
||||
# price = details.get('price', 'unknown')
|
||||
drink_details.append(f"{name}") # w cenie {price} zł")
|
||||
if not more:
|
||||
if len(drink_details) > 1:
|
||||
response = f"Czy chcesz coś do picia? Dostępne napoje to: {', '.join(drink_details[:-1])} oraz {drink_details[-1]}."
|
||||
else:
|
||||
response = f"Czy chcesz coś do picia? Dostępne napoje to: {drink_details[0]}."
|
||||
return response
|
||||
else:
|
||||
if len(drink_details) > 1:
|
||||
response = f"Czy chcesz coś jeszcze picia?"
|
||||
else:
|
||||
response = f"Czy chcesz coś jeszcze picia?"
|
||||
return response
|
||||
return "Nie podano napojów."
|
||||
|
||||
def generate_size_response(slots):
|
||||
sizes = [slot['value'] for slot in slots if slot['name'] == 'size'][0]
|
||||
if len(sizes) != 0:
|
||||
return F"Dostępne rozmiary to: {', '.join(sizes)}"
|
||||
return "Nie podano rozmiarów."
|
||||
|
||||
def generate_sauce_response(slots):
|
||||
sauces = [slot['value'] for slot in slots if slot['name'] == 'sauce']
|
||||
if sauces:
|
||||
sauce_list = []
|
||||
for sauce in sauces:
|
||||
if isinstance(sauce, list):
|
||||
sauce_list.extend(sauce)
|
||||
else:
|
||||
sauce_list.append(sauce)
|
||||
return f"Dostępne sosy to: {', '.join(sauce_list)}."
|
||||
return "Nie podano sosów."
|
||||
|
||||
|
||||
def select_template(act, slots):
|
||||
slot_names = {slot['name'] for slot in slots}
|
||||
|
||||
if act == "welcomemsg":
|
||||
return random.choice(templates["welcomemsg"])
|
||||
|
||||
if "ingredients" in slot_names:
|
||||
return generate_ingredients_response(slots)
|
||||
elif "drink" in slot_names:
|
||||
return generate_drinks_response(slots, act)
|
||||
elif "sauce" in slot_names:
|
||||
return generate_sauce_response(slots)
|
||||
elif "size" in slot_names:
|
||||
return generate_size_response(slots)
|
||||
elif "price" in slot_names:
|
||||
return random.choice(templates["inform/price"])
|
||||
elif "food" in slot_names:
|
||||
return random.choice(templates["inform/menu"])
|
||||
|
||||
if act == "inform":
|
||||
if "menu" in slot_names:
|
||||
return random.choice(templates["inform/menu"])
|
||||
elif "address" in slot_names:
|
||||
return random.choice(templates["inform/address"])
|
||||
elif "phone" in slot_names:
|
||||
return random.choice(templates["inform/phone"])
|
||||
elif "order-complete" in slot_names:
|
||||
return random.choice(templates["inform/order-complete"])
|
||||
elif "delivery" in slot_names:
|
||||
return random.choice(templates["inform/delivery"])
|
||||
elif "payment" in slot_names:
|
||||
return random.choice(templates["inform/payment"])
|
||||
elif "time" in slot_names:
|
||||
return random.choice(templates["inform/time"])
|
||||
elif "name" in slot_names:
|
||||
return random.choice(templates["inform/name"])
|
||||
elif "price" in slot_names and "pizza" in slot_names:
|
||||
return generate_pizza_info(slots)
|
||||
elif act == "inform/order":
|
||||
if "quantity" in slot_names and "pizza" in slot_names and "size" in slot_names:
|
||||
return templates["inform/order"][1]
|
||||
elif "quantity" in slot_names and "pizza" in slot_names:
|
||||
return templates["inform/order"][2]
|
||||
elif "quantity" in slot_names and "food" in slot_names:
|
||||
return templates["inform/order"][0]
|
||||
elif "food" in slot_names and "pizza" in slot_names and "price" in slot_names:
|
||||
return templates["inform/order"][5]
|
||||
elif "quantity" in slot_names:
|
||||
return templates["inform/order"][3]
|
||||
else:
|
||||
return templates["inform/order"][4]
|
||||
elif act == "request/menu":
|
||||
return random.choice(templates["request/menu"])
|
||||
elif act == "inform/address":
|
||||
return random.choice(templates["inform/address"])
|
||||
elif act == "request/price":
|
||||
return random.choice(templates["request/price"])
|
||||
elif act == "inform/menu":
|
||||
return random.choice(templates["inform/menu"])
|
||||
elif act == "request/ingredients":
|
||||
return random.choice(templates["request/ingredients"])
|
||||
elif act == "request/sauce":
|
||||
return random.choice(templates["request/sauce"])
|
||||
elif act == "inform/phone":
|
||||
return random.choice(templates["inform/phone"])
|
||||
elif act == "inform/order-complete":
|
||||
return random.choice(templates["inform/order-complete"])
|
||||
elif act == "request/time":
|
||||
return random.choice(templates["request/time"])
|
||||
elif act == "request/size":
|
||||
return random.choice(templates["request/size"])
|
||||
elif act == "inform/delivery":
|
||||
return random.choice(templates["inform/delivery"])
|
||||
elif act == "inform/payment":
|
||||
return random.choice(templates["inform/payment"])
|
||||
elif act == "request/delivery-price":
|
||||
return random.choice(templates["request/delivery-price"])
|
||||
elif act == "inform/time":
|
||||
return random.choice(templates["inform/time"])
|
||||
elif act == "request/drinks":
|
||||
return random.choice(templates["request/drinks"])
|
||||
elif act == "request/food":
|
||||
return random.choice(templates["inform/menu"])
|
||||
elif act == "request/food-more":
|
||||
return random.choice(templates["inform/menu-more"])
|
||||
elif act == "inform/name":
|
||||
return random.choice(templates["inform/name"])
|
||||
elif act == "bye":
|
||||
return random.choice(templates["bye"]) # TODO force end?
|
||||
elif act == "bye_and_thanks":
|
||||
return random.choice(templates["bye_and_thanks"])
|
||||
elif act == "repeat":
|
||||
return random.choice(templates["repeat"])
|
||||
elif act == "request/address":
|
||||
return random.choice(templates["request/address"])
|
||||
elif act == "request/payment-method":
|
||||
return random.choice(templates["request/payment-method"])
|
||||
elif act == "request/phone":
|
||||
return random.choice(templates["request/phone"])
|
||||
|
||||
return None
|
||||
|
||||
|
||||
# def select_template(act, slots):
|
||||
# slot_names = {slot['name'] for slot in slots}
|
||||
|
||||
# if act == "welcomemsg":
|
||||
# return random.choice(templates["welcomemsg"])
|
||||
# if act == "request/menu":
|
||||
# return random.choice(templates["request/menu"])
|
||||
# if act == "inform/address":
|
||||
# return random.choice(templates["inform/address"])
|
||||
# if act == "inform/delivery":
|
||||
# return random.choice(templates["inform/delivery"])
|
||||
# if act == "inform/payment":
|
||||
# return random.choice(templates["inform/payment"])
|
||||
# if act == "affirm":
|
||||
# return random.choice(templates["affirm"])
|
||||
# if act == "request/drinks":
|
||||
# return random.choice(templates["request/drinks"])
|
||||
# if act == "bye":
|
||||
# return random.choice(templates["bye"])
|
||||
# if act == "inform/order":
|
||||
# if "quantity" in slot_names and "food" in slot_names and "pizza" in slot_names:
|
||||
# return templates["inform/order"][1]
|
||||
# elif "quantity" in slot_names and "pizza" in slot_names:
|
||||
# return templates["inform/order"][4]
|
||||
# elif "food" in slot_names and "pizza" in slot_names:
|
||||
# return templates["inform/order"][2]
|
||||
# elif "quantity" in slot_names:
|
||||
# return templates["inform/order"][3]
|
||||
# else:
|
||||
# return templates["inform/order"][4]
|
||||
|
||||
# return "default/template"
|
169
src/service/templates.py
Normal file
169
src/service/templates.py
Normal file
@ -0,0 +1,169 @@
|
||||
templates = {
|
||||
"inform/order": [
|
||||
"Zamówiłeś {quantity} x {food}.",
|
||||
"Twoje zamówienie to {quantity} x {food} {pizza}.",
|
||||
"Mmmm... {food} {pizza} to rewelacyjny wybór. Czy chcesz coś do picia?",
|
||||
"Dziękujemy za zamówienie {quantity} x {food}.",
|
||||
"Na jaką pizzę masz ochotę?"
|
||||
],
|
||||
"inform/menu": [
|
||||
"Oferujemy następujące pizze: {menu}.",
|
||||
],
|
||||
"inform/menu-more": [
|
||||
"Czy chcesz jeszcze jakąś pizzę?",
|
||||
],
|
||||
"inform/name": [
|
||||
"Twoje imię to {name}.",
|
||||
"Podane imię: {name}.",
|
||||
"Twoje imię: {name}.",
|
||||
"Masz na imię {name}.",
|
||||
"Imię: {name}."
|
||||
],
|
||||
"inform/price": [
|
||||
"Cena wybranej pizzy to {price} zł.",
|
||||
"Koszt pizzy to {price} zł.",
|
||||
"Wybrana pizza kosztuje {price} zł.",
|
||||
"Cena pizzy wynosi {price} zł."
|
||||
],
|
||||
"inform/address": [
|
||||
"Twój adres to: {address}.",
|
||||
"Adres, który podałeś, to: {address}.",
|
||||
"Dostawa na adres: {address}.",
|
||||
"Dostarczymy na adres: {address}.",
|
||||
"Twój podany adres to: {address}."
|
||||
],
|
||||
"inform/sauce": [
|
||||
"Dostępne sosy to: {sauce}.",
|
||||
"Możesz wybrać spośród następujących sosów: {sauce}.",
|
||||
"Oferujemy następujące sosy: {sauce}."
|
||||
],
|
||||
"inform/phone": [
|
||||
"Twój numer telefonu to: {phone}.",
|
||||
"Podany numer telefonu: {phone}.",
|
||||
"Numer telefonu, który podałeś, to: {phone}.",
|
||||
"Twoje dane kontaktowe: {phone}.",
|
||||
"Telefon kontaktowy: {phone}."
|
||||
],
|
||||
"inform/order-complete": [
|
||||
"Twoje zamówienie zostało zrealizowane. Dziękujemy!",
|
||||
"Zamówienie zakończone. Dziękujemy za zakupy!",
|
||||
"Zamówienie zrealizowane. Czekaj na dostawę!",
|
||||
"Twoje zamówienie jest gotowe. Dziękujemy!",
|
||||
"Realizacja zamówienia zakończona. Dziękujemy!"
|
||||
],
|
||||
"inform/delivery": [
|
||||
"Twoje zamówienie zostanie dostarczone na {address}.",
|
||||
"Dostarczymy zamówienie na adres: {address}.",
|
||||
"Dostawa na adres: {address}.",
|
||||
"Twoje zamówienie jedzie na {address}.",
|
||||
"Adres dostawy: {address}."
|
||||
],
|
||||
"inform/address": [
|
||||
"Twoje zamówienie zostanie dostarczone na adres: {address}.",
|
||||
"Dostawa będzie na adres: {address}.",
|
||||
"Adres dostawy: {address}."
|
||||
],
|
||||
"inform/payment": [
|
||||
"Metoda płatności to: {payment-method}.",
|
||||
"Płatność realizujesz przez: {payment-method}.",
|
||||
"Wybrałeś metodę płatności: {payment-method}.",
|
||||
"Płatność: {payment-method}.",
|
||||
"Możesz zapłacić kartą, gotówką lub blikiem"
|
||||
],
|
||||
"affirm": [
|
||||
"Świetnie! Napisz co Ci chodzi po głowie.",
|
||||
"Dobrze! Co dalej?",
|
||||
"OK! Co chciałbyś zamówić?",
|
||||
"Super! Co dalej?",
|
||||
"Dobrze! Jakie dalsze zamówienia?"
|
||||
],
|
||||
"request/delivery-price": [
|
||||
"Koszt dostawy wynosi {delivery-price} zł.",
|
||||
"Cena dostawy to {delivery-price} zł.",
|
||||
"Za dostawę zapłacisz {delivery-price} zł.",
|
||||
"Dostawa kosztuje {delivery-price} zł.",
|
||||
"Koszt dostawy: {delivery-price} zł."
|
||||
],
|
||||
"request/menu": [
|
||||
"W naszym menu znajdziesz: {menu}."
|
||||
],
|
||||
"inform/time": [
|
||||
"Aktualny czas to {time}.",
|
||||
"Jest teraz {time}.",
|
||||
"Czas: {time}.",
|
||||
"Godzina: {time}.",
|
||||
"Obecny czas: {time}."
|
||||
],
|
||||
"welcomemsg": [
|
||||
"Witaj w naszej wspaniałej pizzerii. W czym mogę pomóc?",
|
||||
"Halo, halo, tu najlepsza pizza w mieście. Masz głoda?",
|
||||
"Dzieńdoberek, gdyby wszyscy jedli nasze pizze, na świecie nie byłoby wojen. Jaką pizzę sobie dziś gruchniesz?",
|
||||
],
|
||||
"request/price": [
|
||||
"Cena za {food} wynosi {price} zł.",
|
||||
"Koszt {food} to {price} zł.",
|
||||
"Cena {pizza} o rozmiarze {size} wynosi {price} zł.",
|
||||
"Za {quantity} x {pizza} zapłacisz {price} zł.",
|
||||
"Koszt {food} to {price} zł."
|
||||
],
|
||||
"request/ingredients": [
|
||||
"Nasza {food} {pizza} składa się z ciasta, sosu pomidorowego, sera i innych dodatków.",
|
||||
"W {pizza} znajdziesz: {ingredients}.",
|
||||
"{pizza} zawiera: {ingredients}.",
|
||||
"W skład {pizza} wchodzi: {ingredients}.",
|
||||
"Na {pizza} składają się: {ingredients}."
|
||||
],
|
||||
"request/sauce": [
|
||||
"Jakie sosy chciałbyś do {food}?",
|
||||
"Proszę wybrać sosy do {food}.",
|
||||
"Jakie sosy zamawiasz do {food}?",
|
||||
"Które sosy mają być do {food}?",
|
||||
"Wybierz sosy do {food}."
|
||||
],
|
||||
"request/food": [
|
||||
"Co chciałbyś zamówić?",
|
||||
"Proszę podać na jaką pizzę masz ochotę",
|
||||
"Którą pizzę wybrałeś?"
|
||||
],
|
||||
"request/time": [
|
||||
"Oczekiwany czas dostawy to {time} minut.",
|
||||
"Dostawa zajmie około {time} minut.",
|
||||
"Czas dostawy to około {time} minut.",
|
||||
"Przewidywany czas dostawy to {time} minut.",
|
||||
"Twoje zamówienie dotrze w {time} minut."
|
||||
],
|
||||
"request/size": [
|
||||
"Jaką wielkość {pizza} preferujesz? Mamy {sizes}.",
|
||||
"Dostępne rozmiary {pizza} to {sizes}.",
|
||||
"Jaką wielkość {pizza} chciałbyś zamówić? {sizes}.",
|
||||
"Proszę wybrać rozmiar {pizza}: {sizes}.",
|
||||
"Mamy następujące rozmiary {pizza}: {sizes}."
|
||||
],
|
||||
"bye": [
|
||||
"Dziękujemy i do zobaczenia wkrótce.",
|
||||
"Polecamy się na przyszłość. Do zobaczenia!",
|
||||
"Do widzenia.",
|
||||
],
|
||||
"negate": [
|
||||
"Przepraszam, nie mamy {ingredient/neg} w ofercie.",
|
||||
"Niestety, {ingredient/neg} jest niedostępne.",
|
||||
"Nie posiadamy {ingredient/neg} w menu.",
|
||||
"Brak {ingredient/neg} w naszej ofercie.",
|
||||
"Niestety, nie mamy {ingredient/neg}."
|
||||
],
|
||||
"default/template": [
|
||||
"Nie zrozumiałem, spróbuj inaczej sformułować zdanie."
|
||||
],
|
||||
"repeat": [
|
||||
"Nie zrozumiałem, spróbuj inaczej sformułować zdanie.",
|
||||
],
|
||||
"request/address": [
|
||||
"Jaki adres dostawy?"
|
||||
],
|
||||
"bye_and_thanks": [
|
||||
"Dziękujęmy, przekazaliśmy zamówienie do realizacji. Do zobaczenia!",
|
||||
],
|
||||
"request/phone": [
|
||||
"Podaj proszę numer telefonu do kontaktu dla kuriera."
|
||||
]
|
||||
}
|
0
src/test/__init__.py
Normal file
0
src/test/__init__.py
Normal file
50
src/test/dialog_state_monitor.py
Normal file
50
src/test/dialog_state_monitor.py
Normal file
@ -0,0 +1,50 @@
|
||||
from src.service.dialog_state_monitor import DialogStateMonitor
|
||||
from src.model.frame import Frame
|
||||
from src.model.slot import Slot
|
||||
|
||||
dsm = DialogStateMonitor()
|
||||
|
||||
assert dsm.item_exists('pizza', 'capri') is True
|
||||
assert dsm.item_exists('pizza', 'buraczana') is False
|
||||
assert dsm.item_exists('drink', 'cola') is True
|
||||
assert dsm.state['was_previous_order_invalid'] is False
|
||||
|
||||
assert dsm.get_current_active_stage() == 'collect_food'
|
||||
frame1 = Frame('user', 'inform/order', [Slot('pizza', 'margarita'), Slot('sauce', 'ketchup')])
|
||||
dsm.update(frame1)
|
||||
assert dsm.get_current_active_stage() == 'collect_drinks'
|
||||
assert dsm.get_total_cost() == 20
|
||||
frame2 = Frame('user', 'inform/order', [Slot('pizza', 'tuna')])
|
||||
dsm.update(frame2)
|
||||
assert dsm.get_current_active_stage() == 'collect_drinks'
|
||||
assert dsm.get_total_cost() == 20 # Pizza is not added, as previous stage is closed already
|
||||
frame3 = Frame('user', 'inform/order-complete', [])
|
||||
dsm.update(frame3)
|
||||
frame4 = Frame('user', 'inform/order', [Slot('drink', 'cola')])
|
||||
dsm.update(frame4)
|
||||
assert dsm.get_current_active_stage() == 'collect_address'
|
||||
assert dsm.get_total_cost() == 30
|
||||
|
||||
assert dsm.state['belief_state']['order'][0]['pizza'] == 'margarita'
|
||||
assert dsm.state['belief_state']['order'][0]['sauce'] == 'ketchup'
|
||||
assert dsm.state['belief_state']['order-complete'] is True
|
||||
assert dsm.state['history'][0] == frame1
|
||||
assert dsm.state['history'][1] == frame2
|
||||
assert dsm.state['history'][2] == frame3
|
||||
assert dsm.state['history'][3] == frame4
|
||||
|
||||
dsm.reset()
|
||||
|
||||
assert dsm.get_total_cost() == 0
|
||||
assert dsm.get_current_active_stage() == 'collect_food'
|
||||
assert dsm.state['belief_state']['order'] == []
|
||||
assert dsm.state['belief_state']['order-complete'] is False
|
||||
assert len(dsm.state['history']) == 0
|
||||
|
||||
dsm.reset()
|
||||
|
||||
frame1 = Frame('user', 'inform/order', [Slot('pizza', 'buraczana')])
|
||||
dsm.update(frame1)
|
||||
assert dsm.state['was_previous_order_invalid'] is True
|
||||
assert dsm.state['belief_state']['order'] == []
|
||||
assert dsm.get_total_cost() == 0
|
0
src/utils/__init__.py
Normal file
0
src/utils/__init__.py
Normal file
100
src/utils/nlu_utils.py
Normal file
100
src/utils/nlu_utils.py
Normal file
@ -0,0 +1,100 @@
|
||||
from flair.data import Sentence
|
||||
from flair.datasets import FlairDatapointDataset
|
||||
|
||||
def nolabel2o(line, i):
|
||||
return 'O' if line[i] == 'NoLabel' else line[i]
|
||||
|
||||
def conllu2flair(sentences, label=None):
|
||||
if label == "frame":
|
||||
return conllu2flair_frame(sentences, label)
|
||||
else:
|
||||
return conllu2flair_slot(sentences, label)
|
||||
|
||||
def conllu2flair_frame(sentences, label=None):
|
||||
fsentences = []
|
||||
for sentence in sentences:
|
||||
tokens = [token["form"] for token in sentence]
|
||||
fsentence = Sentence(' '.join(tokens), use_tokenizer=False)
|
||||
|
||||
for i in range(len(fsentence)):
|
||||
fsentence[i:i+1].add_label(label, sentence[i][label])
|
||||
|
||||
fsentences.append(fsentence)
|
||||
|
||||
return FlairDatapointDataset(fsentences)
|
||||
|
||||
def conllu2flair_slot(sentences, label=None):
|
||||
fsentences = []
|
||||
for sentence in sentences:
|
||||
fsentence = Sentence(' '.join(token['form'] for token in sentence), use_tokenizer=False)
|
||||
start_idx = None
|
||||
end_idx = None
|
||||
tag = None
|
||||
|
||||
if label:
|
||||
for idx, (token, ftoken) in enumerate(zip(sentence, fsentence)):
|
||||
if token[label].startswith('B-'):
|
||||
if start_idx is not None:
|
||||
fsentence[start_idx:end_idx+1].add_label(label, tag)
|
||||
start_idx = idx
|
||||
end_idx = idx
|
||||
tag = token[label][2:]
|
||||
elif token[label].startswith('I-'):
|
||||
end_idx = idx
|
||||
elif token[label] == 'O':
|
||||
if start_idx is not None:
|
||||
fsentence[start_idx:end_idx+1].add_label(label, tag)
|
||||
start_idx = None
|
||||
end_idx = None
|
||||
tag = None
|
||||
|
||||
if start_idx is not None:
|
||||
fsentence[start_idx:end_idx+1].add_label(label, tag)
|
||||
|
||||
fsentences.append(fsentence)
|
||||
return FlairDatapointDataset(fsentences)
|
||||
|
||||
def __predict(model, csentence):
|
||||
fsentence = conllu2flair([csentence])[0]
|
||||
model.predict(fsentence)
|
||||
return fsentence
|
||||
|
||||
def __csentence(sentence, label_type):
|
||||
if label_type == "frame":
|
||||
return [{'form': word } for word in sentence]
|
||||
else:
|
||||
return [{'form': word, 'slot': 'O'} for word in sentence]
|
||||
|
||||
def predict_single(model, sentence, label_type):
|
||||
csentence = __csentence(sentence, label_type)
|
||||
fsentence = __predict(model, csentence)
|
||||
intent = {}
|
||||
for span in fsentence.get_spans(label_type):
|
||||
tag = span.get_label(label_type).value
|
||||
if tag in intent:
|
||||
intent[tag] += 1
|
||||
else:
|
||||
intent[tag] = 1
|
||||
|
||||
return max(intent, key=intent.get)
|
||||
|
||||
def predict_multiple(model, sentence, label_type):
|
||||
csentence = __csentence(sentence, label_type)
|
||||
fsentence = __predict(model, csentence)
|
||||
|
||||
return set(span.get_label(label_type).value for span in fsentence.get_spans(label_type))
|
||||
|
||||
def predict_and_annotate(model, sentence, label_type):
|
||||
csentence = __csentence(sentence, label_type)
|
||||
fsentence = __predict(model, csentence)
|
||||
|
||||
for span in fsentence.get_spans(label_type):
|
||||
tag = span.get_label(label_type).value
|
||||
if label_type == "frame":
|
||||
csentence[span.tokens[0].idx-1]['frame'] = tag
|
||||
else:
|
||||
csentence[span.tokens[0].idx - 1]['slot'] = f'B-{tag}'
|
||||
for token in span.tokens[1:]:
|
||||
csentence[token.idx - 1]['slot'] = f'I-{tag}'
|
||||
|
||||
return csentence
|
@ -11,8 +11,8 @@ operators_and_users = {
|
||||
("03", "Dawid Korzępa"),
|
||||
],
|
||||
("05", "Patryk Osiński"): [
|
||||
# ("02", "Anna Śmigiel"),
|
||||
# ("04", "Michał Kasprowicz"),
|
||||
("02", "Anna Śmigiel"),
|
||||
("04", "Michał Kasprowicz"),
|
||||
("06", "Krzysztof Bojakowski"),
|
||||
("08", "Krystian Osiński"),
|
||||
]
|
||||
|
Loading…
Reference in New Issue
Block a user