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