Tudásgráf projekt

Szeretnék egy tudásgráfot összehozni immunológiával kapcsolatban. Eredetileg a projekt úgy indult, hogy szerettem volna átlátni az interleukin hálózatot, hogy hogyan működik autoimmun betegségeknél, de jelen pillanatban van körülbelül 150 interleukin, és mindegyikhez legalább ezer cikk különböző témákban. Nagyon esélytelen, hogy ebben az évtizedben végeznék az olvasással, nem is beszélve arról, hogy közben még sokszor ennyi cikket kitermelne a tudós társadalom közben. Arra gondoltam, hogy jó lenne összegezni a cikkekben található információkat egy gráfba, amiből nagyjából mindenki le tudja követni, hogy milyen szabályozó mechanizmusokkal működik az immunrendszer, és az ebbe való beavatkozás milyen következményekkel jár. Ideális esetben a kísérletek alapján lehetne egy számítógépes modelt csinálni az immunrendszer működéséről, de véleményem szerint még nagyon messze vagyunk attól, hogy ez a model akár csak korreláljon a valósággal. Mindenesetre próbálkozások vannak, az enyém is egy lesz a sok közül.



Egy másik régóta húzódó probléma, hogy nem tudom összegyűjteni az információkat azzal kapcsolatban, amin éppen dolgozom, vagy amit éppen olvasok. Például ha van egy projekt, vagy egy cikk, akkor ahhoz mindig irodalmazok, átnézek párszáz oldalt, keretrendszert, stb... Általában jó, ha a tizedét felhasználom annak, amit irodalmazásnál elolvasok, mert sok dolog nem kapcsolódik közvetlenül a témához, vagy duplikáció, vagy túl részletes lenne, vagy nem is használom az adott keretrendszert, és így tovább. Ez rengeteg információ, ami pocsékba megy, és sokszor van olyan, hogy visszakeresek egy cikket, mert éppen kellene, de már nem találom meg újra, vagy fél órába telik, mire újra előkerítem. Annyira válságban vagyok ezzel kapcsolatban, hogy lassan már azt sem tudom hol keressem az infot, a gépen fájlrendszerben esetleg egy másik device-on? A blogomban, vagy más weboldalakon, ahova írok (van legalább 5-10 ilyen)? Esetleg a postaládámban, vagy az issue trackereim közül valamelyikben? Tényleg sokszor van, hogy a sokadik helyen találom csak meg. Ezért szükségem van egy olyan szoftverre, amibe szépen importálni tudom az összes témát és a hozzájuk tartozó cikkeket, fájlokat, a böngészőből, az éppen megnyitott kb 1000 oldalt és a többszáz kedvencet és így tovább. Itt a témákat szintén gráffal lehet leírni.

Arra gondoltam, hogyha nem üti egymást a kettő, akkor használhatnám teljesen ugyanazt a rendszert az immunológiás gráfhoz és ehhez is. Lényegében mindkettő bizonyos fokig egy link gyűjtemény, illetve mindegyik olyan, hogy ezeken kívül lehet megjegyzéseket is hozzáfűzni az egyes témákhoz. Egyelőre nehéz belátni, hogy hol van a határa egy ilyen rendszernek. Pl edzéstervet is szeretnék készíteni, ahhoz is kell egy célszoftver. Aztán ott van ezzel kapcsolataban a köredzés levezető telefonra, hogy időre csináljam a gyakorlatokat, ami szintén egy célszoftver, és így tovább. Szeretném ezeket mind elérni a rendszerből ugyanúgy, ahogy az immunológiás gráfot is. Nehéz megmondani, hogy mennyire kellene ezeket integrálnom a rendszerbe. Ugyanígy egy-egy projekt tervezési és implementálási fázisában vannak olyan információk, amik jó, ha egy helyen vannak, de akár a jelszavakat is el lehet menteni, és így tovább. Issue trackerként is használnám, mert az issue-k ugyanúgy 1-1 projekt egy részletéhez tartoznak. Az egészet REST/WebSocket + RDF alapon le lehet kommunikálni, szóval a célszoftverre vonatkozó megjelenítés és egyebek nagyon jól el lennének a kliens oldalon a böngészőben. Ami egy fokkal húzósabb az az integráció a böngészővel, IDE-vel, stb... Erre valszeg plugint kell írni, de pár sor az egész. Szeretnék egyszerre több tab-et is megnyitni a böngészőben, illetve a megnyitott tab-eket importálni és hozzácsapni 1-1 témához akár az olvasatlan címkével együtt. Így ha 1-1 témában olvasni akarok, akkor bármikor megtehetem bármelyik gépemen, elég csak felmenni a rendszer oldalára, egyet kattintani, és megnyílik az összes még nem olvasott oldal. Ugyanígy a PDF-et is meg lehet nyitni böngészőbe épülő pluginnel, esetleg PDF olvasóval. Sok meló lesz vele, mire mindent beimportálok, és hozzákötök a gráfhoz, de hosszú távon nagyon megéri majd. A blogot is jobb lenne az itthoni gépemen megírni, aztán csak szinkronizálni, mert nagyobb az adatbiztonság (ezt bármikor törölheti a blogger), és amúgy is egy csomó olyan link és szöveg van a cikkekben, amit jó lenne hozzácsapni a gráfhoz. Ezen kívül szeretnék egy 3d grafikus megjelenítőt, ami színvonalban valahol félúton lesz az Interactorium és a WikiGalaxy között. Hosszú távon az itt szerzett tapasztalatot fel tudom majd használni egy hasonló, de nagyobb szabású rendszer építéséhez.

