Wrocław dn. 16.06.2008

PROJEKT:

Metody I algorytmy sztucznej inteligencji


TEMAT:

Bot rozmawiający o podstawowych informacjach na temat Krakowa




Prowadzący: dr inż. Witold Paluszyński Wykonał: Łukasz Wroński (140437)

1. Wstęp

AIML (Artificial Intelligence Markup Language) - jest językiem znacznikowym, opartym o język XML służącym do tworzenia baz wiedzy chatterbotów, opracowany pierwotnie przez hackera, dr. Richarda S. Wallace'a, a później rozwijany również przez społeczeństwo wolnego oprogramowania ALICE w latach 1995-2000. Chatbot (lub chatterbot) - program komputerowy symulujący człowieka, z którym można prowadzić rozmowę przy użyciu języka naturalnego i interfejsu tekstowego. Zazwyczaj zadaniem chatbota jest takie prowadzenie rozmowy, aby użytkownik (rozmówca) miał wrażenie, ze rozmawia z żywym, inteligentnym człowiekiem.

2. Opis projektu

Stworzony przeze mnie CHATBOT - Jaropełk, służy jako przewodnik po Krakowie. Baza wiedzy Jaropełka zawiera podstawowe informacje związane z Krakowem, np. liczba ludności, powierzchnia, data powstania, prezydent itp., podstawowe informacje o szkołach wyższych w Krakowie oraz informacje o zabytkach. Chatbot został stworzony na stronie www.pandorabots.com, gdzie każdy może założyć chatbota, a następnie wgrać mu bazę wiedzy. Projekt został stworzony w języku AIML.

3. Opis języka AIML

AIML jako pochodna XML składa się z tzw. ''tagów'', czyli znaczników zaczynających się od znaku ''<'' a kończących znakiem ''>''. Nie będę się tu zagłębiał w istotę języka XML, o tym można poczytać w dokumencie opisującym ten standard.
Każdy dokument AIML musi zaczynać się od znacznika < aiml > i kończyć znacznikiem < /aiml >, tak więc dokument pokazany niżej jest minimalnym i całkowicie interpretowalnym dokumentem języka AIML.

< aiml >
</aiml >

Jak już wspomniałem wcześniej, dokument AIML składa się z dowolnej liczby obiektów zwanych kategoriami i określanych znacznikiem < category >, przy czym każdy z nich powinien składać się z dokładnie jednego elementu < pattern > i jednego elementu < template >. Wszelkie interpretery AIML powinny zgłosić błąd w sytuacji, kiedy kategoria nie zawiera obydwu tych elementów.
Znacznik < pattern > określa jakiej wypowiedzi użytkownika dotyczy dana kategoria, natomiast znacznik < template > definiuje reakcję chatterbota na tą wypowiedź. Dla przykładu utwórzmy prosty dokument AIML zawierający jedną kategorię i powodujący, że na słowo ''Czesc'', program udzieli odpowiedzi ''Witaj, jak się masz?''

< aiml >
< category >
< pattern >CZESC< /pattern >
< template >Witaj, jak się masz?< /template >
< /category >
< /aiml >

Wyrażenie znajdujące się wewnątrz znacznika < pattern >, czyli między < pattern > a < /pattern > jest prostym wyrażeniem regularnym języka AIML, jest więc pisane całe wielkimi literami i może zawierać znaki specjalne ''*'' oraz ''_'' oznaczające ''cokolwiek''. Spójrzmy na poniższy przykład:

< aiml >
< category >
< pattern >CZESC *< /pattern >
< template >Witaj, jak się masz?< /template >
< /category >
< /aiml >

