pobierz plik referatu
Transkrypt
pobierz plik referatu
Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Rozdział 31 w Programowanie chatbotów edukacyjnych 1 Wstęp da .b w w Streszczenie. Systemy wspomagające nauczanie, w szczególności Intelligent Tutoring System, częstokroć rozbudowują swą funkcjonalność o chatboty edukacyjne. Wspierają one na różne sposoby wymianę zdań z użytkownikami (podpowiadając, ucząc, rozmawiając, itp.). W skrajnych przypadkach mogą także przeszkadzać w nauce. Zamierzeniem autorów jest stworzenie chatbota uruchamianego w momencie wykrycia u użytkownika ITS rażących luk wiedzy, którą użytkownik powinien posiadać w momencie rozpoczynania kursu. Lukę tego rodzaju mógłby uzupełnić poza głównym nurtem kursu, prowadząc dialog tematyczny z chatbotem. W tym celu podjęta została próba implementacji chatbota edukacyjnego wykorzystująca dwie odmienne techniki. Pierwsza z nich oparta jest na bazie danych (stanowiącą bazę wiedzy chatbota) oraz na silniku zaprogramowanym zgodnie z koncepcją programowania obiektowego. Druga implementacja wykorzystuje deklaratywne sterowanie regułami. Treścią artykułu jest dyskusja obu podejść. pl s. W świecie chatbotów najlepsze efekty osiągają programy oparte na ogromnej bazie wiedzy, posiadające odpowiedź na większość wzorców zadanych przez użytkownika. Wykorzystuje się je w celach komercyjnych, rozrywkowych, w sektorze publicznym [1] jak również coraz częściej w celach edukacyjnych. Te ostatnie funkcjonują na ogół w nieco odmienny sposób, co pociąga za sobą inne założenia wstępne i sposób implementacji. W centrum zainteresowań autorów artykułu jest wykorzystanie technik informacyjnych do celów edukacyjnych, w tym również modułu prowadzącego dialog z uczniem. Podczas projektowania i próby implementacji zarówno całej platformy edukacyjnej jak i chatbota, założeniem autorów było zawężenie bazy wiedzy. W chatbocie zaimplementowano pewne charakterystyczne zachowania ludzkie, które mają pomóc zniwelować braki użytkownika z wąskiej nauczanej dziedziny wiedzy. W artykule opisano dwie próby implementacji chatbota. Pierwsza oparta jest na własnym silniku napisanym w języku Java i korzystającym z bazy danych. Druga wykorzystuje pakiety Drools, które implementują język regułowy. Celem było porównanie tych dwóch rozwiązań i określenie, które z nich jest bardziej optymalne i które warto rozwijać w przyszłości. Barbara Gocłowska, Michał Kufel, Zdzisław Łojewski, Radosław Świech Uniwersytet Marii Curie Skłodowskiej, Instytut Informatyki, pl. M. C. Skłodowskiej 1, Lublin email: [email protected] (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech Zrozumienie funkcji jaką pełnić ma chatbot w platformie edukacyjnej wymaga jednak wprowadzenia podstawowych zadań platformy nazywanej w literaturze Intelligent Tutorial System [2]. 1.1 Platforma edukacyjna Intelligent Tutorial System w da .b w w Typowa platforma ITS (Intelligent Tutorial System) [3] jest samodzielnym programem instalowanym na komputerze klienta [4] bądź aplikacją dostępną przez sieć globalną. Służy indywidualnej nauce użytkownika, dzięki inteligentnemu dostosowywaniu się do jego postępów w nauce. Pełni więc z założenia funkcję korepetytora. Jednakże prawdziwy korepetytor potrafi nie tylko kontrolować na bieżąco postępy ucznia w nauce, ale również wykryć niepoprawność rozumienia pewnych treści (elementy wiedzy naturalnej) [5] oraz rażące braki wiedzy niezbędnej do nauki kolejnych treści. Mowa tutaj o wiedzy, którą powinien posiadać uczeń w chwili rozpoczynania kursu. Czy jest możliwe aby umiejętności tego typu posiadał ITS? Zależy to od sposobu zaprojektowania modułu głównego i ewentualnych modułów dodatkowych. W przypadku większości platform typu Intelligent Tutorial System, interakcja systemu z użytkownikiem rozpoczyna się prezentacją treści, które uczący się musi przyswoić podczas pojedynczej sesji lub kursu. Treści te reprezentowane są w postaci sieci semantycznej. W sieci tej węzłami są podstawowe jednostki prezentowanej wiedzy (unity, sesje lub moduły), a gałęzie określają relacje pomiędzy nimi [6]. Jeśli relacje te są jednoznacznie określone, algorytm wnioskujący może działać przechodząc zgodnie z połączeniami w grafie. W przeciwnym wypadku stosowane są reguły boolowskie. System na każdym etapie przebiegu procesu nauczania powinien mieć możliwość skontrolowania wiedzy studenta w celu wyszukania dla niego optymalnej ścieżki prezentowania wiedzy adekwatnej do jego wymagań i zdolności oraz generowania odpowiednich pytań i podpowiedzi [7]. Działanie modelowego Intelligent Tutoring System oparte jest o reguły zapytań stosowane do poszczególnych jednostek prezentowanej wiedzy lub o silnik reguł. Może on przyjmować zróżnicowaną postać, którą determinują specyfika działania systemu, struktura prezentowanych w nim treści, czynniki mające wpływ na ocenę użytkownika oraz ogólne warunki osiągnięcia przez niego zadowalającego poziomu wiedzy. Reguły te określają sytuacje, w których system rozpoczyna identyfikację błędów i generuje podpowiedzi, cofa uczącego się do poprzednich modułów w celu poprawienia wyników, dostarcza kolejne porcje wiedzy lub dodatkowe moduły [8]. W zależności od metodyki ITS-ów stosuje się proste reguły sterujące różnym zachowaniem systemu lub co ma miejsce w rozbudowanych ITS-ach z użyciem sieci neuronowych lub jeszcze innych technik sztucznej inteligencji. Wyniki uzyskane w poprzednich etapach procesu nauczania, czyli wagi wyjściowe jednej warstwy sieci, determinują poziom wiedzy prezentowanej w następnych modułach, czyli są wartościami wejściowymi do następnej warstwy tej samej sieci [9]. Bez względu jednak na przyjętą metodykę wszystkie możliwe rozwiązania danego problemu reprezentowane są za pomocą grafu rozwiązań. W przypadku przebiegu procesu nauczania stan początkowy tego grafu to pierwszy moduł prezentujący treść kursu, a stan docelowy to egzamin. Stany pośrednie reprezentują poszczególne moduły czyli stany, w których może się znajdować proces nauczania. Systemem sterującym w przypadku ITS jest tutor czyli agent sterujący ścieżką czyli przebiegiem procesu uczenia się indywidualnego studenta. pl s. 356 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych w Powyższy opis daje wyobrażenie o sposobie oraz tempie nauki dostosowującym się do indywidualnych potrzeb użytkownika systemu. Jednak by możliwe było silniejsze upodobnienie systemu do zachowania korepetytora, potrzebne są dodatkowe moduły. Jednym z nich (nazywanym przez nas NETS) jest moduł nauczania nieliniowego (skinnerowskie nauczanie programowane) [10], [11], uruchamianego w chwili wykrycia przez system elementów wiedzy naturalnej. Innym, dopiero projektowanym przez nas może być moduł Recenzenta, który pełnić będzie w systemie funkcję wyszukiwania i krytycznego recenzowania słabszych fragmentów kursu przygotowanych przez różnych autorów. Jest też niezbędny moduł reagujący na rażące braki wiedzy, wymaganej do zrozumienia i nauki aktualnego fragmentu kursu. Funkcję taką pełnić może chatbot edukacyjny. w 1.2 Definicja chatbota da .b w W literaturze informatycznej stosuje się różnorakie klasyfikacje botów, programów wykorzystywanych do przeszukiwania i pozyskiwania danych. Najczęściej spotykane to [12] chaterboty, searchboty, shoppingboty, databoty, updateboty, infoboty a ostatnio pojawiają się również animboty. Pierwsze z nich, nazywane niekiedy chatbotami, symulują rozmowę z użytkownikiem i najczęściej wykorzystywane są do pozyskiwania od niego wiedzy. Jest to w rzeczywistości metawiedza. Stanowi ona źródło informacji dla chatbota o zasobach jakie należy przekazać użytkownikowi podczas dialogu oraz o wyborze tematów rozmowy. Istnieją systemy [13], [14], [15], [16], w których chatbot, jeśli wykorzystuje się go jako narzędzie wspomagające nauczanie, pełni rolę głównego tutora weryfikującego wiedzę użytkownika. Podpowiada mu, analizuje jego wypowiedzi, odszukuje i poprawia błędy, przedstawia poprawne rozwiązania i steruje dialogiem w celu uzyskania odpowiedzi na konkretne pytania. W takich systemach chatbot jest jednocześnie nauczycielem, pomocą i egzaminatorem. Za pierwszego chatbota (1966 r.) uznaje się Elizę [17], której zadaniem było naśladowanie psychoanalityka. Mechanizm działania był prosty i polegał na tworzeniu pytań poprzez przekształcanie zdań użytkownika (zmiana szyku zdania). Mimo swojej prostoty i braku możliwości zapamiętywania wyników konwersacji, a więc wzbogacania bazy wiedzy, Eliza osiągała bardzo dobre efekty. Jednym z najbardziej obiecujących chatbotów znanym internautom jest chatbot ALICE [18]. Jak dotąd trzykrotnie wygrał nagrodę Loebnera [19] osiągając dobre wyniki w teście Turinga [20]. Mimo, iż uplasował się na pierwszym miejscu, jest on stosunkowo prosty w budowie. Składa się z interpretera oraz bazy wiedzy w języku AIML. Głównym zadaniem interpreterów jest przeszukiwanie bazy wiedzy w celu dopasowania odpowiedzi do zadanego wzorca, którym jest wypowiedź użytkownika. Na podobnej zasadzie, ale korzystając z innych technologii, działa większość chatbotów edukacyjnych. Chociaż pełnią różne role dostosowane do specyfiki działania systemu i wykorzystywanych w nim metod nauczania, to jednak podstawową ich zasadą pozostaje ciągłe pozyskiwanie wiedzy od użytkownika podczas dialogu z nim. [21]. Cel ten osiągnąć można na wiele sposobów. Poniżej zaprezentowano dwa różne podejścia wykorzystujące odmienne technologie. pl s. 357 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech 2 Funkcje chatbota w ITS w Adaptatywność systemu ITS polega na dostosowaniu się do zachowania użytkownika, przy czym użytkownik oczekuje, że system przyjmie postawę współpracującego z nim człowieka: przyjaciela, doradcy i doświadczonego nauczyciela w jednej pigułce (Planner Systems), nauczyciela (Intelligent Tutorial Systems), kolegi lub wszechwiedzącej istoty, człowieka nazywanego potocznie chodzącą encyklopedią (Chatbots) lub w najgorszym przypadku przeszkadzającego chochlika, którego można wyłączyć, gdy mocno dokuczy. Aby jednak system uruchomił chatbota, musi zajść jakieś zdarzenie. W systemie LISE [7] zdarzeniem takim jest wykrycie w teście kontrolnym kończącym poszczególne niewielkie fragmenty kursu rażących braków wiedzy. Pytaniom testu przypisywane są nie tylko różne wagi (potrzebne do sterowania ścieżką nauki) ale również pewne znaczniki. Jeżeli użytkownik natknie się na pytanie o maksymalnej wartości wagi i odpowie na nie niepoprawnie, uruchamiany jest moduł chatbota. Od tej chwili następuje wymiana zdań, której celem jest uzupełnienie rażących luk wiedzy, uniemożliwiających realizację dalszej części kursu. Oczywiście możliwe są bardziej skomplikowane sytuacje jak np. jednoczesne wykrycie luk wiedzy i jednoczesne istnienie wiedzy naturalnej. Skupimy się jednak na sytuacji kończącej się uruchomieniem chatbota. w w da .b 2.1 Projekt i implementacja chatbota opartego na technologii Enterprise Java Bean Schemat pierwszej aplikacji przedstawia rysunek 1. Warstwa klienta Przeglądark aWWW Kontener Web Warstwa Aplikacji Kontener EJB JSP Hibernate Servlet Session Bean Rys. 1. Schemat EJB Warstwa Bazy danych Baza Danych MySQL pl s. Aplikacja Javy po stronie klienta Warstwa Prezentacji Baza danych jest bazą wiedzy chatbota, podzieloną na kilka tabel, tak jak pokazano na rys. 2. Do komunikacji z botem wykorzystano technologię Enterprise Java Beans (odpowiedzialną za logikę aplikacji) w połączeniu z komentowaniem atrybutowym XDoclet. XDoclet pozwala zautomatyzować proces tworzenia deskryptorów oraz plików za pomocą JavaDoc Tag. Główne cele, które zamierzano osiągnąć podczas tworzenia aplikacji (zawężenie bazy wiedzy oraz zastosowanie technik, które mogłyby braki wiedzy zniwelować) wymagają zaimplementowania reakcji chatbota na specyficzne sytuacje, w których może znaleźć się podczas rozmowy z użytkownikiem. Poniżej przedstawiamy szereg technik, dzięki którym 358 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych chatbot radzi sobie w skrajnych sytuacjach powodowanych przez użytkownika takich jak np. zapobieganie powtórzeniom. Jeżeli silnik rozpozna, że zdanie wypowiedziane poprzednio przez użytkownika oraz kontekst wypowiedzi są takie same jak aktualne, wówczas zostanie wyświetlone odpowiednie pouczenie pobrane z tabeli „powtórzenia”. w da .b w w Rys. 2. Baza danych chatbota pl s. Szablony odpowiedzi zapisane w bazie wiedzy chatbota mogą zawierać znaczniki określające dodatkowe przekształcenia odpowiedzi, które program powinien wykonać przed jej wyświetleniem. Dzięki Tagom rozmowa jest ukierunkowana na dogłębne wyjaśnienie tematu, który nurtuje użytkownika. Jeżeli w szablonie odpowiedzi zawartym w bazie wiedzy występuje znacznik <link>, np. <link> temat szczegółowy</link>, wówczas do wyrażenia, które zawarte jest pomiędzy znacznikiem otwierającym a zamykającym, istnieje definicja rozszerzająca, o której chatbot powiadomi użytkownika „doklejając” na końcu wypowiedzi odpowiednie zdanie informujące. Jeżeli w szablonie odpowiedzi zawartym w bazie wiedzy występuje znacznik <kontkest> typu: <kontekst> nazwa kontekstu </kontekst>, wówczas program zapisuje zwrot zawarty pomiędzy Tagami jako kontekst odpowiedzi, który będzie rozpatrzony w kolejnym zdaniu. Ze względu na ubogą bazę wiedzy chatbot nie zawsze jest w stanie zripostować zdanie wpisane przez użytkownika. Jeżeli chatbot drugi raz z rzędu nie będzie w stanie odpowiedzieć na zdanie użytkownika, wówczas program zaproponuje temat zastępczy, korzystając z rozbudowanej bazy wiedzy. Rolą chatbota edukacyjnego jest omawianie błędów popełnionych w teście kontrolnym. Dlatego rozmowa na tematy ogólne musi w pewnym momencie zostać przerwana. Dzieje 359 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech w się to wtedy, gdy zmienna licznik_zdan osiągnie wartość większą od 5. Zmienna ta zwiększa się w przypadku zwracania odpowiedzi z szablonu ogólnego lub w przypadku braku odpowiedzi na zadane zdanie. Wyszukiwanie odpowiedzi na zdanie podane przez użytkownika polega na sprawdzeniu wszystkich wzorców z bazy wiedzy i wybranie tych które znajdują się w wypowiedzi użytkownika. Baza jest sprawdzana wg indeksu głównego, a wzorce ustawione od najdłuższego do najkrótszego (np. Id=1 wzorzec=”MOŻESZ POWIEDZIEC JAK MASZ NA IMIE” Id=101 wzorzec=”WITAJ”) Wybór szablonu dla określonego wzorca jest dokonywany za pomocą funkcji random, która zwraca wygenerowaną pseudolosowo liczbę z zadanego zakresu. Każdy rekord w bazie ogólnej ma swój priorytet. Im priorytet bliższy 0 tym rekord jest ważniejszy. Wszystkie wzorce pytań mogące się odnosić do wyjaśnienia błędów, które popełnił użytkownik mają wartość 1. Implementacja chatbota edukacyjnego w postaci zagnieżdżonych instrukcji warunkowych (rys. 3) staje się na pewnym poziomie zadaniem zbyt złożonym. Często zmiany pewnych zachowań implikują zmiany w sąsiednich instrukcjach, co powoduje problemy w lokalizacji błędu i ciągłe poprawianie kodu. Z tego powodu wdrożenie nowych technik poprawiających zachowanie chatbota jest coraz trudniejsze do wykonania. Napisanie dobrej aplikacji symulującej ludzkie zachowania, wymaga wykorzystania gotowego szkieletu albo znalezienia języka programowania, w którym programista będzie mógł skupić się na pisaniu procedur zachowań (reguł). Negatywne doświadczenia w pisaniu chatbota opartego o technologie EJB skłoniły nas do użycia języka deklaratywnego. Pierwszym etapem projektu i jego implementacji było podejście korzystające z silnika reguł Drools (firmy JBoss) [20]. da .b w w pl s. 360 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych w da .b w w pl s. Rys. 3. Diagram aktywności głównej części programu 2.2 Projekt i implementacja chatbota opartego o język regułowy W programowaniu deklaratywnym w odróżnieniu od imperatywnego, programista nie musi skupiać się na kolejności implementacji poleceń, tylko na zapisie reguł rządzących obiektami. Kolejnością wywoływania reguł oraz ich wyszukiwaniem zajmuje się 361 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech w zoptymalizowany algorytm RETE [21]. Jego wyjątkowa efektywność decyduje o doskonałej wydajności systemów regułowych. Zastosowanie silników reguł w dzisiejszych czasach jest powszechne lecz nie zawsze widoczne. Głównie stosuje się je tam gdzie: – problem jest zbyt “delikatny” dla tradycyjnego programowania – problem nie jest w pełni zrozumiały – logika w systemie zmienia się często Przykładem wykorzystania takiego systemu są aplikacje przydzielające kredyty w bankach. Ze względu na ciągle zmieniające się warunki pożyczkowe w łatwy sposób można zmienić reguły dotyczące warunków przyznawania kredytu. w Środowisko programistyczne Integralną część aplikacji stanowi silnik reguł Drools (open source) [20] oferowany przez JBoss. Drools jest wykorzystywany w aplikacji z poziomu pluginu do Eclipse, dzięki czemu w prosty sposób można używać Javy i Drools obok siebie. da .b w Rys. 4. Schemat silnika reguł WHEN (warunek) THEN (skutek) pl s. Rysunek 4 pokazuje schemat silnika reguł. Fakty (facts) są to obiekty Javy (posiadające metody get, set), które przechowują dane wejściowe. Umieszczane są w WorkingMemory. Reguły (rules) są to główne elementy podobne budową do instrukcji warunkowej. Składają się z dwóch sekcji: Wszystkie reguły zaimportowane z plików *.drl ,*.dslr przechowywane są w Production memory. WorkingMemory jest to obiekt głównej klasy silnika reguł. Przechowuje on referencje do obiektów, które zawierają dane wejściowe analizowane przez silnik. Silnik wnioskowania (Inference Engine) decyduje o tym, które reguły będą mogły zostać wykorzystane do sprawdzenia faktów opierając się o algorytm RETE lub LEAPS. Asercja (Assertion) jest to „informowanie” WorkingMemory o danym fakcie. Fakt jest wówczas sprawdzany pod względem dopasowania do reguł. Kiedy fakt przeszedł asercje, zwracany jest uchwyt, który reprezentuje go w WorkingMemory. Umożliwia on operację na fakcie. Reguła w JBossRules jest to dwuczęściowa struktura, w której wyróżniamy część Lewostronną (LHS- Left Hand Side) i Prawostronną (RHS). Element LHS, składa się z części warunkowej. Kiedy fakty są umieszczane w pamięci roboczej, następuje próba 362 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych w dopasowania ich do wyrażeń elementów LHS. W przypadku dopasowania faktu do wyrażenia LHS wykonywane są operacje zapisane w RHS (skutek). Reguła może posiadać atrybuty, dające dodatkowe możliwości manipulowania kolejnością uruchamiania reguł. W przypadku implementowanego chatbota częstym zdarzeniem było zapętlanie się reguł tzn. skutek wykonania reguły nie powodował wystarczającej zmiany zmiennych, które dalej spełniały warunek wejścia do reguły. Użycie atrybutu no-loop[boolean] zlikwidowało problem ponownego wejścia w pętlę. W aplikacji wyróżnia się reguły główne, odpowiadające za kontrolę przepływu informacji (silnikowe) poprzez wykorzystanie technik symulujących zachowanie ludzkie, oraz reguły ogólne, które zawierają szablony odpowiedzi do wzorców. Uzupełnianie reguł ogólnych (uzupełnianie bazy wiedzy) zostało ułatwione dzięki zastosowaniu języka DSL [20]. Podczas projektowania chatbota opartego na silniku Drools postanowiono zaimplementować podobne techniki jak w pierwszym chatbocie, gdyż ich możliwości były bardzo obiecujące. w w Zapobieganie powtórzeniom. da .b Reguły umieszczone w pliku powtorzenia.drl, dzięki wsparciu reguły backup z main.drl zmuszają użytkownika do zaprzestania ciągłego powtarzania tych samych sformułowań. Gdy użytkownik wreszcie ustąpi, przywracany jest kontekst rozmowy sprzed dublowania za pomocą techniki powrotu do poprzedniego kontekstu. Poniższy listing przedstawia opisany problem. rule "POWTORZENIA" no-loop when z:Zmienne(sentence==prevSentence,recognised=="0",state!=Zmienne.S_PRI NT_RESULTS) then switch (RandomGen(3)) { pl s. case 1 : z.setResponse("DLUGO BEDZIESZ SIE POWTARZAC ?");break; case 2 : z.setResponse("SPRAWDZASZ MOJA CIERPLIWOSC ?");break; case 3 : z.setResponse("ZACIELA CI SIE KLAWIATURA ?");break; } z.setState(Zmienne.S_PRINT_RESULTS); z.setNextContext("DLUGO BEDZIESZ SIE POWTARZAC ?"); z.setNextState(Zmienne.S_TAK_NIE); TR("POWTORZENIA",z); update(z); end Reguła BACKUP zapamiętująca kontekst rozmowy sprzed powtórzeń: rule "BACKUP" no-loop salience 150 when z: Zmienne(state==Zmienne.S_TAK_NIE||==Zmienne.S_KTORE||==Zmienne.S_NIE_W AZNE,context!="DLUGO BEDZIESZ SIE POWTARZAC ?") then z.setBackupRecognised(z.getRecognised()); 363 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech z.setBackupContext(z.getContext()); z.setBackupState(z.getState()); TR("BACKUP",z); update(z); end Prowadzenie pytaniami. w Jednym z głównych założeń zrealizowanych w projekcie jest spowodowanie aby chatbot kierował tematem rozmowy. To program zadaje głównie pytania i prowadzi użytkownika po ścieżce odpowiedzi i kontekstu. Oczywiście w każdej chwili użytkownik ma prawo spytać o coś innego lub wyrazić swój pogląd, który zostanie adekwatnie skomentowany przez chatbota. w Powrót do tematu rozmowy. da .b w Kiedy chatbot nie posiada wiedzy umożliwiającej udzielenie użytkownikowi odpowiedzi, wówczas uruchomiana jest reguła, która sugeruje użytkownikowi powrót do poprzedniego kontekstu rozmowy. Kontekstem w tym przypadku jest wartość zapisana w serii zmiennych: prevContext, nextContext, context, backupContext. Wartość ta jest wyrażeniem określającym podjęte działanie (przeważnie jest to wyrażenie bardzo podobne do ostatnio uruchomionej reguły z szablonem odpowiedzi). Pokazano to poniżej: rule "BRAK ODPOWIEDZI" salience -20 no-loop TR("BRAK ODPOWIEDZI",z); update(z); end pl s. when z: Zmienne (state!=Zmienne.S_PRINT_RESULTS,recognised=="0") then if (z.getBackupContext().equals("0")) { z.setResponse("HMMM"); z.setState(Zmienne.S_PRINT_RESULTS); } else { z.setResponse("HMM,BEDZIE LEPIEJ JAK WROCIMY DO TEMATU ROZMOWY, "+z.getBackupContext()); z.setState(Zmienne.S_PRINT_RESULTS); z.setNextState(z.getBackupState()); z.setNextContext(z.getBackupContext()); } Skoki miedzy głównymi punktami rozmowy. Użytkownik ma możliwość „przeskakiwania” do każdego głównego punktu rozmowy prosząc o to program. Jeżeli poprzednie etapy rozmowy, które mogą mieć wpływ na edukację użytkownika są niedokończone, student namawiany jest do ich wykonania. Fragment listingu ilustruje problem: rule "SKUPMY SIE NA" no-loop 364 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych salience 100 when w z : Zmienne(state!=Zmienne.S_PRINT_RESULTS) eval( pasuje(z.getSentence(),"WROCMY DO")|| pasuje(z.getSentence(),"PRZEJDZMY")|| pasuje(z.getSentence(),"SKOCZ")|| pasuje(z.getSentence(),"PRZESKOCZ DO")|| pasuje(z.getSentence(),"SKUPMY SIE") ) then w z.setState(Zmienne.S_FOCUS); TR("SKUPMY SIE NA",z); update(z); end w Sposób rozpoznawania zdania. Za „wyłapywanie” kluczowych wyrazów odpowiadają dwie funkcje: function boolean pasuje(String wzorzec, String szablon) da .b Wyszukiwanie polega na znalezieniu fragmentu podanego w argumencie szablonu we wzorcu, który jest zdaniem użytkownika, czyli na odnalezieniu rdzeni wyrazów szukanych. Dzięki temu nie jest potrzebne dublowanie reguł dla każdej końcówki wyrazu. Zdania: „Nie wiem jak dodawać binarnie” i „Nie wiem co to jest dodawanie binarne”, po wprowadzeniu do funkcji rdzeni „dodaw” i „binarn”, zostaną rozpatrzone pozytywnie. Prostota powyższych funkcji wpływa na ograniczenie rozpoznawania zdań wielokrotnie złożonych, które przekazują w sobie zbyt wiele informacji. Zachowanie hierarchii reguł. Sposób wyboru odpowiedzi. Wykorzystywane funkcje pl s. Za uruchamianie poszczególnych reguł odpowiadają zmienne, które są modyfikowane w każdej regule. Dzięki modyfikacjom następuje spełnienie warunków wejścia w innych regułach. Oprócz takiej kontroli ‘odpalania reguł’, każda reguła ma przypisany priorytet (salience, domyślnie 0). Im większa wartość tym reguła jest ważniejsza i umieszczana wyżej w kolejce (odwrotnie niż w chatbocie z rozdziału pierwszego). function int RandomGen(int ile) function String poWyr(String zd, String wyr) Ażeby chatbot nie był monotonny w każdej regule która ustawia wypowiedź powinna znaleźć się prosta instrukcja switch, której argumentem jest wartość zwracana przez funkcje RandomGen (zwraca wygenerowaną pseudolosowo liczbę z przedziału 1-ile) i kilka wariantów odpowiedzi. Dodatkowo można użyć funkcji poWyr, która zwraca łańcuch znaków znalezionych w zdaniu użytkownika, występujących po zadanym łańcuchu. Funkcja ta ma zastosowanie przy cytowaniu części zdania użytkownika. 365 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech Analiza Reguł: włączanie śledzenia zmiennych. w Podczas pisania reguł często występują błędy takie jak zapętlenia lub nieoczekiwane wyjścia z silnika Drools. Aby łatwo lokalizować błędy, każda reguła ma dopisaną instrukcję uruchomienia funkcji wyświetlającej na ekran informacje o ustawieniu zmiennych sterujących (użycie debugowania w środowisku Eclipse nie jest dopracowane i nie działa poprawnie). Wykorzystywane funkcje function void TR(String r, Zmienne z) function void TR2(String r,GlPktRozm g) function void TR3(String r,Bledy b) da .b w w W aplikacji wykorzystano DSL, który jest rozszerzeniem języka reguł do dziedziny problemu rozwiązywanego przez Drools. DSL może służyć jako warstwa oddzielająca reguły od obiektów na których one działają. Dzięki temu programista nie musi znać detali implementacji. Wystarczy że pozna zasady używania składni DSL, którą można zapisać w postaci zdań języka potocznego. Projekt Chatbota zawiera cztery pliki reguł wykorzystujące DSL (każdy z nich odwołuje się do reguł reprezentujących bazę wiedzy i pozwala w łatwy sposób poszerzać ją). Kolejność wyboru z listy jest rosnąca i musi być bezwzględnie przestrzegana. Występują wyrażenia dwuczęściowe, które działają na zasadzie begin ... end , gdzie początkiem jest np. <1.0.0> a końcem </1.0.0> (zamknięcia należy używać w nowej linii). Poniższy rysunek ilustruje sposób wpisywania wyrażeń. pl s. Rys. 5. Kolejność wyboru warunków Wyrażenia główne mają po kropkach liczbę zero np. <1.0.0> i muszą zostać wykorzystane żeby reguła dobrze działała, natomiast zagnieżdżone sformułowania posiadają liczby po kropkach. Miejsce wstawienia odpowiedniego sformułowania zagnieżdżonego, jest oznaczone jej numerem oraz nawiasami klamrowymi„{ }”, które należy zastąpić tym wyrażeniem. Należy skasować nawiasy oraz ich zawartość i w to miejsce wpisać tekst String (w 366 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych przypadku małych liter wewnątrz {}) lub wstawić sformułowanie zagnieżdżone (duże litery wewnątrz {}) Pole „{}” można pominąć poprzez skasowanie tylko wtedy gdy ma postać: „{OPCJA}” Efekt końcowy można zobaczyć po zmapowaniu reguły poprzez naciśnięcie zakładki „DRLView” w oknie edycyjnym. Przykład reguły „KIM JESTES” po konwersji na język Drools: w da .b w w rule "KIM JESTES" salience 2 when z : Zmienne (state!=Zmienne.S_PRINT_RESULTS) eval(pasuje(z.getSentence(),"KIM JESTES")) then switch (RandomGen(2)) { case 1 : z.setResponse( "JESTEM CHATBOT EDUKACYJNY" ); break; case 2 : z.setResponse( "JESTEM CHATBOT, CHCESZ SIE DOWIEDZIEC WIECEJ O MNIE ?" ); z.setNextContext("CHCESZ SIE DOWIEDZIEC WIECEJ O MNIE ?"); z.setNextState(Zmienne.S_TAK_NIE); break; } z.setState(Zmienne.S_PRINT_RESULTS);update(z); TR("KIM JESTES",z); end Plik w którym ustalane są reguły mapowania ma rozszerzenie *.dsl i znajduje się w tym samym katalogu co pliki reguł (rys. 6). 3 Podsumowanie i wnioski: pl s. Rys. 6. Plik mapowania reguł Celem prowadzonych prac była próba stworzenia chatbota edukacyjnego, który przypominałby nauczyciela, naśladując ludzkie zachowania. Pierwsza wersja chatbota zapowiadała się bardzo obiecująco do czasu gdy złożoność instrukcji warunkowych stała się zbyt skomplikowana. Prawdopodobnie istnieje możliwość zaimplementowania instrukcji warunkowych w bardziej optymalny sposób, stosując modułową budowę, ale wymaga to większego nakładu pracy niż zastosowanie programowania deklaratywnego. Druga wersja chatbota oparta na silniku reguł jest w znacznym stopniu łatwiejsza do implementacji i dalszego rozwoju. Zastosowanie zmiennych środowiskowych pozwala obsługiwać reguły w wystarczającym stopniu. 367 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 B. Gocłowska, M. Kufel, Z. Łojewski, R. Świech w Najważniejszym problemem, z którego należy sobie zdawać sprawę rozbudowując aplikację, jest zachowanie kolejności wykonywania reguł i zapobieganie ich zapętlaniu. Pogrupowanie reguł przy wykorzystaniu atrybutów takich jak agenda-group mogą ułatwić modyfikacje aplikacji oraz uporządkować ją, tworząc swojego rodzaju moduły (grupy). Użycie języka DSL podczas prac programistycznych znacznie upraszcza rozbudowywanie bazy wiedzy i może być obsługiwane przez osobę nie posiadającą dostatecznej wiedzy programistycznej. Także rozwój programu jest stosunkowo prosty. Jednakże wersja pierwsza chatbota, z punktu widzenia przeciętnego użytkownika, jest dużo wygodniejsza ze względu na dostępny internetowo interfejs. Tego elementu zabrakło w drugiej implementacji. Między innymi w tym kierunku pójdą dalsze próby rozwoju aplikacji. w Literatura 1. 3. da .b w 2. Kerly A., Hall P., Bull S.: Bringing chatbots into education: Towards natural language negotiation of open learner models, Knowledge Based Sestems, 20 (2007), 177- 185 Schulmeister R.: Grundlagen hyphermedialer Lernsysteme. Teorie – Didaktik – Design. AdisonWesley: Bonn 1995 Cheung B., L. Hui b, J. Zhang, S.M. Yiu: SmartTutor: An intelligent tutoring system in webbased adult education, The Journal of Systems and Software, Vol. 68, No.1, 11–25, October 2003 Simic G., Devedzic V.: Building an intelligent system using modern Internet technologies, Expert Systems with Applications 1–16, 2003 5. Viennot L.: Analising student's reasoning, w Tendencies in Intrepretation, "American Journal of Physics", 33, 5, 1985, s. 432 – 436 Gocłowska B. Puchacz M.: Model of Rule Engines Applied in the Intelligent Systems, Annales UMCS, Informatica AI, 6 (2007) Gocłowska B., Łojewski Z.: Inteligent Tutorial System LISE, Annales Informatica Vol. IV, Lublin, 2007 Devedzic V.: Key Issues In Next-Generation Web-Based Education, IEEE Transactions on Systems, Man, and Cybernetics-Part C: Applications and Reviews, Vol. 33, No. 3, August 2003 Skinner B. F.: Teaching machines, Science 1958, 128, 969-977 Gocłowska B.: How to find new tools in science teaching?, XI IOSTE SYMPOSIUM Science and Technology Education for a Diverse World – dilemmas, needs and partnerships, 123-124, Lublin, Poland, 25 – 30 July 2004 Rutkowski L.: Metody i techniki sztucznej inteligencji, Wydawnictwo Naukowe PWN, Warszawa, s. 435, 2006 Cho B.: Dynamic planning models to support curriculum planning and Multiple Tutoring Protocols In Intelligent Tutoring System, Illinois Institute of Technology, Chicago, Illinois, July 2000 – dysertacja, s.112 Zhou Y., Evens M.W.: A Practical Student Model in an Intelligent Tutoring System, Proceedings of the 11th IEEE International Conference on Tools with Artificial Intelligenc. Chicago, IL, 1999, pp. 13-18 6. 7. 8. 9. 10. 11. 12. 13. pl s. 4. 14. Graesser C., Lu S., Jackson G.T., Mitchell H., Ventura M., Olney A., Louwerse M.M.: AutoTutor: A Tutor with Dialogue in Natural Language, Behavioral Research Methods, Instruments, and Computers, Vol. 36, 180-193, 2004 15. Rickel J., Lesh N., Rich C., Sidner C. L., Gertner A.: Collaborative Discourse Theory as a Foundation for Tutorial Dialogue, In Proc. Sixth International Conference on Intelligent Tutoring Systems, Springer-Verlag, June 2002 16. Weizenbaum J.: ELIZA – a computer program for study of natural language communications between man and machine, Communications of the ACM 9 (1) (1966) 36 – 45 368 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 Programowanie chatbotów edukacyjnych 17. http://www.geocities.com/rorysr2002/, Rory Scott Russell: Language use, Personality and True Conversational Interfaces 18. http://www.alicebot.org/articles/wallace/grand.html, Dr. Richard S. Wallach: Notes on the Loebner Grand Prize Rules 19. http://cogsci.ucsd.edu/~asaygin/tt/ttest.html 20. http:// labs.jboss.com/jbossrules/docs 21. Forgy C. L.: A Fast Algorithm for Many Pattern/Many Object Pattern Math Problem, Artificial Intelligence 19 (1982), pp. 17-37 w da .b w w pl s. 369 (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008 Rozdział monografii: 'Bazy Danych: Rozwój metod i technologii', Kozielski S., Małysiak B., Kasprowski P., Mrozek D. (red.), WKŁ 2008 w da .b w w pl s. (c) Copyright by Politechnika Śląska, Instytut Informatyki, Gliwice 2008