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