Chatterbot ze zdefiniowaną przez powyższy dokument bazą wiedzy będzie reagował na wszelkie wyrażenia typu ''Czesc cokolwiek'' odpowiedzią ''Witaj, jak się masz?'', przy czym ''cokolwiek'' może oznaczać tu dowolny wyraz, ciąg wyrazów lub cyfr, a nawet zdanie. W tego typu wyrażeniach interpretowane są tylko litery oraz cyfry, wszelkiego typu inne znaki są ignorowane.
Warto w tym miejscu zwrócić uwagę na fakt, że mimo iż chatterbot jest w stanie odpowiedzieć na zdanie typu ''Czesc chatterbocie'', nie zareaguje na wyrażenie ''Czesc'', gdyż ''*'' i ''_'' nie mogą oznaczać pustego ciągu, przy czym jako pusty ciąg rozumiemy wyrażenie złożone z liter i cyfr.
Teoretycznie, opisane do tej pory rzeczy, wystarczają, aby opisać wiedzę prostego chatterbota. AIML udostępnia jednak wiele udogodnień i ulepszeń. Niektóre z nich tylko ułatwiają pracę projektantowi bazy wiedzy, a niektóre są niezbędne do osiągnięcia pewnych określonych reakcji programu na wypowiedzi użytkownika. Postaram się pokrótce omówić najważniejsze z nich.

< srai >
Znacznik < srai > pozwala definiować twórcy bazy wiedzy synonimy dla pewnych określonych wyrażeń. Dzięki temu uniknąć można wielokrotnego definiowania tych samych reakcji dla różnych wypowiedzi użytkownika. Powróćmy do przykładu z powitaniem. Chcemy, aby nasz chatterbot reagował na więcej powitań niż tylko jedno, w tym celu definiujemy więcej kategorii, każda odpowiadająca jednemu określonemu powitaniu, przy czym reakcję programu specyfikujemy tylko raz w jednej z tych kategorii:

< aiml >
< category >
< pattern >CZESC< /pattern >
< template >Witaj, jak się masz?< /template >
< /category >
< category >
< pattern >WITAJ< /pattern >
< template >< srai >CZESC< /srai >< /template >
< /category >
< category >
< pattern >CZESC *< /pattern >
< template ><srai>CZESC< /srai >< /template >
< /category >
< category >
< pattern >WITAJ *< /pattern >
< template >< srai >CZESC< /srai >< /template >
< /category >
< /aiml >

Znacznik < srai > oznacza, że chatterbot ma potraktować wypowiedź zdefiniowaną w części < template > tak samo jak wypowiedź znajdującą się pomiędzy otwierającym a zamykającym tagiem < srai >. W powyższym przykładzie więc, chatterbot na wyrażenia typu ''Czesc'', ''Czesc cokolwiek'', ''Witaj'', ''Witaj cokolwiek'' zareaguje w ten sam sposób i odpowie ''Witaj, jak się masz?''
Na pierwszy rzut oka wydawać by się mogło, że jest to niepotrzebne zawracanie głowy, gdyż w każdym z tagów < pattern > można by z podobnym nakładem pracy umieścić wyrażenie ''Witaj, jak się masz?'', jest jednak kilka powodów, dla których ten mechanizm ma rację bytu. Po pierwsze, modyfikacje. Jeśli będziemy chcieli zmodyfikować reakcję programu na pewien zestaw wypowiedzi użytkownika, wystarczy, że zrobimy to w jednym miejscu. Po drugie, jak się to okaże później, reakcje chatterbota mogą być zdefiniowane w sposób dużo bardziej złożony, a więc i dłuższy, co całkowicie obala argument o uzyskaniu tego samego efektu bez użycia tagu < srai > i podobnym kosztem.

< random >
Bardzo ciekawym i przydatnym, mogącym sprawić, że projektowany przez nas chatterbot stanie się bardziej ''ludzki'' (o ile to w ogóle możliwe), jest znacznik < random >. Umieszczony wewnątrz tagu < template > Powoduje, że odpowiedź programu będzie wybrana w sposób losowy z pewnego zestawu możliwych odpowiedzi. Odpowiedzi te definiujemy jako listę, której każdy element umieszczony jest między tagami < li > i < /li >.

< aiml >
< category >
< pattern >CZESC< /pattern >
< template >
< random >
< li >Witaj, jak się masz?< /li>
< li >No hej.< /li >
< li >Dzień dobry.< /li >
< /random >
< /template >
< /category >
< /aiml >

Wprowadzenie przedstawionej powyżej kategorii do bazy wiedzy chatterbota spowoduje, że na przywitanie ''Czesc'' zareaguje on w sposób losowy jedną z możliwych odpowiedzi ''Witaj, jak się masz?'', ''No hej'' albo ''Dzień dobry''. I już w tym miejscu można zauważyć, jak istotnym elementem jest omówiony poprzednio element < srai >. Jeśli mielibyśmy w każdej kategorii związanej z powitaniem definiować całą listę możliwych odpowiedzi, zajęło by nam to dużo więcej miejsca niż w przypadku wykorzystania tego znacznika.

