luktom.net
  • blog
  • kontakt
  • english





Chatboty i sztuczna inteligencja – część 4: encje i rozgałęzienia w Wit.ai

30 maj, 2017
Chatboty, Daj się poznać 2017
Brak komentarzy
Odsłony : 4342

W ostatnim odcinku zbudowaliśmy prostą aplikację w Wit.ai do obsługi inteligentnego domu. Na tę chwilę potrafi ona rozpoznać np. polecenie otwarcia lub zamknięcia garażu. Dzisiaj rozbudujemy aplikację o obsługę encji oraz pokażę, jak tworzyć rozgałęzienia w ramach aplikacji Wit.ai.

Polecenie z encjami

Pierwszym krokiem będzie utworzenie nowej historii – w ramach przykładu będzie to polecenie ustawienia temperatury w danym pokoju:

Wpisujemy przykładowe polecenie, a następnie zaznaczamy nazwę pokoju i klikamy na link Create an entity for… aby utworzyć nową encję na danym słowie. Operację powtarzamy także dla przykładowej temperatury. Dodajemy przykładową odpowiedź bota, zapisujemy i testujemy czy bot poprawnie rozumie polecenie (naciskając tyldę).

Zanim przejdziemy dalej, do dodania wywołania funkcji i omówienia rozgałęzień chciałbym poruszyć jeden problem:

Odmiana rzeczowników

Polski jest niestety językiem w którym rzeczowniki się odmienia. Powoduje to niemałe problemy z ich użyciem w ramach przetwarzania języka naturalnego. W podanym przykładzie naturalnym jest napisanie „ustaw temperaturę w łazience” – to, co Wit.ai rozpozna jako encję to dokładne słowo „łazience” – a z punktu widzenia programu oczekiwalibyśmy raczej słowa w mianowniku – „łazienka”. Niestety nie udało mi się znaleźć żadnej sensownej biblioteki do przekształcania polskich rzeczowników do mianownika, jednak w języku polskim zazwyczaj w rzeczownikach odmieniają się końcówki, więc dość skuteczną metodą wydaje się być szukanie najdłuższego wspólnego prefixu słowa podanego przez użytkownika oraz słowa w mianowniku – nie jest to może najwydajniejsze, ale z moich obserwacji wynika, że jest to dość skuteczne – algorytm ten sprawdza się np. w SmogBocie do wyszukiwania miast.

Rozgałęzienia

Rozgałęzienia w aplikacjach Wit.ai pozwalają na realizowanie osobnej logiki w zależności od wyniku wywołania funkcji, a konkretniej – od tego jakie klucze są ustawione w ramach kontekstu.

Dodanie wywołania funkcji w aplikacji Wit.ai wiąże się z kilkoma efektami:

  • Funkcja taka otrzymuje wynik przetwarzania przez Wit.ai, czyli rezultat pasowania intent oraz encji.
  • Program, który obsługuje zapytania do Wit.ai utrzymuje także kontekst rozmowy (oraz session id, ale to w tym momencie nieistotne) do którego wywoływana funkcja ma dostęp.
  • Funkcja w ramach swojego wywołania może modyfikować kontekst poprzez ustawienie lub usunięcie poszczególnych kluczy.
  • Zaktualizowany kontekst jest przesyłany wraz z następnym zapytaniem do Wit.ai.
  • Dzięki temu Wit.ai może podjąć decyzję co do dalszego przebiegu programu.

W przypadku naszej prostej aplikacji funkcja setTemperature otrzymuje w wyniku poprawnego przetworzenia encje: room oraz temperature. Aby program Wit.ai mógł kroczyć dalej optymistyczną ścieżką funkcja powinna zaktualizować kontekst o klucze room oraz temperature. Należy jednak rozpatrzeć także wariant pesymistyczny, czyli taki, w którym brakuje niektórych informacji. W tej sytuacji omawiana funkcja powinna ustawić w kontekście klucz roomMissing lub temperatureMissing.

