LAB: Reprezentacja wiedzy

Celem ćwiczenia jest zapoznanie się z różnymi metodami reprezentacji wiedzy, w szczególności reprezentacją strukturalną (Frames) i sieciami semantycznymi. Druga połowa laboratorium stanowi wstęp do projektu Wiki o Sztucznej Inteligencji.

1 Język naturalny [10 minut]

Zanim przejdziemy do zapoznawania się z Frames i sieciami semantycznymi, przyjrzymy się krótko najpowszechniejszemu ze źródeł wiedzy, czyli Wikipedii…

Zestawienie na bazie Wikipedii

Wikipedia zawiera bardzo wiele informacji, dzięki czemu może posłużyć jako źródło do stworzenia różnych zestawień.
(pomijamy tutaj kwestię jakości danych! Gdy będziesz przygotowywać coś poważnego, np. artykuł czy pracę inżynierską, skorzystaj z pewniejszych źródeł ;-) )

ZADANIE: Twoim zadaniem na początek aktualnego laboratorium będzie przygotowanie takiego zestawienia na temat 15 największych pod względem liczby ludności krajów Europy na podstawie polskiej edycji Wikipedii. Na potrzeby tego ćwiczenia NIE korzystaj z innych stron internetowych + NIE korzystaj z zestawień już dostępnych w Wikipedii (o ile takie są).

Język naturalny jako metoda reprezentacji wiedzy?

Co trzeba było zrobić, żeby przygotować kompletne zestawienie?

Jak to zostało wyżej powiedziane, Wikipedia jest źródłem wiedzy, w związku z tym sposób w jaki przekazuje ona wiedzę (tekst) możemy potraktować jako jeden ze sposobów reprezentacji wiedzy. Po walce z przygotowaniem zestawienia zastanów się jakie są możliwości i ograniczenia takiego sposobu reprezentacji wiedzy. Punktem wyjścia mogą być pytania:

  1. Czy ta reprezentacja jest zrozumiała dla użytkowników?
  2. Jak długo trzeba się przygotowywać, żeby zacząć z niej korzystać?
  3. Jak dokładnie określona jest forma wiedzy w tej reprezentacji (formalizacja tej wiedzy)?
  4. Jak dużo informacji można zawrzeć przy pomocy tej reprezentacji? Co można, a czego nie można?
  5. Jakie są możliwości (automatycznego) przetwarzania wiedzy w tej reprezentacji?

Jakie znasz inne metody reprezentacji wiedzy? Spróbuj je porównać z językiem naturalnym: w czym język naturalny jest lepszy, a w czym słabszy? Możesz posłużyć się powyższymi pytaniami.

Baza Wiedzy = TBox + ABox [10 minut]

Niezależnie od tego z jakiej reprezentacji wiedzy korzystamy, naszą bazę wiedzy możemy podzielić na dwie główne składowe: TBox i ABox (pochodzące z Logik Opisowych, Description Logics).

  • TBox (terminological component) = terminologia, czyli opis zbioru pojęć i właściwości tych pojęć,
  • ABox (assertion component) = stwierdzenia, czyli fakty opisujące rzeczywistość bazując na terminologii z TBoxa.

Przykładowo opisując miejsce gdzie się aktualnie znajdujemy moglibyśmy mieć następującą uproszczoną bazę wiedzy (tutaj zapisaną za pomocą języka naturalnego):

  • TBox (opisuje ogólnie terminologię opisu budynków uczelnianych):
    • Budynek uczelniany składa się z Pięter.
    • Piętro składa się z Pomieszczeń.
    • Pomieszczenie to element ze zbioru: {Korytarz, Sala zajęciowa, Gabinet pracowniczy}.
    • W Pomieszczeniu znajdują się Elementy wyposażenia.
    • Elementy wyposażenia to elementy ze zbioru: {Krzesło, Biurko, Komputer, Tablica, Rzutnik}.
  • ABox (opisuje naszą konkretną salę w tym konkretnym budynku):
    • C2 jest Budynkiem.
    • C2 składa się z 5 Pięter.
    • 3. Piętro składa się z (tego konkretnego) Korytarza, Sali zajęciowej 316, Sali zajęciowej 315, …, Gabinetu pracowniczego 318, Gabinetu pracowniczego 319, …
    • W Sali zajęciowej 316 znajdują się Krzesło #12345, Krzesło #12346, Krzesło #12347, …

