W ten nowej serii wpisów zajmiemy się dodaniem odrobiny „inteligencji” do naszych chatbotów. Seria będzie dość praktyczna, tj. nie będę się skupiał na tym co się dzieje pod spodem, a raczej na tym jak skutecznie używać dostępnych w sieci narzędzi na bazie których możemy uczynić bota bardziej inteligentnym – a mówiąc inteligentnym mam na myśli głównie rozumienie mowy naturalnej przez bota.
Choć Microsoft w ramach Bot Frameworka oferuje narzędzie do przetwarzania języka naturalnego o nazwie LUIS (Language Understanding Intelligent Service), które całkiem sprawnie integruje się z systemem dialogów Bot Buildera, to jednak obiektem mojego zainteresowania w niniejszej serii będzie głównie usługa o nazwie Wit.ai. Dlaczego? Główny powód to obsługa języka polskiego, co jest ewenementem, gdyż ciężko uświadczyć gotowe usługi wspierające tak egzotyczny język :) Poza tym Wit.ai oferuje przyjemne API oraz przystępny system dialogów – o szczegółach wkrótce, dzisiaj natomiast podstawy.
Jak działają API do rozumienia języka naturalnego (NLU)?
Na początek mała grafika, zapożyczona z dokumentacji API.AI, która doskonale opisuje działanie serwisów do NLU (Natural Language Understanding):
Proces przebiega następująco:
Użytkownik pisze do chatbota, a chatbot przesyła tekst użytkownika jako zapytanie do usługi typu NLU.
Usługa NLU przetwarza zapytanie i „na wyjściu” zwraca kilka informacji, z których najważniejszą jest tzw. intent (polskie tłumaczenie jako „zamiar” słabo mi pasuje, już prędzej „intencja”). Intent wskazuje na jeden z predefiniowanych w aplikacji NLU zamiarów, informacja ta jest zazwyczaj opatrzona także poziomem pewności (confidence) co to tego, że dany zamiar faktycznie pasuje do zapytania użytkownika.
Encje
Poza intent usługa NLU zwraca w niektórych przypadkach także entities, czyli dodatkowe informacje wydobyte z zapytania użytkownika. Przykładowo, dla zapytania „jaka pogoda będzie jutro w Krakowie?” usługa NLU powinna – poza określeniem intencji w stylu „sprawdź pogodę” – zwrócić dwie encje: jedna z lokalizacją, o którą pyta użytkownik, a druga z datą o jaką chodzi w zapytaniu.
Oczywiście encji danego typu (np. lokalizacji) może być kilka w jednym zdaniu (np. „sprawdź loty z Krakowa do Genewy między 15 maja a 20 maja”) co dodatkowo komplikuje sytuację, jak również zapytanie może mieć… mniej encji niż tego wymaga aplikacja. Przykładem niech będzie zapytanie „jaka będzie pogoda?” – w tym przypadku bot wymaga podania lokalizacji, niestety w zapytaniu od użytkownika nie ma sprecyzowanej lokalizacji. Konieczne jest więc „dopytanie” użytkownika, a do tego przydaje się, aby usługa oferowała…
Wsparcie dla konwersacji i kontekstu
Ta funkcja usług NLU pozwala na tworzenie bardziej rozbudowanych konwersacji oraz obsługę scenariuszy, w których bot jest w stanie dopytać się użytkownika o brakujące dane. W powyższym przykładzie bot zapytałby użytkownika „dla jakiego miasta pogoda Cię interesuje”, aby – otrzymawszy kolejną wiadomość od użytkownika – wpasować ją w kontekst konwersacji – czyli dla danego intent uzupełnić encję dotyczącą lokalizacji.
O technicznych aspektach kontekstu konwersacji będę pisał więcej w następnych wpisach, dzisiaj poruszę jeszcze jeden aspekt, mianowicie:
Customowe akcje
W przypadku niektórych usług NLU – jak rozważany Wit.ai – mamy także dostęp do mechanizmu, w którym usługa nie tylko zwraca intent i entities, ale także jest w stanie „wywołać” jakieś akcje w kodzie użytkownika. Użyłem słowa „wywołać” w cudzysłowie, gdyż takowe „wywołanie” nie zawsze jest mechanizmem typu callback lub webhook, a po prostu zwróceniem odpowiedniej odpowiedzi ze wskazaniem akcji, jaką powinien podjąć kod użytkownika – tak jest w Wit.ai. API.AI dla odmiany oferuje pełnoprawnego webhooka :)
W następnych częściach…
… zajmiemy się utworzeniem przykładowej aplikacji przy użyciu Wit.ai, w której zaprezentuję wszystkie ficzery tego narzędzia :)
Aby nie przegapić kolejnych wpisów zapraszam do śledzenia tego bloga, czy to przez kanał RSS, czy też poprzez stronę na Facebooku.
Dodaj komentarz