Wnioskowanie OWL w praktyce (Wine + SWOOP 2.3 + Pellet)

OWL Web Ontology Language Guide oprócz tego, że opowiada o co w ogóle w tych ontologiach chodzi, zawiera konkretny przykład — ontologię Wine (zobacz źródło strony) opisująca wina i dodatkowo Food (zobacz źródło strony) z opisem potraw do wspomnianych win odpowiednich. Ontologia Wine ma kilka cech, które przyczyniły się do jej sławy (niektórzy mówią, że złej sławy):

  • po pierwsze jest umieszczona w rekomendacji W3C, co gigantycznie podnosi jej prestiż,
  • po drugie zawiera bardzo dużo elementów, których nie spotyka się w większości innych ontologii — korzysta możliwości OWL bez żadnych zahamowań,
  • po trzecie jest spora — z Food łącznie 138 klas i 206 instancji.

Taki cechy powodują, że jest ona ciężkostrawna dla mniej wydajnych narzędzi obróbki OWL (czy RDF w ogólności) oraz zabójcza dla słabszych mechanizmów wnioskowania. Postanowiłem sprawdzić jak z tym zadaniem poradzi sobie SWOOP w wersji 2.3 beta2 (SWOOP 2.2 na tym samym sprzęcie w ogóle nie dał rady...).

Strzelając na ślepo (niemalże) w dowolny „individual” trafiłem w wino MariettaCabernetSauvignon. W treści ontologii napisane jest dosłownie tyle:

<wine:CabernetSauvignon rdf:about="#MariettaCabernetSauvignon">
<wine:hasBody rdf:resource="#Medium"/>
<wine:hasFlavor rdf:resource="#Moderate"/>
<wine:hasMaker rdf:resource="#Marietta"/>
<wine:hasSugar rdf:resource="#Dry"/>
<wine:locatedIn rdf:resource="#SonomaRegion"/>
</wine:CabernetSauvignon>

SWOOP bez włączonego wnioskowania pokazuje dokładnie to samo, i wygląda to tak:

OWL-Individual: MariettaCabernetSauvignon
Instance of: CabernetSauvignon

Object Assertions:
hasBody : Medium
locatedIn : SonomaRegion
hasMaker : Marietta
hasFlavor : Moderate
hasSugar : Dry

Nie ma tutaj żadnej informacji, która nie została by powiedziana wprost, czyli nie ma tutaj jeszcze w ogóle wykorzystania OWL — dokładnie tyle samo możemy powiedzieć za pomocą kawałka RDF-a (albo i dowolnego innego formatu opisu danych). Natomiast ciekawiej sprawa wygląda po uaktywnieniu reasonera Pellet — widzimy do razu znacznie więcej:

OWL-Individual: MariettaCabernetSauvignon
Instance of: CaliforniaWine  (Why?)
CabernetSauvignon

Object Assertions:
locatedIn : SonomaRegion
locatedIn : CaliforniaRegion  (Why?)
locatedIn : USRegion  (Why?)
hasBody : Medium
hasColor : Red  (Why?)
hasMaker : Marietta
hasFlavor : Moderate
hasSugar : Dry
hasWineDescriptor : Red  (Why?)
hasWineDescriptor : Moderate  (Why?)
hasWineDescriptor : Dry  (Why?)
hasWineDescriptor : Medium  (Why?)

Wszystkie stwierdzenia wywnioskowane przez Pellet są oznaczone w SWOOP linkiem (Why?), pod którym kryje się wyjaśnienie danego wniosku. Np.: skąd wiadomo, że jest to wino czerwone (hasColor : Red)?

Axioms causing the inference :
1) (MariettaCabernetSauvignon rdf:type CabernetSauvignon)
2)   |_(CabernetSauvignon (hasColor . {Red}))

Po polsku: MariettaCabernetSauvignon jest typu CabernetSauvignon, a CabernetSauvignon ma dla cechy hasColor dozwoloną jedynie wartość Red.

A dlaczego Pellet twierdzi, że to wino amerykańskie (locatedIn : USRegion)?

Axioms causing the inference :
1) (MariettaCabernetSauvignon locatedIn SonomaRegion)
2)   |_(CaliforniaRegion locatedIn USRegion)
3)     |_(SonomaRegion locatedIn CaliforniaRegion)
4)       |_Transitive(locatedIn)

Po polsku: MariettaCabernetSauvignon pochodzi z regionu SonomaRegion, który jest zlokalizowany w CaliforniaRegion, który z kolei znajduje się w USRegion.

Po prostu coś pięknego ;-)

patrz również:

Komentarze

Brak komentarzy do tego wpisu.

 

Uwaga: Ze względu na bardzo intensywną działalność spambotów komentowanie zostało wyłączone po 60 dniach od opublikowania wpisu. Jeżeli faktycznie chcesz jeszcze skomentować skorzystaj ze strony kontaktowej.