Egyelőre amit léptem a témában, hogy elkezdtem agyalni a gráf megjelenítő részletein. Ez beletelt pár napba, mire megtaláltam az Interactoriumot, ami nagyjából azt tudja, amire szükségem van plusz még jóval többet. Az alap koncepció, hogy minden téma egy-egy csillag egy virtuális galaxisban. A legtöbb csillag olyan messze van tőlünk, hogy gyakorlatilag nem látszik. Így optimalizálható az adatforgalom és a megjelenítés sebessége is. Ha egy-egy témához nagyon sok kapcsolat tartozik (hub), akkor ő a kapcsolataival egy klasztert alkot, ami már jóval nagyobb, mint egy sima csillag, így nagyobb távolságról látszik. A nyilakat elsőre úgy gondoltam, hogy nem rajzoltatom ki, mert nagyon kusza lenne az egész, de az Interactoriumot látva meggondoltam magam, és adok neki egy esélyt. Az egész egyetlen force layout alatt futna, így a klaszteresítés kiemelten fontos, mert az csak úgy gyors. Gondolom lehet használni quadtree-t erre a célra WebGL-ben valahogyan. Nem vagyok szakértője egyelőre a témának. Mindenképp böngészőben fog futni, annyi már biztos. Az egyes témák linkelhetőek lesznek, aztán vagy animációval vagy anélkül oda kell találnia a témához a megjelenítőnek. Ha odatalált, akkor a témához tartozó szöveg is szépen megjelenik, illetve kattintásra meg lehet nyitni az összes kapcsolódó cikket egy új ablakban külön tabokban. Itt lehet böngészni, keresgélni. Az új tab-okat be lehet importálni a rendszerbe. A legjobb módja ennek egy külön böngésző plugin, ami összeköttetésben van a rendszerrel, és így el tudja menteni, hogy mi van éppen nyitva. Ha cikkekről van szó, akkor csinálhatunk gráf alapú feldolgozást egy külön tool-al, de elég annyi is, hogy kapcsolódik a témához, és pár mondatban leírni, hogy hogyan. Az ideális az lenne, hogy pár mondatban leírom, aztán utána a rendszer egy szöveg értelmezővel hozzácsapja a gráfhoz, de egyelőre ez csak részlegesen megvalósítható, és az is nagyon talán-talán. A csomópontok megtalálásánál a kontextus be tud zavarni, az összeköttetéseknél meg az igeragozás... Kell még bele egy nyelv felismerő, mert bizonyos részeket magyarul, más részeket meg angolul fogok írni, illetve a cikkek között is lesz, ami magyar, esetleg német, olasz, ki tudja. A nyelv felismerést egyszerűen meg lehet oldani, a google translate-el, de akár saját fapados algoritmust is fejleszthetek mondjuk a tudásgráfot felhasználva. Azt úgyis több nyelvűre csinálom majd, tehát szótárnak is használható. Magukat a témákat minden esetben angolul fogom elnevezni, de akár úgy is jó, ha két nyelvűek. Az adatbázis egyértelműen neo4j lesz. Kipróbáltam, nagyon szépen működik, és a cypher is tetszik, kicsit hasonlít az SQL-re, de nagyon kezes kis nyelv, egy csomó találomra beírt lekérdezést simán megcsinált. Persze volt, hogy belefutottam syntax error-ba, de végül valahogy mégis sikerült összehozni, amit akartam. Ez egy SQL nyelvnél egyáltalán nem szokott így történni, legalábbis PostgreSQL-ből és MySQL-ből kiindulva. Egyelőre összeszórtam egy kb 100 csomópontos gráfot a témákból, amikkel foglalkozom. Valószínűleg az bővülni fog több ezerre, ahogy beimportálok mindent, de így is sok tapasztalatot szereztem azzal kapcsolatban, hogy hogyan érdemes ezeket az adatokat egymáshoz kötni. Az egyedüli hátránya a neo4j-nek, hogy az inference (következtetés) nem megy neki szemben a triple storage-ekkel. Legalábbis ezt írják róla. Ez annyit jelent, hogyha van egy nagy témám egy csomó altémával, akkor nem lehet hierarchikusan leágaztatni, hanem muszáj minden egyes altémával összekötni a legalsóbb szintekig. Ez sokkal több kapcsolatot fog eredményezni, viszont a klaszteres logika, amiről már írtam egy fokkal egyszerűbb lesz, mert elég a rá mutató kapcsolatok számát megnézni, nem kell inference-el kitalálni őket. Ez a sebességet egyik oldalról növeli, a másikról viszont csökkenti és elképzelhető, hogy a gráf megjelenítésbe is bezavar a túl sok csomópont. Jó lenne kipróbálni mindkét változatot, aztán eldönteni, hogy melyikkel érdemes folytatni. Mindegyiknek van előnye és hátránya is. Maga a triple storage meg a SparSQL is szög egyszerűnek tűnik szóval nem esek kétségbe akkor sem, ha arra kell áttérni. A mostani neo4j-s adatbázis meg egyszerűen konvertálható triple storage-re, elég csak lekérni minden node-ot és link-et, aztán exportálni őket bármilyen RDF formátumban. A többit a triple storage megoldja. Amiatt is talán szimpatikusabb az a fajta megoldás, hogy integrálható a rendszer az open linked data cloudba. Egy-egy témánál tudnék a LOV-ban leírt szóra hivatkozni, esetleg eleve linket használni label helyett. Szvsz, nagyon sok alias lesz majd a tudásgráfban az eltérő nyelvek, szinonímák, rövidítések, stb... miatt is, úgyhogy a LOV linkhez, mint szinonímához kötés nem fog gondot okozni. Ha eljutottam egy alap rendszerig legalább valamelyik részében a projeknek, akkor írok majd újra a technológiákról, amik segítettek.

Nincsenek megjegyzések:

Megjegyzés küldése