< star/ >
Kolejnym interesującym znacznikiem jest znacznik < star/ >. Umieszczony wewnątrz tagu < template > spowoduje wstawienie w tym miejscu ciągu, którym w części < pattern > została zastąpiona gwiazdka (''*''). Spójrzmy na poniższy przykład:

< aiml >
< category >
< pattern >CO TO JEST *< /pattern >
< template >Wiesz, nie mam pojęcia co może oznaczać słowo <star />.< /template >
< /category >
< /aiml >

Zdefiniowanie kategorii tak jak powyżej, spowoduje że na pytanie użytkownika ''Co to jest kot?'' program zareaguje odpowiedzią ''Wiesz, nie mam pojęcia co może oznaczać słowo kot''. Dodatkowo, możemy rozszerzyć ten znacznik o określenie, którego konkretnie wystąpienia ''*'' on dotyczy. Robimy to poprzez dodanie parametru index określającego numer ''*''. Na przykład:

< aiml >
< category >
< pattern >* JEST *< /pattern >
< template >Nie byłbym taki pewien, może jednak < star/ > nie jest < starindex=''2''/ >.< /template >
< /category >
< /aiml >

Po dodaniu powyższej kategorii do bazy wiedzy programu, na stwierdzenie ''Jabłko jest zielone'', chatterbot odpowie ''Nie byłbym taki pewien, może jednak Jabłko nie jest zielone.'' Jak widać wystąpienia ''gwiazdek'' numeruje się od 1, przy czym brak parametru index jest równoważny ze zdefiniowaniem go jako 1.

< that >
Znacznik < that > rozszerza możliwości < template > o sprawdzenie jednej z poprzednich wypowiedzi chatterbota. Jego miejsce jest dokładnie między znacznikiem < pattern > a znacznikiem < template >. Poza sprawdzeniem czy zdanie użytkownika pasuje do wyrażenia regularnego między < pattern > a < /pattern >, następuje sprawdzenie czy poprzednie zdanie wypowiedziane przez program pasuje do tego co znajduje się między znacznikami < that > i < /that >. Znacznik < that > może przyjmować atrybut index, mówiący którą wypowiedź chatterbota należy przetestować:

< aiml >
< category >
< pattern >*< /pattern >
< that >JAK MASZ NA IMIE< /that >
< template >Hmm, < star/ >. Calkiem ladne imie.< /template >
< /category >
< /aiml >

Zdefiniowanie powyższej kategorii spowoduje, że każde zdanie użytkownika wypowiedziane po pytaniu ''Jak masz na imie?'' potraktowane zostanie jak imię użytkownika.

< think >
Tag < think > wyznacza fragmenty z wewnątrz znacznika < template >, które nie mają być wyświetlone na ekranie.

< aiml >
< category >
< pattern >CO TO JEST KOT< /pattern >
< template >
Hmmm, < think >Ile on ma lat, ze nie wie co to kot? < /think >kot to zwierzę futerkowe, czworonożny ssak.
< /template >
< /category >
< /aiml >

Na pierwszy rzut oka istnienie znacznika < think > wydaje się być zupełnie nie na miejscu, skoro zawarta wewnątrz niego informacja i tak nie zostanie przekazana użytkownikowi, jednak, jak przekonamy się za chwilę, istnieją znaczniki, które poza wyświetlaniem informacji wykonują jeszcze dodatkową funkcję. Czasami chcielibyśmy uniknąć wypisania informacji i pozwolić jedynie na wykonanie tego dodatkowego zadania. W tym właśnie miejscu używamy znacznika < think >.

< get/ > i < set >
Chatterboty interpretujące język AIML mogą przechowywać podczas działania różnego rodzaju informacje. Są one trzymane w zmiennych, które ustawić i odczytać można przy pomocy znaczników AIML. Robot rozmawiający z użytkownikiem jest w stanie dzięki temu zapamiętać pewne rzeczy, które być może będzie można wykorzystać później. Do zapisywania i odczytywania zmiennych służą znaczniki < set > i < get/ >. Działają one w bardzo prosty sposób:

