Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Wikidata

Autor: Piotr Karpiuk o poniedziałek 27. Marzec 2017

Wikipedia jest popularnym repozytorium wiedzy, ale jest przeznaczona raczej dla ludzi niż do automatycznego przetwarzania przez komputery. Łatwo się o tym przekonać gdy staniemy np. przed zadaniem napisania programu który ma z Wikipedii wyciągnąć artykuły hasłowe poświęcone biografiom mężczyzn urodzonych w danym przedziale lat. Pewną namiastką danych ustrukturyzowanych w artykule hasłowym jest tzw. infoboks, ale prezentuje on ograniczony zakres informacji (np. w infoboksie Polityk nie ma własności określającej płeć), wartości własności w praktyce są wypełniane w sposób mało ustandaryzowany (np. data urodzenia może być zapisana na wiele sposobów), a sam infoboks może być trudny do wyodrębnienia z wikitekstu artykułu hasłowego a tym bardziej sparsowania.

Gromadzenie danych w sposób ustrukturyzowany leży również w interesie samych twórców Wikipedii: jeśli informacje o datach urodzin polityków zostaną zapisane w sposób ujednolicony w jakiejś bazie danych, to poszczególne wersje językowe Wikipedii (a jest ich przeszło 300) będą mogły pobierać te informacje z centralnej bazy, a nie zmuszać 300 ludzi do ręcznego wklepywania tej daty w artykułach hasłowych. Gdy polityk umrze, potencjalnie wystarczy wprowadzić datę śmierci w jednym centralnym repozytorium, aby pojawiła się we wszystkich wersjach językowych Wikipedii itd.

Wikidata to darmowa, społecznościowa, wielojęzyczna, ustrukturyzowana i powiązana z innymi projektami Wikimedia (w szczególności: z Wikipedią) baza danych połączonych ze sobą rekordów (graf). Najprościej spojrzeć na nią w ten sposób, że docelowo każdemu artykułowi hasłowemu Wikipedii odpowiadać będzie dokładnie jeden ustrukturyzowany rekord Wikidata (tzw. element, ang. item), przy czym np. dla rekordu reprezentującego osobę będą tam własności takie jak imię, nazwisko, płeć, data i miejsce urodzin/śmierci, narodowość, wyznanie, zawód, dzieci, zdjęcie, a także linki do odpowiedniego artykułu Wikipedii (do poszczególnych wersji językowych). O ile jest wiele wersji językowych Wikipedii, to w Wikidata istnieje tylko jeden rekord dla danego bytu, choć tytuł rekordu (np. imię i nazwisko w przypadku osoby) jest przechowywany w wielu językach. Dane w bazie Wikidata tworzą graf ponieważ wartościami własności elementu mogą być inne elementy, np. element Polska ma własność „stolica”, którego wartością jest element Warszawa, wartością własności „dziecko” elementu Krystyna Loska jest element Grażyna Torbicka.

Docelowo Wikidata ma być bazą wiedzy ogólnego przeznaczenia, podobnie jak np. Google Knowledge Graph. Wikidata wystartowała w 2012 roku z inicjatywy m.in. Google’a, a jest nadzorowana przez niemiecki oddział Wikimedia. Choć korzyści projektu dla Wikipedii są oczywiste, pojawiają się podejrzenia że Wikidata ma służyć głównie specjalistom od PR i właścicielom wyszukiwarek internetowych. Obecnie serwis Wikidata zawiera ok. 29 mln elementów i szybko zdobywa kluczową pozycję w branży Semantic Web, skutecznie kanibalizując takie serwisy jak Freebase.org czy DBpedia.

Model danych

Każdy element ma następujące składowe:

  • identyfikator (jednoznaczny) postaci Q<liczba>, np. Q444 („Lech Wałęsa”); URL elementu to https://www.wikidata.org/wiki/Q<liczba>
  • etykieta (ang. label) – np. „Krzysztof Rutkowski”,
  • opis (ang. description) – np. „detektyw” (w odróżnieniu od „piłkarz”); uwaga: etykieta w połączeniu z opisem jednoznacznie identyfikują element
  • aliasy (ang. aliases) – np. dla „Maria Curie-Skłodowska” będzie to „Maria Skłodowska”, „Maria Skłodowska-Curie”, „Maria Curie”
  • linki do Wikipedii (ang. sitelinks) – do artykułu odpowiadającemu elementowi, w poszczególnych wersjach językowych. Element Wikidata musi mieć przynajmniej jedno dowiązanie do innego projektu Wikimedia: na ogół artykuł Wikipedii identyfikuje znaczenie elementu Wikidata
  • lista deklaracji (ang. statements), deklaracja to z grubsza własność-wartość.

Atrybuty etykieta, opis i aliasy to tzw. atrybuty językowe (ang. language attributes), tzn. mają swoje odpowiedniki (tłumaczenia) w innych językach.

Pojęcie deklaracji jest w rzeczywistości bardziej rozbudowane, aby uwzględnić złożoność otaczającego nas świata. Nierzadko wartość własności wymaga uściślenia, np. jeśli wartością własności „populacja” elementu „Warszawa” jest 1753977, to warto dodać z którego roku pochodzi pomiar – tzw. kwalifikator (ang. qualifier) – oraz źródło (ang. reference, source) takiej informacji, np. URL do odpowiedniej strony na witrynie GUS-u. Jeśli dla danej osoby przechowujemy informację w jakiej szkole się uczył lub jaki pełnił urząd (wartość własności), to wypada również dodać w jakim okresie (kwalifikator). Istnieje też sposób na oznaczenie pustej wartości własności (np. że dana osoba nie ma dzieci), co jest czym innym niż brak wartości albo stwierdzenie że wartość jest, ale nieznana (np. osoba na pewno nie żyje, ale nie znamy jej daty śmierci). Zarówno źródło jak i kwalifikator są zestawami par własność-wartość.