ZADANIE: stwórz Bazę Wiedzy (TBoxa i ABoxa) reprezentującą zestawienie przygotowane w poprzedniej sekcji (lub jego fragment jeżeli będzie mało czasu).

2 Sieci semantyczne [10 minut]

Otwarty czy zamknięty świat?

W poprzedniej sekcji podano przykład prostej bazy wiedzy opisującej ssaki, króliki i małpy. Możemy teraz odpytać bazę wiedzy, np. zadając następujące pytania:

  • co jest ssakiem i ma długie uszy?
  • co jest ssakiem i ma trzy nogi?

O ile odpowiedź na pierwsze pytanie nie powinna być problematyczna (odpowiedź: królik), o tyle odpowiedź na drugie pytanie zależy od przyjętej relacji ze światem. Jednoznacznie można stwierdzić, że odpowiedź na to pytanie nie leży w bazie wiedzy, ale czy leży poza nią? Mamy tutaj dwie możliwości:

  • założenie zamkniętego świata (closed world assumption): świat opisany bazą wiedzy jest kompletny; jeżeli czegoś nie ma w bazie to to nie istnieje. Takie założenie jest przyjęte w wielu miejscach, np. w języku Prolog.
  • założenie otwartego świata (open world assumption): baza wiedzy opisuje fragment świata; dopóki nie jest określone wprost, że dany zestaw instancji wyczerpuje daną klasę (np. określimy wprost, że małpa i królik to jedyne podkategorie ssaków), zakładamy, że może istnieć coś poza faktami określonymi w bazie wiedzy i nie jesteśmy w stanie odpowiedzieć na pytanie wykraczające poza posiadaną bazę wiedzy (obok odpowiedzi: „tak” i „nie” mamy tutaj odpowiedź „nie wiem”). Takie założenie jest rzadziej spotykane (utrudnia wnioskowanie). Można się z nim spotkać m.in. w sieciach semantycznych. Zostanie to uzasadnione dalej.

Reprezentacja trójkowa

W sieciach semantycznych mamy do czynienia z tzw. reprezentacją trójkową, ponieważ każde stwierdzenie dotyczące świata zapisywane jest w postaci trójki:
Podmiot (Subject) – Relacja (Predicate) – Obiekt (Object), gdzie:

  • Podmiot jest jakimś elementem świata (na diagramach oznaczany owalem),
  • Relacja opisuje zależność pomiędzy Podmiotem i Obiektem (na diagramach oznaczany strzałką),
  • Obiekt jest albo innym elementem świata (na diagramach oznaczany owalem) albo jakąś stałą (na diagramach oznaczana prostokątem).

Na przykład opis ssaków z poprzedniej sekcji możemy zapisać następująco:
MAŁPA – jest-rodzaju – SSAK
MAŁPA – nogi – 2

Co w postaci graficznej wygląda następująco:

ZADANIE: Przygotuj ok. 5 trójek dla opracowywanego przez siebie zestawienia z poprzednich sekcji (graf albo tekst – decyzja należy do Ciebie). Zauważ, że mogą przydać Ci się tutaj stworzone wcześniej TBox i ABox. W jaki sposób?

Dlaczego zestawienia w Wikipedii kuleją? (dla zainteresowanych)

Na początku laboratorium pojawiła się Wikipedia i znajduje się dla niej również miejsce pod koniec laboratorium:
Rozpoczęliśmy od problemu stworzenia zestawienia na podstawie Wikipedii. Celowo było zaznaczone, aby nie korzystać z już istniejących zestawień dostępnych w tej encyklopedii. Dlaczego?

Spójrzmy teraz w trzy różne miejsca w polskiej edycji Wikipedii i spróbujmy określić ile osób mieszka w Polsce:

Na każdej z tych stron jest inna liczba! (stan na 25.04.2015)

Dlaczego? Ponieważ każde zestawienie jest tworzone ręcznie… Wikipedia mimo tego, że przyjęła różne szablony stron (np. wszystkie państwa mają podobną metryczkę) jest ciągle tylko reprezentacją w języku naturalnym i nie pozwala na automatyczne przetwarzanie wiedzy.