< aiml >
< category >
< pattern >MAM NA IMIE *< /pattern >
< template >
< set name=''userName'' >< star/ >< /set >
Hmm. To ładne imię.
< /template >
< /category >
< category >
< pattern >OPOWIEDZ MI DOWCIP</pattern >
< template >
OK. < get name=''userName''/ >. Spróbuję coś sobie przypomnieć, w tym czasie
Ty opowiedz jakiś mi.
< /template >
< /category >
< /aiml >

Po wczytaniu pierwszej z powyższych kategorii do bazy wiedzy, w sytuacji kiedy użytkownik przedstawi się programowi pisząc, na przykład, ''Mam na imię Michał'', ten skrzętnie to zanotuje w zmiennej o nazwie userName. Znacznik < set > ustawia wartość zmiennej, znacznik < get/ > ją odczytuje. < set > posiada zarówno tag otwierający jak i zamykający, a wartość na którą ma być ustawiona zmienna znajduje się pomiędzy nimi. W powyższym przykładzie jest to znacznik < star/ > a więc wyrażenie podstawione w miejsce ''*'' z < pattern >. W tym przypadku będzie to prawdopodobnie imię. Znacznik < get/ > natomiast jest znacznikiem występującym samotnie. W jego miejsce wstawiona zostanie wartość wskazanej zmiennej. Obydwa znaczniki posiadają wymagany parametr name, wskazujący na nazwę zmiennej, do której odnosi się przypisanie bądź odczytanie wartości. I tu pojawia się miejsce na opisywany wcześniej znacznik < think >. < set > oprócz ustawiania wartości zmiennej, wyświetla ją w miejscu swojego występowania, dlatego bardzo często znacznik ten jest otoczony przez < think >. W powyższym przykładzie, chatterbot najpierw wypowie imię swojego rozmówcy, a dopiero potem doda, że jest to ładne imię. Jeślibyśmy zastosowali < think >, jak poniżej:

< aiml >
< category >
< pattern >MAM NA IMIE *< /pattern >
< template >
< think >< set name=''userName'' >< star/ >< /set >< /think >
Hmm. Ładne imię
< /template >
< /category >
< /aiml >
chatterbot nie wypisał by imienia swojego rozmówcy.
Interpretery AIML powinny w miejsce < get/ >, w sytuacji, gdy określona zmienna nie jest ustawiona zwracać pusty ciąg znaków.

< topic >
< topic > to dość ciekawy znacznik. Jest jedynym znacznikiem poza < category >, który może znajdować się bezpośrednio wewnątrz < aiml >. Co więcej, sam zawierać musi jeden lub kilka tagów < category >.
Znacznik < topic > pozwala programowi orientować się w rozmowie na podstawie tematów. Może się zdarzyć taka sytuacja, że chatterbot nie jest w stanie odpowiedzieć na zdanie swojego rozmówcy. Co wtedy? Wtedy może ratować się ucieczką i odpowiedzieć w sposób niezwiązany bezpośrednio z wypowiedzią użytkownika, ale związany z ostatnio poruszanym tematem. Jak to działa? Istnieje specjalna zmienna o nazwie topic, która przechowuje informacje o aktualnie omawianym temacie. Tą zmienną jednak musi ustawiać projektant bazy wiedzy za pomocą znacznika < set >. Kiedy jednak jest ustawiona, a program nie wie jak odpowiedzieć szuka odpowiedniego tagu < topic >, który mógłby wykorzystać.
Przyjrzyjmy się przykładowi:

< aiml >
< category >
< pattern >WITAJ< /pattern >
< template >
< think >< set name=“topic“ >powitanie< /set >< /think >
Dzień dobry
< /template >
< /category >
< topic name=''POWITANIE'' >
< category >
< pattern >*< /pattern >
< template >Jaka jest u Ciebie pogoda?< /template >
< /category >
< /topic >
< /aiml >

