Návrh multimodálných interakcií (NAO, Echo, Home)

Cieľom tohto cvičenia bude návrh multimodálnych interakcí. Budeme pracovať hneď s troma zaujímavými systémami - humanoidným robotom NAO a s virtuálnymi asistentmi Amazon Echo a Google Home.

Aj keď bude navrhnuté aplikácie budú neprenosné, teda budú fungovať iba s danými zariadeniami, ich absolvovaním získame skúsenosti z návrhu rozhraní medzi človekom a strojom, tzv. human-machine interfaces. Taktiež získame náhľad na to, akým spôsobom funguje multimodalita a aký má vplyv na interakciu.

Aby sme mohli vykonať nasledujúce úlohy, krátko sa zoznámime so samotným robotom. Humanoidný robot NAO (Obr. 1) je autonómny, programovateľný robot vyvinutý spoločnosťou Aldebaran Robotics (aktuálne Softbank). Pracuje pod špeciálnym operačným systémom NAOqi OS, ktorý je odvodený od GNU/Linux distribúcii Gentoo. Programovanie funkcií a správania pre robota je možné realizovať viacerými spôsobmi. Základným nástrojom je grafické vývojové prostredie Choregraphe, distribuovaný spolu s robotom. V tomto softvéri je možné vyberať a spájať moduly ktoré sú konfigurovateľné. Druhým dôležitým nástrojom je programovanie modulov pomocou jazyka Python. Viac komplexným a rozšíreným spôsobom programovania robota je NAOqi Framework, ktorý predstavuje SDK (Software Development Kit) robota. NAOqi Framework je multiplatformová platforma (Windows, MacOS, Linux), pomocou ktorej je možné vyvíjať softvér pre robota v jazykoch C++, Java a Python.

Obr.1. Humanoidný robot NAO
Obr. 1. Humanoidný robot NAO

NAO podporuje rečové technológie ktoré umožňujú interakciu v devätnástich jazykoch, avšak v tejto skupine nie je slovenčina. Najbližším podporovaným príbuzným jazykom je čeština, ktorú je možné veľmi dobre využiť aj pre interakciu v slovenčine. Robot je vybavený aj takzvaným autonómnym módom, v ktorom simuluje prirodzené pohyby človeka a snaží sa sledovať smer prichádzajúceho zvuku, pohybmi hlavy.

Z prednášok už vieme, že na to, aby sme vytvorili rečovú interakciu medzi človekom a strojom potrebujeme minimálne tri moduly - systém pre automatické rozpoznávanie reči, systém pre riadenie dialógu a systém pre syntézu reči z textu. Robot NAO našťastie všetky tieto systémy má (a tiež mnohé ďalšie).

Tieto moduly sú dostupné cez aplikačné rozhrania operačného systému robota NAOqi.

Modul pre rozpoznávanie reči je súčasťou NAOqi Audio a jeho názov je ALSpeechRecognition. ALSpeechRecognition module umožňuje robotovi rozpoznávať preddefinované slová alebo frázy vo viacerých jazykoch. Princípy jeho použitia, definíciu API a tutorial o jeho použití si môžete preštudovať na: http://doc.aldebaran.com/2-4/naoqi/audio/alspeechrecognition.html

Modul pre syntézu reči z textu (TTS) je tiež súčasťou NAOqi Audio. Jeho názov je ALTextToSpeech. ALTextToSpeech module umožňuje robotovi hovoriť. Viac sa dozviete na: http://doc.aldebaran.com/2-4/naoqi/audio/altexttospeech.html

Tretím potrebným modulom je modul na riadenie interakcie ALDialog. ALDialog module je súčasťou NAOqi Interaction engines. Viac informácií: http://doc.aldebaran.com/2-4/naoqi/interaction/dialog/aldialog.html

Veľkou výhodou NAOqi riešenia je, že pre vytvorenie jednoduchých dialógových interakcií s robotom, pri použití modulu ALDialog sa nemusíme extra zaoberať rozpoznávaním a syntézou reči. Tieto funkcionality bude systém používať automaticky. Preto pre prípravu dialógu s robotom si potrebujeme osvojiť hlavne princípy tvorby pravidiel pre ALDialog module. Poďme na to!

Pre spustenie dialógového modulu ALDialog budeme využívať skript v jazyku Python, ktorý musí byť umiestnený v robotovi. Tento skript načítava súbor s pravidlami pre riadenia dialógu (súbor s príponou .top), nastavuje jazyk interakcie a spúšťa dialógovú interakciu. Zdrojový kód spúšťacieho skriptu si môžete prezrieť tu:

Čo je ale dôležitejšie, pre vytvorenie samotnej interakcie je potrebné vytvoriť súbor s pravidlami pre riadenia dialógu podľa syntaxe QiChat (pozri http://doc.aldebaran.com/2-4/naoqi/interaction/dialog/dialog.html).

Každý dialógový súbor (.top) musí obsahovať niekoľko povinných deklarácií, ktoré sa nachádzajú na začiatku súboru. Tieto deklarácie sú „topic“ a „language“.

Súbor dialógových pravidiel nachádzajúcich sa v dialógovom súbor je spätý s názvom tzv. témy (topic). Topic teda definuje názov skupiny pravidiel.

Syntax:

topic: ~name()

Použitie: Definuje názov témy. Téma musí mať len jeden názov. Názov témy musí byť v danom jazyku jedinečný.

Príklad použitia:

topic: ~skuska()

Deklarácia z príkladu znamená, že pravidlá definované v tomto súbore sú jednoznačne identifikované označením skuska().

Téma (Topic) následne obsahuje pravidlo alebo skupinu pravidiel, ktoré definujú súvislosť vstupov používateľa s výstupmi systému.

Syntax:

language: enu

Použitie: Definuje jazyk témy. Používa skrátené kódy jednotlivých podporovaných jazykov (napr. „czc“ znamená český jazyk, „enu“ - anglický jazyk, „rur“ - ruský jazyk)

Pravidlá sú základným stavebným prvkom riadenia dialógu v systéme QiChat. Dialóg v systém QiChat je definovaný zoznamom pravidiel. Rozlišujeme dva základné typy pravidiel:

  • User rules: Jedná sa o pravidlá, kde je iniciátorom interakcie používateľ. Takéto pravidlo priradzuje špecifickému vstupu od používateľa možný výstup systému.

Príklad:

u: (Ahoj Nao ako sa dnes máš) Ahoj človek, ďakujem, mám sa dobre a ty?
  • Proposal rules: Ide o pravidlá, kde je iniciatívny systém, bez toho, aby tomu predchádzal vstup od používateľa. Takéto pravidlo spúšťa špecifický výstup robota bez predchádzajúceho vstupu od používateľa.

Príklad:

proposal: Videl si včera toho chlapíka v telke?
    u1: (yes) Bol šialený, nie?
    u1: (no) Vážne? Musím ti o ňom povedať. 

Jedná sa o pravidlá, kde je iniciátoro interakcie používateľ. Takéto pravidlo priradzuje špecifickému vstupu od používateľa možný výstup systému.

Syntax:

u:(Input) Answer
u:(Input)
    Answer

kde "Input" predstavuje vstup od používateľa a "Answer" je možnou odpoveďou systému.

Použitie

Robot odpovie alebo vykoná pripravenou odpoveďov „Answer“ ak zachytí vstup od používateľa v podobe uvedenej v „Input“ .

Príklad:

topic: ~test1 ()
language: czc

u:(Ahoj) ahoj človek    
u:(Ako sa máš) Mám sa dobre

User rules, teda pravidlá iniciované používateľom môžu mať aj komplexnejšiu štruktúru. Na jej vytvorenie sa používajú tzv. User subrules.

Pre lepšie pochopenie tohto konceptu uvedieme najprv príklad:

topic: ~test2 ()
language: czc

u:(Rozpravajme sa o zvieratách) Máš psa alebo mačku?

   u1:(psa) Je to veľký pes?

      u2:(áno) Musí mať poriadne veľký výbeh
      u2:(nie) Malé psy su roztomilé

   u1:(mačku) bývaš v dome?

     u2:(áno) chodí tvoja mačka von?
        u3:(áno) loví myši?

     u2:(nie) Dúfam že sa mačke v byte páči

   u1:(nič) to ani ja

Dialóg sa teda môže vyvíjať nasledovne:

NAO: Máš psa alebo mačku?
User: psa
NAO: Je to veľký pes?
User: áno
NAO: Musí mať poriadný výbeh.

alebo napr.:

NAO: Máš psa alebo mačku?
User: mačku
NAO: bývaš v dome?
User: nie
NAO: Dúfam že sa mačke v byte páči.

Ide o pravidlá, kde je iniciatívny systém, bez toho, aby tomu predchádzal vstup od používateľa. Takéto pravidlo spúšťa špecifický výstup robota bez predchádzajúceho vstupu od používateľa.

Príklad:

proposal: Videl si včera toho chlapíka v telke?
    u1: (yes) Bol šialený, nie?
    u1: (no) Vážne? Musím ti o ňom povedať. 

Tento jednoduchý príklad ukazuje iba základné použitie taktiež jednoduchej syntaxe:

proposal: sentence

Avšak proposal rules dokážu oveľa viac. Na to využíva funkcie, ktoré si predstavíme.

Zatiaľ čo používateľské pravidlá (User rules) sa spúšťajú používateľským vstupom, proposal rules musia byť spustené jednou z funckií témy, napr.:

  • ^nextProposal – vykoná prechod k ďalšiemu proposal pravidlu definovanému v téme (topic).
  • ^previousProposal – vykoná prechod k predošlému proposal pravidlu definovanému v téme (topic).
  • ^nextProposal – zopakovanie toho istého návrhu
  • ^gotoReactivate – reaktivuje aktuálne proposal pravidlo po jeho použití

Aplikovanie proposal rules spolu s funkciami témy môže vyzerať napríklad takto:

topic: ~test3 ()
language: czc

proposal: vezmi pohár a naplň ho mliekom
proposal: pridaj 3 jahody
proposal: pridaj vanilkovú zmrzlinu
proposal: zatvor pohár viečkom a zatras ním
proposal: Hotovo! Vychutnaj si svoj drink

u:(Chcem si spraviť mliečny koktail)
    Dobre, poďme nato.
    Nasleduj moje pokyny a povedz ďalej ak budeš pripravený na ďalší krok

u:(ďalej) ^nextProposal

Zodpovedajúca dialógová výmena medzi robotom a človekom potom bude vyzerať nasledovne:

User: Chcem si spraviť mliečny koktail
NAO:  Dobre, poďme nato.
      Nasleduj moje pokyny a povedz ďalej ak budeš pripravený na ďalší krok
User: ďalej
NAO:  Vezmi pohár a naplň ho s mliekom
User: ďalej
NAO:  Pridaj 3 jahody
User: ďalej
NAO:  Pridaj vanilkovú zmrzlinu
User: ďalej
NAO:  Zatvor pohár viečkom a zatras ním
User: ďalej
NAO:  Hotovo! Vychutnaj si svoj drink.

Samozrejme, je toho omnoho viac, čo sa dá vytvoriť pomocou QiChat syntaxe, vrátane zapojenia aj ostatných modalít do komunikácie. Podrobnosti nájdete v priložených odkazoch:

  • ALDialog API: http://doc.aldebaran.com/2-4/naoqi/interaction/dialog/aldialog-api.html#aldialog-api
  • QiChat Introduction: http://doc.aldebaran.com/2-4/naoqi/interaction/dialog/dialog.html#dialog-concepts

Úloha: Spolu s cvičiacim vytvorte pre robota NAO zábavnú interakciu, ktorej témou bude rozhovor o obľúbených jedlách používateľa.

Virtuální asistenti Amazon Echo a Google Home sú inteligentné zariadenia s virtuálnym asitentom, ktorých hlavným komunikačným kanálom je rečová konverzačná interakcia. Jedná sa o personálnych asistentov, ktorí umožňujú napr. hlasové vytáčanie a telefonovanie, prehrávanie multimédií (hudby), získavanie rôznych informácií (počasie, správy, encyklopedické informácie), ovládanie zariadení v domácností (inteligentných žiaroviek, klimatizácií, a pod.), uchovávanie nákupných zoznamov, poznámok, nakupovanie cez internetové obchody a iné.

Amazon Echo
.
Google Home

Čo sa týka týchto virtuálnych asistentov, na to, aby sme s nimi mohli niečo robiť, ich musíme najprv viac spoznať. Rozdeľte sa na dve skupiny, vyberte si svojho asistenta (Echo alebo Home) a postupujte podľa nasledujúcich úloh:

Úloha 1: Preštudujte si návod k zariadeniu, prípadne informácie z webu, nainštalujte na príslušné mobilné zariadenie aplikáciu pre ovládanie zariadenia a sfunkčnite ho.

Úloha 2: Vykonajte lokalizáciu a nastavenie zaradení. Vyskúšajte si, čo dokáže.

Úloha 3: Preštudujte si (z webu) čo sú to "skills" a ako ich vytvoriť. Nainštalujte nejaký nový "skill" do vášho zariadenia.

Úloha 4: Preštudujte si projekt Dialogflow a pokúste sa vytvoriť vlastnú konverzáciu s vaším virtuálnym asistentom.