Wyobraźmy sobie teraz sytuację, w której Nowa Huta ogłasza niepodległość od Polski i staje się osobnym państwem. Co trzeba zmienić w wikipedii? Na pewno strony z opisem Krakowa i Polski (zmniejszy się liczba ludności), na pewno trzeba dodać stronę z opisem nowego „Państwa nowohuckiego”. Poza tym trzeba będzie poprawić zestawienie miast Polski (liczba ludności Krakowa), zestawienie największych miast na stronie Polski (liczba ludności Krakowa), stronę z zestawieniem państw europejskich (doszło nowe państwo), stronę z podziałem politycznym na stronie Europy (nowe państwo), i pewnie jeszcze wiele innych…

Rozwiązaniem jest wykorzystanie zapisu trójkowego do opisu informacji zawartych w Wikipedii. Przykładowo opisując Polskę można przekształcić metryczkę do zapisu trójkowego:

Takie coś dokonuje się właśnie teraz! Jest to projekt DBpedia, w ramach którego informacje z Wikipedii tłumaczone są do postaci trójkowej, aby była możliwość ich automatycznego przetwarzania. Więcej informacji pojawi się w Wiki o Sztucznej Inteligencji!

3 Wprowadzenie do "Wiki o Sztucznej Inteligencji" [40 minut]

  1. Nasz projekt „Wiki o Sztucznej Inteligencji” będzie rozwijany w semantycznej wiki. Semantyczna Wiki to wiki z możliwością modelowania wiedzy w postaci grafów trójkowych. W ramach wprowadzenia dowiemy się jak korzystać z Semantycznej Wiki.
  2. UWAGA: Tydzień A i Tydzień B pracują na dwóch różnych systemach wiki! Poniżej są instrukcje dla obydwu systemów - wystarczy, gdy zapoznasz się z opisem dla swojego tygodnia!

3.1 Tydzień B -- Semantic MediaWiki

  1. Zaloguj się do Wiki o Sztucznej Inteligencji - Tydzień B korzystając z loginu i hasła dostarczonego przez prowadzącego zajęcia.
  2. Utwórz stronę 
    http://loki.ia.agh.edu.pl/ckexp/wsi-b/index.php/Użytkownik:<your-login>

    np.

    http://loki.ia.agh.edu.pl/ckexp/wsi-b/index.php/Użytkownik:kkutt

    i krótko opisz siebie, np.

    Mam na imię Student A. Mam 12 lat.
    Aktualnie studiuję na AGH, na wydziale <tutaj nazwa wydziału>.
    Interesuję się matematyką i filozofią.
    
    W tym momencie siedzę obok Studenta X i Studentki Z.
  3. Bazując na wpisie o adnotacjach dodaj kategorię Użytkownik do swojej strony.
  4. Bazując na tym samym wpisie o adnotacjach, dodaj kilka relacji do swojej strony (np. relację semantyczną pomiędzy tobą i osobami siedzącymi obok + relację semantyczną opisującą twój wiek).
  5. Poczytaj o zapytaniach ASK wewnątrz wiki. Na swojej stronie spróbuj stworzyć takie zapytanie wyciągające kilka informacji o twoich kolegach i koleżankach.
  6. W czasie rozwoju wiki mogą wystąpić konflikty wiedzy. Możesz nie zgadzać się z wiedzą zawartą na danej stronie. Masz wtedy dwie możliwości:
    1. Jeżeli masz pewność, że wiesz, że twoja wiedza jest lepsza – popraw daną stronę :)
    2. Jeżeli chcesz podyskutować o tym z innymi tworzącymi daną stronę, skorzystaj z opcji dyskusji.

3.2 Tydzień A -- Loki

  1. Z systemem można zapoznać się na stronie Loki about (sekcja „Rule-based Reasoning” może zostać ominięta). Manuale do wiki znajdują się tutaj: Loki Tutorial i Loki User manual.