Istotną funkcjonalnością o której należy także wspomnieć w kontekście rozgałęzień są zakładki oraz operacja jump, która pozwala przeskakiwać do innych części aplikacji Wit.ai – aby np. zrealizować proste pętle pytające o brakujące informacje – jej przykład pokaże poniżej.

Reasumując, przykładowa implementacja aplikacji Wit.ai prezentuje się następująco – poniżej wariant optymistyczny:

Gałąź pytająca o brakujący pokój – zwróćcie uwagę na skok po odpowiedzi użytkownika z powrotem do zakładki setTemperature:

Oraz gałąź pytająco o brakującą temperaturę:

Oczywiście możemy testować (acz tylko do pewnego stopnia) cały mechanizm wybierając ręcznie, które klucze kontekstu funkcja „ustawiła”:

Nasza aplikacja umie coraz więcej – zrealizowaliśmy zarówno proste rozumienie jak i parsowanie encji wraz z dopytywaniem o brakujące informacje – na bazie powyższego możemy powoli myśleć o budowie aplikacji klienckiej :)

W następnych częściach…

… przejdziemy do kodu i integracji aplikacji z Wit.ai :)
Pokażę mojego klienta do Wit.ai, który ładnie opakowuje kwestie połączenia, zapytań a także obsługi session id i kontekstu.

Aby nie przegapić kolejnych wpisów zapraszam do śledzenia tego bloga, czy to przez kanał RSS, czy też poprzez stronę na Facebooku.



Tagi :   aichatbotydsp2017wit.ai

Powiązane wpisy

  • Anatomia chatbota – część 2: podstawowe operacje

  • Azure Bot Service – the good, the bad and the ugly

  • SmogBot – zamknięcie projektu

  • Anatomia chatbota – część 6: PromptDialog

  • Dodaj komentarz

    Click here to cancel reply

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>





    Łukasz Tomaszkiewicz

    Łukasz Tomaszkiewicz

    Pasjonat chmury, szczególnie AWSa, który nieustannie automatyzuje powtarzające się czynności i optymalizuje procesy, przy okazji wdrażając dobre praktyki dotyczące bezpieczeństwa. Jego szerokie doświadczenie w zakresie tworzenia oprogramowania, projektowania baz danych, a także wirtualizacji serwerów i zarządzania infrastrukturą w chmurze pozwala mu spojrzeć przekrojowo na współczesny stack technologiczny.

    W wolnym czasie fotograf, sporadycznie piszący blogger :) a także regularny prelegent na krakowskich grupach związanych z IT.

    Wyznawca Vim'a :)

    Kategorie

    • Ansible
    • AWS
    • C#
    • Chatboty
    • Cloud
    • Daj się poznać 2017
    • Docker
    • Inne
    • Linux
    • Open source
    • Organizacyjne
    • Prelekcje
    • Sieci komputerowe
    • SQL Server
    • Windows
    • Windows Server
    • Wirtualizacja

    Najczęściej czytane

    • Creating single node VSAN cluster
    • SQL Server – walidacja numerów PESEL i NIP
    • Konfiguracja serwera DHCP na routerach Cisco
    • Aktywacja routingu IP w Windows 7 / Windows Server 2008
    • Konwersja maszyn wirtualnych z ESXi do Hyper-V przy użyciu SCVMM 2012
    • Jak podłączyć program R do SQL Servera?

    Tagi

    .net ai ansible asp.net mvc aws aws cli bot builder bot framework c# centos certyfikaty chatbot chatboty cisco cmd docker dsp2017 esxi hyperv kontenery konteneryzacja linux mvc nlp openvpn plssug pobieranie powershell prelekcje rancher redhat router sieci smogbot sql server ssd ssl vmware vsphere windows windows mobile windows server wirtualizacja wit.ai wrzuta

    Copyright © 2006-2018 by Łukasz Tomaszkiewicz. Wszelkie prawa zastrzeżone