Chatterboty są programami prowadzącymi rozmowę na podstawie informacji uzyskiwanych od użytkownika oraz własnej bazy wiedzy zawierającej zbiór słów kluczowych i typowych odpowiedzi. Rozumienie przez bota rozmowy jest pożądane, jednak na ogół zamiast tego rozmowa toczy się na podstawie rozpoznanych w wpowiedzi użytkownika słów kluczowych. Celem zadania było stworzenie bota rozmawiającego o wynikach piłkarskich, zatem "statyczna" baza wiedzy okazała się byc niewystarczająca. Baza wiedzy jest więc akutalizowana na bieżąco z użyciem kanału RSS. Dzięki temu użytkownik może pozyskiwac informacje o wynikach meczów zespołów z większości lig światowych, a także o rozgrywkach międzynarodowych. Każdorazowa aktualizacja bazy wyników powoduje korektę zbiorczej tabeli wyników, zatem możliwe jest również określenie pozycji w tabeli każdego z zespołów.
Chatterbots are computer programmes conversing with use of informations get from interlocutor and own knowlegde base containing set of cue words and typical answers. Understanding of conversation is required, instead of that, bot converse by recognizing cue words in user statement. The aim of this project was to create chatbot talking about soccer scores, thus "static" knowledge base was insufficient. Therefore knowledge base is actualised on-line by RSS feed. Thereby, user is able to get information about soccer results from most of worldwide soccer leagues and international games. Every time the database is actualised, there is computed new position of each team in overall standings.
Zadanie stworzenia chatterbota z bazą wiedzy aktualizowaną dynamicznie kanałem RSS składa się z kilku etapów. Po pierwsze należało stworzyc pseudo czytnik RSS, czyli programu pobierającego i interpretującego dane dostarczane przez kanał. W projekcie wykorzystano kanał dostępny pod adresem http://www.scorespro.com/rss/live-soccer.xml, który jest aktualizowany średnio co 30 minut.Z takiej formy reprezentacji danych należało wyodrębnic i dostarczyc bazie wynikow dane. Bazę tę stanowi baza danych oparta na systemie PostgreSQL. Z bazy wyników korzysta chatterbot przy analizie semantycznej wprowadzanych przez użytkownika wypowiedzi.
System chatterbota składa się de facto z dwóch modułów:
1. Aplikacji czytnika RSS z parserem pliku .xml oraz modułem komunikacji z bazą danych
2. Aplikacji chatterbota korzystającego z bazy danych.
Moduł czytnika RSS ma za zadanie pobrac dane z kanału i parsowac je tak, by uzyskac zbior przydatnych informacji. Przykładowa linia pliku .xml wygąda tak:
<item><title>Pst Atlantis Fc - Grifk (FINLAND - Division 2) <title><link>http://www.scorespro.com/</link><item>
<item><title>FT Young Lions - Balestier Khalsa Fc 2 - 3 (SINGAPORE - League Cup)<title><link>http://www.scorespro.com/</link><item>
<item><title>Pen Abc - Criciuma 1 - 0 (BRAZIL - Division 2)<title><link>http://www.scorespro.com/</link><item>
Parsowanie sprowadza się więc w zasadzie do wyodrębnienia nazw obu zespołów, wyniku oraz formy rozgrywek. Interesujące są jedynie wyniki spotkań zakończonych, stąd wyodrębnic należy jedynie wpisy zaczynające się od:
FT - czyli zakończone w regulaminowym czasie gry,
AT - zakończone po dogrywce,
Pen - zakończone po rzutach karnych.
Wszelkie pozostałe, jak również wpisy pozbawione wyniku (jak np linia 1) muszą byc ignorowane. Ponadto, z dwumiesięcznych eksperymentów wynikło, że forma reprezentacji danych w kanale RSS ewoluowała. Zmieniał się określnik ligi np.: zamiast FINLAND - Division 2 pojawiało się FINLAND - Ykkonen, czyli jej określenie zwyczajowe, separatory, kolejnośc danych, co spowodowało szereg zaskakujących sytuacji podczas uruchamiania i testowania bota. W celu zapobieżenia takim sytuacjom, w bazie danych utworzona została tabela przechowująca większośc możliwych form wystąpień określników lig, zarówno w języku angielskim jak i w językach narodowych każdej z lig. Zdarzają się również wpisy wadliwe, np.: bez nazwy ligi lub bez wyniku. Takie sytuacje są interpretowane jako błędne i nie trafiają do bazy wyników. Ponadto informacje o wynikach pobierane z kanału pozbawione są znacznika czasowego, zatem czytnik RSS w sposób inteligentny przegląda bazę wyników w poszukiwaniu wyników już dodanych. Oprócz archiwizowania wyników, tworzona jest tabela zbiorcza dla każdej z lig, w której przechowywane są informacje na temat pozycji wszystkich drużyn ligi. Zapytania SQL generowane są dynamicznie.
Aby stworzyc bazę wiedzy chatterbota, został napisany program, który symuluje jego działanie. Testy wsród wielu użytkowników umożliwiły zebranie najczęściej powtarzających się wypowiedzi kierowanych do bota, zarówno przez osoby interesujące się piłką nożną, jak i zupełnie nie mające pojęcia o tym sporcie. Zbiór tych wypowiedzi pozwolił na stworzenie bazy słów kluczowych występujących w zapytaniach kierowanych do bota.
Bot na podstawie słów kluczowych i sprawdzenia wypowiedzi użytkownika pod kątem występowania nazw zespołów i lig w bazie wyników, tworzy strategię formułowania odpowiedzi. Ignorowane są słowa krótsze od trzech znaków, ponieważ zarówno słowa niosące treśc, jak i nazwy zespołów i lig są co najmniej trzy znakowe. Słowa dłuższe są odpowiednio skracane, aby uniezależnic pracę bota od form fleksyjnych słów w wypowiedzi użytkownika. Na podstawie przeprowadzonych eksperymentów uznano, że obok formy podstawowej rzeczownika najczęściej pojawia się forma dopełniacza, zatem usuwane są sufiksy. Nie gwarantuje to pełnej niezależności zbioru słów kluczowych od słów podawanych w formie odmienianej, ze względu na nieregularności w odmianach niektórych rzeczowników w języku polskim.
System chatterbota został zaimplementowany w środowisku Borland C++ Builder w wersji Personal, która jest darmowa w zastosowaniach niekomercyjnych. Baza danych została uruchomiona w systemie PostgreSQL. Do komunikacji środowiska programistycznego z bazą danych zastosowano darmowy interfejs ZEOSLib http://sourceforge.net/projects/zeoslib
Ja:Powiedz mi cos o druzynie Flamengo
Bot:Drużyna " Flamengo" ? Opowiedziec Ci o niej?
Ja:Tak , chetnie poslucham
Bot:Gole, bramki punkty - czyli statystyka i na dodatek wynik ich ostatniego meczu (kolumny strzelone, stracone mowia o golach).
W ostatnim meczu (2008-06-15 ) Flamengo spotkala sie z Sao Paulo wynik to 2 do 4 dla Flamengo
Bot:Zadowolony z odpowiedzi?
Ja:Tak, to jest to czego chcialem
Bot:Stawiasz ciekawe pytania. Widzę, że masz pojęcie o pilce. Ja też, probuj mnie czyms zagiąc
Ja:Czy flamengo gralo z legia ?
Bot:
Wygląda na to, że te zespoly nie rozgrywaja meczy w tych samych rozgrywkach.
Bot:Stawiasz ciekawe pytania. Widzę, że masz pojęcie o pilce. Ja też, sprobuj mnie czyms zagiąc
Ja:nie . Widze, ze nie masz wszystkich wynikow
Bot:A może by tak pogadac o czyms innym? Oczywiscie jezeli nalegasz, możemy jeszcze raz sprobowac w tym temacie.
Ja:ogladasz euro ?
Bot:Hmmm... Rogrywki " EUROPE (UEFA)" ? Opowiedziec Ci o nich?
Ja: nie , dzieki... tak tylko pytalem
Bot: A może by tak pogadac o czyms innym? Oczywiscie jezeli nalegasz, możemy jeszcze raz sprobowac w tym temacie.
Ja: dobra czy legia grala juz z wisla ?
Wyglada na to, ze jeszcze nie grali razem.Bot: Czy moja odpowiedź byla dla Ciebie satysfakcjonujaca?
Ja: tak Bot: Stawiasz ciekawe pytania. Widzę, że masz pojęcie o pilce. Ja też, probuj mnie czyms zagiąc
Bot został przetestowany wśród grupy znajomych, w której znajdowali się miłośnicy piłki nożnej jak i laicy w tej dziedzinie. Ujawniło to wiele nieprzewidzianych wcześniej sytuacji, potwierdzających, że utworzenie bazy wiedzy jest zadaniem najbardziej odpowiedzialnym przy tworzeniu chatterbota. Mimo przeprowadzonych wcześniej prób z programem udającym bota, nie udało się przewidziec wszystkich sytuacji mogących wystąpic podczas rozmowy. Znaczną niedogodnością jest, że nazwy lig i zespołów pobierane z kanału RSS są anglojęzyczne, więc nazwy krajów i lig powinny byc kierowane do bota w tej właśnie formie. Podczas testów okazało się, że słowa krótsze niż cztery znaki mogą powodowac przypadkowe dopasowania do nazw zespołów i lig znajdujących się w bazie wyników. Przeszukiwanie wypowiedzi użytkownika pod kątem dopasowania pojedynczych słów do treści zawartych w bazie okazało się niewystarczające. W wyniku przeprowadzonych testów zostało stwierdzone, że należy rozbudowac mechanizm wnioskowania o intencjach użytkownika. Wprowadzona została lista słów kluczowych, które pojawiając się w towarzystwie nazw lig i zespołów pozwalają wykluczy sytuacje niejednoznaczne. To rozwiązanie zwiększyło liczbę trafnie udzielanych odpowiedzi.
Bot został stworzony od podstaw w środowisku dośc nietypowym jak na to zadanie. Nie wzorowaliśmy się na innych rozwiązaniach tego typu. Skutkiem tego mogło się okazac, że częśc rozwiązań została zrealizowana "okrężną" drogą, ale możliwe jest, że niektóre z zastosowanych nich są niegorsze od tradycyjnych. Podczas prac nad botem i jego testowania okazało się jak ważna w przypadku takich programów baza wiedzy, jej spójnośc i przemyślana konstrukcja (na etapie prac nad botem dwukrotnie przebudowywaliśmy schemat bazy wyników tak, aby praca z nią była prostsza). Również okazało się, że w programach konwersacyjnych czynnik ludzki odgrywa niezmiernie istotną rolę, a charakter wypowiedzi każdego z użytkowników jest inny. W tej sytuacji nie pomaga specyfika języka polskiego. Występuje bardzo duża dowolnośc w konstruowaniu wypowiedzi oraz wiele nieregularnych form fleksyjnych.