Blog

Kuharica za izradu vlastitog Watson chatbota

Domagoj Marić

Što je chatbot?

Chatbot je pojam koji označava virtualne asistente bazirane na tehnologijama umjetne inteligencije koji poboljšavaju i automatiziraju neke poslovne procese simulacijom čovjeka kao konverzacijskog partnera. Uštedom vremena i resursa pomažu ljudima kako bi se oni mogli posvetiti drugim, prioritetnijim zadacima. Chatbotovi se najčešće koriste za automatizaciju korisničke podrške eliminacijom repetitivnih pitanja, a prednosti njihovog korištenja su stalna dostupnost te instantni i konzistentni odgovori.

Chatbotovi danas dolaze u raznim “bojama” i s raznim funkcionalnostima:

  • transakcijski tip chatbota – chatbot koji usmjerava korisnika kroz neki proces, primjerice transakcije, prijave problema i sl.,
  • chatbot koji raspolaže znanjem (engl. knowledge chatbot) – chatbot je naučen na neku tematiku, primjerice zna odgovarati na često postavljana pitanja, pruža korisnicima informacije, a dolazi u dvije varijante:
    • chatbot koji je eksplicitno treniran na nekom definiranom skupu pitanja (i odgovora) – pri dobivanju korisničkog upita vrši klasifikaciju i vraća odgovor na najsličnije pitanje (ili dodatno analizira odgovore pa i tu traži neku sličnost),
    • chatbot koji vrši semantičku pretragu dokumenata – nema potrebe za eksplicitnom definicijom pitanja i odgovora, samo je potrebna baza znanja, tj. neka baza dokumenata, a chatbot onda za korisnički upit traži dokumente, isječke dokumenata ili rečenice za koje je najvjerojatnije da su relevantne za korisnički upit.

Što je Watson Assistant?

IBM-ova Watson platforma danas je vodeća svjetska platforma za iskorištavanje prednosti umjetne inteligencije i računalne obrade prirodnog jezika za poboljšanje vlastitih poslovnih procesa. Dva alata unutar te platforme koja su najbitnija za izradu virtualnih asistenata (tzv. konverzacijskih sučelja) su Watson Assistant i Watson Discovery.

Watson Assistant je alat pomoću kojeg je na vrlo jednostavan način moguće napraviti vlastitog chatbota za vlastite poslovne svrhe njegovim treniranjem na primjerima korisničkih upita. Pomoću njega ćemo napraviti chatbota unutar ovog blog posta.

Watson Discovery je alat pomoću kojeg je između ostalog moguće napraviti chatbota s funkcionalnostima semantičke pretrage, izradom kolekcija dokumenata i ubacivanjem u Watson Assistant putem search skilla. Pošto je ova kombinacija dva alata nešto naprednija, nju ćemo obraditi u budućem blog postu.

Što je potrebno za početak?

Prvo je potrebno otvoriti IBM Cloud račun, kreirati instancu alata Watson Assistant (postoji lite instanca, koja je potpuno besplatna, uz određena ograničenja) i pokrenuti ju. Nakon pokretanja alata, dolazimo u osnovno sučelje Watson Assistanta gdje je potrebno napraviti svoj prvi skill. Skill je, kao što ime kaže, vještina koju chatbot posjeduje. Za potrebe ove kuharice potreban nam je razgovorni/dijaloški skill (Dialog skill).

Digresija: chatbot može posjedovati više vještina (skillova), primjerice možemo kombinirati dijaloški i skill pretraživanja (Search skill) kako bismo ostvarili chatbota koji odgovara na korisničke upite zadanim odgovorima ako na njih zna odgovor pomoću dijaloškog skilla, a ako ne zna, pretražuje bazu znanja (kolekciju dokumenata) kako bi pronašao potencijalno relevantne informacije za korisnika pomoću search skilla.

Premisa

Kroz ovu kuharicu izradit ćemo chatbota koji će znati odgovoriti na pitanje o radnom vremenu poslovnica i dati kontakt podatke za svaku od poslovnica.

Okvirno trajanje reprodukcije rješenja: 30 minuta.

Intentovi