3.2.1 Edycja strony

  1. Zaloguj się do Wiki o Sztucznej Inteligencji - Tydzień A korzystając z loginu i hasła dostarczonego przez prowadzącego zajęcia.
  2. Utwórz stronę 
    http://loki.ia.agh.edu.pl/ckexp/wsi-a/users:<your-login>

    np.

    http://loki.ia.agh.edu.pl/ckexp/wsi-a/users:kkutt
    1. Wpisz adres w pasek nawigacyjny przeglądarki
    2. Jeżeli strona nie istnieje (nie powinna ;-) ), kliknij edit this page i krótko opisz siebie, np.
      Mam na imię Student A. Mam 12 lat.
      Aktualnie studiuję na AGH, na wydziale <tutaj nazwa wydziału>.
      Interesuję się matematyką i filozofią.
      
      W tym momencie siedzę obok Studenta X i Studentki Z.
  3. Zapisz stronę:
    • Na dole strony znajduje się formularz podobny do tego na obrazku:
    • Pole URIs/URLs for used resources (put one URI in one line) (zaznaczone na czerwono) – tutaj umieść wszystkie adresy URL, które zostały przez ciebie wykorzystane w czasie tworzenia aktualnej wersji strony; np. teraz mogła być wykorzystana strona
      http://www.agh.edu.pl/wydzialy-i-podstawowe-jednostki-organizacyjne/

      w poszukiwaniu pełnej nazwy wydziału,

    • jeżeli edycja bazuje na innych stronach wewnątrz wiki (np. użyto stronę
      http://loki.ia.agh.edu.pl/ckexp/wsi-a/users:kkutt

      do ustalenia kto siedzi obok) możesz umieścić ich adresy po prostu wybierając je z listy (i dwukrotnie klikając) oznaczonej zieloną ramką; strona pojawi się w lewym okienku z prefixem lokipage: (prefix ten jest skrótem na adres http://loki.ia.agh.edu.pl/ckexp/wsi-a/),

      • jeżeli jest dużo stron wewnątrz wiki, wyszukiwanie odpowiedniej może zostać ułatwione przez użycie filtrowania (niebieska ramka).
    • Jest również pole 'Edit summary' (czarna ramka) na komentarz odnośnie aktualnie wprowadzanych zmian.

3.2.2 Kategorie

  1. Stwórzmy pierwsze trójki w wiki!
  2. W Loki podmiot (pierwszy element trójki) to zawsze strona, którą aktualnie edytujesz, np. jeżeli edytujesz stronę http://loki.ia.agh.edu.pl/ckexp/wsi-a/users:kkutt to ten adres reprezentuje podmiot w trójce.
  3. Po pierwsze możemy zapisać, że jesteśmy użytkownikami
    1. W notacji trójkowej może to wyglądać tak:
      http://loki.ia.agh.edu.pl/ckexp/wsi-a/users:kkutt   rdf:type   <User>.
    2. Równoważnym zapisem w Loki jest określenie kategorii User.
    3. Bazując na User manual, dodaj kategorię User do swojej strony.

3.2.3 Relacje

  1. Bazując na User manual, dodaj do swojej strony adnotacje tak, aby zawierała następujące semantyczne informacje o tobie:
    • Imię i nazwisko (Data Property: relacja do literału)
    • Wiek (Data Property: relacja do literału)
    • Osoby, które siedzą obok ciebie (Object Property: relacja do innego obiektu)
    • Twój ulubiony przedmiot na studiach do tej pory (Data/Object Property: jak wolisz. Jaka jest różnica?)

3.2.4 Zapytania ASK

  1. Przeczytaj manual o zapytaniach ASK.
  2. Używając zapytań ASK dodaj do swojej strony listę użytkowników którzy lubią ten sam przedmiot co ty.
    1. Wyświetl wynik jako unordered list
  3. Zbuduj inne zapytanie wyszukujące te same osoby, ale:
    1. Wyświetl jako tabelę
    2. Posortuj po wieku
    3. Zdefiniuj domyślną wartość, która wyświetla się, gdy żadna wartość nie została zwrócona

3.2.5 Zapytania SPARQL

  1. Na swojej stronie stwórz zapytanie SPARQL SELECT, które będzie pytać o coś związanego z użytkownikami opisanymi w wiki (decyzja o co pytać należy do ciebie).
  2. Jest również możliwość wysłania tych zapytań poprzez tzw. SPARQL Endpoint: http://loki.ia.agh.edu.pl/ckexp/wsi-a/sparql/. Spróbuj.

3.2.6 Ontologie w Loki

  1. FIXME

3.2.7 Dyskusja w Loki

  1. Jeżeli masz jakieś wątpliwości, nie zgadzasz się z wiedzą zawartą na danej stronie, etc. masz dwie możliwości:
    1. Jeżeli masz pewność, że wiesz, że twoja wiedza jest lepsza – popraw daną stronę :)
    2. Jeżeli chcesz podyskutować o tym z innymi tworzącymi daną stronę, skorzystaj z opcji dyskusji - z menu po prawej stronie wybierz „Discuss the Page” i na otwartej stronie wpisz swój komentarz. Jeżeli otwarta strona dyskusji nie istnieje, stwórz nową stronę, która zawiera tylko jedną linię:
      ~~DISCUSSION~~

      Po zapisaniu takiej strony pojawi się formularz dyskusji.