Bardzo często poza zwykłą wymianą powitań, samemu powitaniu stanowią różne akty grzeczności itp. Można powiedzieć więc, że jest to pewien określony fragment całej rozmowy, w którym padają pewne określone zdania i to wykorzystuje przedstawiony powyżej chatterbot.
W momencie kiedy użytkownik go wita, program stwierdza fakt, że znajduje się w części rozmowy zwanej powitaniem. Chwilę później może się zdarzyć, że użytkownik powie coś, do czego program nie będzie potrafił się odnieść. Nie zrażony tym poszuka sobie odpowiedniego wpisu w kategoriach zgromadzonych w tagu < topic > z atrybutem name równym wartości ''powitanie''. Atrybut name jest również prostym wyrażeniem regularnym, więc może zawierać znaki ''*'' i ''_''.

4. Przykłady

4.1. Rozmowa w miarę inteligentna:

Human: hej
Przewodnik po Krakowie: siema.
Human: jak masz na imie
Przewodnik po Krakowie: mam na imie Jaropelk, a Ty?
Human: Lukasz
Przewodnik po Krakowie: milo mi Cie poznac Lukasz.
Human: w jakim panstwie jest krakow
Przewodnik po Krakowie: Krakow jest krakow w Polsce.
Human: w jakim wojewodztwie lezy krakow
Przewodnik po Krakowie: Krakow lezy krakow w Malopolskim.
Human: ile osob mieszka w krakowie
Przewodnik po Krakowie: w Krakowie mieszka 756 267 osob.
Human: to duzo
Przewodnik po Krakowie: ano duzo, drugie co do liczby ludnosci miejsce w Polsce.
Human: jakie jest najwieksze
Przewodnik po Krakowie: najwieksza jest warszawa.
Human: nie lubie warszawy
Przewodnik po Krakowie: A nie sadzisz ze mielismy rozmawiac o Krakowie.
Human: tak
Przewodnik po Krakowie: Krakow to piekne miasto.
Human: jaka powierzchnie zajmuje krakow
Przewodnik po Krakowie: Krakow zajmuje 327 metrow kwadratowych.
Human: jakie sa najciekawsze miejsca w krakowie
Przewodnik po Krakowie: mysle ze, aby zobaczyc najciekawsze miejsca w Krakowie, nalezy sie wybrac na ''Droge krolewska''.
Human: co to jest droga krolewska
Przewodnik po Krakowie: Droga Krolewska, jest to trasa na ktorej znajduje sie wiele ciekawych i wartych zobaczenia miejsc.
Human: opowiedz mi o niej
Przewodnik po Krakowie: Droga Krolewska zaczyna sie w kosciele sw. Floriana przy Placu Matejki, gdzie Rektor wraz z Senatem Uniwersytetu witali niegdys nowego krola. Przechodzi nastepnie obok Barbakanu i resztek dawnych fortyfikacji miejskich i poprzez glowna brama wjazdowa ?Brame Florianska ?wkracza w obreb Starego Miasta. Przez ulice Florianska, gdzie mozemy podziwiac szereg obiektow o ciekawej historii ( Dom Jana Matejki, hotel ''Pod Roza'', Jama Michalika) trasa wiedzie na Rynek Glowny, najwiekszy plac sredniowiecznej Europy, zdominowany przez gotycki Kosciol Mariacki.
W Bazylice Mariackiej znajduje sie olsniewajace dzielo Wita Stwosza ?najwiekszy gotycki oltarz w Europie. Z wyzszej wiezy kosciola co godzine grany jest hejnal. Niemalze naprzeciwko fasady kosciola stoi pomnik Adama Mickiewicza, bedacy popularnym miejscem spotkan zarowno krakowian, jak i turystow. Centralne miejsce na Rynku zajmuja Sukiennice, rzadko spotykany przyklad sredniowiecznej budowli od wiekow sluzacej kupcom. Obecnie pierwsze pietro zajmuje Galeria Malarstwa Polskiego, a arkadowy parter liczne stoiska z pamiatkami i wyrobami rekodzielniczymi. Nad poludniowa czescia Rynku goruje wieza dawnego ratusza z roztaczajacym sie z niej wspanialym widokiem.
Z Rynku trasa kieruje sie obok malutkiego romanskiego kosciolka sw. Wojciecha oraz restauracji Wierzynek w ulice Grodzka. Po drodze na Wawel podziwiac mozemy gotyckie koscioly i zespoly klasztorne Dominikanow i Franciszkanow. Ten ostatni zdobia polichromia i witraze Stanislawa Wyspianskiego. Obok kosciola widnieje Palac Wielopolskich, dzis siedziba krakowskiego magistratu. Kontynuujac spacer ul. Grodzka, odwiedzic mozemy romanski kosciol sw. Andrzeja oraz sasiadujacy z nim barokowy kosciol ss. Piotra i Pawla z postaciami Apostolow na postumentach, we wnetrzu ktorego znajduje sie grobowiec ks. Piotra Skargi, zas pare metrow dalej ewangelicki kosciol sw. Marcina i kosciolek sw. Idziego.
Rownolegle do ul. Grodzkiej biegnie przesliczna ul. Kanonicza z niedawno odnowionymi kamienicami i niepowtarzalna atmosfera. Obie ulice prowadza prosto do stop Wzgorza Wawelskiego ?religijnego, duchowego i patriotycznego serca Polski, z Zamkiem Krolewskim, ktory uznawany jest za jedna z najwspanialszych rezydencji renesansowych w Europie. Szczegolnie oryginalna jest sala Poselska zwana takze ''Pod Glowami'', gdyz w kasetonowym stropie znajdowaly sie 194 rzezbione drewniane glowy; dzis pozostalo ich juz tylko 30. Najcenniejszym ze zbiorow wawelskich jest unikatowa kolekcja 137 arrasow, zdobiacych komnaty wykonano we Flandrii na zamowienie krola Zygmunta II Augusta.
Human: opowiedz mi o kosciele mariackim
Przewodnik po Krakowie: najwiekszy i najwazniejszy, po Katedrze Wawelskiej, kosciol Krakowa; od 1963 roku Bazylika. Nalezy do najbardziej znanych zabytkow Krakowa i Polski. Polozony jest przy polnocno_wschodnim narozniku Rynku Glownego, na Placu Mariackim. Zbudowano go w XIV w.
Human: gdzie jest kosciol mariacki
Przewodnik po Krakowie: Polozony jest przy polnocno_wschodnim narozniku Rynku Glownego, na Placu Mariackim.
Human: gdzie jest brama florianska
Przewodnik po Krakowie: Brama Florianska znajduje sie, na ulicy Florianskiej, przy wejsciu do Starego Miasta od Placu Matejki.
Human: opowiedz mi o bramie florianskiej
Przewodnik po Krakowie: pochodzi z poczatku XIV w. Liczy od galki helmu 34,5 m wysokosci. Nad brama wejsciowa znajdowal sie kiedys orzel zastapiony w 1882 r. orlem piastowskim wedlug projektu Jana Matejki wykonany przez Zygmunta Langmana. Wewnatrz znajduje sie klasycystyczny oltarz z poczatku XIX w. z poznobarokowa kopia cudownego obrazu Matki Boskiej Piaskowej. Od strony miasta widnieje plaskorzezba z XVIII w. wyobrazajaca sw. Floriana. Przy portalu bramnym do dzis zachowaly sie tez prowadnice na krate. Brame zbudowano ok. 1300 r., miesci sie ona w kwadratowej baszcie z dzikiego kamienia. W latach 1565_1566 w poblizu Bramy Florianskiej zbudowany zostal Arsenal Miejski. W XVI w. miescily sie w Bramie stajnie miejskie, nazywane wowczas nastella. Zwienczenie Bramy Florianskiej zostalo wykonane w 1660 r. W 1694 r. przeprowadzony zostal jej gruntowny remont. Na poczatku XIX w. rozwijajacy sie Krakow zaczal zajmowac tereny starych i zniszczonych murow obronnych. Prof. Feliks Radwanski wywalczyl 13 stycznia 1817 w senacie Rzeczypospolitej Krakowskiej decyzje o pozostawieniu dla potomnych fragmentow sredniowiecznej fortyfikacji. Zachowaly sie wiec czesci murow, a mianowicie Barbakan i Brama Florianska.
Human: jak dostac sie na zamek krolewski
Przewodnik po Krakowie: nalezy isc od rynku, ulica florianska, na poludniowe. Nastepnie skrecic w prawo, w ulice kanoniczna, obok placu Wita Stwosza. Isc prosto, az do wzgorza Wawelskiego, na ktorym jest Zamek.
Human: jakie sa szkoly wyzsze
Przewodnik po Krakowie: W Krakowie sa: Uniwersytety, Akademie, Politechnika; ktore Cie interesuja?
Human: akademie
Przewodnik po Krakowie: Akademia: Pedagogiczna, Sztuk Pieknych, Gorniczo_Hutnicza, Muzyczna, Wychowania Fizycznego, Teologiczna?
Human: sztuk pieknych
Przewodnik po Krakowie: co chcesz wiedziec o akademii sztuk pieknych.
Human: kto jest rektorem
Przewodnik po Krakowie: Jan Pamula.
Human: gdzie to jest
Przewodnik po Krakowie: pl. Jana Matejki 13.
Human: kiedy zalozono krakow
Przewodnik po Krakowie: Krakow zalozono przed IX wiekiem.
Human: jaki jest numer kierunkowy
Przewodnik po Krakowie: (+48) 12.
Human: jakie sa numery rejestracyjne
Przewodnik po Krakowie: Numery rejestracyjne zaczynaja sie od ''KR''.
Human: dzieki, czesc
Przewodnik po Krakowie: nie ma za co, czesc.

