To jest stara wersja strony!


LAB: Reprezentacja wiedzy

Celem ćwiczenia jest zapoznanie się z różnymi metodami reprezentacji wiedzy, w szczególności sieciami semantycznymi i reprezentacją strukturalną (Frames). 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 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 (o ile takie są).

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.

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?

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)

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.02.2019), ponieważ wszystko jest tworzone ręcznie, co 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 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.

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

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 Semantic MediaWiki, którą będziemy wykorzystywać w czasie semestru.

(Uwaga – punkty, które są konkretnymi zadaniami są oznaczone wykrzyknikiem :!:)

  1. :!: Na początek zaloguj się do specjalnie przygotowanej instancji wiki za pomocą loginu i hasła od prowadzącego.
  2. Wiki o Sztucznej Inteligencji (w skrócie WSI) to przede wszystkim wiki, więc pozwala na tworzenie stron przy użyciu prostego markupu:
    • :!: Wejdź na stronę https://krzysztof.kutt.pl/psi-wiki/index.php/Użytkownik:[login] w miejscu [login] wpisując swój login do wiki (możesz również kliknąć w nazwę swojego użytkownika w górnym menu wiki)
    • :!: Na początek napisz o sobie: opisz obok kogo aktualnie siedzisz (podlinkuj jej/jego stronę wiki), jaki przedmiot Ci się najbardziej podobał na studiach, co lubisz jeść, czy spodziewasz się hiszpańskiej inkwizycji itd.
    • Przydatny fragment dokumentacji MediaWiki opisujący markup wiki: Formatting (zobacz również sekcję „Other formatting” po więcej szczegółów odnośnie linków, obrazów, itd
  3. Wiki jest semantyczna, co oznacza, że wykorzystując specjalny markup można do niej dodawać wiedzę w postaci trójek podmiot-orzeczenie-dopełnienie:
    • W przypadku wiki: podmiot to zawsze strona, na której się znajdujemy.
    • Możemy tworzyć adnotacje trzech typów:
      • Kategorie – do tworzenia hierarchii, grupowania stron wiki, np. wpisując na swojej stronie [[Category:Osoba]], tworzymy trójkę [user] → Category → Osoba.
      • Object properties – relacje do innych stron wiki: dla użytkownika oglądającego stronę wyglądają jak zwykłe linki, ale niosą dodatkową informację o znaczeniu tego linku, porównaj: [[Użytkownik:kkutt]] i [[Siedzi obok::Użytkownik:kkutt]] – obydwa wyglądają tak samo (są linkami do strony Użytkownik:kkutt), ale to drugie dodatkowo jeszcze przechowuje informację o nazwie tego powiązania tworząc trójkę: [user] → Siedzi obokUżytkownik:kkutt
      • Data properties – relacje do stałych (stringów, liczb itd.), porównaj: Jestem Wojtek i mam 12 lat i Jestem [[Imię::Wojtek]] i mam [[Wiek::12]] lat. Powinnaś/Powinieneś rozumieć już różnicę :-)
    • Uwaga: tak, słuszne jest Twoje skonfudowanie – tworzenie Object properties i Data properties wygląda dokładnie tak samo. Jak system ma rozróżniać, że jedno jest stroną, a drugie jest stałą? W wiki mamy możliwość definiowania typów – możemy zdefiniować np. fakt, że Wiek jest liczbą, co później jest wykorzystywane przy przetwarzaniu adnotacji (wyświetlanie, sortowanie wyników itd.):
      • Zobacz źródło strony – to co tutaj stworzyliśmy to kolejna trójka! Atrybut:Wiek → Has type → Number!
      • Typy są wykorzystywane również do walidacji poprawności wpisanych danych, np. umieszczenie na stronie fragmentu [[Wiek::lat]] spowoduje wyświetlenie żółtego wykrzyknika (po zapisaniu strony) i odpowiedniego ostrzeżenia.
    • Więcej o adnotacjach możesz przeczytać w dokumentacji.
    • :!: Teraz dodaj adnotacje każdego z trzech rodzajów do swojej strony! :-)
  4. Istniejącą bazę wiedzy możemy przetwarzać:
    • Na początek: możemy tworzyć zestawienia, które są zawsze aktualne (aktualizowane podczas odświeżenia strony) – co rozwiązuje problem z Wikipedią, który dzisiaj widzieliśmy.
      • :!: Korzystając z przykładów zawartych w dokumentacji, stwórz na swojej stronie proste zapytanie #ask, które będzie wyświetlało wszystkie osoby (kategoria Osoba) i ich Wiek.
    • Możemy każdą informację umieścić tylko JEDEN raz, a później się na nią powoływać (bo możemy ją łatwo wyciągnąć). Może to być nawet niewidoczne dla użytkownika czytającego wiki (dopóki nie zerknie do źródła strony).
      • :!: Na swojej stronie dopisz zdanie Przypominam, że mam {{#show: [FIXME]}} lat! - zamień [FIXME] na odpowiedni kod, aby wyświetliła się tam wartość Wieku, która jest wpisana na Twojej stronie gdzieś wcześniej. Skorzystaj z dokumentacji.
    • Pozwala to na łatwe wyciąganie bardziej skomplikowanych informacji (to przećwiczymy w trakcie semestru, gdy wiki będzie się bardziej rozrastać), łączenie danych z różnych źródeł (zarówno włączanie danych zewnętrznych do stron w wiki, jak i udostępnianie na zewnątrz wiedzy zawartej w wiki przez odpowiednie API, tzw. SPARQL Endpoint) czy eksport bazy wiedzy do CSV/JSON/itd.
  5. Najważniejsze podstawy już masz – teraz pytanie: jak konkretnie będzie wyglądać tworzenie Wiki o sztucznej inteligencji?
    • Tekst: strony są tworzone przez Was dla Was! Mają być napisane takim językiem, abyście je zrozumieli :-)
    • Kategorie: dowolnie, zdaję się na intuicję
    • Properties:
      • Przygotowałem zbiór właściwości ułatwiających zarządzanie/ocenę wiki – są zebrane w postaci tabelki na przykładowej stronie: https://krzysztof.kutt.pl/psi-wiki/index.php/Affective_Computing
      • :!: Przejrzyj te Properties – czy rozumiesz każde z nich? Pamiętaj, że możesz kliknąć na nazwę property w tabelce „Fakty”, aby zobaczyć dokładniejszy opis.
      • Dodatkowo istnieje atrybut Powiązane z obrazujący ogólną relację pomiędzy dwiema stronami. Można tę zależność bardziej precyzować definiując bardziej szczegółowe pod-atrybuty. Zobacz dokumentację Subproperty of
      • Oczywiście możesz też tworzyć nowe Property w miarę potrzeb – wiesz jak!
  6. Jeżeli chcesz jeszcze pobawić się wiki to możesz skorzystać też z Sandboxa Semantic MediaWiki

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

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?

Chcesz wiedzieć więcej?

pl/dydaktyka/psi/labs/lab_krr.1551219961.txt.gz · ostatnio zmienione: 2019/06/27 15:51 (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