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).
Zanim przejdziemy do zapoznawania się z sieciami semantycznymi i Frames, przyjrzymy się krótko najpowszechniejszemu ze źródeł wiedzy, czyli 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):
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:
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.
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).
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):
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
}.Pomieszczeniu
znajdują się Elementy wyposażenia
.Elementy
wyposażenia to elementy ze zbioru: {Krzesło
, Biurko
, Komputer
, Tablica
, Rzutnik
}.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
, …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).
Podsumujmy to co robiliśmy:
Tutaj pojawiają się Ramki (Frames):
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:
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?
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:
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:
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:
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?
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ć:
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.
http://dbpedia.org/sparql
.rdfs:label
, która łączy obiekt z jego nazwą. Może to zadziała? Spróbujmy!?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 .
http://dbpedia.org/sparql
w liście wyboru na górze.PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?country WHERE { ?country rdfs:label "Polska"@pl . }
rdfs:label
„Polska”@pl
!