4 Frames [10 minut] (jeżeli wystarczy czasu)

Trzymajmy się cały czas zestawienia, nad którymi pracowaliśmy w poprzednich sekcjach:

  • wiedza reprezentowana w postaci języka naturalnego jest zrozumiała dla użytkowników, nie wymaga żadnego przygotowania (jest to język naturalny → rozumie się go naturalnie :-) ), ale nie pozwala na żadne wnioskowanie automatyczne,
  • po zapisaniu wiedzy w postaci TBoxa i ABoxa wiedza przyjęła jakąś strukturę (narzucaną poprzez TBoxa) i moglibyśmy się pokusić o przepisanie jej np. w postaci klauzul i faktów języka Prolog → pozwoliłoby to na wnioskowanie i byłoby pewnie w porządku, ale…
  • dane, które opracowujemy to wiele faktów dotyczących niewielkiej liczby obiektów: w postaci ABoxa z poprzedniej sekcji, jak również w postaci faktów języka Prolog, moglibyśmy uzyskać chaotyczną mieszankę danych, która mogłaby stać się w ogóle nieczytelna dla użytkowników; np. trudno byłoby określić czy dla danego obiektu mamy już określone wszystkie właściwości…

Tutaj pojawiają się Ramki (Frames):

  • Jest to strukturalna reprezentacja wiedzy: fakty są pogrupowane w odpowiednie struktury opisujące obiekty.
  • Każda ramka składa się ze slotów reprezentujących różne fakty dotyczące danego obiektu (w poniższym przykładzie sloty są kolejnymi wierszami tabel).
  • Każdy ze slotów zawiera informacje o aktualnej wartości, wartości domyślnej oraz procedurze wykonywanej w czasie aktualizacji wartości (np. sprawdzenie czy ssak nie ma więcej niż 4 nogi, jak w przykładzie poniżej).
  • Ramki zawierają również informacje o relacjach z innymi ramkami, w szczególności informacje o byciu pojęciem bardziej ogólnym / bardziej szczegółowym względem innej ramki (w poniższym przykładzie jest to slot jest-rodzaju). W przypadku relacji dziedziczenia, dzieci dziedziczą sloty rodziców i mogą je nadpisywać, albo przyjąć wartości określone w rodzicach (np. KRÓLIK zostawia slot nogi nienaruszony, a MAŁPA nadpisuje jego wartość).

Przeanalizuj poniższy przykład:

SSAK
wartość domyślna aktualizacja
skóra futro
narodziny żywy
nogi 4 sprawdź-nogi
sprawdź-nogi: wartość <= 4
KRÓLIK
wartość domyślna aktualizacja
jest-rodzaju SSAK
uszy długie
ruch skoki
MAŁPA
wartość domyślna aktualizacja
jest-rodzaju SSAK
nogi 2
ulubione-pożywienie banany

Ustrukturyzowanie wiedzy w postaci ramek pozwala na:

  • uzyskanie czytelnej reprezentacji wiedzy,
  • uzupełnienie wiedzy o wartości domyślne oraz procedury wywoływane w trakcie aktualizacji danych (przydatne np. w finansach, gdy np. przy zlecaniu przelewu wywoływane są odpowiednie procedury sprawdzające czy jest on możliwy i naliczane są odpowiednie opłaty),
  • przeprowadzenie wnioskowania polegającego na wyszukiwaniu ramek pasujących do wzorca wyszukiwania.

ZADANIE: Przygotuj 3-5 ramek dla opracowywanego przez siebie zestawienia z poprzednich sekcji. Zauważ, że mogą przydać Ci się tutaj TBox i ABox stworzone w poprzedniej sekcji. W jaki sposób?

PYTANIE dodatkowe: czy znasz jakieś elementy inżynierii oprogramowania, które są podobne do Ramek?

Chcesz wiedzieć więcej?

pl/dydaktyka/ai/2017/labs/lab_krr.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0