BOT rozmawiający o możliwości spędzenia wolnego czasu we
Wrocławiu
BOT with knowledge about spending free time in Wroclaw City
Ogólny zarys problemu
Wrobot
Stworzonego przez siebie bota informacyjnego nazwałem Wrobot.
Posiada on wiedzę na temat Wrocławia. Jego umiejętności
są ograniczone do konwersacji o restauracjach, kinach i teatrach na terenie
Wrocławia. Wrobot potrafi się przedstawić i
prowadzić ciągą rozmowę z użytkownikiem. Dodatkowo w bazie wiedzy
posiada adresy, numery telefonów i niektóre adresy portali
internetowych.
Język AIML
Język AIML(Artificial Intelligence Markup Language) jest to prosty język
znacznikowy oparty składniowo na języku XML.
Pierwotnie został opracowany przez Richarda S. Wallace'a. AIML'a stworzono
do pisania bazy wiedzy botów internetowych.
Głównym i podstawowym elementem w AIML jest category(kategoria),
składający się z pattern(wzorzec) i template(szablon)
oraz opcjonalnego kontekstu. Mechanizm działania tego języka jest
następujący: "jeżeli -> to", inaczej pattern -> template
Trzeba wiedzieć, że każdy dokument w języku AIML zaczyna się i kończy
dwoma głównymi tagami
<aiml> i
</aiml>
Podstawowy i całkowicie poprawny dokument AIML składa się z jednego
pattern i template. Przy czym jedna kategoria może
zawierać w sobie maksymalnie po jednym takim znaczniku.
<aiml>
<category>
<pattern></pattern>
<template><template>
<category>
</aiml>
Między pattern znajduje się wyrażenie warunkowe, czyli to co może
powiedzieć potencjalny user. Dla odmiany pomiędzy template
umieszczamy reakcję tworzonego bota na dane wyrażenie warunkowe. Np:
<aiml>
<category>
<pattern>KOLOR</pattern>
<template>Lubię kolorowe obrazy.<template>
<category>
</aiml>
Czyli, gdy użytkownik wprowadzi hasło "kolor", bot odpowie automatycznie
"Lubię kolorowe obrazy." Teoretycznie takie umiejętności wystarczą
do napisania całej bazy wiedzy bota. Tworzymy pytanie -> odpowiedź
itd.
<aiml>
<category>
<pattern></pattern>
<template><template>
<category>
</aiml>
+
<aiml>
<category>
<pattern></pattern>
<template><template>
<category>
</aiml>
itd.
Oczywiście język AIML daje nam wielkie możliwości tworzenia
skomplikowanych baz danych dla botów. Służą do tego dodatkowe znaczniki, które
tylko omówię w skrócie.
<srai>
Ten znacznik znacznie ułatwia pracę projektantowi bota i zaoszczędza
czas. Znacznik ten pozwala definiować synonimy dla wyrażeń. Czyli dla
różnych
wzorców mamy tą samą reakcję lub zbiór losowych reakcji bota. Taki tag
okazuje się zbawienny szczególnie wtedy, gdy w trakcie pracy na jakimś
zaawansowanym
etapie chcemy dokonać poprawki. Zamiast zmieniać w każdej kategorii po
kolei, wystarczy dokonać zmiany w kategori głównej.
<random>
Następnym dodatkowym znacznikiem jest random. Współpracuje on z
li. Najprościej rzecz mówiąc, z listy różnych możliwych reakcji
bota jest losowana jedna. Daje to efekt spontaniczności bota, a zarazem
czyni bot maszynę bardziej naturalną i ludzką.
<star/>
Star oznacza cokolwiek. Umieszczony w tagu template spowoduje
wstawienie w to miejsce wartości, ciągu znaków, który
w pattern zastępował symbol * W jedynym pattern może
być jeden lub dwa takie symbole.
<input>
Dzięki temu tagowi skonstruowany bot ma możliwość odwoływania się do
wcześniejszych wypowiedzi użytkownika.
<that>
Analogicznie do poprzedniego znacznika, stwarza możliwość sięgnięcia
pamięcią wstecz. Tym razem do wcześniejszych rekacji bota.
<thatstar/>
Jeśli chcemy odwołać się wewnątrz pattern do *
<think>
Użycie tego znacznika spowoduje, że nie zostanie wyświetlony tekst
między tagami. Np. jak chcemy, aby dane wyrażenie było domyślne.
<get><set>
Te dwa wspólnie współpracujące znaczniki dają ogromne możliwości w
dokumencie AIML. Za pomocą get ustawiamy i zapamiętujemy domyślnie
jakąś wartość np. imię rozmówcy bota. Później, jeśli chcemy użyć
takiej zmiennej stosujemy set.
<condition>
Pozwala na sprawdzenie wartości określonej zmiennej i reakcję bota w
zależności od wartości otrzymanego wyniku. Jest to dosyć skąplikowany
znacznik,ale daje duże możliwości. Np. w zależności od wartości
zmiennej "płeć" używaj zwrotu Pan lub Pani.
<topic>
Dzięki temu znacznikowi możemy tak skonstruować model bota, aby płynnie
poruszał się po przynależnych mu tematach rozmowy. Gdy podczas rozmowy
bot rozpozna wyrażnie, które odpowiada innemu tematowi, wtedy przejdzie do
bazy danych z tego tematu.
<lowercase>
Zamiana wszystkich liter na małe.
<uppercase>
Zamiana wszystkich liter na duże.
<formal>
Ustawia pierwszą literę każdego wyrazu w ciągu na dużą, przydatne np.
podczas wyliczania imion lub nazw.
<sentence>
Zamienia ciąg słów w zdanie. Wielka litera w pierwszym wyrazie zdania.
Istnieje też coś takiego jak indeksowanie. Służy ono do odwoływania
się do * lub innych wyrażeń według kolejności. Np. gdy chcemy
sięgnąć
do 2 odpowiedzi od końca użytkownika to używamy indeksu "2". Domyślnie
dla pierwzej jest ustawiona wartość "1".
GaitoBot AIML Editor
GaitoBot AIML editor jest prostym w obsłudze narzędziem do pracy w języku
AIML. Jego darmową wersję można pobrać na stronie producenta.
Szata graficzna oraz łatwo dotępne buttony ułatwiają pracę na tej
aplikacji. Z tego względu zdecydowałem się na skorzystanie z tego edytora
przy tworzeniu bota Wrobot.
Kliknięcie na poszczególne buttony powoduje dodanie wybranego znacznika w
oknie roboczym. Nad oknem roboczym znajduje się tabela ze
wszystkimi kategoraiami, które zostały stworzone w ramach bieżącego
pliku. Jest to ogromna zaleta. Gdy nagle wymyślimy nowe wyrażenie regularne,
które chcielibyśmy dodać do kategorii wystarczy przewinąć listę w celu
upewnienia się, że takie już nie istnieje. W ten sposób mamy szybki
dostęp
do naszej bazy danych.
Podstawowa lista buttonów generujących znaczniki AIML. Po kliknięciu na
dany button w oknie roboczym uzyskujemy znacznik. Sprawa jest o tyle
prosta, że edytor GaitoBot pozwala na dodanie określonego znacznika tylko
w dozwolonym miejscu tzn. zgodnym z logiką i standardem AIML.
Praca w aplikacji za pomocą buttonów jest prosta, ale niestety program nie
ma możliwości pisania skryptu. Jedynie istnieje opcja wyświetlania
fragmentu kodu z jedną kategorią bez możliwości edycji. Stanowi to
raczej probelm, gdy chcemy dołączyć lub dopisać fragment skryptu w AIML.
Generalnie po krótkim zapoznaniu się z obsługą GaitoBot editor można
sprawnie tworzyć nowe kategorie. Po utworzeniu szkieletu bota, praca staje
się dosyć schematyczna i automatyczna. Polega ona na kopiowaniu kategorii
poprzez clone i zmienianiu wyrażenia regularnego. Oto przykład
prostej kategorii z bazy wiedzy Wrobot'a.
Internetowe boty jak sam nazwa wskazuje można i należy testować w sieci.
To właśnie w trakcie testowania okazuje się, jakie są braki
w bazie wiedzy bota. Tymczasem program GaitoBot editor posiada specjalne
okno testowe. Właśnie tam przeprowadzałem testy na Wrobocie.
Po wcześniejszym przeładowaniu bazy danych robota pojawia się okno
dialogowe. Wielką zaletą jest dodatkowy panel obok okna dialogowego,
w któyrm są wyświetlane kolejne kroki rozmowy oraz ewentualne błędy, a
newet wskazówki do potencjalnych błędów.
Jeśli jednak byśmy chcieli udostępnić naszego bota choćby do tesów dla
innych możemy to zrobić na za pomocą Pandorabot
(http://www.pandorabots.com/botmaster/en/home). Istnieje tam opcja dopisywania nowych
kategorii, przez testujących bota.
Istnieje jeszcze jeden dodatkowy ciekawy sposób testowania botów. A
mianowicie narzędziem Chracter Builder firmy Media Semantics
(http://www.mediasemantics.com/). Możemu tutaj wizualizować naszego bota poprzez różne postaci, a nawet
generować głos bota.
Zdecydowanie bardziej interesującą wersją jest bot, którego możemy
zobaczyć i jeszcze usłyszeć. Niestety tego typu darmowe
narzędzia dostępne są tylko w wersji angielskiej, a to stanowi dużą
przeszkodę przy czytaniu polskich znaków. Dlatego pozostałem
przy testowaniu robota w GaitoBot editor.
Uwagi
Stworzony prze mnie bot, nazwany Wrobot spełnił zakładane wcześniej
oczekiwania. Jego wiedza została ukierunkowana na
znajomość kin, restauracji i teatrów na terenie Wrocławia. Naturalnie
uzupełnianie bazy wiedzy bota jest czynnością bardzo
pracochłonną i teoretycznie nieskończoną, gdyż istnieje ogromna liczba
możliwości wyrażeń warunkowych. Pisanie wiedzy bota
w języku AIML jest uproszczonym podejściem do zjawiska sztucznej
inteligencji. W zasadzie, nie jest to AI bo z góry znamy
reakcję bota na każdą wypowiedź użytkownika. Zatem bot jest tym
inteligentniejszy im obszerniejsza jest jego baza wiedzy.
Jest to jedyny wyznacznik inteligencji bot maszyny.
Warto zwrócić uwagę na subtelności związane z językiem polskim. Po
pierwsze język AIML nie uznaje polskich znaków specjalnych.
Drugim mankamentem tworzenia bota w języku polskim jest deklinacja.
Powoduje ona kilkukrotne zwiększenie nakładu pracy. Dajmy na to, że
mamy wzorzec w języku ang. DOG, DOGS. To samo w języku polskim występuje
w następującej postaci: PIES, PSU, PSEM, PSY, PSAMI, PSOM itd.
Wniosek z tego taki, że może warto pisząc takiego bota zastanowić się
nad agnielską wersją językową.
Przykładowa rozmowa z Wrobot'em
User: Witaj. Wrobot: Dzien dobry, jak masz na imie? User: Jestem Karol. Wrobot: Spoko... Mi mow Wrobot. Oprowadze Cie Karol po Wroclawiu.
Raczej nie bedzie
czasu sie nudzic w tym miescie. User: Dopiero przyjechalem do Wroclawia. Wrobot: Wroclaw to piekne miasto. Mozesz tu wiele zobaczyc jesli
tylko chcesz. Na co
masz ochote, gdzie chcesz Karol pojsc? Moze kino, teatr,a moze
restauracja? User: Mam ochote na kino. Wrobot: No tak Karol, mysle, ze doradze Ci cos w tej
sprawie. User: Jakie znasz kina? Wrobot: Swietny pomysl na spedzenie wolnego czasu! Tez lubie kino.
We Wroclawiu mamy
teraz duzo roznych kin. Na pewno znajdziesz cos dla siebie. Ja znam takie:
Warszawa,
Multikino pasaz grunwaldzki, Kino Lwow, Cinema City, Lalka, Helios... Sa
jeszcze jakies nowe,
ale jeszcze ich nie znam. User: A gdzie jest kino Lwow? Wrobot: Wroclaw, ul. Hallera 15, telefon 071 361 2078. User: Ok. Wrobot: Jest ok. User: A dojade tam autobusem? Wrobot: Hmmm... A która jest teraz godzina? Najlepiej jak
sprawdzisz sobie szybko na
rozkladzie: www.wroclaw.pl/m3298/. User: Spoko. Wrobot: Oki doki, jestem tutaj caly czas. Jak cos to sie
pytaj. User: Fajny ten Wrobot. Wrobot: Jestem w stanie Ci pomoc? Wrobot to ja - bot informacyjny.
Wiem kilka rzeczy o
Wroclawiu. Moze kino, teatr, moze pizza? User: A jakie znasz restauracje? Wrobot: Mamy tu tysiace knajpek, do wyboru do koloru. To zalezy co
chcesz zjesc. User: Nie wiem. Wrobot: Ja glodny nie jestem. To ty musisz zadecydowac. User: Moze fast food. Wrobot: Chyba nie musze Ci mowic, ze McDonaldy sa wszedzie i na
kazdym rogu. User: Dobra, zjadlbym pizze. Wrobot: Dobry pomsyl. Pizzerii we Wroclawiu nie brakuje. Polecam
chocby: Pizza Madano,
Pizza Speed, Pizza Hut, Da Grasso, La Luna, Pizza Station albo Pizza Roma...
A jest ich jeszcze wiecej. User: Hmm, moze Da Grasso? Wrobot: Coz... Wroclaw, ul. Wyszynskiego 71, a telefon 071 793 70
70. User: Fajnie, adres mam, a mapa? Wrobot: Brak orientacji w terenie? Nie ma problemu, jesli jeszcze
nie wiesz, jak gdzies dojsc wejdz
na emapy.com/wroclaw/index.php Teraz juz wiesz... A tak swoja droga to
najlepiej przemieszczaj sie autobusem
lub tramwajem, albo taxi. User: Teraz juz wszystko wiem. Wrobot: Skoro juz wszystko wiesz to moja obecnosc jest juz
zbedna. User: Dzieki. Wrobot: Na mnie mozna polegac.