Programování | Wikipedia | Open data

Wikidata.org: Představte si databázi, ve které by jednou mělo být úplně všechno

  • Na Wikipedii najdete encyklopedické články
  • Na Wikidatech najdete fakta, která tyto články tvoří
  • Dnes si s nimi trošku pohrajeme

Když jsem v roce 2002 poprvé použil Wikipedii jako jeden ze zdrojů semestrální práce, vyděsil jsem lektora takovým způsobem, že jsem si o pár týdnů později odnášel zasloužené F a na katedře si tento prohřešek pamatovali po zbytek roku.

Od té doby se toho naštěstí hodně změnilo a některé z článků na Wikipedii svým rozsahem, zpracováním a hromadou citací překonají i stárnoucí vysokoškolské učebnice. Zdaleka však ne všechny, a tak je kvalita informací na Wikipedii mnohdy velmi kolísavá – zejména napříč jazykovými mutacemi.

Wikipedie se na to snaží už roky reagovat jak pomocí vlastních pravidel kvality, tak armádou softwarových botů, kteří mohou automatizovaně doplňovat chybějící střípky. Aby to bylo možné, potřebují vědět, co je co. Každý článek na Wikipedii proto musí mít dokonalou vnitřní strukturu.

d6a01b1d-6430-4ab7-98dc-2dcb9716163b
Článek o jablku na Wikipedii. Všimněte si jeho první věty.

Komunitní encyklopedie je tedy spíše než seznamem ucelených textů obrovskou databází jejich dílčích částí. Díky tomu se můžeme encyklopedie ptát i strojovou cestou skrze její aplikační rozhraní.

Dnes to velkou měrou dělají prakticky všechny vyhledávače a hlasové asistenční služby, které tak vypadají inteligentnější, než často ve skutečnosti jsou. 

Ptáme se Wikipedie skrze její aplikační rozhraní

Dejme tomu, že bychom si chtěli napsat vlastního znalostního robota, kterému budeme pokládat dotazy třeba ve formě:

  • Kdo je to Miloš Zeman?
  • Co je to jablko?
  • Kdy se odehrála II. světová válka?

Pro místní kutily mám dobrou zprávu. Kompletního znalostního chatbota, který bude odpovídat česky, napíšete v Javascriptu za pár minut na několika řádcích kódu. Veškeré rozpoznání významu slov za textem „kdo je to, co je to“ atp. totiž provede sama Wikipedie a odpoví třeba ve strojově srozumitelném formátu JSON.

Pojďme si to vyzkoušet na jednom z krkolomných dotazů, který se ptá, co je to jablko:

https://cs.wikipedia.org/w/api.php?
format=json&action=query&prop=extracts&
exintro&explaintext&indexpageids&
redirects=1&titles=jablko&callback=?

Odpověď v JSON, se kterým umí Javascript nativně pracovat, bude vypadat zhruba takto:

{
  "batchcomplete": "",
  "query": {
    "normalized": [
      {
        "from": "jablko",
        "to": "Jablko"
      }
    ],
    "pageids": [
      "236161"
    ],
    "pages": {
      "236161": {
        "pageid": 236161,
        "ns": 0,
        "title": "Jablko",
        "extract": "Jablko je plod jabloně, patří mezi nejběžnější druhy ovoce nejen ve střední Evropě. Jde o malvici, podobně jako u plodu hrušně hrušky."
      }
    }
  }
}

Jedná se o stejnou větu, kterou Wikipedie zobrazila i na stránce záznamu pro jablko. Viz první obrázek v článku.

Když bychom odpověď nechali přečíst český hlasový syntetizátor třeba na Androidu, nebo v prohlížeči Chrome, uživatel bude mít pocit, že komunikuje s jakousi umělou inteligencí, a přitom je to jen běžná Wikipedie a její znalostní databáze.

Videoukázka chatbota Živák, který vypadá inteligentně, a přitom se jen v nitru dotazuje Wikipedie, ČNB, Bingu nebo třeba Google Maps:

V tomto konkrétním případu jsme se Wikipedie zeptali na stručný popis termínu, stejně tak bychom z ní ale mohl vytáhnout i jiná strukturovaná data. Třeba první část článku s více informacemi, obsah z tabulek atp.