4.2. Rozmowa mało inteligentna i nie na temat:

Human: czesc
Przewodnik po Krakowie: witaj szefie.
Human: witaj
Przewodnik po Krakowie: dzien dobry.
Human: po co mowisz mi dzien dobry
Przewodnik po Krakowie: Moze chcesz sie dowiedziec ciekawych rzeczy?
Human: nie
Przewodnik po Krakowie: A moze jednak nie?
Human: moze
Przewodnik po Krakowie: Cos mi sie wydaje ze nie masz racji.
Human: dlaczego
Przewodnik po Krakowie: Moge Ci powiedziec kilka ciekawych informacji.
Human: co mnie to interesuje
Przewodnik po Krakowie: Ladna mamy pogode, prawda?
Human: nie
Przewodnik po Krakowie: Moge Ci powiedziec kilka ciekawych informacji.
Human: juz to slyszalem
Przewodnik po Krakowie: Moze chcesz sie dowiedziec ciekawych rzeczy?
Human: nie
Przewodnik po Krakowie: Naprawde?
Human: naprawde
Przewodnik po Krakowie: Powiedziec Ci cos ciekawego o Krakowie?
Human: tak
Przewodnik po Krakowie: co chcesz wiedziec?
Human: kto jest prezydentem
Przewodnik po Krakowie: Przezydentem Krakowa jest Jacek Majchrowski
Human: no i co z tego
Przewodnik po Krakowie: Moze chcesz wiedziec ilu jest mieszkancow?
Human: tak
Przewodnik po Krakowie: w Krakowie mieszka 756 267 osob.
Human: blee
Przewodnik po Krakowie: Moze chcesz wiedziec kto jest prezydentem?
Human: wiem juz
Przewodnik po Krakowie: A nie sadzisz ze mielismy rozmawiac o Krakowie.
Human: nie
Przewodnik po Krakowie: no to sie mylisz.

