From db6e02e547b59102563b521f95774fec8007260b Mon Sep 17 00:00:00 2001 From: filnow Date: Sun, 26 May 2024 13:40:21 +0200 Subject: [PATCH] eval on user, add acts, fix book --- book.jsgf | 69 ++++++++++++++++++++++++++-------------- data/dialog-09-02-01.tsv | 12 +++---- data/dialog-09-04-01.tsv | 18 +++++------ data/dialog-09-06-01.tsv | 12 +++---- data/dialog-09-08-01.tsv | 8 ++--- data/dialog-10-11-01.tsv | 2 +- evaluate.py | 8 +++-- 7 files changed, 76 insertions(+), 53 deletions(-) diff --git a/book.jsgf b/book.jsgf index 4acf61c..070abfd 100644 --- a/book.jsgf +++ b/book.jsgf @@ -2,36 +2,62 @@ grammar book; -public = interesuja mnie dania kuchni wloskiej oraz meksykanskiej | jaka jest gramatura waszego burrito i czy mozna wybrac do niego mieso | przyjmujecie patnosc karta | a od ktorej do ktorej jest otwarta | super w takim razie czy mogbym dokonac rezerwacji na godzine 21 | przy oknie poprosze | jakie alergeny zawiera stek z grillowanymi warzywami i jakie piwa importowane macie dokadnie | czy akceptujecie bitcoina | a w jakiej cenie jest ta pizza | koreanskie bibimbap z woowina brzmi dobrze ile kosztuje | nie nie chce nic zmieniac prosze o przekazanie dania do realizacji | zaplace gotowka przy odbiorze | lasagne brzmi super moge do tego wypic cole i zamowic jakis deser | wszystko jest okej dziekuje | chciabym dostac 2 rozne warianty mozesz mi zaproponowac alternatywe dla drugiej osoby zamiast ryby i rosou | podaj menu bez potraw na zimno | a piwo 0 | a czy mozna blikiem | jakie dania oferujecie | czy oferujecie rozne poziomy wysmazenia wolowiny | ile kosztuje to danie gowne | tak zoz zamowienie na adres xyz | a cos innego nie lubie kurczaka | czy macie moze w ofercie zrazy woowe | jaka macie karte napojow | czy oferujecie dowoz | jaki jest koszt steka z poledwicy woowej caprese i wody gazowanej | poprosze o dostawe na adres rubiez 12j na godzine 16 | dziekuje czy moge zamowic posiki na godzine 15 | a co oferujecie z dan miesnych | czy do tego serwowane sa jeszcze ziemniaki | dziekuje bardzo w takim razie chciabym to zamowic | jaka sa ceny deserow | jak duza jest porcja pierogow ruskich | to poprosze do tego sok owocowy soki z jakich owocow sa dostepne czy sa one swiezo wyciskane | to poprosze dodac to do zamowienia oraz podsumowac cae zamowienie | na wynos | 00120 watykan | a czy macie jakies dania azjatyckie | w takim razie dodaj ja do zamowienia czy mogbys zaproponowac cos na przystawke i na deser | poprosze wode i cole | nie dziekuje do widzzenia | chciabym zjesc tatara zupe grzybowa stek i tiramisu czy moge zjesc tatara bez cebuli | za drogo jednak nie zjem tatara z dowozem na adres biedronkowa 4 | w takim razie na przystawke bedzie tatar a co do zupy mam pytanie z jakich grzybow ona sie skada | w takim razie cae moje zamowienie to bedzie tatar krem z dyni stek z poledwicy woowej i obedzie sie bez deseru pytanie jeszcze czy mozna pacic karta | w takim razie chetnie zostane i na ten moment bedzie dla mnie wszystko | tak ale jeszcze to nie koniec; +public = potwierdzam | tak | tak potwierdzam | tak to wszystko | to poprosze | super to zatem wszystko | oki | to odbiore | wszystko jest ok dziekuje | dobrze nie moge sie juz doczekac; -public = poprosze {portion_size} porcje | [] {dish} | no dobrze | []
{address} | czy moglibyscie przygotowac porcji na okreslona godzine na wynos; + +public = czesc jestem agentem dialogowym przyjmujacym zamowienia w restauracji moge doradzic ci w wyborze odpowiedniej pozycji z menu w czym moge ci pomoc ; public = chcialbym zarezerwowac stolik ; public = Jakie dodatki moge wziac do ryby | Jakie inne desery oferujesz | ul Tulipanow 6 Poznan | jaki zestaw zarekomendowabys dla studenta z ograniczonym budzetem | a macie Piwo | a co bys zarekomendowa do takiego obiadu | czy patnosc mozna podzielic na 3 osoby | to gotowka | poprosze srednio krwisty | dziekuje za pomoc | Dobrze a czy carpaccio posiada jakies alergeny | chciabym sie dowiedziec jaka ryba wiekszosci ryb nie lubie | chciabym saatke ktora nie ma majonezy i jest swieza | to gotowki za ile musze byc w restauracji zeby wszystko byo gotowo | to odbiore | Podsumuj to | Pomaranczowy | Super dziekuje | spozywanie tuszczy i wyeliminowanie weglowodanow a ponadto znaczne ograniczenie posikow zawierajacych cukier a wiec owocow i warzyw | a jest piwo | Czy macie w ofercie wodke | a ile wyjdzie za wszystko | dziekuje to wszystko | Czy dao by sie ja zamienic na inna skoro nie lubie ososia | Okej brzmi dobrze Chciabym jeszcze zamowic cos do picia | Skad to wiesz jako system | Swietnie dziekuje za pomoc | Czy moge zjesc tatara bez cebuli; +public = [zaplace | poprosze] {payment_method}; + + + + = poprosze na | poprosze do | poprosze | do | na ; + + = chcialbym zjesc | poprosze | chcialbym | chcialabym | chcialabym zjesc | chce | chce zjesc | dla mnie bedzie | wezme ; + +
= uniwersytetu poznanskiego 61614 poznan | poziomkowa poznan | poznan | uam poznan | wydzial matematyki | poznanska | sezamkowa | pacanowo; + + = hej | siema | czesc | witam ; + + = w czym mozesz mi pomoc | w czym mi mozesz pomoc | jakim botem jestes | czym sie zajmujesz ; + = (na | w) {day}; = dzisiaj | jutro | poniedzialek | wtorek | srode | czwartek | piatek | sobote | niedziele; @@ -40,28 +66,23 @@ public = Jakie dodatki moge wziac do ryby | Jakie inne desery oferujesz = []; - = dziewiata | dziesiata | jedenasta | dwunasta; + = dziewiata | dziesiata | jedenasta | dwunasta | 19; = pietnas | trzydziesci; = (na | dla) {size} osob; - = dwie | dwoch | trzy | trzech | cztery | czterech | piec | pieciu | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; - -public = [zaplace | poprosze] {payment_method}; + = dwie | dwoch | trzy | trzech | cztery | czterech | piec | pieciu | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 123; = (karta | gotowka | blikiem) [] ; = (na miejscu | przy odbiorze | z gory); -public = (dobrze nie moge sie juz doczekac | do widzenia | dziekuje milego dnia); - -public = [pokaz] {help_with}; - = menu | (jakie posilki moge zjesc z tego menu) | (A jaka to ) ; - = tatara | tatar | poledwica | poledwice | pizza | pizze | tiramisu | zrazy [wolowe] | pyzy | placki | makaron | picia | zupa | danie_glowne | deser | napoj | ryba | rybe; + = tatara | tatar | poledwica | poledwice | pizza | pizze | tiramisu | zrazy [wolowe] | pyzy | placki | makaron | picia | zupa | danie_glowne | deser | napoj | ryba | rybe | cole | tiramisu | zupe grzybowa | stek | soki; + + + -public = Dziekuje | tak; -public = poprosze w takim razie ta pizze razy oraz litra coli | chciabym zamowic na adres
| wybornie czy z kuchni woskiej znajdzie sie lasagne oraz czy w winach znajda sie ciekawsze pozycje takie jak amarena | jestem wysoce niepocieszony z powodu braku trunkow siarczystych ale jakos przebrne przez to czy na deser jest mozliwosc tiramisu | dziekuje | na 15 dzisiaj mozna zarezerowac stoli z podanym obiadem | na na pojutrze | no dobrze przekonales mnie zoze u was zamowienie czy przyjmujecie patnosc karta | pamietajcie zeby byo cieple ; \ No newline at end of file diff --git a/data/dialog-09-02-01.tsv b/data/dialog-09-02-01.tsv index dbd4d67..cb291da 100644 --- a/data/dialog-09-02-01.tsv +++ b/data/dialog-09-02-01.tsv @@ -1,5 +1,5 @@ -user Hej, w czym możesz mi pomóc? hello -system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc? " welcomemsg +user Hej, w czym możesz mi pomóc? hello() +system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc? " welcomemsg() user Chciałbym zamówić bardzo duży obiad dla 2 osób. Co możesz mi polecić? request(size="large",people="2") system "Jako bardzo duży obiad dla dwóch osób mogę polecić następujący zestaw: @@ -26,12 +26,12 @@ Jeśli chcesz również deser mogę polecić: user Jakie dodatki mogę wziąć do ryby? reqmore(value="dodatki") system Do potrawy Ryba z grilla oferujemy następujące dodatki: ziemniaki pieczone, surówka Colesław, ryż smażony. offer(value="ziemniaki pieczone, surówka Colesław, ryż smażony") user Chętnie wezmę ziemniaki pieczone. ack(value="ziemniaki pieczone") -system Dobrze, zaznaczyłem iż ryba z grilla ma być z dodatkiem ziemniaki pieczone. Czy chciałby Pan zmienić coś jeszcze w zamówieniu czy przejść do procesu ustalenia dostawy i płatności? affirm&impl-conf&reqmore +system Dobrze, zaznaczyłem iż ryba z grilla ma być z dodatkiem ziemniaki pieczone. Czy chciałby Pan zmienić coś jeszcze w zamówieniu czy przejść do procesu ustalenia dostawy i płatności? affirm&confirm&reqmore user Jakie inne desery oferujesz? request(type="dessert") system Jako deser w ofercie posiadamy: Tiramisu, Szarlotka, Lody waniliowe offer(value="Tiramisu, Szarlotka, Lody waniliowe") -user W takim razie niech zostanie początkowa opcja. Możemy przejść do kwestii dostawy? deny&request(value="delivery")&request(value="payment") +user W takim razie niech zostanie początkowa opcja. Możemy przejść do kwestii dostawy? deny()&request(value="delivery")&request(value="payment") system Zrozumiałem. Proszę o podanie adresu dostawy oraz metody płatności (oferujemy płatność kartą lub gotówką na miejscu). request(value="delivery)&select(value="payment") user ul. Tulipanów 6, Poznań inform(delivery="ul. Tulipanów 6, Poznań") user Zapłacę gotówką na miejscu inform(delivery="cash") -system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm&bye -user Dziękuję thankyou +system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm()&bye() +user Dziękuję thankyou() diff --git a/data/dialog-09-04-01.tsv b/data/dialog-09-04-01.tsv index 0f3ec25..8e39776 100644 --- a/data/dialog-09-04-01.tsv +++ b/data/dialog-09-04-01.tsv @@ -1,5 +1,5 @@ -user Hej, w czym mozesz mi pomoc? hello -system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc? " welcomemsg +user Hej, w czym mozesz mi pomoc? hello() +system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc? " welcomemsg() user Co macie w menu dzisiaj? request(value="menu") system "Nasze dzisiejsze menu jest następujące: @@ -61,16 +61,16 @@ system "Jako zestaw potraw na zimno w wersji budżetowej polecam: user To prosze dodać to do moje zamówienia, czy macie jakieś napoje? ack&request(type="drink") system Jako napój mogę zaproponować jeden z następujących trunków: Coca-cola (500ml), Fanta (500ml), Woda mineralna (wersja gazowana lub niegazowana) (500ml) offer(value="Coca-cola (500ml), Fanta (500ml), Woda mineralna (wersja gazowana lub niegazowana) (500ml)") user a macie Piwo? reqalts(type="beer") -system Niestety, nie mamy w ofercie napojów alkoholowych. canthelp +system Niestety, nie mamy w ofercie napojów alkoholowych. canthelp() user A piwo 0? reqalts(value="piwo 0") -system Niestety, nie ma w naszym menu napoju piwo 0. canthelp +system Niestety, nie ma w naszym menu napoju piwo 0. canthelp() user a co byś zarekomendował do takiego obiadu request(type="drink", attribute="relevant") system Dla studenta z ograniczonym budżetem mogę zarekomendować napój: woda mineralna (gazowana) (500ml) offer(value="woda mineralna (gazowana) (500ml)") user to poprosze ack user czy płatnośc można podzielić na 3 osoby? request(payment_type="split") -system Przykro mi, ale oferujemy jedynie standardowe formy płatności kartą lub gotówką na miejscu. canthelp +system Przykro mi, ale oferujemy jedynie standardowe formy płatności kartą lub gotówką na miejscu. canthelp() user płatność może byc kartą ale w 3 porcjach request(payment_type="split") -system Przykro mi, ale nie wspieramy tej opcji płatności canthelp +system Przykro mi, ale nie wspieramy tej opcji płatności canthelp() user Czy opakowanie na wynos są dodatkowo płatne? request(topic="packaging", value="price") system Nie, opakowania są wliczone w cenę potrawy. inform user Super to zatem wszystko ack&bye @@ -78,8 +78,8 @@ system W celu realizacji zamówienia proszę o podanie adresu dostawy oraz formy user "Uniwersytetu Poznańskiego 4, 61-614 Poznań Sala D-3, płatność za pomocą kryptowalut" inform(delivery="Uniwersytetu Poznańskiego 4, 61-614 Poznań Sala D-3")&inform(payment="kryptowalut") -system Przykro mi, ale nie wspieramy tej opcji płatności. Oferujemy płatność kartą lub gotówką na miejscu. canthelp +system Przykro mi, ale nie wspieramy tej opcji płatności. Oferujemy płatność kartą lub gotówką na miejscu. canthelp() user a czy można blikiem? request(type="payment", value="blikiem") -system Przykro mi, ale nie wspieramy tej opcji płatności. Oferujemy płatność kartą lub gotówką na miejscu canthelp +system Przykro mi, ale nie wspieramy tej opcji płatności. Oferujemy płatność kartą lub gotówką na miejscu canthelp() user to gotówką inform(payment="cash") -system Zrozumiałem. Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm&bye +system Zrozumiałem. Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm()&bye() diff --git a/data/dialog-09-06-01.tsv b/data/dialog-09-06-01.tsv index 511ff9f..d52efa8 100644 --- a/data/dialog-09-06-01.tsv +++ b/data/dialog-09-06-01.tsv @@ -1,7 +1,7 @@ -user Dzień dobry hello -system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc?" welcomemsg +user Dzień dobry hello() +system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc?" welcomemsg() user Czy przyjmujecie zamówienia tylko z jednej restauracji? request(restaurant="other") -system "Obecnie obsługujemy tylko restaurację ""Jarvis""." canthelp +system "Obecnie obsługujemy tylko restaurację ""Jarvis""." canthelp() user Jakie dania oferujecie? request(type="menu") system "Nasze dzisiejsze menu jest następujące: @@ -38,8 +38,8 @@ user czy oferujecie rozne poziomy wysmazenia wolowiny? reqmore(topic="stek z pol system "Tak, stek może być podany jako ""krwisty"", ""średnio krwisty"", ""wysmażony"" oraz ""mocno wysmażony"". " "offer(value="""krwisty"", ""średnio krwisty"", ""wysmażony"" oraz ""mocno wysmażony"")" user poprosze srednio krwisty. inform(value="stek z polędwicy", attribute="średnio krwisty") system Dobrze, zaznaczyłem że stek ma być średnio krwisty. Czy chciałby Pan zmienić coś jeszcze w zamówieniu czy przejść do procesu ustalenia dostawy i płatności? affirm&reqmore -user Moze finalizowac zamowienie affirm +user Moze finalizowac zamowienie affirm() system Dobrze, poproszę o podanie adresu dostawy oraz metodę płatności (oferujemy płatność kartą lub gotówką na miejscu). request(value="delivery")&select(value="payment") user platnosc gotowka, ulica sezamkowa 123, Pacanowo inform(payment="cash")&inform(delivery="ulica sezamkowa 123, Pacanowo") -system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm&bye -user dziekuje za pomoc thankyou&bye +system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm()&bye() +user dziekuje za pomoc thankyou()&bye() diff --git a/data/dialog-09-08-01.tsv b/data/dialog-09-08-01.tsv index 82ab247..1e2877b 100644 --- a/data/dialog-09-08-01.tsv +++ b/data/dialog-09-08-01.tsv @@ -1,5 +1,5 @@ -user Siema, w czym możesz mi pomóc? hello -system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc?" welcomemsg +user Siema, w czym możesz mi pomóc? hello() +system "Witamy w restauracji ""Jarvis"". Jestem systemem przyjmującym zamówienia. W czym mogę pomóc?" welcomemsg() user Chciałabym zamówic coś na obiad, co polecasz? request(value="recommendation") system Jako danie główne mogę polecić danie Stek z polędwicy wołowej, a na przystawkę Carpaccio z buraka. offer(value="Stek z polędwicy wołowej, Carpaccio z buraka") user Ile kosztuje to danie główne? reqmore(topic="Stek z polędwicy wołowej", value="price") @@ -10,9 +10,9 @@ user Okej, to wziąłbym to, a co do picia proponujesz? request(value="recommen system Jako napój mogę zaproponować jeden z następujących trunków: Coca-cola (500ml), Fanta (500ml), Woda mineralna (wersja gazowana lub niegazowana) (500ml) offer(value="Coca-cola (500ml), Fanta (500ml), Woda mineralna (wersja gazowana lub niegazowana) (500ml)") user Czy w ofercie nie ma napoi zero? reqmore(topic="napoje zero") system Oferujemy napój coca-cola w wersji zero. Woda mineralna również nie zawiera cukru. inform(topic="napoje zero") -user Okej to wezmę do tego cole zero, ile wynosi koszt całego zamówienia? affirm +user Okej to wezmę do tego cole zero, ile wynosi koszt całego zamówienia? affirm() system Zrozumiałem. Twoje zamówienie to teraz: Stek z polędwicy wołowej, Carpaccio z buraka oraz Coca-cola (zero). Całkowity koszt zamówienia wraz z dostawą to 64.99 zł. affirm&imp-conf user Dobrze chciałbym zapłacić przy odbiorze gotówką, czy jest taka możliwość? reqmore(topic="payment") system Tak, oferujemy opcję płatności kartą przy odbiorze. Czy w takim razie złożyć zamówienie? Jeśli tak to proszę podać adres dostawy. affirm&request(value="delivery") user Tak złóż zamówienie, na adres XYZ. affirm&inform(delivery="XYZ") -system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm&bye +system Zamówienie zostało złożone i jest teraz w przygotowaniu. Dziękuję bardzo i życzę smacznego! affirm()&bye() diff --git a/data/dialog-10-11-01.tsv b/data/dialog-10-11-01.tsv index 6025ed8..8e8427d 100644 --- a/data/dialog-10-11-01.tsv +++ b/data/dialog-10-11-01.tsv @@ -1,6 +1,6 @@ user Hej, czym się zajmujesz? hello() system Czesc, jestem agentem dialogowym przyjmujacym zamowienia w restauracji. Moge doradzic ci w wyborze odpowiedniej pozycji z menu. W czym moge ci pomoc? welcomemsg() -user Pokaż menu request(value="menu") +user Pokaż menu help(value="menu") system Nasze menu to: "przystawki": "Tatar wołowy", "Carpaccio z buraka", "Sałatka caprese", "zupy": "Krem z dyni", "Rosół z makaronem", "Zupa grzybowa", "dania_glowne": "Stek z polędwicy wołowej", "Pieczona kaczka z jabłkami", "Lasagne, "Ryba z grilla, "Risotto z kurczakiem i grzybami", "Pierogi ruskie", "Placki ziemniaczane", "desery": "Tiramisu", "Szarlotka, "Lody waniliowe" select() user Chciałbym zjeść tatara, zupe grzybowa, stek i tiramisu. Czy mogę zjeść tatara bez cebuli? request(value="tatar",value="zupa grzybowa",value="stek",value="tiramisu")&reqalt(value="tatar",exclusion="cebula") system Tak, możemy przygotować tatara bez cebuli. confirm() diff --git a/evaluate.py b/evaluate.py index e5e2835..3c8adaa 100644 --- a/evaluate.py +++ b/evaluate.py @@ -36,19 +36,21 @@ for df in data_files: df.columns = ["agent", "message"] else: continue + user_speech_rows = df[df['agent'] == "user"] user_speeches = user_speech_rows["message"] entries_count = len(user_speeches) found_rules = user_speeches.apply(lambda x: grammar.find_matching_rules(decode_prompt(x))) - - for line, rules in zip(df.iterrows(), found_rules): + + for line, rules in zip(user_speech_rows.iterrows(), found_rules): act = line[1]['act'].split('(')[0] if len(rules) > 0: recognized_act = rules[0].name if recognized_act in act: true_positives += 1 - else: + acts_recognized[act] += 1 + else: false_positives += 1 acts_not_recognized[act] += 1 else: