Bot konwersacyjny : Klasyka kinematografii
Sprawozdanie z projektu przedmiotu : Metody i algorytmy sztucznej
inteligencji.
13.06.2008
Autor : Jakub Pawlikowski 140387
Conversation bot : Classics of cinematography
This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence)
13.06.2008
Author : Jakub Pawlikowski 140387
The aim of this project was to create a conversation bot with would be able to speak with user about well known movies. To write a knowledge base of the bot it was a AIML ( Artificial Intelligence Markup Language ) used. This language is the fastest and easiest way to create a bot. Several programs was written using AIML : ELIZA, ALICE, iGOD and many others. This language is based on XML. Gaitobot is an free editor of AIML, made by Springwald Software, which was used during the project. Thanks to this software it is possible to create and test bot`s knowledge base. Last step of the project was to public created bot on the Internet using http://www.pandorabots.com/ .
Celem projektu było napisanie bota konwersacyjnego na temat klasyki filmowej. Do napisania programu został użyty język AIML ( Artificial Intelligence Markup Language ), który jest oparty na języku XML, a służy do tworzenia bazy danych dla chatterbotów. Do napisania bota został użyty darmowy program Gaitobot AIML Editor firmy Springwald Software. Baza wiedzy bota została zbudowana na podstawie wiedzy autora, jak również przy wykorzystaniu informacji ze stron internetowych, wymienionych w materiałach źródłowych.
Artificial Intelligence Markup Language został stworzony jako baza wiedzy dla chatterbota A.L.I.C.E, który jest mocno rozwiniętą wersja wcześniejszego znanego chatterbota ELIZA. Twórcą AIML`a jest dr Richard Walles, amerykański naukowiec, który stworzył go w 1995 roku.
Język ten został stworzony do opisu bazy wiedza dla programów, których celem jest prowadzenie konwersacji. Ma on charakter algorytmiczny, opierający się na prostym schamacie „szablon – odpowiedź”, przez co na autorze bota spoczywa odpowiedzialność przewidzenia różnych scenariuszy rozmowy, jakie mogą się pojawić podczas rozmowy.
AIML, jako pochodna XML, składa się z tagów, zaczynających się znakiem „<”, a kończących „>”. Każdy dokument musi zawierać się pomiędzy dwoma głównymi tagami : <aiml> oraz </aiml>. Listing 1 przedstawia minimalny, ale całkowicie poprawny dokument języka AIML.
Listing 1.
<aiml>
</aiml>
Pomiędzy powyższymi znacznikami dokument AIML składa się z dowolnej liczby obiektów, zwanych kategoriami i określanych znacznikiem <category>. Pomiędzy <category> i </category> muszą znajdować się dwa bardzo ważne elementy : <pattern>, który określa, jakiej wypowiedzi użytkownika dotyczy dana kategoria oraz <template>, który definiuje reakcję programu na znalezioną wypowiedź. Listing 2 przedstawia wykorzystanie wszystkich dotychczas poznanych znaczników :
Listing 2
<aiml>
<category>
<pattern>WITAM</pattern>
<template>Dzien dobry. Jestem Chatterbot</template>
</category>
</aiml>
Po napisaniu przez użytkownika słowa „Witam” bot zareaguje wypowiedzią : „ Dzień dobry. Jestem Chatterbot”. Wyrażenie pisane pomiędzy <pattern> i </pattern> jest wyrażeniem regularnym języka AIML, jest więc pisane wielkimi literami i może zawierać znaki specjalne takie jak „*” lub „_”, które oznaczają odpowiednio dowolny ciąg oraz dowolny znak. Przykład ich wykorzystania przedstawia Listing 3.
Listing 3
<aiml>
<category>
<pattern>WITAM *</pattern>
<template>Dzien dobry. Jestem Chatterbot</template>
</category>
</aiml>
W tym przypadku bot zareaguje na wypowiedź użytkownika typu : „Witam cię” albo „Witam. Ładny dziś dzień”. Natomiast nie zareaguje on na wypowiedź „Witam” ponieważ znak „*” oznacza dowolny ale niepusty ciąg znaków.
Pozostałe znaczniki języka AIML zostały przedstawione poniżej:
<srai> - pozwala tworzyć synonimy dla pewnych określonych wyrażeń
<random> - wybranie odpowiedzi programu spośród zestawu możliwych odpowiedzi definiowanych w formie listy gdzie każdy jej element znajduje się pomiędy <li> i </li>
<star/> - pozwala umieścić w odpowiedzi programu ciągu, w którym w części <pattern> został zastąpiony przez „*”
<that> - pozwala sprawdzić poprzednią wypowiedź programu
<thatstar/> - połączenie dwóch powyższych znaczników
<think> - wyznacza fragment z wewnątrz znacznika <template>, które nie mają być wyświetlone przez program
<get> - odczytanie wartości zmiennej
<set> - nadanie zmiennej wartości
<condition> - określa reakcję bota w zależności od wartości użytej zmiennej
<topic> - pozwala botowi orientować się w rozmowie na podstawie tematów
Do tworzenia bazy wiedzy bota posłużył bardzo prosty w obsłudze i intuicyjny edytor języka AIML Gaitobot. Praca z nim sprowadza się do wprowadzania odpowiednich znaczników we właściwe miejsca i wpisywanie pomiędzy nimi informacji używanych przez bota. Edytor nie pozwoli wpisać znacznika w miejsce, w którym on się nie powinien znajdować, co znacznie skraca okres odpluskwiania programu. Dodatkowo Gaitobot posiada funkcję testowania wytworzonej bazy, a więc w gruncie rzeczy jest kompletnym środowiskiem potrzebnym do realizacji projektu. Wprawdzie edytor umożliwia używanie polskich znaków diakrytycznych, ale nie zostały one użyte. Spowodowane jest to faktem użycia strony internetowej http://www.pandorabots.com/, która to takich już znaków nie akceptuje i było by niemożliwe umieszczenie bota w internecie.
Projekt bota został podzielony na pewne zakresy tematów ( znacznik <topic> wspomniany wyżej), w których program będzie się poruszał. Taki zabiegł pozwolił na szybkie przygotowanie zarysu bota, a następnie stopniowy rozwój jego bazy wiedzy w kierunku określonego tematu. W każdej takiej sekcji znajdują się zbiory reakcji i zachowań bota na wypowiedzi użytkownika w zakresie danego tematu. Użyte w projekcie tematy to:
przywitanie – bot wita się z użytkownikiem, pyta go o jego imię
szukaj_topic – bot stara się narzucić swój temat, w którym będzie mógł się poruszać
filmy – główny temat, w którym to bot pyta się i wybiera o jakich filmach będzie rozmawiać
dramat – temat o określonym gatunku filmów
sensacja - jw
komedia - jw
kreskowka – jw
pozegnanie – sekwencje kończenia rozmowy
Łatwo zauważyć, że dzięki takiej modułowości w bardzo łatwy sposób można rozbudować bazę wiedzy bota o kolejne tematy.
Ponieważ przewidzenie wszystkich możliwych wypowiedzi użytkownika na zadane przez bota pytanie lub wypowiedziane zdanie jest bardzo trudna, podczas pisania projektu autor starał się aby to bot narzucał temat i zadawał pytania podczas rozmowy co znacznie ułatwiło stworzenia bota bardziej przekonującego w porównaniu z takim, który biernie słucha użytkownika, ale na jego zapytania odpowiada zupełnie bezsensu.
Pomimo starań bot jest zupełnie nieodporny na jakiekolwiek błędy ortograficzne w słowach kluczowych ( szczegóły i przykłady w poniższym punkcie ).
Początkowy plan testowania bota miał polegać na umieszczeniu go na stronie internetowej http://www.pandorabots.com/. Niestety po dokonaniu tego okazało się, że pewne elementy bazy wiedzy bota nie działają na niej poprawnie. Program często gubił się i nie wiedział co odpowiedzieć lub odpowiadał w sposób nieprzewidywany. Sytuacje tego typu zupełnie się nie zdarzały przy testowaniu bota w edytorze. Dlatego też zostały wybrane dwa sposoby testowania bota. Pierwszy z nich polega na udostępnieniu bota osobom trzecim wprost z edytora Gaitobot, na komputerze autora lub poprzez przesłanie odpowiednich plików do komputera osoby testującej. Ten sposób jest oczywiście mniej wygodny i dostarcza zdecydowanie mniej danych, ale jest zdecydowanie pewniejszy. Drugi sposób polegał na umieszczeniu bota na wyżej wymienionej stronie i udostępnieniu odpowiedniego adresu internetowego, który umożliwiał dostęp do programu z poziomu przeglądarki, testowanie bota na znajomych. Drugi sposób dawał duże ilości danych. Niestety rozmowy były obarczone licznymi błędami, które by się nie pojawiły jakby były prowadzone bezpośrednio z edytora. Połączenie obu tych metod dało wydajny sposób testowania i debugowania bazy wiedzy bota.
Pierwsza rozmowa jest prowadzona przez użytkownika, który wie jakich słów i wyrażeń używać aby bot dobrze na nie reagował. Widać, że taki zabieg powoduje powstanie rozmowy, która przebiega w dość sprawny i naturalny sposób.
Human: hej
filmobot: Hej Przedstaw sie.
Human: jestem Kuba
filmobot: Witaj Kuba.
Human: kim jestes
filmobot: Jestem botem ... no nie ma co ukrywac. Ale mam nadzieje ze jakos sie dogadamy.
Human: a jak ty sie nazywasz
filmobot: Jestem Filmobot.
Human: no to o czym porozmawiamy
filmobot: Umiem rozmawiac o roznych filmach. Sensacyjnych, komediach, dramatach, kreskowkach...No i w sumie tyle.
Human: pogadajmy
filmobot: Bardzo chetnie, moze o filmach?
Human: niech bedzie
filmobot: Jakie lubisz filmy?
Human: bardzo lubie filmy sensacyjne
filmobot: Ja tez lubie sensacje. Na pewno znasz "Szklana pulapke?".
Human: jasne
filmobot: Podobal ci sie?
Human: bardzo
filmobot: Mocne kino. Ale kultowe.
Human: to prawda
filmobot: Wybacz ale nie rozumiem co mowisz.
Human: a moze cos polecisz
filmobot: Z sensacji to polecam Szkalna pulapke, Rambo, Terminatora 2 i Matrixa. Moge ci opowiedziec o ktoryms. Chcesz?
Human: tak
filmobot: O ktorym chcesz posluchac?
Human: opowiedz mi o szklanej pulapce
filmobot: Rezyseria John McTiernan, w rolach glownych wystepuja Bruce Willis oraz Alan Rickman, zarys fabuly : Nowojorski glina John McClane znajduje sie w trudnej sytuacji kiedy dowiaduje sie, ze gigantyczny biurowiec w Los Angeles jest opanowany przez terrorystow...
Human: zmienmy temat
filmobot: Pogadamy o innych filmach?
Human: ok
filmobot: Jakie lubisz filmy?
Human: no to lubie komedie
filmobot: O tez lubie komedie. Znasz moze "Zgon na pogrzebie"?
Human: nie
filmobot: Niedawno go grali. Angielski film. Fajny.
Human: aha a moze cos polecisz
filmobot: Z komedii to polecam Zgon na pogrzebie, ale to tyle bo nie lubie specjalnie komedii.
Human: opowiedz mi o Zgon na pogrzebie
filmobot: eee.. Ale o co ci chodzi?
Human: hmm no nie wiem
filmobot: No tego nie znam. Znam dramaty, sensacyjne, komedie i kreskowki. Moze cos z tego?
Human: no to lubie dramaty
filmobot: Lubie dramaty, ale tylko dobre. Znasz moze "Requiem dla snu"?
Human: pewnie
filmobot: Podobal ci sie?
Human: jasne
filmobot: mocne kino. ale kultowe
Human: no to moze cos polecisz
filmobot: Z dramatow to polecam Requiem dla snu, Forresta Gumpa i Ojca chrzestnego. O ktoryms ci opowiedziec?
Human: nie
filmobot: no jak chcesz
Human: hmm a moze znasz Rambo 8
filmobot: Hmm nie znam opowiedz
Human: to jest film wojnie
filmobot: Hmm ciekawie. A widziales moze Forresta Gumpa
Human: tak
filmobot: Dla mnie super film. Tom Hanks byl tam swietny. Co myslisz?
Human: masz racje
filmobot: Ja sie przy nim bawilem swietnie
Human: zmienmy temat
filmobot: Pogadamy o innych filmach?
Human: nie
filmobot: Sluchaj albo gadamy o filmach albo do widzenia.
Human: to ja lece
filmobot: Dzieki za rozmowe
Human: no dzieki
filmobot: trzymaj sie
Poniżej zostanie przedstawiony zapis rozmowy z użytkownikiem, który nie znał wcześniej budowy bota.
Human:
hej
filmobot: Witam
Przedstaw sie.
Human:
kasia jestem
filmobot:
Witaj kasia.
Human:
mow //nieznana komenda
filmobot:
eee.. Ale o co ci chodzi?
Human:
co mi powiesz? //podobnie jak wyżej
filmobot:
Mozesz wyrazic sie jasniej?
Human:
porozmawiajmy //w końcu bot dopasował
wyraz
filmobot:
Bardzo chetnie, moze o filmach?
Human: ok
filmobot: Jakie lubisz filmy?
Human:
dobre //ta odpowiedź zupełnie zaskoczyła
autora. Wynik odpowiedzi bota jest wynikiem już poprawionej
bazy
filmobot: Tez
lubie dobre filmy, ale ja sie pytalem o gatunek:)
Human:
ciekawe //podobnie jak wyżej
filmobot:
Tez lubie ciekawe filmy, ale ja sie pytalem o gatunek:)
Human:
hehe //testowany bot się nie śmieje
:)
filmobot:
Wybacz ale nie rozumiem co mowisz.
Human:
glupi jestes //i nie rozumie obelg
filmobot:
Mozesz wyrazic sie jasniej?
Human:
no dobra
filmobot:
Wybacz ale nie rozumiem co mowisz.
Human:
animowane
filmobot: O no to musisz znac Shreka.
Human:
znam
filmobot:
Podobal ci się?
Human:
srednio //kolejna
niespodziewana odpowiedź
filmobot:
Mozesz wyrazic się jasniej
Human:
ni //błąd ortograficzny – na nie nie
ma rady
filmobot:
Wybacz ale nie rozumiem co mowisz
Human:
to ja spadam
filmobot:
Lecisz juz? No trudno.
Human:
no nara
filmobot:
Papa
Napisanie dobrego bota jest zadaniem bardzo trudnym i czasochłonnym. Przewidzenie każdej wypowiedzi użytkownika jest praktycznie niemożliwe. Dobrym pomysłem okazało się narzucanie tematu przez program. Wtedy użytkownik, jeśli oczywiście zechce, podążając za pytaniami bota może przeprowadzić z nim sensowną rozmowę. Niestety taka jednostronna rozmowa byłaby bardzo monotonna. Pozostawienie rozmówcy więcej możliwości wypowiedzi znacznie zwiększa prawdopodobieństwo, że pojawi się wyraz lub zdanie, którego bot nie zrozumie. Sytuacja ma się lepiej kiedy to autor, znający program, jest rozmówcą. Wtedy wie on jakie pytanie zadać aby bot na nie odpowiedział. Niestety kiedy rozmówcą jest osoba trzecia, przewidzenie co może ona powiedzieć jest zadaniem bardzo trudnym. Kolejnym problemem są błędy ortograficzne, różnego rodzaju skróty pojawiające się podczas rozmów w internecie itp. Oporność programu na tego typu problemy jest praktycznie zerowa i ominięcie ich byłoby bardzo czasochłonnym zajęciem. Warto tez na koniec wspomnieć, że pisanie bazy wiedzy bota w języku polskim jest zdecydowanie trudniejsze niż pisanie go w języku angielskim. W języku angielskim np nie jest wymagana deklinacja części mowy, jak również nie ma problemu odmiany czasowników przez osoby. Nie ma jednak co ukrywać, że zdecydowanie milej konwersuje się z botem w języku ojczystym i pomimo wszystkich problemów, które pojawiły się na drodze w trakcie realizacji projektu można powiedzieć, że udało się stworzyć bota, który jest w stanie porozumieć się z użytkownikiem i przeprowadzić z nim logiczną konwersację.
http://filmweb.pl/ - źródło bazy wiedzy bota
http://docs.jedenpies.pl/files/AIML.pdf - pdf z opisem języka AIML
http://alicebot.blogspot.com/ - strona projektu A.L.I.C.E.
http://www.pandorabots.com/botmaster/en/home - serwis umożliwiający opublikowanie bota w internecie
http://sequoia.ict.pwr.wroc.pl/~witold/aiarr/2006_projekty/monic/ - podobny projekt
http://gaito.de/ - strona edytora Gaitobot, w którym napisana została baza wiedzy bota
http://www.pandorabots.com/pandora/talk?botid=e5db0546ce36b0f5 - miejsce gdzie bot został pierwotnie opublikowany. Warto tutaj zaznaczyć, że współpraca serwisu pandorabots.com z programem Gaitobot nie udała się w pełni i wiele wypowiedzi użytkownika jest błędnie interpretowanych.