Treniranje Watson chatbota počinje stvaranjem intentova (oznaka #intent). Jedan intent označava jednu temu koju chatbot pokriva, a definira se skupom primjera korisničkih upita. Primjerice, za intent #radno_vrijeme stavit ćemo nekoliko primjera poput “kada otvarate poslovnice” i “koje je vaše radno vrijeme”.

Isto ćemo napraviti za intent #kontakt, gdje ćemo upisati dodatne primjere upita koristeći i entitete, npr. “koji je telefonski broj poslovnice u @mjesto” (entiteti objašnjeni u nastavku).

Napomena: da bi korisnik dobio odgovor za intent #radno_vrijeme, ne mora točno pogoditi neki od korisničkih primjera koje smo definirali, nego AI u pozadini prepoznaje i slične upite, do određene mjere (ovisno koliko smo ga dobro naučili).

Entiteti

Entiteti su dodatni parametri koje možemo “uhvatiti” unutar korisničkog upita, a koji modificiraju upit, odnosno kontekst oko intenta (oznaka @entitet). Primjerice, ako imamo poslovnice u Zagrebu, Splitu, Osijeku i Rijeci, ne moramo za to raditi četiri različita intenta, nego primjere u intentu #kontakt možemo rapisati pomoću entiteta @mjesto koji sadrži sve moguće poslovnice.

Dijaloško stablo

Unutar dijaloškog stabla (sekcija Dialog) definiramo ponašanje chatbota kad prepozna određeni intent ili entitet unutar korisničkog upita. Dijaloško stablo/struktura se pri dobivanju upita analizira u vertikalnom smjeru prema dolje i ako je u određenom čvoru zadovoljen uvjet, izvršava se radnja zadana u tom čvoru (najčešće se korisniku vraća neki odgovor).

Kada prvi put otvorimo dijaloško stablo, dočekaju nas dva čvora – Welcome i Anything else. Welcome je čvor koji sadrži pozdravnu poruku i ispunjava se kada razgovor započne, a Anything else je čvor koji se aktivira ako nijedan drugi prije njega u dijaloškoj strukturi nije (chatbot nije razumio upit korisnika). Svaki čvor unutar strukture dijaloga definiran je u formi “ako-onda”, pa ćemo tako definirati i svoj prvi čvor, koji daje odgovor o radnom vremenu ako je korisnik pitao o radnom vremenu (ako je chatbot prepoznao intent #radno_vrijeme).

Nakon toga ćemo definirati nešto kompleksniji čvor koji ima djecu čvorove (child node), čvorove koji idu u dubinu strukture (granaju se). Vršni čvor će imati uvjet da je prepoznat intent #kontakt, dok će djeca čvorovi imati uvjete da je prepoznat entitet @mjesto (zadnji će imati uvjet “true”, koji je uvijek istinit, za slučajeve kada korisnik nije naveo mjesto poslovnice, nešto poput “else” dijela u programiranju). Naša dijaloška struktura će izgledati ovako:

Napomena: u vršnom čvoru potrebno je na kraju specificirati radnju “Skip user input and evaluate child nodes”.

Sada će se pri upitu “kontakt poslovnice Zagreb” pozitivno evaluirati vršni čvor #kontakt, pa dijete čvor @mjesto:Zagreb i tako vratiti odgovor za kontakt poslovnice u Zagrebu. Unutar svakog od ta četiri čvora djece ćemo definirati koji odgovor se vraća (za svaku poslovnicu njezin kontakt).

Uz za četiri čvora dodatno ćemo definirati i peti čvor dijete, koji će se ispuniti ako korisnik nije specificirao poslovnicu. Ovdje možemo biti kreativni, pa ćemo korisniku dati odgovor u obliku opcija (Option response). Kod definicije odgovora u tom čvoru biramo tip odgovora Option i definiramo opcije na sljedeći način, u obliku parova ključ-vrijednost:

Ako korisnik primjerice klikne na “Osijek”, vrijednost “kontakt poslovnice Osijek” će se unijeti u chatbot kao da je to novi upit korisnika te će korisnik dobiti informacije o kontaktu poslovnice u Osijeku.

Primjer razgovora s chatbotom je u nastavku (integrirana Try it out sekcija).

Ako želite saznati više o izradi Watson chatbotova ili primjeni virtualnih asistenata, možete kontaktirati autora ovog blog posta na domagoj.maric@megatrend.com.