Tak jak obiecałem w ostatnim artykule dzisiaj opiszę jak dodać choć trochę inteligencji do naszego bota. Zrobimy to za pomocą serwisu NLU1. Microsoft udostępnia taki serwis pod domeną LUIS.ai. Jednak niestety wśród wpieranych języków nie ma Polskiego. Jako, że postanowiłem targetować moją testową aplikację na język Polski postanowiłem poszukać serwisu tego typu obsługującego nasz język polski. Trafiłem wtedy na serwis Wit.ai obsługujący (lepiej lub gorzej) język polski.
Podstawowe pojęcia
Zanim przejdę do opisu działania serwisu, chciałbym poruszyć ważną kwestię. Są nią pojęcia jakimi posługują się serwisy typu NLU, czy NLP2:
Intent – jest to zamiar jaki użytkownik ma wprowadzając dane zapytanie do bota;
Entity – jest to ważne słowo w wypowiedzi. Są to najczęściej informacje które musi otrzymać nasz bot aby wykonać akcję żądaną przez użytkownika.
Dla przykładu. Zapytanie: Zapisz spotkanie z Markiem na jutro 12:30 na PW. W tym zdaniu zgodnie z opisem:
Entity:
- Data i czas: jutro 12:30 (jest to relacyjny zapis daty. Dobry NLU powinien wysupłać z tego konkretną datę bazując na dzisiejszej);
- Miejsce/lokalizacja: PW
- Nazwa wydarzenia: spotkanie z Markiem.
Intent: utworzenie wydarzenia w kalendarzu.
Za mało informacji
Problemem jaki musimy obsłużyć, jest podanie za małej ilości informacji żeby wykonać akcje. W powyższym przykładzie może to być np.: Zapisz spotkanie. Mamy intent, mamy jedno entity (nazwę wydarzenia), ale nie mamy daty w której mamy je zapisać. W takim wypadku należy użytkownika dopytać o brakujące dane. W tym miejscu zaznaczam tylko problem. Zajmiemy się nim w innym wpisie.
Tworzenie aplikacji
Aby rozpocząć zabawę z naszym rozpoznawaniem mowy należy:
- Wejść na stronę Wit.ai;
- Zalogować się za pomocą konta na Facebooku lub Githubie;
- Gdy wszystko przejdzie pomyślnie, zostajemy przekierowani na stronę naszego konta;
- Wprawdzie znajduje się tutaj już aplikacja MyFirstApp, ale my utworzymy sobie taka od zera;
- W tym celu naciskamy znaczek plusa (+) w prawym górnym rogu:
- W otwartym formularzu musimy wypełnić nazwę, wybrać język (Polski) ustawić czy aplikacja ma być publiczna czy prywatna:
- Klikamy przycisk
+ Create App
.
Uczenie modelu
Teraz gdy mamy już utworzoną naszą aplikację należy wytrenować model (NLU polega na uczeniu maszynowym). Robimy to poprzez wpisywanie kolejnych fraz które chcemy żeby nasz bot rozpoznawał i odpowiednie dobieranie entity. Przykładowe dodanie nowej frazy:
Teraz czeka nas żmudna praca. Trzeba wpisywać kolejne wariacje zapytań i próśb jakie użytkownik może kierować do naszego bota i weryfikować czy entity zostały wykryte poprawnie. Jeżeli nie to należy ręcznie korygować nieścisłości. W przypadku tej aplikacji kolejnymi zapytaniami jakie mógłbym wprowadzać są np.:
- za tydzień o 16:00 spotkanie z dziekanem
datetime za tydzień o 16:00
agenda_entry spotkanie z dziekanem - Jutro 12:30 pociąg do Lublina Warszawa Centralna
datetime Jutro 12:30
agenda_entry pociąg do Lublina
location Warszawa Centralna
Machine learning
I tak dalej. Im więcej wprowadzimy danych tym lepiej przewidywał będzie nas model. Co ważne to żeby starać się wprowadzać każdy przykład w trochę innej formie i z innymi danymi. Gdy pisałem swoją testową aplikację opartą o Wit.ai satysfakcjonujące mnie (bo nie idealne) rozpoznawanie zamiarów użytkownika uzyskałem dopiero po całym popołudniu wprowadzania różnych danych i sposobów formułowania zapytań. Także jest to proces żmudny.
Jednak bardzo fajną rzeczą jest fakt, że z każdym zapytaniem nasz model się uczy. Więc im więcej użytkowników będzie korzystać już z naszego bota, tym lepiej będzie on rozpoznawał ich zamiary. To co warto robić co jakiś czas, gdy już podepniemy Wit.ai z botem to wejść na zakładkę Inbox
i korygować zapytania co do których Wit.ai nie jest pewien.
Nieścisłości w Wit.ai
Widać tutaj pewną nieścisłość. Wcześniej pisałem o entity i intents. Natomiast przy wprowadzaniu nie określiliśmy Intentów. Wit.ai podszedł do konceptu trochę inaczej (chociaż wcześniej wpierali intenty). Postanowiłem nawet w tej sprawie napisać do supportu Wit.ai. Teraz nazwa entity jest intentem. W aplikacji rozwiązałem to tak, że dopasowuję obecność odpowiednich entity i wtedy wykonuje odpowiednie akcje na danych. Dużo lepszym moim zdaniem jest rozwiązanie w LUIS, gdzie intent występuje jawnie podany. Natomiast jak już pisałem niestety nie wspiera on języka Polskiego.
Już w następnym odcinku pokażę jak połączyć rozpoznawanie tekstu w Wit.ai z botem w Microsoft Bot Framework. I jak zwykle w razie jakichkolwiek pytań zapraszam do sekcji komentarze lub do kontaktu bezpośredniego. Do przeczytania!
Z tego co widzę na wit.ai są już intenty oraz entity.