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




Abstract

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/ .


1. Wstęp

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.



2. Język AIML

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




3. Tworzenie bota

Widok edytora
Rys.1 Edytor w trybie tworzenia bazy wiedzy

Widok edytora w trybie rozmowy
Rys.2 Edytor w trybie przeprowadzania testu wytworzonej bazy wiedzy

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:

Ł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 ).


4. Przykładowe rozmowy

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


5. Wnioski i uwagi

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ę.


6. Źródła


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.



Valid HTML 4.0 Transitional