Wikidata will not be about the truth, but about statements and their references. It is a secondary knowledge base (that collects and links to references), rather than primary database of facts.

W jednym elemencie może istnieć wiele deklaracji z tą samą własnością, wówczas możemy niektóre wartości uprzywilejować względem pozostałych nadając rangi (ang. rank): normal, preferred lub deprecated. Wszelkie zapytania będą brały pod uwagę i zwracały tylko wartości z najwyższą rangą. Z sytuacją wielu wartości mamy do czynienia np. gdy:

  • osoba ma wiele dzieci, wtedy element dla tej osoby będzie miał wiele deklaracji „dziecko”, wszystkie o tej samej randze normal,
  • populacja miasta zmieniała się w czasie, wtedy będzie istniała jedna wartość preferowana (najnowszy pomiar, preferowany), a pozostałe będą miały rangę normal,
  • nie ma zgody co do wartości danej własności wśród osób edytujących – wtedy deklaracja preferowana jest efektem konsensusu, a pozostałe istnieją dla udokumentowania rozbieżności.

Każdej własności przyporządkowany jest określony typ danych wartości. Najpopularniejsze to:

  • globe-coordinate: współrzędne GPS z określeniem dokładności,
  • wikibase-item: element Wikidata, np. Paryż (Q90) jako stolica Francji (Q142),
  • url,
  • time: data i ew. czas, z określeniem dokładności,
  • external-id: identyfikator w zewnętrznej bazie danych, np. ISBN,
  • quantity: wartość liczbowa, z określeniem jednostki miary i dokładności,
  • string: łańcuch znaków, niezależny od języka,
  • monolingualtext: łańcuch znaków w podanym języku,
  • multilingualtext: łańcuch znaków tłumaczony na różne języki.

Na własności może być również nałożonych szereg ograniczeń (ang. property constraints), które ułatwiają walidację danych podczas wprowadzania (nonmandatory) lub uniemożliwiają wprowadzenie niewłaściwej wartości (mandatory) np.:

  • różnica w czasie między datą urodzin a datą śmierci nie powinna wynosić więcej niż 150 lat,
  • łańcuch znaków musi być w określonym formacie (wyrażenie regularne),
  • własność może przyjmować jedną z wartości wymienionych na liście,
  • jeśli obiekt ma zdefiniowaną własność child, to obiekt dziecka musi mieć własności father i mother,
  • jeśli obiekt ma zdefiniowaną własność killed by, to współwystępują z nim własności place of death, date of death i manner of death,
  • własność może używać tylko kwalifikatorów z wymienionych na liście,
  • własność może opisywać tylko element/tylko kwalifikator/tylko źródło,
  • własność typu wikibase-item może przyjmować tylko wartości będące instancjami określonej klasy (np. własność mother może być wyłącznie typu human, (Q5) lub animal (Q729)).
  • nie mogą istnieć dwa elementy z tą samą wartością danej własności (np. flaga, hymn, ISBN),

Z ontologicznego punktu widzenia patrząc, w tej samej przestrzeni elementów mamy zarówno instancje klas, jak i klasy. Np. Lech Wałęsa (Q444) jest instancją klasy human (Q5). Powiązania pomiędzy klasami i instancją a klasą wyznaczają własności subclass of, instance of i part of.

API

Serwis Wikidata dostępny jest też przez API, przy czym operacje zapisu wymagają uwierzytelnienia i pobrania tokena. Poniżej swoista „księga czarów”, czyli lista przykładowych zapytań wraz z linkami do dokumentacji. Odpowiednio modyfikując URL zapytania można dostosować go do własnych potrzeb.

Element „Lech Wałęsa” (Q444) w formacie RDF
j.w., w formacie JSON doc
Podstawowe dane o elemencie Q444: etykietka, opis, aliasy doc
Wybrane atrybuty elementu Wikidata odpowiadającego hasłu „Warszawa” polskiej Wikipedii doc
Same deklaracje wskazanego elementu WikiData doc
Wyszukiwanie elementu po nazwie „warsza” w języku polskim doc
Podpowiada brakujące własności dla wskazanego elementu doc
Znajdź w WikiData rekord, który w polskiej Wikipedii ma nazwę „Warszawa” (zwraca „Q270”) doc

Dane offline

Wyeksportowane dane można ściągnąć w formacie JSON (ok. 8,4 GB po spakowaniu i ponad 100 GB po rozpakowaniu, po jednym elemencie w wierszu). Aby poprawnie zinterpretować JSONa warto zapoznać się z opisem modelu danych a potem opisem reprezentacji elementu w formacie JSON (istotne jest tu np. pojęcie „Snak”).

Można też bez większych problemów przekonwertować dane do formatu RDF/XML lub wręcz zaciągnąć dane w tym formacie.

Przydatne linki


Wikidata Graph Builder, tutaj zaczynamy od Mieszka I i jedziemy po jego dzieciach 4 pokolenia. Kliknij obrazek aby obejrzeć na żywo.

Share and Enjoy:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Śledzik
  • Blip
  • Blogger.com
  • Gadu-Gadu Live
  • LinkedIn
  • MySpace
  • Wykop

Zostaw komentarz

XHTML: Możesz użyć następujących tagów: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>