Kilka dni temu, 2 lipca 2020, Wikimedia Foundation oficjalnie ogłosiła początek dwóch nowych, niezwykle interesujących projektów [1]. Wikilambda oraz Abstrakcyjna Wikipedia – bowiem tak brzmią ich wstępne nazwy – to pomysły ambitne i związane ze sobą w dość ciekawy sposób. Intrygują mnie one nie tylko jako programistę, ale również jako niegdyś aktywnego Wikipedystę (a nawet, nieskromnie zaznaczę, administratora tej encyklopedii), dlatego nieco wgłębiłem się w dostępne informacje na ich temat, by z jak największą przejrzystością wytłumaczyć Wam o co w nich chodzi. Zacznijmy od ważnego rozróżnienia [2]:
- Wikilambda – to całkowicie nowy projekt – z nową domeną wikilambda.org i podobną do pozostałych projektów Wikimedii (takich jak Wikipedia, Wikisłownik, Wikiźródła itd.) odrębnością. Warto zauważyć, że jest to pierwszy projekt od ponad 7 lat (jako poprzedni uruchomiono Wikidane w październiku 2012).
- Abstrakcyjna Wikipedia – to bardziej rozszerzenie projektu Wikidata, które wprowadzi zależność od Wikilambdy oraz wymusi pewne zmiany w pozostałych projektach (przede wszystkim Wikipedii). Nie jest to natomiast niezależny projekt z własną domeną.
Spis treści
Encyklopedia w abstrakcyjnym języku
Być może spotkaliście się gdzieś (np. tutaj) z doniosłym hasłem głoszonym przez osoby rozwijające Wikipedię:
Wyobraź sobie świat, w którym każda osoba na naszej planecie ma dostęp do sumy ludzkiej wiedzy. Do tego właśnie dążymy.
Suma ludzkiej wiedzy, do której każdy ma dostęp. Niewątpliwie brzmi to pięknie, ale czy Wikipedia w obecnym kształcie rzeczywiście to daje? Myślę, że odpowiedź na to pytanie może być dwojaka. Z jednej strony NIE, ponieważ np. obszerne hasło które powstanie w polskojęzycznej Wikipedii nie będzie wszak dostępne dla przeciętnego Japończyka, przeszukującego zasoby Wikipedii japońskojęzycznej. Z drugiej zaś strony TAK, bowiem żyjemy w czasach, w których darmowe translatory sprawiają, że mimo kulejącej gdzieniegdzie w tekście wynikowym składni, zapewne większość informacji z przetłumaczonego automatycznie tekstu zapewne będziemy w stanie przyswoić.
Może więc, idąc logiką stojącą za pozytywną odpowiedzią na powyższe pytanie, zamiast tracić siły na rozwijanie setek wersji językowych (dokładniej mówiąc – 300 aktywnych wersji [3]), lepiej jest skupić się tylko na jednym języku, a osobom, które nim nie władają pozostawić korzystanie z automatycznych tłumaczeń? Abstrakcyjna Wikipedia zdaje się być krokiem w tym właśnie kierunku, ale jego realizacja nie będzie opierała się na tworzeniu treści w którymś z popularnych języków naturalnych (np. angielskim), ale w języku abstrakcyjnym.
„Jak?” – zapytają pewnie niektórzy z Was. Z pomocą przychodzi projekt, o którym wspomniałem już wcześnie, a który aktualnie nie cieszy się zbyt dużą popularnością – Wikidane. Jest to baza różnorodnych danych (o ludziach, miejsca, wydarzeniach, pojęciach itd.) zapisywanych w sposób ustrukturyzowany. Żeby lepiej zrozumieć co mam na myśli, zerknijcie po prostu na dowolny wpis w Wikidata, np. ten dotyczący języka Python. Taka forma przechowywania informacji stanowi naprawdę potężne narzędzie, o którym w przyszłości jeszcze napiszę, przede wszystkim w kontekście formułowania zapytań. Spoglądając na adresy poszczególnych haseł w Wikidanych, łatwo zauważyć, że zawierają one nie słowa, ale unikalne identyfikatory (np. Q28865 dla Pythona). I to właśnie na odniesieniach do nich będzie opierała się Abstrakcyjna Wikipedia.
W artykule Denny’ego Vrandečića pt. Architecture for a multilingual Wikipedia znaleźć możemy uproszczony przykład artykułu, który obrazuje jak mniej więcej będą wyglądały treści w Abstrakcyjnej Wikipedii:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Article( content: [ Instantiation( instance: San Francisco (Q62), class: Object_with_modifier_and_of( object: center, modifier: And_modifier( conjuncts: [cultural, commercial, financial] ), of: Northern California (Q1066807) ) ), Ranking( subject: San Francisco (Q62), rank: 4, object: city (Q515), by: population (Q1613416), local_constraint: California (Q99), after: [Los Angeles (Q65), San Diego (Q16552), San Jose (Q16553)] ) ] ) |
Tzn. tak będą wyglądały od strony technicznej, Bo po wyrenderowaniu zawartości na język angielski, oczom czytelnika ukaże się:
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.
Z kolei polskojęzyczny użytkownik zapewne zobaczy następującą treść:
San Francisco jest kulturalnym, komercyjnym i finansowym centrum Północnej Kalifornii. Jest czwartym pod względem liczby mieszkańców miastem w Kalifornii, po Los Angeles, San Diego i San Jose.
Architektura projektu
W powyżej załączonym fragmencie kodu znalazły się między innymi takie fragmenty jak Object_with_modifier_and_of
oraz Ranking
. Są to (abstrakcyjne) konstruktory, których konkretne implementacje będą znajdowały się w funkcjach renderujących dla konkretnych języków naturalnych. W tym samym artykule autor podaje przykład możliwego renderera dla języka angielskiego:
1 2 3 4 5 6 7 8 9 10 |
Instantiation(instance, class): instance + "is" + class Object_with_modifier_and_of(modifier, object, of): (if modifier: modifier) + object + (if of: "of" + of) Ranking(subject, rank, object, by, local_constraint, after): subject + "is" + "the" + ordinal(rank) + superlative(by) + object + (if local_constraint: "in" + local_constraint) + (if after: "," + "after" + after) |
I w tym momencie docieramy wreszcie do przeznaczenia Wikilambdy, która stanowić ma miejsce na tego typu funkcje. Trzeba przyznać, że jest to dojść ładne rozwiązanie, gdyż odseparowanie danych od logiki, która na nich operuje (dokonując translacji na języki naturalne) jest całkiem spore.
Jak widać, ogólny zarys architektury tego projektu nie jest przesadnie skomplikowany:
- Funkcje odpowiadające za generowanie treści artykułów w językach naturalnych znajdować się będą w Wikilambdzie
- Same definicje artykułów (Content) zostaną wrzucone do nowej przestrzeni nazw w Wikidanych
- Wikidane muszą również dysponować odpowiednią bazą leksemów, aby funkcje renderujące mogły produkować poprawne gramatycznie zdania (uwzględniając np. odmianę wyrazów).
- Wikipedia zyska nowe możliwości związane z odnoszeniem się do treści w Abstrakcyjnej Wikipedii. [2]
Wikilambda – zbiór funkcji
ZBIÓR FUNKCJI – tak najprościej można określić istotę projektu Wikilambda, na co wskazuje zresztą na to sama jego nazwa, nawiązująca do rachunku lambda. Celem jest nie tylko stworzenie miejsca do przechowywania i rozwijania funkcji związanych z Abstrakcyjną Wikipedią, ale i tysięcy innych funkcji, których na co dzień używają programiści na całym świecie. Żeby najlepiej oddać to, co mają na myśli twórcy Wikilambdy, pozwolę sobie przetłumaczyć i zacytować kilka fragmentów z oficjalnej strony:
Wikilambda jest otwartym repozytorium kodu, które każdy może używać oraz rozwijać.
Każda strona w Wikilambdzie reprezentuje funkcję. Funkcja posiada opis, listę parametrów, przypadków testowych, listę implementacji w różnych językach programowania, a także inne metadane. Implementacje mogą być używane w różnych projektach programistycznych (prywatnych aplikacjach lub skryptach), wywoływane i wykonywane online (w przeglądarce lub w chmurze albo Jupyterze czy notebooku PAWS), wykorzystywane do osiągnięcia bardziej złożonych funkcjonalności, podpisywane, analizowane, walidowane i wiele więcej.
(…) Celem Wikilambdy jest ułatwianie życia developerom, którzy mogą polegać na tym repozytorium jak na zewnętrznej bibliotece i użytkownikom, którzy mogą wywoływać funkcje kiedy tylko ich potrzebują. (…) Wszystkie funkcje są czyste, aby zapewnić bezpieczne środowisko wykonywania. Co więcej, każda implementacja może zostać oznaczona metadanymi i podpisana kryptograficznie.
(…) Wikilambda będzie nie tylko pozwalać na dostęp do ogromnej bazy wiedzy jaką są Wikidane, ale też umożliwiać stosowanie binarnych plików wejściowych i wyjściowych. Jak najbardziej możliwym jest dostarczyć jako wejście plik graficzny, a zwrócić analizę, taką jak informacja co jest przedstawione na obrazku albo z ilu różnych kolorów się składa.
Przyznajcie sami, czyż ta koncepcja nie brzmi kusząco?
Kiedy to będzie działać?
No właśnie – kiedy można spodziewać się tych wszystkich cudowności? Plan i kolejność wykonywania zadań związanych z uruchomieniem i rozwijaniem projektów można znaleźć tutaj. Wynika z niego, że przez pierwszy rok prace będą toczyły się wyłącznie nad Wikilambdą. Dopiero w następnej kolejności dołączą działania, mające na celu odpalenie Abstrakcyjnej Wikipedii, skupione głównie na zmianach w Wikidanych oraz tworzeniu funkcji renderujących dla różnych języków naturalnych. Całość początkowego developmentu powinna zamknąć się w 30 miesiącach, co oznacza, że używalnej Abstrakcyjnej Wikipedii można spodziewać się nie wcześniej niż w roku 2023.
Jeżeli jednak temat zaintrygował Was tak bardzo, że 3 lata wydają się wiecznością i już nie możecie doczekać się możliwości eksperymentowania z automatycznym generowaniem artykułów i pisaniem ich w abstrakcyjnym języku, to mam całkiem dobrą wiadomość. Pierwsze prototypy już istnieją i są dostępne na GitHubie. Nie pozostaje więc nic innego jak klonować i działać!