Mini Answering Machine

Sztuczna inteligencja
Aleksandra Czernecka
23 czerwca 2008

Opis zadania

Mój projekt był próbą zaimplementowania mini maszynki odpowiadającej na pytania. Wiedza tej maszynki pochodzi z Wikipedii. Ponieważ zadanie odpowiadania na pytania jest dość trudnym zagadnieniem, zostało ono uproszczone do odpowiadania na pytania o osoby, np. Kto wynalazł żarówkę?

Opis rozwiązania

Swój projekt opierałam głównie na książce "Speech and Language Processing [...]" (patrz pozycja pierwsza w literaturze) i wykorzystałam metodę opisaną w rozdziale "23. Question answering and summarization". Rozwiązanie ma trzy etapy, które są opisane poniżej:

Przetwarzanie pytania (ang. question processing)

Ten etap składa się z dwóch części:

  1. Przeformułowanie pytania w dobre zapytanie do wyszukiwarki
  2. Rozpoznanie typu odpowiedzi

Wyszukiwanie urywków dokumentów (ang. passage retrieval)

Tak jak zostało to również zasugerowane w książce, postanowiłam zaufać w tej kwestii Wikipedii i do dalszej oceny przekazywałam skrawki (ang. snippets), które zwraca wyszukiwarka.

Przetwarzanie odpowiedzi (ang. answer processing)

Ponieważ zauważyłam, że często odpowiedzią na pytanie o osobę może być tytuł artykułu postanowiłam wykorzystać ten fakt w podawaniu odpowiedzi. Odpowiedź jest przedstawiana jako odwrotnie posortowana lista odpowiedzi wraz z oceną jak dobra jest dana odpowiedź (najlepsze są pierwsze). Ocena odbywała się na podstawie następujących kryteriów:

Implementacja

Program został napisany w Pythonie 2.5 z wykorzystaniem biblioteki BeautifulSoup (patrz literatura, pozycja 4).

Przykłady działania

Poniżej przedstawiam pytania wraz ze skróconą listą odpowiedzi oraz punktami przyznanymi przez program.

Poprawne odpowiedzi

  1. Kto jest patronem kierowców?
  2. Kto grał Luke'a Skywalker'a? tylko jedna odpowiedź
  3. Kto wyreżyserował film Solaris z 1972 roku? tylko jedna odpowiedź
  4. Kto występuje w M jak Miłość i prowadzi program Jak Oni Śpiewają?
  5. Kto był prezydentem USA ale nie urodził się w Układzie Słonecznym?
  6. Kto jest prezydentem Bangladeszu i synem Krzysztofa Ibisza?
  7. Kto jest założycielem Wikipedii?
  8. Kto wynalazł żarówkę?
  9. Kto był następcą Lecha Wałęsy? M.Krzaklewski był następcą na stanowisku przewodniczącego "Solidarności", a A.Kwaśniewski na fotelu prezydenta RP.

Odpowiedzi zadowalające

  1. Kto jest premierem Mołdawii? Vasile Tarlev był premierem Mołdawii do 19.03.2008, teraz jest nim Zinaida Greceanii.
  2. Kto napisał powieść Solaris? Prawidłowa odpowiedź na trzeciej pozycji.
  3. Kto jest prezydentem Polski? Odpowiedź można łatwo wywnioskować.
  4. Kto był człowiekiem roku 1981 według magazynu Time? J.Lovell był człowiekiem roku 1968, druga odpowiedź jest prawidłowa.

Porażki

  1. Kto wyreżyserował film Solaris z 2002 roku? Prawidłowa odpowiedź: Steven Soderbergh
  2. Kto jest twórcą TeX-a? Prawidłowa odpowiedź: Donald Knuth pojawiła się za daleko.

Wnioski

Opisane podejście do problemu daje poprawną odpowiedź na pierwszym miejscu w ok. 50% przypadków, a jeśli odpowiedź nie jest prawidłowa to w 95% przypadków może być znaleziona w artykule o tytule pierwszej odpowiedzi lub wywnioskowana z tej odpowiedzi (np. Wizyty zagraniczne prezydenta Lecha Kaczyńskiego). Zaimplementowanie algorytmu rozpoznawania bytów (ang. named entity recognition) opisanego w książce "Speech and Language Processing [...]" w rozdziale 22 pozwoliłoby wyeliminować odpowiedzi niebędące osobami. W przykładzie nr 2 z porażek Donald Knuth byłby wówczas na pozycji drugiej.

Literatura i inne materiały

  1. Daniel Jurafsky, James H. Martin, "Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition", rozdziały: 22, 23
    http://www.cs.colorado.edu/~martin/slp.html
  2. Wikipedia
    http://pl.wikipedia.org
  3. Odmiany słów
    http://www.sjp.pl/slownik/odmiany/
  4. BeautifulSoup, parser HTML napisany w Pythonie
    http://www.crummy.com/software/BeautifulSoup/
Valid XHTML 1.0 Transitional
Poprawny CSS!