LAB: Reprezentacja wiedzy

Celem ćwiczenia jest zapoznanie się z różnymi metodami reprezentacji wiedzy, w szczególności z językiem naturalnym, reprezentacją strukturalną (Frames) i sieciami semantycznymi (a.k.a. grafy wiedzy).

1 Do przygotowania

2 Język naturalny [15 minut]

Zanim przejdziemy do zapoznawania się z sieciami semantycznymi i Frames, 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, bo są co najmniej dwa takie zestawienia i mają różne nieaktualne liczby (stan na 30.09.2019):

Język naturalny jako metoda reprezentacji wiedzy?

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.

3 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).

4 Frames [10 minut]

Podsumujmy to co robiliśmy:

  • 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?

5 Sieci semantyczne [10 minut]

Otwarty czy zamknięty świat?

Przyjmijmy prostą bazę wiedzy opisującą ssaki, króliki i małpy.

SSAK:
  - skóra: futro
  - narodziny: żywy
  - nogi: <= 4

KRÓLIK:
  - jest-rodzaju: SSAK
  - uszy: długie
  - ruch: skoki

MAŁPA:
  - jest-rodzaju: SSAK
  - nogi: 2
  - ulubione-pożywienie: banany

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?

Problem z Wikipedią (dla zainteresowanych)

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 projekty się dzieją! Są dwa, które mogą Cię zainteresować:

  • DBpedia – próba wyciągnięcia danych z infoboxów i linków z Wikipedii (za pomocą odpowiednich parserów)
  • Wikidata – próba stworzenia bazy trójkowej od zera przez społeczność (za pomocą przygotowanego interfejsu)

W pewnym stopniu zachodzą na siebie, ale to są niezależne projekty, które mają różne zastosowania. Na potrzeby PSI to nie jest istotne - najważniejsze jest to, że te bazy wiedzy można przetwarzać na wiele różnych sposobów. Dobrym początkiem do rozpoczęcia zabawy jest spojrzenie na duży zestaw zapytań do Wikidata.

6 SPARQL Endpoint i DBpedia [20 minut]

  • Do odpytywania grafowych baz wiedzy służy język SPARQL - podobny do SQLa, którego już znasz. Możemy używać języka SPARQL m.in. do odpytywania specjalnych web service'ów nazywanych SPARQL Endpoint, które umożliwiają wyciąganie wiedzy z podpiętego grafu wiedzy.
  • W tej sekcji skorzystamy z SPARQL Endpointa udostępnianego przez projekt DBpedia pod adresem http://dbpedia.org/sparql.
  1. DBpedia jest zrzutem z Wikipedii otagowanym z użyciem notacji trójkowej. Powinny być więc tam jakieś informacje o Polsce. Ale jak się do nich dostać?
    Nie znamy identyfikatora (URI) Polski, ale wiemy, że jest coś co ma nazwę Polska i wiemy, że istnieje relacja rdfs:label, która łączy obiekt z jego nazwą. Może to zadziała? Spróbujmy!
  2. Otwórz YASGUI - klienta pozwalającego na wykonywanie zapytań do SPARQL Endpointów.
  3. Co wiemy? Jest coś co ma jakieś URI (?country), które powinno być powiązane relacją rdfs:label z obiektem „Polska”@pl. Można to łatwo przetłumaczyć do notacji trójkowej:
    ?country rdfs:label "Polska"@pl .
  4. Aby wykonać to zapytanie, wpisz URI http://dbpedia.org/sparql w liście wyboru na górze.
  5. Następnie wpisz pełne zapytanie:
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?country
    WHERE { 
        ?country rdfs:label "Polska"@pl .
    }
  6. Sukces! Istnieje coś co ma rdfs:label „Polska”@pl!
    ZADANIE: Teraz rozszerz to zapytanie tak, aby pobrać informację o populacji Polski.
  7. ZADANIE: Rozszerz zapytanie jeszcze bardziej i przygotuj listę 10 największych państw europejskich pod względem populacji.

Chcesz wiedzieć więcej?

pl/dydaktyka/psi/labs/lab_krr.txt · ostatnio zmienione: 2019/09/30 20:55 przez kkutt
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