Dotaz ke zjištění stručného popisu jablka očekával název konkrétního termínu na Wikipedii (jablko). Seznam všech, které obsahují v nějaké podobě jablko, bychom mohli dopředu vyhledat zase tímto dotazem: 

https://cs.wikipedia.org/w/api.php?
action=query&list=search&utf8=&
format=json&srsearch=jablko&callback=?

Odkaz tedy vrátí seznam článků Jablko, Granátové jablko, Lovení jablek, Fyziologická skvrnitost jablek atd. 

Wikidata, tedy databáze (téměř) všeho

Samotná Wikipedie je sice vnitřně velmi strukturovaná, ale je tu ještě její sesterská služba, která jde o další úroveň níže a jedná se už opravdu o dokonalou databázi, která se snaží identifikovat v podstatě jakýkoliv kus dílčí popisné informace.

Mám na mysli samozřejmě mocnou službu Wikidata – znalostní bázi více než 80 milionů položek! Takovou položkou může být třeba nějaký konkrétní člověk,  ale stejně tak všechny faktografické informace, které jej popisují.

2758681c-e14c-4bf6-a1be-11488daae45cd639a3ce-5025-4150-9fd5-5041cc86acba
Záznam pro jablko na Wikipedii a Wikidatech

Takže zatímco článek o jablku na Wikipedii tvoří (byť strukturovaný) lidský text, ve Wikidatech je to spíše síť mnoha desítek propojených datových položek – všech atributů, které mají něco společného s jablkem, přičemž každý z těchto atributů má svůj identifikátor, takže se můžeme zeptat jen na něj. Díky tomu lze nad Wikidaty vytvářet naprosto unikátní databázové dotazy, které klasická Wikipedie neumí.

Dcery českých celebrit seřazené podle věku

Pojďme si to ukázat na lehce infantilním příkladu. Dejme tomu, že bychom si chtěli postavit bizarní seznamku s katalogem dcer českých politiků, umělců, akademiků a tak podobně. Wikipedie, respektive Wikidata, o mnohých z nich ví, protože je najdete v tabulce rodinných příslušníků v článku k dané osobě.

Díky tomu, že je v případě Wikidat každá taková informace databázovým indexovaným záznamem, postavíme si dotaz v jazyku SPARQL a vyzkoušíme si jej v grafickém testovacím nástroji Wikidata Query Service.

79a33389-15b3-45d4-8d8a-fc34ec1ab169
Katalog českých dcer z Wikidat vytvořený v databázovém jazyku SPARQL a v testovacím prostředí Wikidata Query Service

Jak ukazuje snímek výše, služba odpověděla několika desítkami dcer českých osob, které jsou dostatečně známé na to, aby je některý Wikidatista vyplnil do databáze.

Dotaz je co nejjednodušší a potřeboval by pro více výsledků ještě vyladit, ale funguje. Pokud byste spíše než dcery chtěli vytáhnout z Wikidat třeba největší města v Česku, stačí kód jednoduše upravit a pracovat naopak s identifikátory sídel, počtu obyvatel a tak dále.

Co je to proboha P27, Q213 nebo třeba Q6581072?

Začátečník se při pohledu na kód s hromadou podivných identifikátorů asi zhrozí, po krátkém zaučení ale pochopíte ohromnou moc Wikidat, kde je každá informace reprezentovaná právě podobným číslem.

P27 tedy představuje státní občanství a Q213 jako jeho parametr znamená Česko. P21 je zase pohlaví a Q6581072 představuje to ženské. Q333187 je identifikátor Karla Gotta, Q12045111 patří Petru Čtvrtníčkovi a Q15897830 je prostě Petr. Jakýkoliv Petr.

aa857d82-8965-44d4-908c-7fa350b6ed6a
Editor databázového dotazu našeptává, co který identifikátor představuje

Tímto způsobem můžeme vyhledávat a syntetizovat v podstatě jakoukoliv komplexnější informaci, která není na Wikipedii na první pohled patrná, protože nemá patřiční kontext a vyžaduje propojení hromady dat. Wikidata toto umějí.