5. Wnioski

Temat chatbota jest bardzo ciekawy, jednak gdybyśmy chcieli stworzyć bota, który nie miałby problemów z komunikacja z każdą osoba zasiadającą do rozmowy z nim, to trzeba by spedzić ogromną ilość godzin, aby cel ten osiągnąć. Jak wiadomo, chatbot nie jest inteligentny, posiada on tylko bazę wiedzy, z której korzysta. Wykorzystuje algorytmy aby dopasować odpowiedz do wzorca zadanego pytania. Głównym problemem jest to, że dwie osoby mogą zadać dwa różne pytania do tego samego tematu, a biorąc pod uwagę, że na Świecie jest tych osób ponad 6 mld, to ciężko jest stworzyć taką bazę danych, gdzie na pytanie każdego człowieka, chatbot byłby w stanie odpowiedzieć.

6. Literatura

Wprowadzenie do AIML - Piotr Dobrowolski; http://docs.jedenpies.pl/files/AIML.pdf
Strona projektu ALICE; http://alicebot.org/
Strony o Krakowie:
http://www.krakow.pl
http://pl.wikipedia.org/wiki/Krak%C3%B3w

7. Strona www Bota

Bot jest dostępny pod adresem: http://pandorabots.com/pandora/talk?botid=de54adfaae36bc0d