Autor: Szymon Fogiel

Data: 2008-06-20


Bot konwersacyjny korzystający z RSS

Projekt z przedmiotu sztuczna inteligencja


1. Treść zadania

Zadanie polegało na zaimplementowaniu bota konwersacyjnego, który byłby w stanie rozmawiać z użytkownikiem na tematy związane z najnowszymi wiadomościami. Wiadomości te miałby być pobierane z kanału RSS. Jako kanał z którego korzysta program wybrałem http://rss.gazeta.pl/pub/rss/gazetawyborcza.xml z Gazety Wyborczej.



2. Metoda rozwiązania

Program posiada bazę wiedzy, stworzoną w języku AIML. Mała część tej bazy jest stała, a pozostała jest dynamicznie generowana przy uruchomieniu programu.

Baza wiedzy w języku AIML jest reprezentowana w postaci kategorii, takiej postaci:

<category>

<this>KONTEKST</this>

<pattern>WZORZEC NA KTÓRY REAGUJE PROGRAM</pattern>

<template>odpowiedź programu</template>

</category>

Część <this>...</this> jest opcjonalna. Jeśli jest ona w kategorii to program zareaguje na nią tylko wtedy jeśli KONTEKST był ostatnią wypowiedzią programu.

Stałą część bazy stanowią kategorie odpowiedzialne za typowe wypowiedzi w rozmowie, na przykład:

<category>

<pattern>CZEŚĆ</pattern>

<template>

<random>

<li>Hej</li>

<li>Cześć</li>

</random>

</template>

</category>

Co oznacza, że na wypowiedź „Cześć” użytkownika program zareaguje losową odpowiedzią „Cześć” lub „Hej”.

Dynamiczna część bazy wiedzy jest generowana przez program podczas uruchomienia. Program na początku pobiera informacje z kanału RSS i przeglądając je zdanie po zdaniu generuje kategoria AIML i zapisuje je w plikach.

Generowane kategorie są podzielone na kilka typów:

Jeśli w jednym z tekstów z RSS występuje zdanie To syn Margaret Thatcher i libański biznesmen zlecili mi zamach stanu w Gwinei Równikowej - zeznał przed sądem w Malabo Simon Mann, najgłośniejszy w ostatnich latach biały najemnik” to program na zapytanie:

Co zeznał Simon Mann?”

odpowie:

To syn Margaret Thatcher i libański biznesmen zlecili mi zamach stanu w Gwinei Równikowej - zeznał przed sądem w Malabo Simon Mann, najgłośniejszy w ostatnich latach biały najemnik”

Lech Wałęsa pozwie prezesa TVP Andrzeja Urbańskiego, prezesa IPN Janusza Kurtykę oraz autorów dokumentu „TW Bolek”. Żąda 20 mln zł odszkodowania.

To program po wpisaniu:

Wiesz, że Wałęsa pozwie Urbańskiego?”

odpowie:

Tak wiem. Żąda 20 mln zł odszkodowania.”

Słyszałeś?: + tytuł jakiejś wiadomości RSS”

Jako interpretera użyłem „Program #”. Interfejs do rozmowy z botem został zaczerpnięty z tego dołączonego do interpretera. Przerobiłem go w ten sposób aby łączył się z internetem, ściągał informacje z RSS, generował pliki AIML a także wyświetlał informacje RSS użytkownikowi. Również lekko przerobiłem sam interpreter, tak aby nie dzielił zdań, w których pojawiła się kropka w innym znaczeniu niż koniec zdania. Wszystko zostało napisane w języku C#.



3. Przykłady sesji

Przykład „dobrej” sesji:

Użytkownik: Cześć

Bot: Cześć.

Użytkownik: Jak się nazywasz?

Bot: Nazywam się Andrzej A Ty jak się nazywasz?

Użytkownik: Szymek

Bot: Miło mi cię poznać, Szymek.

Użytkownik: Co słychać?

Bot: Sukces polskiej dyplomacji: Unia przyjęła projekt Wschodniego Partnerstwa.

Użytkownik: I co dalej?

Bot: Przywódcy państw UE zaaprobowali na szczycie europejskim w Brukseli polską ideę wzmocnienia wschodniego wymiaru Europejskiej Polityki Sąsiedztwa, pod nazwą Wschodniego Partnerstwa.

Użytkownik: Wiesz, że Wałęsa pozwał Andrzeja Urbańskiego?

Bot: Tak wiem. Żąda 20 mln zł odszkodowania.

Użytkownik: Na razie

Bot: Do zobaczenia.


Przykład „złej” sesji:

Użytkownik: Co tam?


Bot: Kto położy rękę na kasie SLD.

Wylosowanym tytułem wiadomości RSS było pytanie. Program napisał je jako zdanie oznajmiające.

Użytkownik: Kto?

Użytkownik chciał się dowiedzieć o kogo chodzi

Bot: Słyszałeś?: Europo, uczcij ofiary Stalina i Hitlera.

Bot nie był w stanie rozpoznać kontekstu i spróbował jedynie zmienić temat.

4. Wyniki.

Ze względu na specyfikę zadania trudno przedstawić wyniki w obiektywnej formie. Można jedynie przedstawić działania programu podane powyżej. Można dodać, że nikt nie uwierzył, że rozmawia z człowiekiem.


5. Wnioski

Zadanie napisania programu, który prowadziłby w sposób naturalny rozmowę z użytkownikiem jest zadaniem bardzo trudnym. Jest tak ze względu na małe możliwości rozpoznawania kontekstu oraz rozkładu zdania.

Ponieważ nie wiadomo wcześniej co będzie w wiadomościach RSS trudno jest znaleźć uniwersalny sposób tworzenia na ich podstawie wzorów zachowań dla bota.

Jednak metoda słów kluczowych zastosowana przez mnie daje pewne efekty. Nie jest to idealny sposób symulowania rozmowy i pojawiają się czasem nie do końca dobre reakcje programu, jednak jest to sposób dość uniwersalny. Od tego programu można dowiedzieć się na temat bieżących wydarzeń.



6. Źródła

AIML:

Program #



Valid HTML 4.0 Transitional