Stejně jako Wikipedie i její sesterská databáze je dostupná pod svobodnou licencí, a pokud máte vlastní server s dostatečně velkým úložištěm a procesorem, který se při procházení obrovské databáze neroztaví, můžete si tento znalostní mozek lidstva klidně celý stáhnout a provozovat svépomocí.

5bcfa0b6-6be0-4c44-ab43-08d76d2428e309f6bc18-582d-42f1-9503-fd3f2326a9b3796932a1-f9b0-45cf-9f1c-90cff51fb09c
Složité identifikátory pro tvorbu SPARQL dotazů nemusíme znát nazpaměť. Najdeme je jednoduše přímo na Wikidatech u každé položky, která nás zajímá.

Právě odtud tedy nakonec čerpá drtivá většina nejrůznějších asistenčních znalostních služeb, není totiž třeba znovu vynalézat kolo.

Co kdyby byla z podobných abstraktních identifikátorů složená celá Wikipedie?

Po stručném úvodu pojďme konečně ke skutečné pointě dnešního článku. Kvalita záznamů v různých jazykových mutacích Wikipedie se stále dramaticky liší, Denny Vrandečić z Googlu proto zkraje dubna publikoval na Arxivu článek (PDF), jak by mohla Wikipedie vypadat v budoucnosti.

Mimochodem Danny v letech 2012-2013 pracoval jako projektový šéf německé divize Wikidat a asi nebude překvapením, že se pod křídly Googlu věnuje technologii Google Knowledge Graph, což je ve své podstatě to samé.

331ccf13-bf11-44aa-9ce1-2d197be4b339
Knowledge Graph plní v Googlu podobnou roli jako Wikidata, takže v tomto případě může vyhledávač díky znalosti významu slov vedle běžných výsledků zobrazit i popis jablka

Je to ohromná síť podobných identifikátorů, které se pokoušejí popsat význam čehokoliv, co se pokoušíte vyhledat právě v Googlu. Firmě  Knowledge Graph pomáhá pochopit sémantický význam dotazu, a tak může na dotaz „jablko“ rovnou nabídnout tabulku nutričních hodnot a stručné resumé právě z Wikipedie.

Články v abstraktním jazyku by mohly psát softwaroví roboti a A.I.

Denny ve svém článku navrhuje nahradit logické nitro Wikipedie za abstraktní sémantický jazyk. Jak tomu máme rozumět? Ukažme si příklad s krátkým výrokem o městě San Francisco. Právě tak by ostatně mohl začínat článek na Wikipedii:

„San Francisco is the cultural, commercial, and financial center of Northern California. It is the fourth-most populous city in California, after Los Angeles, San Diego and San Jose.“

Dvě souvětí dávají co nejstručnější resumé o druhém největším městě Kalifornie v lidské řeči – v angličtině. Větě tedy rozumíme my, lidé, ale kdyby ji měl přelouskat stroj a korektně pochopit význam každého ze slov, bude to neuvěřitelně komplikované.

Celou dobu se tu ale bavíme o Wikidatech, které každou známou informaci reprezentují unikátním identifikátorem. Ona dvě souvětí bychom tedy mohli schematicky a s využitím údajů z Wikidat rozepsat tímto způsobem:

6eb0abab-cd10-4da0-b89b-d69b02e24f63
Souhrn o San Francisku rozepsaný do sémantického schématu s využitím Wikidata

Jak vidno, získali jsme abstraktní a strojově srozumitelné schéma, které vyjadřuje stručný popis San Franciska. Nyní jej stačí naplnit informacemi z konkrétní jazykové mutace Wikidat a získáme stejné věty v angličtině, němčině, čínštině nebo třeba češtině.

Abstraktní sémantický strojový jazyk by mohl být zároveň mnohem srozumitelnější pro technologie strojového učení a neuronových sítí zítřka, takže podoby výsledných textů by mohl generovat jen stroj, jehož agenti by zároveň prolézali web a hledali primární zdroje informací.

Celý automatizovaný proces by pak mohl docílit toho, abychom měli Wikipedii čerstvou a k dispozici ve všech jazycích včetně těch, které trpí nedostatkem kvalifikovaných Wikipedistů z masa a kostí.

Diskuze (2) Další článek: Ethernet zrychluje. Nový standard počítá s rychlostí 800 Gb/s

Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,