<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>analytics &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/analytics/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:58 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.smalsresearch.be/wp-content/uploads/2026/01/cropped-cropped-Smals_Research-32x32.png</url>
	<title>analytics &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Graphtechnologieën, de toepassingen ervan en tools: een overzicht (deel 2)</title>
		<link>https://www.smalsresearch.be/graphtechnologieen-toepassingen-en-tools-2/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 10:01:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21956</guid>

					<description><![CDATA[Dit tweede deel is gewijd aan graph databases en aan knowledge graphs, hun verschillen en tools.]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/graphes_applications_et_outils_2/">Version française</a></em></p>



<p>Deze blogpost volgt op <a href="/graphtechnologieen-toepassingen-en-tools/">deel 1</a>, die de grondbeginselen van graphtechnologieën, hun algoritmes en toepassingen toelicht. Dit tweede deel is gewijd aan graph databases en aan knowledge graphs, hun verschillen en tools.</p>



<h2 class="wp-block-heading">Graph databases</h2>



<p>Zoals bij een relationele database is ook bij een graph database het doel om gegevens op een persistente manier op te slaan en te beheren en om complexe query&#8217;s uit te voeren. Het verschil is dat de gegevens worden opgeslagen in de vorm van een graph, d.w.z. een verzameling nodes die onderling verbonden zijn door bogen.</p>
<p>Graph databases hebben een aantal voordelen ten opzichte van traditionele relationele databases, omdat het graph model eenvoudige, geoptimaliseerde doorloop van gegevens via bogen mogelijk maakt, terwijl het verkennen van relaties in een relationele database een groot aantal joints kan vereisen. Meer details over de voordelen van graph databases en de situaties waarin ze gebruikt kunnen worden, zijn te vinden in de blogposts [<a href="#footnote-1">1</a>] en [<a href="#footnote-2">2</a>].</p>
<p>De drie componenten van een graph database zijn nodes, bogen en properties. Deze eigenschappen kunnen ofwel op de nodes, ofwel op de bogen, ofwel op beide worden geplaatst. Laten we eens kijken naar het voorbeeld in Figuur 1, de node “Paul” kan bijvoorbeeld gelinkt worden met eigenschappen zoals zijn geboortedatum en adres, voor de nodes die films voorstellen kunnen we eigenschappen associëren zoals het jaar van uitgave, het budget en de IMDb identifier, en op de “RATED” relaties tussen een gebruiker en een film kunnen we eigenschappen associëren zoals de kijkdatum en de waardering (op 5) die de gebruiker aan de film geeft.</p>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2025/02/LPG_EN.png"><img fetchpriority="high" decoding="async" width="1024" height="373" src="/wp-content/uploads/2025/02/LPG_EN-1024x373.png" alt="" class="wp-image-21938" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-1024x373.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-300x109.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN-768x280.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/LPG_EN.png 1372w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 1: Voorbeeld van nodes en arcs met eigenschappen in Neo4J.</figcaption></figure>



<p>Merk op dat de graph algoritmes die we in <a href="/graphtechnologieen-toepassingen-en-tools/">deel 1</a> hebben gepresenteerd vaak niet zijn geïmplementeerd in graph database software, met een paar uitzonderingen (Neo4j en TigerGraph hebben een “Graph Data Science (GDS)” library die verschillende algoritmes bevat). Over het algemeen is het daarom nodig om de graph (of een deel ervan) te exporteren naar een analysetool.</p>



<h2 class="wp-block-heading">Tools voor graph databases</h2>



<p>Laten we eens snel kijken naar enkele van de bekendste tools. Merk op dat alle hieronder genoemde tools compatibel zijn met <a href="https://nl.wikipedia.org/wiki/ACID">ACID</a>-eigenschappen. Er bestaan een groot aantal tools voor het beheren van graph databases, en deze post noemt er maar een paar. Bekijk <a href="https://db-engines.com/en/ranking/graph+dbms">hier</a> gerust een uitgebreidere lijst.</p>
<ol>
<li>Neo4j</li>
</ol>
<p>Neo4j biedt het voordeel van een native graphformaat, wat het doorlopen van de graph zeer efficiënt maakt (en dus ook de query&#8217;s) De query&#8217;s gebeuren via Cypher, een taal die gemakkelijk te leren is, Neo4J is bovendien goed gedocumenteerd en beschikt over een grote community. Neo4J is in zijn “community”-versie gratis, maar een betalende versie bestaat ook (Neo4J Enterprise), de gratis versie kan een aantal schaalbaarheidsproblemen opleveren bij zeer grote hoeveelheden data.</p>
<ol start="2">
<li>ArangoDB</li>
</ol>
<p>ArangoDB biedt een flexibel datamodel (multimodel), met een graphmodel, een documentmodel (gebaseerd op JSON-objecten) en een key-value model. Het heeft zijn eigen querytaal, AQL (Arango Query Language), die ingewikkelder kan zijn om te leren dan Cypher vanwege het multimodel dat aan de grondslag ligt van ArangoDB. Het programma is betalend, hoewel er ook een opensourceversie bestaat (community edition), maar die is (uiteraard) beperkter dan de betalende versie.</p>
<ol start="3">
<li>TigerGraph</li>
</ol>
<p>TigerGraph is een betalende tool, die geoptimaliseerd is voor gebruik op zeer grote databases. De query&#8217;s gebeuren via de taal GSQL, die het mogelijk maakt om verschillende taken uit te voeren, maar die ingewikkelder is dan Cypher. TigerGraph beschikt over verschillende algoritmes die geïmplementeerd zijn via de GDS library.</p>
<ol start="4">
<li>Memgraph</li>
</ol>
<p>Memgraph is een speciale tool in die zin dat hij gegevens direct in het geheugen bewaart (in RAM). Dit levert zeer hoge prestaties op voor query&#8217;s, maar maakt het aan de andere kant moeilijk te gebruiken, of op zijn minst kostbaar in termen van infrastructuur, als de graph groot is, omdat je genoeg RAM moet hebben om de gegevens op te slaan. Memgraph wordt daarom over het algemeen gebruikt als prestaties de hoogste prioriteit hebben. Query&#8217;s worden gedaan in Cypher.</p>
<ol start="5">
<li>GraphDB</li>
</ol>
<p>GraphDB gebruikt een zeer specifiek graphmodel dat het Resource Description Framework (RDF) wordt genoemd. Dit framework, dat meer in detail zal worden besproken in de sectie Knowledge graphs, heeft zijn eigen querytaal die SPARQL heet. Er bestaat een gratis opensourceversie (graphDB Free) en een betalende enterpriseversie (graphDB Enterprise).</p>
<ol start="6">
<li>Apache TinkerPop en de implementaties ervan</li>
</ol>
<p>Het gaat om een opensource framework voor het definiëren van een graph database en een querytaal die “Gremlin” heet. Het wordt gebruikt in veel graph database management software, zoals JanusGraph (opensource software), Amazon Neptune dat andere modellen biedt dan die van TinkerPop zoals RDF, of nog andere tools voor databasebeheer die niet gespecialiseerd zijn in graphs, zoals Azure Cosmos DB.</p>



<h2 class="wp-block-heading">Knowledge graphs</h2>



<p>Laten we, voordat we naar werkwijzen en tools kijken, eerst definiëren wat een knowledge graph is en hoe deze verschilt van een graph database. Het is een graph die zich richt op semantiek en inferentie. Elke node vertegenwoordigt een concept en elke boog een relatie. Zoals we al hebben gezien in de blogposts [<a href="#footnote-3">3</a>, <a href="#footnote-4">4</a>], wordt een knowledge graph gedefinieerd als een graph die aan drie voorwaarden voldoet [<a href="#footnote-5">5</a>]:</p>
<ol>
<li>De integratie van informatie uit verschillende heterogene bronnen.</li>
</ol>
<p>Een knowledge graph verzamelt en combineert gegevens uit verschillende (on)gestructureerde bronnen op een coherente manier.</p>
<ol>
<li>Het gebruik van een ontologie.</li>
</ol>
<p>Een ontologie beschrijft formeel de concepten en relaties die aanwezig zijn in de graph, evenals eventuele beperkingen en regels. Het is dus een gestructureerd model dat de semantische basis biedt voor logische bewerkingen en coherentietesten. Een ontologieschema (zie Figuur 2), ook bekend als een &#8216;ontology graph&#8217;, biedt bijvoorbeeld een representatie van de entiteittypes en relaties van een knowledge graph, en biedt zo een conceptuele structuur zonder specifieke gegevens te bevatten.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/02/Ontology_EN.png"><img decoding="async" width="868" height="561" src="/wp-content/uploads/2025/02/Ontology_EN.png" alt="" class="wp-image-21937" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN.png 868w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN-300x194.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Ontology_EN-768x496.png 768w" sizes="(max-width: 868px) 100vw, 868px" /></a><figcaption class="wp-element-caption">Figuur 2: Voorbeeld van ontologieschema</figcaption></figure>



<ol>
<li>Inferentie van impliciete informatie op basis van expliciete informatie.</li>
</ol>
<p>Het is mogelijk om informatie te vinden die niet aanwezig was in de oorspronkelijke gegevens op basis van inferentieregels (zie Figuur 3).</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-6.png"><img decoding="async" width="748" height="287" src="/wp-content/uploads/2025/01/image-6.png" alt="" class="wp-image-21762" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6.png 748w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6-300x115.png 300w" sizes="(max-width: 748px) 100vw, 748px" /></a><figcaption class="wp-element-caption">Figuur 3: Voorbeelden van inferentie. Uit een vorige <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">blogpost</a>.</figcaption></figure>



<h2 class="wp-block-heading">Een overzicht van het RDF-model (Resource Description Framework)</h2>



<p>Het RDF-model, oorspronkelijk ontworpen voor de formele beschrijving van web resources en de metadata ervan, wordt vaak gebruikt bij knowledge graphs omdat het robuust semantisch rederneren en een zeer hoge interoperabiliteit biedt.</p>
<p>Een RDF-document heeft de vorm van een set RDF-triples waarbij elk triple een associatie is: subject (te beschrijven bron), predicaat (eigenschap van de bron), object (gegevens of andere bron).</p>
<p>Bijvoorbeeld:</p>
<p><code>:Alice&nbsp;:knows&nbsp;:Bob .<br />:Alice&nbsp;:livesIn&nbsp;:Paris .<br />:Alice&nbsp;:age 30 .</code></p>
<p>Deze semantic triples vertegenwoordigen dus zowel relaties tussen nodes (bijvoorbeeld de relatie tussen Alice en Bob) als eigenschappen (de leeftijd van Alice).</p>
<p>Kenmerkend voor RDF is dat elk element van een triple (met uitzondering van het object als het een simpele waarde is, zoals de waarde 30 voor de leeftijd van Alice) door een URI (<em>Uniform Resource Identifier</em>) of IRI (<em>Internationalized Resource Identifier</em>) moet worden geïdentificeerd. Dit zorgt voor een hoge mate van interoperabiliteit, omdat het voorkomt dat er duplicaten ontstaan wanneer verschillende informatiebronnen worden gecombineerd. Als we teruggaan naar de eerder gebruikte triples, krijgen we het volgende fragment (in Turtle-taal):</p>
<p><code>&lt;http://example.org/Alice&gt; &lt;http://example.org/knows&gt; &lt;http://example.org/Bob&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/livesIn&gt; &lt;http://example.org/Paris&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/age&gt; "30"^^&lt;http://www.w3.org/2001/XMLSchema#integer&gt; .</code></p>
<p>Het gebruik van RDF impliceert daarom een URI om alle concepten (subjecten, predikaten en objecten) in de graph te kunnen identificeren op dezelfde manier als een primaire sleutel in relationele databases.</p>
<p>Bovendien bestaan er twee hulpmiddelen om semantische betekenis toe te voegen aan RDF-gegevens door relaties te beschrijven om redeneren mogelijk te maken, namelijk RDFS (<em>RDF Schema</em>) en OWL (<em>Web Ontology Language</em>). Zoals we al hebben gezien, vereist RDF dat elk concept wordt geïdentificeerd door een URI. RDFS en OWL bieden een voorgedefinieerde set URI&#8217;s voor veelgebruikte concepten waarnaar verwezen kan worden in RDF. Dit maakt het mogelijk om een gestandaardiseerd gemeenschappelijk vocabularium te hebben, wat de integratie met andere databanken vergemakkelijkt, en om inferentieregels op te stellen. Aangezien OWL en RDFS <strong>gestandaardiseerde concepten</strong> aanbieden, kunnen OWL-gebaseerde &#8216;reasoners&#8217; (zoals FaCT++ of HermiT) op een systematische manier impliciete relaties afleiden of tegenstrijdigheden detecteren op basis van de ontologie.</p>
<p>Query&#8217;s op een RDF database worden gedaan via SPARQL.</p>



<h2 class="wp-block-heading">Alternatieven voor RDF en tools voor het werken met een knowledge graph</h2>



<p>Natuurlijk is het voor een knowledge graph niet noodzakelijk om het RDF-model te gebruiken. Een graph wordt als een knowledge graph beschouwd als voldaan is aan de 3 voorwaarden die beschreven zijn aan het begin van het hoofdstuk over knowledge graphs. Het is dus perfect mogelijk om een knowledge graph te creëren in een klassieke graph databasemanagementtool, zolang de implementatie data uit verschillende bronnen combineert, voldoet aan een ontologie en gebruikt kan worden voor semantische inferentie.</p>
<p>De voornaamste kracht van het RDF-model is zijn hoge standaardisatieniveau. Enerzijds laat het een hoge mate van interoperabiliteit toe dankzij de URI-identificatievereiste en de gestandaardiseerde woordenschat en querytaal. Anderzijds bieden de RDFS- en OWL-uitbreidingen een schat aan semantische informatie voor automatisch redeneren. Omgekeerd beperkt de complexiteit het gebruik in zakelijke toepassingen waar deze semantische nauwkeurigheid niet noodzakelijk is en waar het gebruik van een eenvoudiger graphmodel (zoals Neo4j of TigerGraph) volstaat. Het gebruik van eenvoudigere modellen heeft het voordeel dat ze eenvoudiger en sneller op te zetten zijn en optimale query prestaties bieden, maar ten koste van het verlies van de semantische rijkdom die RDF biedt.</p>
<p>In deze sectie worden (niet-exhaustieve) tools met betrekking tot RDF voorgesteld, maar zoals vermeld blijven de tools die eerder werden vermeld voor graph databases geldig voor het creëren van een knowledge graphs zolang aan de voorwaarden wordt voldaan.</p>
<p>Hier is een lijst van enkele tools gerelateerd aan knowledge graphs in RDF:</p>



<ul class="wp-block-list">
<li><strong>Ontwerp van ontologieën</strong>: de opensourcetool <a href="https://protege.stanford.edu/">Protégé</a> wordt vaak gebruikt om ontologieën te creëren. De website <a href="https://schema.org/">Schema.org</a> biedt een groot aantal standaard schema&#8217;s en vocabulaires voor verschillende domeinen, maar wordt over het algemeen gebruikt voor knowledge graphs met betrekking tot webgegevens.</li>



<li><strong>Gegevens omzetten naar RDF</strong>: de tool <a href="https://www.w3.org/TR/r2rml/">R2RML</a> kan gebruikt worden om relationele gegevens om te zetten in RDF. Ook het vermelden waard is <a href="https://d2rq.org/">D2RQ</a>, dat toegang biedt tot een relationele database via een virtuele RDF knowledge graph.</li>



<li><strong>Dataopslag</strong>: naast de hierboven genoemde oplossingen (GraphDB en Amazon Neptune), kunnen we ook BlazeGraph en Apache Jena (opensource) vermelden, alsook Stardog en AllegroGraph (businessoplossingen).</li>



<li><strong>OWL reasoners</strong>: er bestaan veel OWL reasoners. Ze worden echter niet allemaal actief onderhouden of zijn niet altijd bruikbaar. De meest recente OWL reasoners lijst die we konden vinden dateert uit 2023 en is <a href="https://arxiv.org/pdf/2309.06888">hier</a> beschikbaar [<a href="#footnote-6">6</a>].</li>
</ul>



<p>Tot slot willen we nog het RDF4J framework (Java framework) en rdflib (python library) vermelden voor interactie met RDF data.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p>Laten we afsluiten met een korte samenvatting van de belangrijkste concepten die een wiskundige graph onderscheiden van een graph database en een knowledge graph.</p>
<p>Een wiskundige graph is een verzameling van nodes en bogen die gemakkelijk kan worden voorgesteld in matrixvorm zodat er algoritmes op kunnen worden toegepast. Het is de onderliggende structuur van elke graph database of knowledge graph.</p>
<p>Een graph database bestaat uit een set van nodes, bogen en properties. De nadruk ligt op het opslaan van grote hoeveelheden gegevens binnen een graph structuur en het optimaliseren van query&#8217;s.</p>
<p>Een knowledge graph heeft als doel om kennis binnen een graph weer te geven met de nadruk op:</p>



<ul class="wp-block-list">
<li><strong>Semantiek</strong>: de graph volgt een ontologie en relaties hebben betekenis.</li>



<li><strong>Integratie</strong>: verschillende databronnen zijn gekoppeld in een uniforme graph.</li>



<li><strong>Inferentie</strong>: het vermogen om kennis af te leiden door redeneren.</li>
</ul>



<p>Daarom is het gericht op de integratie en de semantische verrijking van data.</p>
<p>Het spreekt voor zich dat deze post slechts een tipje van de sluier oplicht van de uitgebreide literatuur over graphs en de verschillende toepassingen ervan. Vele punten moeten nog verder uitgewerkt worden en zullen ongetwijfeld het onderwerp zijn van toekomstige blogposts.</p>



<h2 class="wp-block-heading">Referenties</h2>



<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-4">[4] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-5">[5] Ehrlinger, L., &amp; Wöß, W. (2016). Towards a definition of knowledge graphs. SEMANTiCS 2016, 48(1-4), 2.</p>
<p id="footnote-6">[6] <a href="https://arxiv.org/pdf/2309.06888">Abitch, K., (2023). &#8220;OWL Reasoners still useable in 2023&#8221;</a></p>
<hr />
<p><em>Dit is een ingezonden bijdrage van Pierre Leleux, data scientist et network data analyst bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Graphtechnologieën, de toepassingen ervan en tools: een overzicht (deel 1)</title>
		<link>https://www.smalsresearch.be/graphtechnologieen-toepassingen-en-tools/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 20 Feb 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21941</guid>

					<description><![CDATA[Dit eerste deel richt zich op graphs in hun fundamentele wiskundige vorm.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphes_applications_et_outils/"><em>Version française</em></a></p>



<p>Dankzij hun vermogen om complexe relaties tussen gegevens te begrijpen en te benutten, worden graphtechnologieën steeds populairder op veel gebieden van kunstmatige intelligentie en gegevensbeheer. Deze blog heeft al meerdere artikels gepubliceerd over verschillende graphtechnologieën, waaronder graph databases [<a href="#footnote-1">1</a>, <a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>] en knowledge graphs [<a href="#footnote-4">4</a>, <a href="#footnote-5">5</a>, <a href="#footnote-6">6</a>].</p>
<p>Maar wat betekent de term &#8216;graph&#8217; eigenlijk? Tussen de wiskundige modellen die als basis dienen, graph databases en knowledge graphs, kan het moeilijk zijn om je weg te vinden en de tools te identificeren die het best passen bij je behoeften. Hierbij komt nog het feit dat werken met graph data op het eerste gezicht complex kan lijken en dat het gebruik van graphalgoritmes niet tot de kernvaardigheden van de meeste data engineers en data scientists behoort. Dit alles kan het creëren en exploiteren van graph data en modellen tot een ontmoedigend vooruitzicht maken.</p>
<p>Dit artikel geeft daarom een overzicht van graphtechnologieën, waarbij de drie bovengenoemde aspecten worden verkend:</p>



<ul class="wp-block-list">
<li>Graphs vanuit een theoretisch oogpunt, hun eigenschappen en hun belangrijkste toepassingen;</li>



<li>Graph databases, gespecialiseerd in de opslag en exploitatie van gekoppelde gegevens;</li>



<li>Knowledge graphs, die kennis semantisch structureren.</li>
</ul>



<p>Daarom is het de bedoeling om deze concepten en de – soms vage – grenzen ertussen te presenteren, en hun toepassingen en de bijbehorende tools en software te belichten.</p>
<p>Dit artikel is opgesplitst in twee delen. Het eerste deel richt zich op graphs in hun fundamentele wiskundige vorm, hoe ze kunnen worden gecodeerd en geëxploiteerd, en de belangrijkste algoritmes en de toepassingen ervan. Het <a href="/graphtechnologieen-toepassingen-en-tools-2/">tweede deel</a> richt zich op graph databases en knowledge graphs, en de bijbehorende tools.</p>



<h2 class="wp-block-heading">Back to basics: graphs als wiskundige structuur</h2>



<p>Laten we eerst definiëren wat een graph is. Deze theoretische basis is cruciaal aangezien de concepten van graph databases en knowledge graphs op deze basis zijn gebouwd. Deze meer geavanceerde concepten kunnen op elk moment worden teruggebracht tot hun onderliggende wiskundige vorm en bij uitbreiding zijn alle modellen en algoritmes die hieronder worden gepresenteerd toepasbaar op graph databases en knowledge graphs.</p>
<p>In zijn meest basale vorm is een graph een wiskundige structuur die bestaat uit een verzameling nodes en arcs die de nodes paarsgewijs verbinden. Nodes stellen meestal objecten of mensen voor en bogen stellen links tussen deze objecten of mensen voor. In het geval van een sociaal netwerk kan een boog bijvoorbeeld een vriendschapsband tussen twee gebruikers voorstellen.</p>
<p>De graph kan zowel gericht als ongericht zijn. In het geval van een ongerichte graph zijn de relaties tussen nodes altijd wederkerig (bijvoorbeeld een vriendschapslink op Facebook), terwijl in een gerichte graph een boog die van node i naar node j gaat, niet noodzakelijk een boog in de tegenovergestelde richting impliceert (bijvoorbeeld een website A die een link heeft naar een website B).</p>
<p>Afhankelijk van de situatie of toepassing kan een graph al dan niet gewogen zijn. Een graph is als gewogen omschreven als er aan elke boog een gewicht wordt toegekend dat varieert van boog tot boog en dat het mogelijk maakt om bepaalde bogen een grotere “kracht” te geven. De interpretatie van deze gewichten hangt af van de context; ze kunnen bijvoorbeeld een mate van verwantschap, gelijkenis, afhankelijkheid, enz. weergeven.</p>
<p>Een graph wordt over het algemeen voorgesteld door een vierkante matrix van dimensie (<em>n</em> × <em>n</em>), waarbij n het aantal nodes in de graph voorstelt, genaamd een adjacency matrix (aangeduid als <strong>A</strong>). Het element op positie (<em>i</em>, <em>j</em>) in de matrix is het gewicht van de boog van node <em>i</em> naar node <em>j</em> als deze bestaat, en anders 0 (zie figuur 1). De adjacency matrix is gewoon een binaire matrix als de graph ongewogen is.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/02/Adjacency.png"><img loading="lazy" decoding="async" width="1024" height="465" src="/wp-content/uploads/2025/02/Adjacency-1024x465.png" alt="" class="wp-image-21940" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-1024x465.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-300x136.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency-768x349.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Adjacency.png 1089w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 1: Matrixvoorstelling van een gewogen gerichte graph.</figcaption></figure>



<p>Hier gaat een boog van gewicht 3 van node 1 naar node 3 en een boog van gewicht 5 in de tegenovergestelde richting. De matrix A bevat daarom de waarde 3 op positie (1,3) en de waarde 5 op positie (3,1).</p>
<p>Merk op dat adjacency matrices vaak grotendeels nullen bevatten en daarom over het algemeen worden gecodeerd met behulp van <em>sparse matrices</em> om het geheugen te optimaliseren.</p>
<p>Deze voorstelling van een graph in matrixvorm maakt het veel eenvoudiger om algoritmes op de graph te gebruiken, aangezien veel graphalgoritmes, die soms complex zijn in de vorm van vergelijkingen, vaak gereduceerd kunnen worden tot een reeks elementaire matrixbewerkingen. Dit maakt hun uitvoering zeer efficiënt in wetenschappelijke programmeertalen die geoptimaliseerd zijn voor matrixberekeningen, zoals R, MATLAB, Julia of Python (numpy, scipy).</p>



<h2 class="wp-block-heading">Gebruiken van graphalgoritmes en praktische toepassingen</h2>



<p>Om het nut van een graph beter te begrijpen, kijken we eerst naar de hoofdcategorieën van graphalgoritmes, met voor elke categorie een paar voorbeelden van het praktische gebruik ervan.</p>



<ul class="wp-block-list">
<li>Het optimale pad bepalen om een paar nodes te verbinden.</li>
</ul>



<p>Hierbij kan het gaan om het minimaliseren van het aantal overgangen dat nodig is om van de ene node naar de andere te gaan of, als er kosten zijn verbonden aan elke boog, het vinden van het pad met de laagste kosten. De kosten kunnen gedefinieerd worden als het gewicht van een boog, of gecodeerd worden in een tweede matrix (kostenmatrix, onafhankelijk van de adjacency matrix). De manier waarop de kosten van een boog worden bepaald hangt af van de toepassing, afhankelijk van wat je wilt minimaliseren. Dit kan bijvoorbeeld een maat voor de lengte van de boog zijn (de lengte van een weg), een maat voor de tijd (de tijd die nodig is om de boog over te steken) of financiële kosten. Dit type algoritme kan worden gebruikt in de logistiek om transport te optimaliseren. De bekendste algoritmes zijn de algoritmes <a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra</a>, <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a> en <a href="https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm">Bellman-Ford</a>.</p>



<ul class="wp-block-list">
<li>Maatstaven bepalen voor gelijkenis of afstand tussen nodes in een graph.</li>
</ul>



<p>Afhankelijk van de context kan het nuttig zijn om een similariteitsmaat te bepalen tussen twee nodes in een graph om te bepalen hoe dicht ze bij elkaar liggen. Similariteitsmaten worden vaak gebruikt in aanbevelingstoepassingen. Door een consumptiegraph te ontwerpen die gebruikers koppelt aan de producten die ze hebben geconsumeerd, maakt het meten van de similariteit tussen nodes het voor een bepaalde gebruiker mogelijk om gebruikers met een gelijkaardig consumptieprofiel te identificeren, gebaseerd op hun connecties met de producten. Een product wordt meestal aanbevolen aan een gebruiker omdat het door veel vergelijkbare gebruikers is geconsumeerd (<em>user-based recommendation</em>) of omdat het product vergelijkbaar is met producten die de gebruiker al heeft geconsumeerd (<em>item-based recommendation</em>). De bekendste similariteitsmaten zijn over het algemeen gebaseerd op <em>common-neighbour</em> maten (het aantal buren dat twee nodes gemeen hebben), zoals de Jaccard-index of cosinus-similariteit, maar andere methoden houden ook rekening met indirecte buren, zoals de Katz-kernel [<a href="#footnote-12">12</a>] (ook bekend als de “von Neumann kernel”). Zie [<a href="#footnote-13">13</a>] voor enkele klassieke similariteitsmaten en het gebruik ervan in aanbevelingen.</p>
<p>Het tegenovergestelde van een similariteitsmaat is een dissimilariteitsmaat, die toeneemt naarmate twee nodes verder van elkaar verwijderd zijn. Een afstandsmaat is per definitie een dissimilariteit, omdat deze toeneemt naarmate twee nodes verder van elkaar verwijderd zijn. De bekendste en meest intuïtieve maat voor dissimilariteit tussen twee nodes is de lengte van het kortste pad tussen hen.</p>



<ul class="wp-block-list">
<li>De centraliteit meten.</li>
</ul>



<p>Een maat voor de centraliteit van een node of boog, soms ook een <em>prestige measure</em> genoemd, wordt gebruikt om te kwantificeren hoe belangrijk een node of boog is binnen een graph. De bekendste maat voor centraliteit is de score die wordt berekend door het algoritme PageRank [<a href="#footnote-14">14</a>]. PageRank werd oorspronkelijk ontwikkeld en gebruikt door de zoekmachine Google om webpagina&#8217;s te rangschikken. Het is gebaseerd op een willekeurige beweging in een graph waarin elke node een webpagina voorstelt en elke gerichte boog een hyperlink tussen twee pagina&#8217;s voorstelt. Het PageRank-algoritme kent naast het rangschikken van webpagina&#8217;s heel wat andere toepassingen:</p>
<blockquote>
<p>“Google’s PageRank method was developed to evaluate the importance of web-pages via their link structure. The mathematics of PageRank, however, are entirely general and apply to any graph or network in any domain. Thus, PageRank is now regularly used in bibliometrics, social and information network analysis, and for link prediction and recommendation. It’s even used for systems analysis of road networks, as well as biology, chemistry, neuroscience, and physics.” – <em>Gleich (2014) [<a href="#footnote-15">15</a>]</em></p>
</blockquote>
<p>Een ander bekend algoritme dat lijkt op PageRank is het HITS-algoritme (Hyperlink-Induced Topic Search) [<a href="#footnote-16">16</a>].</p>
<p>Als we het over centraliteit hebben, is PageRank vaak het algoritme dat wordt voorgesteld, maar centraliteit kan op verschillende manieren worden begrepen. Het kan bijvoorbeeld verwijzen naar een node of boog die een kritieke intermediair is voor communicatie en informatieoverdracht binnen het netwerk. Centrale nodes identificeren kan het bijvoorbeeld mogelijk maken om informatie optimaal te verspreiden in een netwerk of om nodes of bogen op te sporen die van vitaal belang zijn voor de graph (waarvan de verdwijning de informatieoverdracht in de graph ernstig zou belemmeren). Veel voorkomende maatstaven voor node- of boog-centraliteit op basis van dit principe gebruiken over het algemeen tussen-maatstaven (<em>betweenness centrality</em>).</p>
<p>Centraliteit kan ook worden beschouwd als een maat voor de representativiteit van een node binnen een gemeenschap (in termen van nabijheid tot de andere nodes in de graph), in dit geval gemeten door middel van een maat van nabijheid (<em>closeness centrality</em>). Merk op dat we het gebruik van verschillende centraliteitsalgoritmes in een fraudedetectiecontext al hebben vermeld in eerdere blogposts, met name PageRank (in de vorm van een verspreidingsalgoritme) [<a href="#footnote-7">7</a>] en betweenness centrality [<a href="#footnote-8">8</a>].</p>



<ul class="wp-block-list">
<li>De graph partitioneren.</li>
</ul>



<p>Beter bekend als “<em>clustering</em>”, bestaat graph partitioning uit het groeperen van nodes in communities (clusters) zodat nodes binnen een community “similair” zijn en twee nodes die tot verschillende communities behoren “dissimilair” zijn. Dit partitioneren kan op verschillende manieren gebeuren. Door bijvoorbeeld een maat voor similariteit of dissimilariteit tussen de nodes in de graph te gebruiken en vervolgens een clusteralgoritme zoals k-medoids uit te voeren op basis van deze (dis)similariteiten.</p>
<p>Een andere manier is om direct op de graph te werken en te proberen dichte gebieden binnen de graph te detecteren. Dit kan worden gedaan met behulp van labelpropagatie [<a href="#footnote-17">17</a>], of door het optimaliseren van een objectieve functie die de kwaliteit van de partitionering meet, zoals modulariteit. Het bekendste algoritme voor modulariteitsoptimalisatie is de Louvain-methode [<a href="#footnote-18">18</a>].</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-2.png"><img loading="lazy" decoding="async" width="508" height="444" src="/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-21743" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2.png 508w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2-300x262.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /></a><figcaption class="wp-element-caption">Figuur 2: Voorbeeld van een eenvoudige graph met 3 communities.</figcaption></figure>



<p>We hebben het gebruik van ‘graph partitioning’-methodes al genoemd in verschillende blogposts [<a href="#footnote-9">9</a>, <a href="#footnote-10">10</a>]. Deze algoritmes worden met name gebruikt in communicatie en marketing om gerichte advertenties te produceren.</p>



<ul class="wp-block-list">
<li>Kenmerken of representaties extraheren.</li>
</ul>



<p>De traditionele modellen voor <em>machine learning</em> hebben als limiet dat ze alleen rekening houden met de gegevens (continue en categorische variabelen) die betrekking hebben op de waarnemingen, en de informatie negeren die kan worden afgeleid uit de relaties tussen de waarnemingen. Indien er relaties bestaan tussen deze gegevens, kan er een graph worden geconstrueerd en kunnen de machine learning modellen worden verrijkt door nieuwe variabelen uit de graph toe te voegen (er is ook een blogpost over dit onderwerp [<a href="#footnote-11">11</a>]). Deze nieuwe variabelen kunnen bijvoorbeeld een maat voor centraliteit zijn (continue variabele) of het resultaat van partitionering (categorische variabele), of ze kunnen worden verkregen met behulp van ‘graph embedding’-methoden (continue variabelen). Graph embedding moet leiden tot een representatie van de nodes in een multidimensionale ruimte. Deze ruimte wordt zo berekend dat als twee nodes dicht bij elkaar liggen in de graph, ze ook dicht bij elkaar liggen in deze ruimte. Zo&#8217;n ruimte kan worden verkregen met methoden die direct op de graph werken (node2vec [<a href="#footnote-19">19</a>], fastRP [<a href="#footnote-20">20</a>]) of door te werken op basis van bijvoorbeeld similariteiten (kernelPCA [<a href="#footnote-21">21</a>]) of afstanden (t-SNE [<a href="#footnote-22">22</a>]). Zie figuur 3 voor een voorbeeld van een tweedimensionale weergave van een eenvoudige gewogen graph.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/02/Representation_NL.png"><img loading="lazy" decoding="async" width="1024" height="651" src="/wp-content/uploads/2025/02/Representation_NL-1024x651.png" alt="" class="wp-image-21939" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-1024x651.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-300x191.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL-768x489.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/02/Representation_NL.png 1050w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Figuur 3: Weergave van een graph in een 2-dimensionale ruimte met behulp van node2vec (boven) en t-SNE (onder)</figcaption></figure>



<ul class="wp-block-list">
<li>Links voorspellen.</li>
</ul>



<p>Het concept van linkvoorspelling is relatief eenvoudig: het gaat om het inschatten van de waarschijnlijkheid dat er een link bestaat tussen twee nodes. Dit maakt het mogelijk om potentieel ontbrekende bogen (incomplete graph) te detecteren, of om het verschijnen van nieuwe bogen te voorspellen. Aanbevelingsalgoritmes zijn een veelvoorkomend voorbeeld van het voorspellen van links tussen gebruikers en producten, maar deze algoritmes kunnen ook worden gebruikt om potentiële, nog onbekende interacties binnen biologische netwerken te detecteren. Dit type voorspelling wordt vaak verricht met behulp van methoden gebaseerd op overeenkomsten tussen nodes, matrixfactorisatie, probabilistische modellen of kunstmatige neurale netwerken [<a href="#footnote-23">23</a>].</p>



<ul class="wp-block-list">
<li></li>
</ul>



<h2 class="wp-block-heading">Welke hulpmiddelen?</h2>



<p>Zoals hierboven vermeld betekent de weergave van graphs in matrixvorm dat ze efficiënt gebruikt kunnen worden in wetenschappelijke programmeertalen. Er bestaan echter ook library&#8217;s of softwares die gebruikt kunnen worden om graphs te creëren en te exploiteren.</p>
<p>Enkele voorbeelden van library&#8217;s voor het werken met graphs. Deze library&#8217;s kunnen worden gebruikt om een graph object te maken dat op verschillende manieren kan worden opgebouwd. Het kan leeg worden opgebouwd, voordat handmatig nodes en bogen worden toegevoegd, of vanuit een adjacency matrix of een lijst van bogen, of rechtstreeks vanuit bestanden die een beschrijving van de graph bevatten in de vorm van een lijst van nodes en bogen. Voorbeelden van graph-georiënteerde library’s zijn igraph, NetworkX, graph-tool of NetworKit voor Python, igraph voor R en Graphs voor Julia.</p>
<p>Voor gebruikers die al een van deze talen kennen, hebben deze library&#8217;s het voordeel dat ze intuïtief en gemakkelijk te leren zijn en veel voorgeïmplementeerde graph algoritmes bevatten.</p>



<h2 class="wp-block-heading">Conclusie</h2>



<p>In het eerste deel van deze blogpost hebben we ons toegespitst op de verschillende graph tools, we hebben de graphtheorie kort ingeleid, alsook de voornaamste toepassingen en algoritmes voor graphs. Het <a href="/graphtechnologieen-toepassingen-en-tools-2/">tweede deel</a> richt zich op graph databases en knowledge graphs, het verschil tussen deze concepten en de bijbehorende tools.</p>



<h2 class="wp-block-heading">Referenties</h2>



<p>Enkele blogposts van Smals Research over graphs:</p>
<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/een-graph-database-verkennen/">Een graph database verkennen</a></p>
<p id="footnote-4">[4] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-5">[5] <a href="/les-graphes-de-connaissance-quelques-applications/">Les graphes de connaissance&nbsp;: quelques applications</a></p>
<p id="footnote-6">[6] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-7">[7] <a href="/un-fraudeur-ne-fraude-jamais-seul/">Un fraudeur ne fraude jamais seul</a></p>
<p id="footnote-8">[8] <a href="/un-fraudeur-ne-fraude-jamais-seul-partie-2/">Un fraudeur ne fraude jamais seul, partie 2</a></p>
<p id="footnote-9">[9] <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Ce qu’un réseau social peut nous apprendre</a></p>
<p id="footnote-10">[10] <a href="/facebook-peut-on-vraiment-cacher-sa-liste-damis/">Facebook&nbsp;: peut-on vraiment cacher sa liste d’amis&nbsp;?</a></p>
<p id="footnote-11">[11] <a href="/ameliorer-le-machine-learning-avec-des-donnees-graphes/">Améliorer le Machine Learning avec des données graphes</a><br /><br />Wetenschappelijke bronnen:</p>
<p id="footnote-12">[12] Katz, L. (1953). A new status index derived from sociometric analysis. Psychometrika, 18(1), 39-43.</p>
<p id="footnote-13">[13] Fouss, F., Pirotte, A., Renders, J. M., &amp; Saerens, M. (2007). Random-walk computation of similarities between nodes of a graph with application to collaborative recommendation. IEEE Transactions on knowledge and data engineering, 19(3), 355-369.</p>
<p id="footnote-14">[14] Page, L., Brin, S., Motwani, R., &amp; Winograd, T. (1998). The pagerank citation ranking: Bringing order to the web. Technical report, Stanford Digital Libraries.</p>
<p id="footnote-15">[15] Gleich, D. F. (2015). PageRank beyond the web. siam REVIEW, 57(3), 321-363.</p>
<p id="footnote-16">[16] Kleinberg, J. M. (1999). Authoritative sources in a hyperlinked environment. Journal of the ACM (JACM), 46(5), 604-632.</p>
<p id="footnote-17">[17] Raghavan, U. N., Albert, R., &amp; Kumara, S. (2007). Near linear time algorithm to detect community structures in large-scale networks. Physical Review E—Statistical, Nonlinear, and Soft Matter Physics, 76(3), 036106.</p>
<p id="footnote-18">[18] Blondel, V. D., Guillaume, J. L., Lambiotte, R., &amp; Lefebvre, E. (2008). Fast unfolding of communities in large networks. Journal of statistical mechanics: theory and experiment, 2008(10), P10008.</p>
<p id="footnote-19">[19] Grover, A., &amp; Leskovec, J. (2016). node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 855-864).</p>
<p id="footnote-20">[20] Chen, H., Sultan, S. F., Tian, Y., Chen, M., &amp; Skiena, S. (2019, November). Fast and accurate network embeddings via very sparse random projection. In Proceedings of the 28th ACM international conference on information and knowledge management (pp. 399-408).</p>
<p id="footnote-21">[21] Schölkopf, B., &amp; Smola, A. J. (2002). Learning with kernels: support vector machines, regularization, optimization, and beyond.</p>
<p id="footnote-22">[22] Van der Maaten, L., &amp; Hinton, G. (2008). Visualizing data using t-SNE. Journal of machine learning research, 9(11).</p>
<p id="footnote-23">[23] Lü, L., &amp; Zhou, T. (2011). Link prediction in complex networks: A survey. Physica A: statistical mechanics and its applications, 390(6), 1150-1170.</p>



<hr />
<p><em>Dit is een ingezonden bijdrage van Pierre Leleux, data scientist et network data analyst bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les technologies graphes, leurs applications et leurs outils: un tour d’horizon (Partie 2)</title>
		<link>https://www.smalsresearch.be/graphes_applications_et_outils_2/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Thu, 06 Feb 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21755</guid>

					<description><![CDATA[Cette seconde partie est consacrée aux bases de données orientées graphe et aux graphes de connaissances.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphtechnologieen-toepassingen-en-tools-2/"><em>Nederlandstalige versie</em></a></p>



<p>Cet article fait suite à la <a href="/graphes_applications_et_outils/">Partie 1</a>, qui présente les fondamentaux des technologies graphes, algorithmes et applications. Cette seconde partie est consacrée aux bases de données orientées graphe et aux graphes de connaissances, leurs différences et leurs outils.</p>



<h2 class="wp-block-heading">Les bases de données orientées graphe</h2>



<p>A l’instar d’une base de données relationnelle, l’objectif d’une base de données orientée graphe est de pouvoir stocker et gérer des données de manière persistante et d’effectuer des requêtes complexes. La différence étant que les données sont stockées sous la forme d’un graphe, à savoir un ensemble de nœuds interconnectés par le biais d’arcs.</p>
<p>Les bases de données orientées graphe ont plusieurs avantages par rapport aux bases de données relationnelles classiques, car le modèle de graphe permet une traversée simple et optimisée des données via les arcs, là où l’exploration de relations dans une base de données relationnelle peut demander un nombre important de jointures. Plus de détails sur les avantages des bases de données orientées graphe, ainsi que les cas de figure où les utiliser, se trouvent dans les articles de blog [<a href="#footnote-1">1</a>] et [<a href="#footnote-2">2</a>].</p>
<p>Les trois composants de toute base de données orientée graphe sont&nbsp;: nœuds, arcs et propriétés. Ces propriétés peuvent être placées soit sur les nœuds, soit sur les arcs, ou sur les deux. Si nous considérons le petit exemple illustratif dans la Figure 1, le nœud « Paul » peut par exemple être associé à des propriétés telles que sa date de naissance et son adresse, pour les nœuds représentant des films on peut y associer les propriétés telles que l’année de sortie, le budget et son identifiant IMDb, et sur les relations « A_VU » entre un utilisateur et un film, on pourrait associer des propriétés telles que la date de visionnage et la note (sur 5) que l’utilisateur donne au film.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-4.png"><img loading="lazy" decoding="async" width="940" height="395" src="/wp-content/uploads/2025/01/image-4.png" alt="" class="wp-image-21758" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4.png 940w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4-300x126.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-4-768x323.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption class="wp-element-caption">Figure 1&nbsp;: Exemple de nœuds et d’arcs avec des propriétés dans Neo4J.</figcaption></figure>



<p>Il est à noter que les algorithmes de graphe que nous avons présentés dans la <a href="/graphes_applications_et_outils/">Partie 1</a> ne sont souvent que peu ou pas implémentés dans les logiciels de bases de données orientées graphe, à quelques exceptions près (Neo4j et TigerGraph disposent d’une libraire « Graph Data Science (GDS) » contenant plusieurs algorithmes). Il est donc généralement nécessaire d’exporter le graphe (ou une partie de celui-ci) vers un outil d’analyse.</p>



<h2 class="wp-block-heading">Les outils pour bases de données orientées graphe</h2>



<p>Passons rapidement en revue quelques-uns des outils les plus connus. Notez que tous les outils listés ci-après sont compatibles avec les propriétés <a href="https://fr.wikipedia.org/wiki/Propri%C3%A9t%C3%A9s_ACID">ACID</a>. Il existe un grand nombre d’outils pour la gestion de base de données graphe, cet article n’en mentionne qu’une partie. N’hésitez pas à aller jeter un coup d’œil à une liste plus détaillée trouvable <a href="https://db-engines.com/en/ranking/graph+dbms">ici</a>.</p>
<ol>
<li>Neo4j</li>
</ol>
<p>Neo4j offre l’avantage d’avoir un format de graphe natif, ce qui rend très efficace la traversée du graphe (et donc, les requêtes). Les requêtes se font en Cypher, un langage facile à prendre en main, et Neo4J est bien documenté et dispose d’une grande communauté. Neo4J dans sa version « community » est gratuit, mais une version payante existe (Neo4j Enterprise), et la version gratuite peut poser quelques soucis de scalabilité face à de très grandes quantités de données.</p>
<ol start="2">
<li>ArangoDB</li>
</ol>
<p>ArangoDB propose un modèle de données flexible (multi-modèle), intégrant un modèle graphe, un modèle document (basé sur des objets JSON) et un modèle clé-valeur. Il dispose de son propre langage de requêtes AQL (Arango Query Language) qui peut être plus compliqué à prendre en main que Cypher en raison du multi-modèle sous-jacent à ArangoDB. C’est un logiciel payant, bien qu’une version open source existe (community edition), mais est (évidement) plus limitée que la version payante.</p>
<ol start="3">
<li>TigerGraph</li>
</ol>
<p>TigerGraph est un outil payant, optimisé pour pouvoir être utilisés sur de très grandes bases de données. Les requêtes se font via le langage GSQL, qui est un langage permettant d’effectuer de nombreuses tâches, mais plus compliqué à prendre en main que Cypher. TigerGraph dispose de nombreux algorithmes implémentés via la librairie GDS.</p>
<ol start="4">
<li>Memgraph</li>
</ol>
<p>Memgraph est un outil particulier en ce sens qu’il stocke les données directement en mémoire (dans la RAM). Cela lui permet d’avoir des très hautes performances pour le requêtage, mais en contrepartie cela rend son utilisation difficile, ou du moins coûteuse en termes d’infrastructure, lorsque le graphe est de grande taille, puisqu’il faut avoir suffisamment de RAM que pour stocker les données. Memgraph s’utilise donc généralement lorsque les performances sont la première priorité. Les requêtes se font en Cypher.</p>
<ol start="5">
<li>GraphDB</li>
</ol>
<p>GraphDB utilise un modèle de graphe bien spécifique appelé Resource Description Framework (RDF). Ce framework, qui sera discuté un peu plus en détails dans la section relative aux graphes de connaissances, a son langage de requête propre nommé SPARQL. Il existe en version gratuite open-source (graphDB Free) et en version entreprise payante (graphDB Enterprise).</p>
<ol start="6">
<li>Apache TinkerPop et ses implémentations</li>
</ol>
<p>Il s’agit d’un framework open-source qui vise à définir un modèle de base de données graphes, ainsi qu’un langage de requête nommé « Gremlin ». Il est utilisé dans de nombreux logiciels de gestion de base de données orientées graphe, tels que JanusGraph (un logiciel open-source), Amazon Neptune qui propose d’autres modèles que celui de TinkerPop tels que RDF, ou encore des outils de gestion de base de données non spécialisés en graphe, tels qu’Azure Cosmos DB.</p>



<h2 class="wp-block-heading">Les graphes de connaissances</h2>



<p>Avant de s’intéresser aux pratiques et outils, commençons dans un premier temps par définir ce qu’est un graphe de connaissances et ce qui le distingue d’une base de données orientée graphe. Il s’agit d’un graphe qui met l’accent sur la sémantique et sur l’inférence. Chaque nœud représente un concept et chaque arc une relation. Comme nous l’avons déjà vu dans les articles de blog [<a href="#footnote-3">3</a>, <a href="#footnote-4">4</a>], un graphe de connaissances se définit comme un graphe remplissant trois conditions [<a href="#footnote-5">5</a>]&nbsp;:</p>
<ol>
<li>L’intégration d’informations en provenance de différentes sources hétérogènes.</li>
</ol>
<p>Un graphe de connaissances rassemble et combine des données issues de diverses sources (structurées ou non) de manière cohérente.</p>
<ol start="2">
<li>L’utilisation d’une ontologie.</li>
</ol>
<p>Une ontologie décrit de façon formelle les concepts et les relations présentes dans le graphe, ainsi que les éventuelles contraintes et règles. Il s’agit donc d’un modèle structuré qui fournit les fondations sémantiques afin de permettre des opérations de raisonnement et des tests de cohérence. Par exemple, un schéma d’ontologie (voir Figure 2), également appelé graphe ontologique, fournit une représentation des types d&#8217;entités et des relations d’un graphe de connaissances, fournissant ainsi une structure conceptuelle sans contenir de données spécifiques.</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-5.png"><img loading="lazy" decoding="async" width="872" height="559" src="/wp-content/uploads/2025/01/image-5.png" alt="" class="wp-image-21761" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5.png 872w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5-300x192.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-5-768x492.png 768w" sizes="auto, (max-width: 872px) 100vw, 872px" /></a><figcaption class="wp-element-caption">Figure 2&nbsp;: Exemple de schéma d’ontologie</figcaption></figure>



<ol start="3">
<li>L’inférence d’informations implicites sur base d’informations explicites.</li>
</ol>
<p>Il est possible de trouver des informations qui n’étaient pas présentes dans les données initiales sur base de règles d’inférence (Voir Figure 3).</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-6.png"><img loading="lazy" decoding="async" width="748" height="287" src="/wp-content/uploads/2025/01/image-6.png" alt="" class="wp-image-21762" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6.png 748w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-6-300x115.png 300w" sizes="auto, (max-width: 748px) 100vw, 748px" /></a><figcaption class="wp-element-caption">Figure 3&nbsp;: Exemple d’inférence. Tiré d’un précédent <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">article de blog</a>.</figcaption></figure>



<h2 class="wp-block-heading">Un aperçu du modèle RDF (Resource Description Framework)</h2>



<p>Initialement conçu pour la description formelle de ressources web et leurs métadonnées, le modèle RDF est fréquemment utilisé pour les graphes de connaissances car il permet un raisonnement sémantique robuste et une très grande interopérabilité.</p>
<p>Un document en RDF prend la forme d’un ensemble de <strong>triplets RDF</strong>, chaque triplet est une association&nbsp;: sujet (ressource à décrire), prédicat (propriété de la ressource), objet (donnée ou autre ressource).</p>
<p>Par exemple&nbsp;:</p>
<p><code>:Alice&nbsp;:knows&nbsp;:Bob .<br />:Alice&nbsp;:livesIn&nbsp;:Paris .<br />:Alice&nbsp;:age 30 .</code></p>
<p>Ces triplets représentent donc aussi bien des relations entre nœuds (par exemple : la relation entre Alice et Bob) que des propriétés (l’âge d’Alice).</p>
<p>Une spécificité de RDF est qu’il nécessite que chaque élément d’un triplet (à l’exception de l’objet s’il s’agit d’une valeur simple, tel que la valeur 30 pour l’âge d’Alice) soit identifié par un URI (<em>Uniform Resource Identifier</em>) ou IRI (<em>Internationalized Resource Identifier</em>). Cela permet une grande interopérabilité car cela évite la création de doublons lorsque plusieurs sources d’information sont combinées. Si nous reprenons les triplets utilisés précédemment, nous obtenons le fragment suivant (en langage turtle) :</p>
<p><code>&lt;http://example.org/Alice&gt; &lt;http://example.org/knows&gt; &lt;http://example.org/Bob&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/livesIn&gt; &lt;http://example.org/Paris&gt; .<br />&lt;http://example.org/Alice&gt; &lt;http://example.org/age&gt; "30"^^&lt;http://www.w3.org/2001/XMLSchema#integer&gt; .</code></p>
<p>L&#8217;utilisation de RDF implique donc d’avoir un URI afin de pouvoir identifier tous les concepts (sujets, prédicats et objets) du graphe à l’instar d’une clé primaire dans les bases de données relationnelles.</p>
<p>De plus, il existe deux outils permettant d’ajouter de la signification sémantique aux données RDF, en décrivant les relations afin de permettre le raisonnement, à savoir RDFS (<em>RDF Schema</em>) et OWL (<em>Web Ontology Language</em>). Comme nous l’avons vu, RDF impose que chaque concept soit identifié par un URI. RDFS et OWL fournissent un ensemble prédéfini d’URI pour des concepts fréquemment utilisés, auxquels on peut faire référence dans RDF. Ceci permet d’une part d’avoir un vocabulaire commun standardisé, ce qui facilite l’intégration d’autres bases de données, et d’autre part d’établir des règles d’inférence. En effet, puisque OWL et RDFS proposent des <strong>concepts standardisés</strong>, cela permet à des « raisonneurs » basés sur OWL (tels que FaCT++ ou HermiT) d’inférer les relations implicites de façon systématique ou de détecter des contradictions, sur base de l’ontologie.</p>
<p>Les requêtes sur une base de données RDF se font via SPARQL.</p>



<h2 class="wp-block-heading">Les alternatives à RDF, et les outils pour travailler avec un graphe de connaissances</h2>



<p>Bien évidemment, un graphe de connaissances ne nécessite pas forcément l’utilisation du modèle RDF. Un graphe sera considéré comme graphe de connaissances tant que les 3 conditions décrites en début de section sur les graphes de connaissances sont remplies. Il est donc parfaitement possible de créer un graphe de connaissances dans un outil classique de gestion de base de données orientée graphe, tant que l’implémentation combine des données de plusieurs sources, qu’elle est conforme à une ontologie et qu’elle peut être utilisée pour de l’inférence sémantique.</p>
<p>La principale force du modèle RDF est son niveau de standardisation élevé. D’une part, via son exigence d’identification par URI, ainsi que son vocabulaire et son langage de requête standardisés, elle permet une haute interopérabilité. D’autre part, les extension RDFS et OWL permettent d’offrir une richesse sémantique rendant possible un raisonnement automatique. En contrepartie, sa complexité limite son adoption dans des applications business où cette rigueur sémantique n’est pas forcément nécessaire et où l’utilisation d’un modèle de graphe plus simple (tel que Neo4j ou TigerGraph) suffit. L’utilisation de modèles plus simples offre l’avantage d’être plus facile et rapide à mettre en place et d’offrir des performances de requêtage optimisées, mais au prix de la perte de la richesse sémantique offerte par RDF.</p>
<p>Cette section présente des outils (de façon non exhaustive) relatifs à RDF mais, comme mentionné, les outils précédemment cités pour les bases de données orientées graphe restent valides pour créer un graphe de connaissances tant que les <strong>conditions</strong> sont remplies.</p>
<p>Voici une liste de quelques outils liés aux graphes de connaissances en RDF :</p>
<ul>
<li><strong>La conception d’ontologies :</strong> l’outil open-source <a href="https://protege.stanford.edu/">Protégé</a> est fréquemment utilisé pour créer des ontologies. Le site <a href="https://schema.org/">schema.org</a> fournit un grand nombre de schéma et vocabulaires standards pour différents domaines, mais est généralement plutôt utilisé pour des graphes de connaissances relatifs aux données web.</li>
<li><strong>La transformation de données vers RDF :</strong> l’outil <a href="https://www.w3.org/TR/r2rml/">R2RML</a> permet de transformer des données relationnelles vers RDF. Nous pouvons aussi mentionner <a href="https://d2rq.org/">D2RQ</a>, qui donne accès à une base de données relationnelle via un graphe de connaissances RDF virtuel.</li>
<li><strong>Le stockage de données :</strong> en plus des solutions mentionnées précédemment (GraphDB et Amazon Neptune), nous pouvons aussi mentionner BlazeGraph et Apache Jena (open-source) ou encore Stardog et AllegroGraph (solutions commerciales).</li>
<li><strong>Les raisonneurs OWL :</strong> il existe de nombreux raisonneurs OWL. Tous ne sont cependant pas forcément activement maintenus ou toujours utilisables. La liste de raisonneurs OWL la plus récente que nous ayons pu trouver date de 2023 et est accessible <a href="https://arxiv.org/pdf/2309.06888">ici</a> [<a href="#footnote-6">6</a>].</li>
</ul>
<p>Terminons par mentionner le framework RDF4J (framework Java) et rdflib (libraire python) permettant d’interagir avec des données RDF.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Terminons par une rapide synthèse des concepts clés qui séparent un graphe mathématique d’une base de données orientée graphe et d’un graphe de connaissances.</p>
<p>Un graphe mathématique est un ensemble de nœuds et d’arcs facilement représentable sous forme matricielle afin d’y appliquer des algorithmes. C’est la structure sous-jacente de toute base de données orientée graphe ou graphe de connaissances.</p>
<p>Une base de données graphe comporte un ensemble de nœuds, d’arcs et de propriétés. L’accent est mis sur le stockage de grandes quantités de données au sein d’une structure graphe et sur l’optimisation du requêtage.</p>
<p>Un graphe de connaissances a pour but de représenter le savoir au sein d’un graphe mettant l’accent sur :</p>
<ul>
<li><strong>La sémantique :</strong> Le graphe suit une ontologie et les relations ont une signification.</li>
<li><strong>L’intégration :</strong> Diverses sources de données sont liées dans un graphe unifié.</li>
<li><strong>L’inférence :</strong> La capacité à dériver des connaissances via un raisonnement.</li>
</ul>
<p>Il est donc concentré sur l’intégration et l’enrichissement sémantique des données.</p>
<p>Il va sans dire que cet article ne fait qu’effleurer la surface de la vaste littérature des graphes et leurs applications diverses, et que nombreux points mériteraient un développement plus poussé et feront d’ailleurs sans doute l’objet de futurs articles.</p>



<h2 class="wp-block-heading">Références</h2>



<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-4">[4] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-5">[5] Ehrlinger, L., &amp; Wöß, W. (2016). Towards a definition of knowledge graphs. <i>SEMANTiCS 2016</i>, <i>48</i>(1-4), 2.</p>
<p id="footnote-6">[6] <a href="https://arxiv.org/pdf/2309.06888">Abitch, K., (2023). &#8220;OWL Reasoners still useable in 2023&#8221;</a></p>
<hr />
<p><em>Ce post est une contribution individuelle de Pierre Leleux, data scientist et network data analyst chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Les technologies graphes, leurs applications et leurs outils : un tour d’horizon (Partie 1)</title>
		<link>https://www.smalsresearch.be/graphes_applications_et_outils/</link>
		
		<dc:creator><![CDATA[Pierre Leleux]]></dc:creator>
		<pubDate>Tue, 28 Jan 2025 10:00:00 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[methodology]]></category>
		<guid isPermaLink="false">/?p=21737</guid>

					<description><![CDATA[Cette première partie est consacrée aux graphes dans leur forme mathématique fondamentale.]]></description>
										<content:encoded><![CDATA[
<p><a href="/graphtechnologieen-toepassingen-en-tools/"><em>Nederlandstalige versie</em></a></p>



<p>Grâce à leur capacité à comprendre et exploiter les relations complexes entre les données, les technologies relatives aux graphes ont actuellement le vent en poupe, gagnant en popularité dans de nombreux domaines de l’intelligence artificielle et la gestion de données. Plusieurs articles ont d’ailleurs déjà été postés sur ce blog concernant différentes technologies de graphes, notamment sur les bases de données orientées graphe (graph database) [<a href="#footnote-1">1</a>, <a href="#footnote-2">2</a>, <a href="#footnote-3">3</a>] et les graphes de connaissances (knowledge graph) [<a href="#footnote-4">4</a>, <a href="#footnote-5">5</a>, <a href="#footnote-6">6</a>].</p>
<p>Mais que recouvre réellement le terme « graphe »&nbsp;? Entre les modèles mathématiques qui servent de fondation, les bases de données orientées graphe et les graphes de connaissances, il peut être difficile de s’y retrouver et d’identifier les outils adaptés à ses besoins. Ajoutez à cela le fait que travailler sur des données organisées en réseau peut sembler complexe à première vue et que l’utilisation d’algorithmes de graphe ne fait pas partie des compétences de base de la plupart des data engineers et data scientists, et tout cela peut rendre décourageant la création et l’exploitation de données et de modèles de graphes.</p>
<p>Cet article a donc pour objectif de faire le point sur les technologies graphes, en explorant les 3 aspects mentionnés ci-dessus&nbsp;:</p>
<ul>
<li>Les graphes d’un point de vue théorique, leurs propriétés, leurs applications principales ;</li>
<li>Les bases de données orientées graphe, spécialisées dans le stockage et l’exploitation de données connectées ;</li>
<li>Les graphes de connaissances qui structurent le savoir de manière sémantique.</li>
</ul>
<p>Le but est donc de présenter ces concepts, les frontières – parfois floues – qui les séparent, ainsi que de mettre en lumière leurs utilisations et les outils et logiciels qui y sont associés.</p>
<p>Cet article est divisé en deux parties. Cette première partie est consacrée aux graphes dans leur forme mathématique fondamentale, comment les encoder et les exploiter, ainsi qu&#8217;aux principaux algorithmes et leurs applications. La <a href="/graphes_applications_et_outils_2/">seconde partie</a> portera sur les bases de données orientées graphe et graphes de connaissances et les outils qui y sont associés.</p>



<h2 class="wp-block-heading">Retour aux fondamentaux&nbsp;: les graphes en tant que structure mathématique</h2>



<p>Avant toute chose, commençons par définir ce qu’est un graphe. Cette base théorique est cruciale car c’est dessus que se construisent les concepts de base de données orientée graphe et de graphe de connaissances. À tout moment, ces concepts plus avancés peuvent être ramenés à leur forme mathématique sous-jacente et, par extension, tous les modèles et algorithmes présentés ci-dessous sont applicables à des bases de données orientées graphe et graphes de connaissances.</p>
<p>Dans sa forme la plus fondamentale, un graphe est une structure mathématique constituée d’un ensemble de nœuds et d’arcs qui joignent des nœuds deux à deux. Les nœuds représentent typiquement des objets ou des personnes, et les arcs représentent des liens entre ces objets ou personnes. Par exemple, dans le cas d’un réseau social, un arc peut représenter un lien d’amitié entre deux utilisateurs.<br />Le graphe peut être soit dirigé soit non-dirigé. Dans le cas d’un graphe non-dirigé, les relations entre les nœuds sont toujours réciproques (par exemple, un lien d’amitié sur Facebook) alors que dans un graphe dirigé, un arc allant d’un nœud <em>i</em> à un nœud <em>j</em> n’implique pas forcément d’arc de sens opposé (par exemple, un site internet A ayant un hyperlien qui pointe vers un site B).</p>
<p>Suivant la situation ou l’application, un graphe peut aussi être pondéré ou non. Un graphe est dit pondéré lorsqu’un poids est associé à chaque arc, qui varie d’un arc à l’autre, et qui permet de donner plus de « force » à certains arcs. L’interprétation de ces poids dépend du contexte, ces poids peuvent par exemple représenter un degré d’affinité, de similarité, de dépendance, etc.</p>
<p>Un graphe est généralement représenté par une matrice carrée de dimension (<em>n</em> × <em>n</em>), où n est le nombre de nœuds du graphe, appelée matrice d’adjacence (notée <strong>A</strong>). L’élément en position (<em>i</em>, <em>j</em>) dans la matrice vaut le poids de l’arc allant du nœud <em>i</em> au nœud <em>j</em> s’il existe, et 0 sinon (voir Figure 1). La matrice d’adjacence est simplement une matrice binaire lorsque le graphe n’est pas pondéré.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2025/01/image-1.png"><img loading="lazy" decoding="async" width="736" height="330" src="/wp-content/uploads/2025/01/image-1.png" alt="" class="wp-image-21740" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-1.png 736w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-1-300x135.png 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></a><figcaption class="wp-element-caption">Figure 1&nbsp;: Représentation matricielle d’un graphe pondéré dirigé.</figcaption></figure>



<p>Dans l’exemple illustratif, il y a un arc de poids 3 allant du nœud 1 au nœud 3, et un arc de poids 5 allant dans le sens inverse. La matrice <strong>A</strong> contient donc la valeur 3 en position (1,3) et la valeur 5 en position (3,1).</p>
<p>Il est à noter que les matrices d’adjacence contiennent souvent une très large majorité de zéros, et sont donc généralement encodées via des matrices creuses (<em>sparse matrix</em>) afin d’optimiser la mémoire.</p>
<p>Cette représentation d’un graphe sous forme d’une matrice facilite fortement l’utilisation d’algorithmes sur le graphe, car nombre d’algorithmes de graphe, parfois complexes sous forme d’équations, peuvent souvent être résumés à une série d’opérations matricielles élémentaires. Ceci rend leur exécution très efficace dans des langages de programmation scientifiques optimisés pour les calculs matriciels, tels que R, MATLAB, Julia ou Python (numpy, scipy).</p>



<h2 class="wp-block-heading">Utilisations d’algorithmes de graphe et applications pratiques</h2>



<p>Pour mieux comprendre l’intérêt d’un graphe, commençons dans un premier temps par regarder les grandes catégories d’algorithmes de graphe, avec, pour chaque catégorie, quelques exemples d’utilisation pratique de ceux-ci.</p>
<ul>
<li>Déterminer le chemin optimal permettant de joindre une paire de nœuds.</li>
</ul>
<p>Il peut simplement s’agir de minimiser le nombre de transitions nécessaires pour passer d’un nœud à l’autre, ou alors, si un coût est associé à chaque arc, de trouver le chemin associé au coût le plus faible. Le coût peut-être défini en tant que poids d’un arc, ou encodé dans une seconde matrice (matrice de coût, indépendante de la matrice d’adjacence). La façon dont le coût d’un arc est déterminé dépend de l’application, en fonction de ce que l’on souhaite minimiser. Il peut s’agir, par exemple, d’une mesure de longueur de l’arc (telle que la longueur d’une route), une mesure de temps (le temps nécessaire pour franchir l’arc) ou un coût financier. Ce genre d’algorithme peut être utilisé en logistique pour optimiser le transport. Les algorithmes les plus connus en la matière étant les algorithmes de <a href="https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra</a>, <a href="https://en.wikipedia.org/wiki/A*_search_algorithm">A*</a>, ou encore l’algorithme de <a href="https://en.wikipedia.org/wiki/Bellman%E2%80%93Ford_algorithm">Bellman-Ford</a>.</p>
<ul>
<li>Établir des mesures de similarité ou de distance entre des nœuds d’un graphe.</li>
</ul>
<p>Suivant le contexte, il peut être intéressant d’établir une mesure de similarité entre deux nœuds d’un graphe afin de déterminer à quel point ils sont proches l’un de l’autre. L’utilisation de mesures de similarité est une approche souvent utilisée dans les applications de recommandation. En construisant un graphe de consommation qui lie les utilisateurs aux produits qu’ils ont consommés, mesurer la similarité entre les nœuds permet d’identifier, pour un utilisateur donné, des utilisateurs ayant un profil de consommation similaire, en se basant sur leurs liens avec les produits. Typiquement, un produit sera recommandé à un utilisateur soit parce qu’il a été consommé par de nombreux utilisateurs similaires (<em>user-based recommendation</em>) soit car le produit est similaire à ceux déjà consommés par l’utilisateur (<em>item-based recommendation</em>). Les mesures de similarité les plus connues se basent généralement sur des mesures de voisinage commun (le nombre de voisins en commun que possèdent deux nœuds), telles que l’indice de Jaccard ou la similarité cosinus, mais d’autres méthodes permettent de prendre aussi en compte le voisinage indirect, telles que le kernel de Katz [<a href="#footnote-12">12</a>] (aussi connu sous le nom de « von Neumann kernel »). Pour voir quelques mesures de similarité classiques et leur utilisation en recommandation, voir [<a href="#footnote-13">13</a>].</p>
<p>L’opposé d’une mesure de similarité est une mesure de dissimilarité, qui augmente à mesure que les deux nœuds sont différents. Une mesure de distance est, par définition, une dissimilarité, puisqu’elle augmente lorsque deux nœuds sont éloignés. La mesure de dissimilarité la plus connue et la plus intuitive entre deux nœuds est la longueur du plus court chemin qui les sépare.</p>
<ul>
<li>Mesurer la centralité.</li>
</ul>
<p>Une mesure de centralité d’un nœud ou d’un arc, parfois aussi appelée mesure de prestige, sert à quantifier à quel point un nœud ou un arc est important au sein d’un graphe. La mesure de centralité la plus connue est, de loin, le score calculé par l’algorithme PageRank [<a href="#footnote-14">14</a>]. Initialement développé et utilisé par le moteur de recherche Google pour hiérarchiser les pages web, PageRank se base sur une marche aléatoire sur un graphe où chaque nœud représente une page web et chaque arc dirigé représente un hyperlien entre deux pages. L’algorithme PageRank trouve de nombreuses applications au-delà de la hiérarchisation de pages web&nbsp;:</p>
<blockquote>
<p style="text-align: center;">“Google’s PageRank method was developed to evaluate the importance of web-pages via their link structure. The mathematics of PageRank, however, are entirely general and apply to any graph or network in any domain. Thus, PageRank is now regularly used in bibliometrics, social and information network analysis, and for link prediction and recommendation. It’s even used for systems analysis of road networks, as well as biology, chemistry, neuroscience, and physics.” – <em>Gleich (2014) [<a href="#footnote-15">15</a>]</em></p>
</blockquote>
<p>Un autre algorithme très connu, similaire à PageRank, est l’algorithme HITS (Hyperlink-Induced Topic Search) [<a href="#footnote-16">16</a>].</p>
<p>Lorsque l’on parle de centralité, PageRank est souvent l’algorithme présenté, cependant, la centralité peut se comprendre de plusieurs manières. Il peut par exemple s’agir d’un nœud ou d’un arc constituant un intermédiaire critique pour la communication et la transmission d’information au sein du réseau. Repérer des nœuds centraux peut par exemple permettre d’optimiser la diffusion d’information dans un réseau ou de détecter des nœuds ou des arcs vitaux au graphe (dont la disparition nuirait fortement à la transmission d’information dans le graphe). Des mesures fréquentes de centralité de nœuds ou d’arcs se basant sur ce principe utilisent généralement des mesures « d’intermédiarité » (<em>betweenness centrality</em>).</p>
<p>La centralité peut aussi se comprendre comme la mesure de la représentativité d’un nœud au sein d’une communauté (en termes de proximité vis-à-vis des autres nœuds du graphe), se mesurant ici plutôt avec une mesure de proximité (<em>closeness centrality</em>). Il est à noter que nous avons déjà mentionné l’utilisation de différents algorithmes de centralité dans un cadre de détection de fraude dans des articles de blog précédents, notamment PageRank (sous forme d’un algorithme de diffusion) [<a href="#footnote-7">7</a>] et la betweenness centrality [<a href="#footnote-8">8</a>].</p>
<ul>
<li>Partitionner le graphe.</li>
</ul>
<p>Plus connu sous le nom de « <em>clustering</em> », le partitionnement de graphe consiste à regrouper des nœuds en communautés (<em>clusters</em>) tels que les nœuds au sein d’une communauté sont « similaires » et deux nœuds appartenant à des communautés différentes sont dissimilaires. Ce partitionnement peut se faire de plusieurs manières. Par exemple en utilisant une mesure de similarité ou de dissimilarité entre les nœuds du graphe, puis en exécutant un algorithme de clustering tel que le <em>k</em>-médoïdes sur base de ces (dis-)similarités.</p>
<p>Ou alors, en travaillant directement sur le graphe en cherchant à détecter des zones denses dans celui-ci. Cela peut se faire via de la propagation de label [<a href="#footnote-17">17</a>], ou via l’optimisation d’une fonction objectif mesurant la qualité du partitionnement, telle que la modularité. L’algorithme d’optimisation de la modularité le plus célèbre est la méthode de Louvain [<a href="#footnote-18">18</a>].</p>



<figure class="wp-block-image aligncenter size-full"><a href="/wp-content/uploads/2025/01/image-2.png"><img loading="lazy" decoding="async" width="508" height="444" src="/wp-content/uploads/2025/01/image-2.png" alt="" class="wp-image-21743" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2.png 508w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-2-300x262.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /></a><figcaption class="wp-element-caption">Figure 2&nbsp;: Exemple de graphe simple avec 3 communautés.</figcaption></figure>



<p>Nous avions déjà mentionné l’utilisation des méthodes de partitionnement de graphes dans plusieurs articles de blog [<a href="#footnote-9">9</a>, <a href="#footnote-10">10</a>], ces algorithmes sont utilisés notamment en communication et marketing afin de pouvoir réaliser des annonces ciblées.</p>
<ul>
<li>Extraire des caractéristiques ou des représentations.</li>
</ul>
<p>Une des limites des modèles de <em>machine learning</em> classique est qu’ils considèrent uniquement les données (variables continues et catégorielles) relatives aux observations, et ignorent l’information qui pourrait être tirée des relations entre les observations. Si des relations existent entre ces données, un graphe peut être construit, et les modèles de <em>machine learning</em> peuvent être enrichis via l’ajout de nouvelles variables extraites du graphe (il y a aussi un article de blog à ce sujet [<a href="#footnote-11">11</a>]). Ces nouvelles variables peuvent par exemple être une mesure de centralité (variable continue) ou le résultat d’un partitionnement (variable catégorielle), ou encore être obtenues via des méthodes de <em>graph embedding</em> (variables continues). Le <em>graph embedding</em> vise à obtenir une représentation des nœuds dans un espace multidimensionnel. Cet espace est calculé de sorte que, si deux nœuds sont proches dans le graphe, ils le seront aussi dans cet espace. Cet espace peut par exemple s’obtenir via des méthodes travaillant directement sur le graphe (node2vec [<a href="#footnote-19">19</a>], fastRP [<a href="#footnote-20">20</a>]) ou en travaillant sur base de similarités (kernelPCA [<a href="#footnote-21">21</a>]) ou de distances (t-SNE [<a href="#footnote-22">22</a>]) par exemple. Voir Figure 3 pour un exemple de représentation en 2 dimensions d&#8217;un graphe pondéré simple.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2025/01/image-3.png"><img loading="lazy" decoding="async" width="940" height="596" src="/wp-content/uploads/2025/01/image-3.png" alt="" class="wp-image-21744" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3.png 940w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3-300x190.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/01/image-3-768x487.png 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /></a><figcaption class="wp-element-caption">Figure 3&nbsp;: Représentation d’un graphe dans un espace à 2 dimensions via node2vec (haut) et t-SNE (bas)</figcaption></figure>



<ul>
<li>Prédire des liens.</li>
</ul>
<p>Le concept de prédiction de lien est relativement explicite, il s’agit d’estimer la probabilité qu’un lien existe entre 2 nœuds. Cela permet de détecter des potentiels arcs manquants (graphe incomplet), ou de prédire l’apparition de nouveaux arcs. Les algorithmes de recommandations sont un exemple courant de prédiction de lien utilisateur-produit, mais ces algorithmes peuvent aussi servir à détecter des potentielles interactions encore inconnues à l’intérieur de réseaux biologiques. Ce genre de prédiction se fait souvent via des méthodes basées sur des similarités entre nœuds, de la factorisation matricielle, des modèles probabilistes ou des réseaux de neurones artificiels [<a href="#footnote-23">23</a>].</p>



<h2 class="wp-block-heading">Quels outils&nbsp;?</h2>



<p>Comme mentionné précédemment, la représentation de graphes sous forme matricielle permet de les exploiter de façon efficace via des langages de programmation scientifiques. Cependant, il existe aussi des librairies ou logiciels permettant de créer et exploiter des données de graphe.</p>
<p>Voici quelques exemples de librairies dédiées au travail sur les graphes. Ces librairies permettent de créer un objet graphe, qui peut être construit de plusieurs manières. Il peut être construit à vide, avant d’y ajouter manuellement des nœuds et des arcs, ou alors à partir d’une matrice d’adjacence ou d’une liste d’arcs, ou bien encore directement depuis des fichiers contenant une description du graphe sous la forme d’une liste de nœuds et d’arcs. Quelques exemples de librairies orientées graphe incluent igraph, networkx, graph-tool ou networkit pour Python, igraph pour R et Graphs pour Julia.</p>
<p>Pour un utilisateur ayant déjà des connaissances dans l’un de ces langages, ces libraires ont l’avantage d’être intuitives et faciles à prendre en main, et contiennent de nombreux algorithmes de graphe pré-implémentés.</p>
<p>Il existe aussi de nombreux logiciels prévus pour l’analyse du contenu de bases de données orientées graphe, tels que Gephi ou Cytoscape (pour une liste plus détaillée, nous vous invitons à vous référer à l’un de nos précédents articles sur le sujet&nbsp;: [<a href="#footnote-3">3</a>]). Il s’agit bien de logiciels créés pour des analyses ponctuelles ou des explorations visuelles des relations dans des ensembles de données, mais qui ne sont pas conçus pour intégrer et gérer de grandes quantités de données de manière continue comme le ferait une base de données orientée graphe.</p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Dans la première partie de cet article dédié aux différentes technologies basées sur les graphes, nous avons fait une rapide présentation de la théorie des graphes, ainsi que des principaux algorithmes de graphe et leurs applications. La <a href="/graphes_applications_et_outils_2/">seconde partie</a> se penchera sur les bases de données orientées graphe et les graphes de connaissances, les différences entre ces concepts ainsi que les outils qui y sont associés.</p>



<h2 class="wp-block-heading">Références</h2>



<p>Quelques articles de blog Smals Research concernant les graphes&nbsp;:</p>
<p id="footnote-1">[1] <a href="/graph-db-vs-rdbms/">Graph DB vs RDBMS</a></p>
<p id="footnote-2">[2] <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">Sept (bonnes) raisons d’utiliser une Graph Database</a></p>
<p id="footnote-3">[3] <a href="/explorer-une-base-de-donnees-orientee-graphes/">Explorer une base de données orientée graphes</a></p>
<p id="footnote-4">[4] <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Les graphes de connaissance, incontournable pour l’intelligence artificielle</a></p>
<p id="footnote-5">[5] <a href="/les-graphes-de-connaissance-quelques-applications/">Les graphes de connaissance&nbsp;: quelques applications</a></p>
<p id="footnote-6">[6] <a href="/smalls-kg-checklist/">Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</a></p>
<p id="footnote-7">[7] <a href="/un-fraudeur-ne-fraude-jamais-seul/">Un fraudeur ne fraude jamais seul</a></p>
<p id="footnote-8">[8] <a href="/un-fraudeur-ne-fraude-jamais-seul-partie-2/">Un fraudeur ne fraude jamais seul, partie 2</a></p>
<p id="footnote-9">[9] <a href="/ce-quun-reseau-social-peut-nous-apprendre/">Ce qu’un réseau social peut nous apprendre</a></p>
<p id="footnote-10">[10] <a href="/facebook-peut-on-vraiment-cacher-sa-liste-damis/">Facebook&nbsp;: peut-on vraiment cacher sa liste d’amis&nbsp;?</a></p>
<p id="footnote-11">[11] <a href="/ameliorer-le-machine-learning-avec-des-donnees-graphes/">Améliorer le Machine Learning avec des données graphes</a></p>
<p> </p>
<p>Sources scientifiques&nbsp;:</p>
<p id="footnote-12">[12] Katz, L. (1953). A new status index derived from sociometric analysis. Psychometrika, 18(1), 39-43.</p>
<p id="footnote-13">[13] Fouss, F., Pirotte, A., Renders, J. M., &amp; Saerens, M. (2007). Random-walk computation of similarities between nodes of a graph with application to collaborative recommendation. IEEE Transactions on knowledge and data engineering, 19(3), 355-369.</p>
<p id="footnote-14">[14] Page, L., Brin, S., Motwani, R., &amp; Winograd, T. (1998). The pagerank citation ranking: Bringing order to the web. Technical report, Stanford Digital Libraries.</p>
<p id="footnote-15">[15] Gleich, D. F. (2015). PageRank beyond the web. siam REVIEW, 57(3), 321-363.</p>
<p id="footnote-16">[16] Kleinberg, J. M. (1999). Authoritative sources in a hyperlinked environment. Journal of the ACM (JACM), 46(5), 604-632.</p>
<p id="footnote-17">[17] Raghavan, U. N., Albert, R., &amp; Kumara, S. (2007). Near linear time algorithm to detect community structures in large-scale networks. Physical Review E—Statistical, Nonlinear, and Soft Matter Physics, 76(3), 036106.</p>
<p id="footnote-18">[18] Blondel, V. D., Guillaume, J. L., Lambiotte, R., &amp; Lefebvre, E. (2008). Fast unfolding of communities in large networks. Journal of statistical mechanics: theory and experiment, 2008(10), P10008.</p>
<p id="footnote-19">[19] Grover, A., &amp; Leskovec, J. (2016). node2vec: Scalable feature learning for networks. In Proceedings of the 22nd ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 855-864).</p>
<p id="footnote-20">[20] Chen, H., Sultan, S. F., Tian, Y., Chen, M., &amp; Skiena, S. (2019, November). Fast and accurate network embeddings via very sparse random projection. In Proceedings of the 28th ACM international conference on information and knowledge management (pp. 399-408).</p>
<p id="footnote-21">[21] Schölkopf, B., &amp; Smola, A. J. (2002). Learning with kernels: support vector machines, regularization, optimization, and beyond.</p>
<p id="footnote-22">[22] Van der Maaten, L., &amp; Hinton, G. (2008). Visualizing data using t-SNE. Journal of machine learning research, 9(11).</p>
<p id="footnote-23">[23] Lü, L., &amp; Zhou, T. (2011). Link prediction in complex networks: A survey. <em>Physica A: statistical mechanics and its applications</em>, <em>390</em>(6), 1150-1170.</p>
<hr />
<p><em>Ce post est une contribution individuelle de Pierre Leleux, data scientist et network data analyst chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></p>


]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Een graph database verkennen</title>
		<link>https://www.smalsresearch.be/een-graph-database-verkennen/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Thu, 11 Jan 2024 08:50:49 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=19768</guid>

					<description><![CDATA[Sinds 2017 vestigen we op deze pagina's de aandacht op het gebruik van Graph Databases (hier, hier en hier). Gartner voorspelt dat in 2025 de graph-technologieën zullen worden gebruikt in 80% van de innovaties in het gebied van data en analytics, tegenover 10% in 2021, waardoor snelle besluitvorming in een organisatie mogelijk wordt. ]]></description>
										<content:encoded><![CDATA[
<p><a href="/explorer-une-base-de-donnees-orientee-graphes/" data-type="post" data-id="19580"><em>Version en français</em></a></p>



<p>Sinds 2017 vestigen we op deze pagina&#8217;s de aandacht op het gebruik van Graph Databases (<a href="/bases-de-donnees-relationnelles-adequates-pour-des-relations/">hier</a>, <a href="/graph-db-vs-rdbms/">hier</a> en <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">hier</a>). <a href="https://www.gartner.com/en/newsroom/press-releases/2021-03-16-gartner-identifies-top-10-data-and-analytics-technologies-trends-for-2021">Gartner voorspelt dat in 2025</a> de graph-technologieën zullen worden gebruikt in 80% van de innovaties in het gebied van data en analytics, tegenover 10% in 2021, waardoor snelle besluitvorming in een organisatie mogelijk wordt.&nbsp;</p>



<p>Graph databases worden in twee grote domeinen gebruikt:</p>



<ul class="wp-block-list">
<li>Analytics, waarbij complexe berekeningen worden uitgevoerd op grote hoeveelheden gegevens (identificatie van structuren, gemeenschappen, karakteristieke nodes, ontbrekende relaties, anomalieën, paths, enz.);</li>



<li>Verkenning, waarbij agenten kunnen zoeken naar een bepaalde node of relatie en vervolgens de directe omgeving ervan kunnen verkennen in een onderzoekscontext.</li>
</ul>



<p>Het is natuurlijk gebruikelijk om de twee te combineren: een eerste analysefase identificeert situaties die moeten worden onderzocht (vermoedelijke fraude, incidenten of zwakheden in een infrastructuur, etc.), en elk geval kan dan lokaal worden verkend om tot een beslissing te komen. Verder in dit artikel zullen we ons richten op het verkennende aspect.&nbsp;</p>



<p>In de verkennende fase ligt een van de belangrijkste voordelen van graph databases in het feit dat het datamodel en de echte wereld goed op mekaar kunnen afgestemd worden. Over het algemeen vertegenwoordigen de nodes of entiteiten concepten die duidelijk zijn voor businessmensen (mensen, bedrijven, documenten, servers, etc.) en hebben de relaties een natuurlijke semantiek (werkt voor, behoort tot, is verbonden met, etc.). Als gevolg hiervan kan een generieke grafische interface vaak worden gekoppeld aan een database en in handen worden gegeven van experts zonder IT-kennis, met slechts een beetje configuratie en parametrisatie vooraf, maar geen ontwikkeling. Dit zal niet het geval zijn in relationele databases, waar <a href="/bases-de-donnees-relationnelles-adequates-pour-des-relations/">een tabel zowel een entiteit als een relatie kan vertegenwoordigen, en een attribuut soms echte informatie zal vertegenwoordigen, en soms een primaire of vreemde sleutel (foreign key)</a>.</p>



<p><a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Knowledge graphs</a> zijn een typisch voorbeeld van een algemene grafische interface die veel toegevoegde waarde kan bieden zonder dat er specifieke ontwikkeling voor nodig is.</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-2.png"><img loading="lazy" decoding="async" width="834" height="313" src="/wp-content/uploads/2023/12/image-2.png" alt="" class="wp-image-19655" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2.png 834w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2-300x113.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2-768x288.png 768w" sizes="auto, (max-width: 834px) 100vw, 834px" /></a></figure>



<p>Om deze mogelijkheid te illustreren bestuderen we hieronder een aantal tools, van de eenvoudigste tot de meest complexe, die kunnen worden gebruikt om gegevens te visualiseren die zijn opgeslagen in een <a href="https://neo4j.com/">Neo4J</a> graph-georiënteerde database.&nbsp;&nbsp;</p>



<h1 class="wp-block-heading">JavaScript libraries</h1>



<p>Er bestaan veel libraries die een netwerk kunnen weergeven (<a href="https://visjs.org/">vis.js</a>, <a href="https://d3js.org/">D3</a>, <a href="https://www.sigmajs.org/">Sigma.js</a>, &#8230;). Maar sommige stellen je in staat om rechtstreeks te interageren met Neo4j. Zo kun je in JavaScript een Cypher query (de querytaal van Neo4j) hebben, dat naar de Neo4j-server wordt gestuurd en waarvan het resultaat op het scherm kan worden weergegeven:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/neo4j-contrib/neovis.js/">Neovis.js</a> (uitbreiding van vis.js, gratis);</li>



<li><a href="https://github.com/Nhogs/popoto">Popoto.js</a> (uitbreiding van D3.js, gratis);</li>



<li><a href="https://cytoscape.org/">Cytoscape.js</a>, waarschijnlijk de meest geavanceerde opensource library, aanvulling op CytoScape Desktop, die hieronder aan bod komt;</li>



<li><a href="https://cambridge-intelligence.com/keylines/">KeyLines</a>, zeer geavanceerde commerciële oplossing voor bedrijven.</li>
</ul>



<p>Deze oplossingen voldoen niet direct aan de hierboven genoemde mogelijkheid van een tool die enkel geconfigureerd hoeft te worden, omdat ze veel ontwikkelingswerk vereisen voordat ze in productie kunnen worden genomen. Anderzijds maakt het feit dat ze rechtstreeks met Neo4j kunnen communiceren de ontwikkeling ongetwijfeld eenvoudiger, maar impliceert ook dat directe toegang tot Neo4j vanuit de browser beschikbaar moet zijn, en dat de informatie voor de connectie aanwezig is in de JavaScript-code, of wordt opgevraagd bij de gebruiker.</p>



<h1 class="wp-block-heading">Ingestion</h1>



<p>Met een groot aantal producten kun je Neo4j-gegevens opnemen in je eigen datasysteem, ofwel door alle gegevens eruit te halen of door een Cypher query uit te voeren om het resultaat op te halen.</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-5.png"><img loading="lazy" decoding="async" width="506" height="196" src="/wp-content/uploads/2023/12/image-5.png" alt="" class="wp-image-19688" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-5.png 506w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-5-300x116.png 300w" sizes="auto, (max-width: 506px) 100vw, 506px" /></a></figure>



<p>Er zijn bijvoorbeeld twee opensource tools voor netwerkanalyse:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://gephi.org/">Gephi</a>, met een toegewezen plugin. Er is keuze tussen het importeren van alle nodes en relaties die behoren tot één of meerdere geselecteerde types, of alleen het resultaat van een Cypher query. Helaas is het proces nogal moeizaam en vereist het een goede kennis van Cypher, wat deze oplossing ongeschikt maakt voor gebruik door een businessexpert. Het is bijvoorbeeld nodig om een query op te geven met de nodes die geïmporteerd moeten worden, gevolgd door een andere query met de relaties. Het zal daarom bijzonder complex zijn om het hele netwerk binnen een maximale afstand van 3 van een “doel”-node te importeren.<br>Bovendien worden de gegevens na het importeren volledig losgekoppeld van de database. Tenzij ze opnieuw worden geïmporteerd, is het niet mogelijk om de buren van een node in de werkruimte op te vragen.</li>
</ul>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-6.png"><img loading="lazy" decoding="async" width="653" height="249" src="/wp-content/uploads/2023/12/image-6.png" alt="" class="wp-image-19689" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-6.png 653w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-6-300x114.png 300w" sizes="auto, (max-width: 653px) 100vw, 653px" /></a></figure>



<ul class="wp-block-list">
<li><a href="https://cytoscape.org/">Cytoscape</a>, met een toegewijde plugin (Cytoscape Neo4j Plugin). Op papier is dit een geavanceerdere oplossing dan Gephi: gegevensintegratie via een query is veel flexibeler en zodra een deel van het netwerk is geïmporteerd, kun je met slechts twee klikken zoeken naar de buren van een node in de werkruimte. Dit is dus een echte verkenningstool. Er zijn echter drie beperkingen:
<ul class="wp-block-list">
<li>Tijdens onze tests werden de nodes correct geïmporteerd, maar de relaties niet en werden deze zeer willekeurig geïmporteerd;</li>



<li>Een visualisatie kan niet verrijkt worden met een nieuwe query (die een nieuwe visualisatie creëert), wat de interactiviteit aanzienlijk beperkt;</li>



<li>Cytoscape is eigenlijk een tool ontworpen voor bio-informatica en chemie. Hoewel het zeer krachtig is, is het ook complex en moeilijk in handen te leggen van niet-technische gebruikers.</li>
</ul>
</li>
</ul>



<p>Naast deze opensource oplossingen zijn er een groot aantal professionele en commerciële platforms met zeer uitgebreide analysemogelijkheden, die zich richten op een &#8216;graph&#8217; benadering en waarmee een groot aantal gegevensformaten kan worden geïmporteerd, waaronder Neo4j. Over het algemeen bedoeld voor organisaties (veiligheid, intelligence, enz.) met onderzoeksbehoeften, dupliceren ze daarom Neo4j gegevens (wat synchronisatie bemoeilijkt) en combineren ze deze mogelijk met andere gegevens. Bijvoorbeeld (<a href="https://neo4j.com/developer-blog/15-tools-for-visualizing-your-neo4j-graph-database/">meer details hier</a>)&nbsp;:</p>



<ul class="wp-block-list">
<li><a href="https://graphaware.com/products/hume/">Hume (GraphAware)</a></li>



<li><a href="https://virtualitics.com/">Virtualitics</a></li>



<li><a href="https://www.kineviz.com/">Kineviz GraphXR</a></li>



<li><a href="https://siren.io/">Siren</a></li>



<li><a href="https://www.graphistry.com/">Graphistry</a></li>
</ul>



<h1 class="wp-block-heading">Exploratie</h1>



<p>Laten we nu eens kijken naar een aantal toepassingen waarmee je direct kan aansluiten op een Neo4j database om deze te verkennen, zonder de gegevens te kopiëren naar een intern systeem, en zonder dat er enige ontwikkeling voor nodig is, althans in het begin.</p>



<p>Eerst is er het basistool dat (gratis) wordt meegeleverd met Neo4j: <a href="https://neo4j.com/developer/neo4j-browser/" target="_blank" rel="noreferrer noopener">Neo4j Browser</a>. Dit is een tool voor ontwikkelaars en datawetenschappers, waarmee ze queries kunnen testen en de resultaten kunnen bekijken, met beperkte uitbreidingsmogelijkheden (weergave van de buren van een node). Je moet altijd beginnen met een Cypher-query en je kunt een node alleen uitbreiden door alle buren weer te geven.</p>



<h2 class="wp-block-heading">Neo4j Bloom</h2>



<p><a href="https://neo4j.com/product/bloom/">Neo4j Bloom</a> is een (betalende) optie van de Enterprise versie van Neo4j (ook betalend), en is een tool voor business experts. Ze kunnen zoeken naar informatie in &#8216;full text&#8217;, selectief uitbreiden (alleen buren van een bepaald type toevoegen, of gekoppeld via een relatie van een bepaald type), en zelfs grafisch &#8216;patterns&#8217; definiëren om naar te zoeken, zonder dat er ook maar één regel Cypher voor nodig is.</p>



<p>Bloom is gratis beschikbaar met Neo4j Desktop (lokaal geïnstalleerde versie), maar alleen voor het verkennen van lokale graphs, en zonder de mogelijkheid om visualisaties op te slaan, waardoor deze gratis versie ongeschikt is voor gebruik in een professionele context.</p>



<h2 class="wp-block-heading">yWorks Neo4j Explorer</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-1.png"><img loading="lazy" decoding="async" width="212" height="55" src="/wp-content/uploads/2023/12/image-1.png" alt="" class="wp-image-19654" style="width:200px"/></a></figure>



<p>Ontwikkeld door hetzelfde bedrijf als yFiles en yEd, biedt <a href="https://www.yworks.com/neo4j-explorer/">yWorks Neo4j Explorer</a> een eenvoudige interface (gratis), die full text zoeken, selectieve uitbreiding en zelfs de mogelijkheid biedt om ChatGPT te gebruiken voor het genereren van een Cypher query voor een specifieke behoefte. Er is echter geen echte mogelijkheid om een visualisatie op te slaan of te delen.</p>



<p>yWorks Explorer kan gebruikt worden door de <a href="https://www.yworks.com/neo4j-explorer/">cloudversie </a>te kiezen of door het te installeren in Neo4j Desktop. Merk op dat in de cloudversie, de verbinding met de database wordt gemaakt vanuit de browser, en het dus mogelijk is om toegang te krijgen tot een interne of lokale database.</p>



<h2 class="wp-block-heading">Graphileon</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image.png"><img loading="lazy" decoding="async" width="250" height="125" src="/wp-content/uploads/2023/12/image.png" alt="" class="wp-image-19653" style="width:200px"/></a></figure>



<p><a href="https://graphileon.com/">Graphileon</a>, of het nu cloud (betaalversie) of desktop (gratis, maar gedeprecieerd) is, is op dit moment nog niet echt toegankelijk voor iedereen, omdat het een Cypher query als startpunt vereist. Maar het biedt wel de mogelijkheid om een &#8216;app&#8217; te creëren, waarmee ontwikkelaars knoppen aan de interface kunnen toevoegen met een geprogrammeerde actie, waardoor de functionaliteit wordt uitgebreid. De mogelijkheden van de tool zijn echter relatief beperkt en vereisen vaak technische vaardigheden, zoals de noodzaak om JavaScript te bewerken om stijlen aan te passen (kleuren, vormen, icoontjes, enz.).</p>



<p>Het extra voordeel is de scheiding tussen een &#8216;admin&#8217;-gebruiker, die de verbinding met de DB configureert, en de &#8216;klassieke&#8217; gebruiker, die geen technische informatie over de database hoeft te kennen.</p>



<h2 class="wp-block-heading">Tom Sawyer Graph Database Browser</h2>



<figure class="wp-block-image alignright is-resized"><img loading="lazy" decoding="async" width="205" height="60" src="/wp-content/uploads/2023/12/image-7.png" alt="Tom Sawyer Software" class="wp-image-19702" style="width:200px"/></figure>



<p>Van zo&#8217;n softwareleverancier had je misschien een tool verwacht die vergelijkbaar is met de concurrenten die op deze pagina worden gepresenteerd, maar Neo4j&#8217;s verkenning is helemaal anders. Een verouderde interface, stijl parametriseringsopties die JavaScript-achtige codebewerking vereisen, Cypher queries als het enige startpunt, geen full text search (behalve voor objecten die al in de werkruimte staan), geen selectieve uitbreiding… Als het een gratis tool was geweest, had het een geldig alternatief kunnen zijn, maar <a href="https://www.tomsawyer.com/graph-database-browser">Tom Sawyer Graph Database Browser</a> biedt alleen betaalde opties. De waarde van deze leverancier zit ongetwijfeld in de andere producten in de catalogus.</p>



<h2 class="wp-block-heading">Linkurious Enterprise</h2>



<figure class="wp-block-image alignright size-large is-resized"><a href="/wp-content/uploads/2023/12/image-3.png"><img loading="lazy" decoding="async" width="1024" height="158" src="/wp-content/uploads/2023/12/image-3-1024x158.png" alt="" class="wp-image-19656" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-1024x158.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-300x46.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-768x119.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-1536x238.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-2048x317.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Naar onze mening de meest geavanceerde van de tot nu toe geteste tools. Voor eindgebruikers biedt <a href="https://linkurious.com/">Linkurious Enterprise</a> een eenvoudig te hanteren interface voor leken, krachtige zoek-, filter- en stijlaanpassingsmogelijkheden en visualisaties die kunnen worden opgeslagen, georganiseerd, gedeeld, geëxporteerd of becommentarieerd. Admins kunnen het beheer van gebruikers, groepen en toegangsrechten verfijnen en eventueel koppelen aan AD of LDAP. </p>



<p>Het is jammer dat er geen tool is zoals die van Bloom, waarmee (relatief) uitgebreide queries kunnen worden gebouwd zonder kennis van Cypher. Maar dit wordt gecompenseerd door de mogelijkheid voor admins om Cypher queries te definiëren, eventueel met parameters, waardoor gebruikers krachtige zoekopdrachten of uitbreidingen kunnen uitvoeren, zonder enige technische kennis.</p>



<p>Een geavanceerde API maakt ook een hoge mate van automatisering mogelijk. Het is bijvoorbeeld mogelijk om automatisch een weergave te maken en vervolgens een &#8216;widget&#8217; (interactieve mini-weergave) te maken die vervolgens in een toepassing kan worden geïntegreerd.</p>



<p>In tegenstelling tot de meeste tools die in dit artikel worden genoemd, is er geen gratis versie van Linkurious, zelfs geen beperkte.</p>



<h2 class="wp-block-heading">Graphlytic</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-4.png"><img loading="lazy" decoding="async" width="893" height="219" src="/wp-content/uploads/2023/12/image-4.png" alt="" class="wp-image-19657" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4.png 893w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4-300x74.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4-768x188.png 768w" sizes="auto, (max-width: 893px) 100vw, 893px" /></a></figure>



<p>Waarschijnlijk het enige echte alternatief voor Bloom of Linkurious, biedt <a href="https://graphlytic.com/">Graphlytic </a>een gratis versie, via Neo4j Desktop of on-premise, maar met één gebruiker. We zitten echter nog steeds een niveau lager qua mogelijkheden: beperkte samenwerkingsaspecten, geen echte selectieve exploratie, geen parametrische queries.</p>



<p>Er is echter een Query builder, die nog steeds beperkt is maar potentieel heeft, de mogelijkheid om de stijl (nodegrootte, kleuren, randstijlen en -dikte, pijlvormen, enz.) zeer gedetailleerd aan te passen en de aanwezigheid van de API of verbinding met een SSO (niet getest).</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Er bestaan dus een aantal alternatieven voor gegevensverkenning in Neo4j (en vaak ook andere modellen zoals MemGraph of AllegroGraph). Deze variëren van eenvoudige, gratis tools binnen het bereik van kleine organisaties, zoals yWorks of Graphlytic, tot veel uitgebreidere oplossingen, maar tegen prijzen die alleen grote organisaties zich kunnen veroorloven, zoals Bloom of Linkurious. Maar bij de keuze van een geschikte tool moet er ook rekening gehouden worden met een aantal criteria waarmee die niet in detail werden besproken: wat is het pricing model, is de tool compatibel met de software en netwerkinfrastructuur van het bedrijf, hoe zit het met GDPR, enz.</p>



<p>Een eerste evaluatie met een gratis tool zal al deze beperkingen aan het licht brengen, om zo met kennis van zaken de ideale tool te kunnen kiezen.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><span style="color: #999999;">Deze post is een individuele bijdrage van Vandy Berten, gespecialiseerd in data science bij Smals Research. Dit artikel is geschreven onder zijn eigen naam en weerspiegelt op geen enkele wijze de standpunten van Smals.<em>.</em></span></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Explorer une base de données orientée graphes</title>
		<link>https://www.smalsresearch.be/explorer-une-base-de-donnees-orientee-graphes/</link>
		
		<dc:creator><![CDATA[Vandy Berten]]></dc:creator>
		<pubDate>Fri, 08 Dec 2023 15:28:47 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Graph Databases]]></category>
		<category><![CDATA[Open Source]]></category>
		<guid isPermaLink="false">/?p=19580</guid>

					<description><![CDATA[Depuis 2017, nous mettons en avant dans ces pages (ici, là, ou encore ici) l'utilisation de bases de données orientées graphes (ou Graph Databases). Gartner prédit que d'ici 2025, les technologies graphes seront utilisées dans 80 % des innovations en données et analytique, contre 10 % en 2021, facilitant la prise de décision rapide au travers d'une organisation.]]></description>
										<content:encoded><![CDATA[
<p><em><a href="/een-graph-database-verkennen/" data-type="post" data-id="19768">Nederlandstalige versie</a></em></p>



<p>Depuis 2017, nous mettons en avant dans ces pages (<a href="/bases-de-donnees-relationnelles-adequates-pour-des-relations/">ici</a>, <a href="/graph-db-vs-rdbms/">là</a>, ou encore <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">ici</a>) l&#8217;utilisation de bases de données orientées graphes (ou Graph Databases). <a href="https://www.gartner.com/en/newsroom/press-releases/2021-03-16-gartner-identifies-top-10-data-and-analytics-technologies-trends-for-2021">Gartner prédit que d&#8217;ici 2025</a>, les technologies graphes seront utilisées dans 80 % des innovations en données et analytique, contre 10 % en 2021, facilitant la prise de décision rapide au travers d&#8217;une organisation. </p>



<p>Les bases de données graphes ont deux grandes familles d&#8217;application&nbsp;:</p>



<ul class="wp-block-list">
<li>L&#8217;analytique, dans laquelle des calculs complexes sont effectués sur de grands volumes de données (identification de structures, de communautés, de nœuds caractéristiques, de relations manquantes, d&#8217;anomalies, de chemins&#8230;) ;</li>



<li>L&#8217;exploration, permettant à des agents de rechercher un nœud ou une relation particulière, pour ensuite explorer son voisinage proche dans un contexte d&#8217;investigation.</li>
</ul>



<p>Il est bien sûr fréquent de combiner les deux&nbsp;: une première phase d&#8217;analytique permet d&#8217;identifier des situations à examiner (suspicion de fraude, d&#8217;incident ou de faiblesse dans une infrastructure&#8230;), chaque cas pouvant ensuite être exploré localement pour prendre une décision. Dans la suite de cet article, nous allons nous focaliser sur l&#8217;aspect exploratoire.&nbsp;</p>



<p>Dans la phase exploratoire, un des avantages majeurs des bases de données orientées graphe est la proximité forte entre le modèle de données et le monde réel. Généralement, les nœuds ou entités vont représenter des concepts clairs pour les gens de métier (personnes, entreprises, documents, serveurs&#8230;) et les relations auront une sémantique naturelle (travaille pour, appartient à, est connecté à&#8230;). Ce qui a pour conséquence qu&#8217;une interface graphique générique peut souvent être connectée à une base de données et mise dans les mains d&#8217;experts sans connaissances IT, avec uniquement un peu de configuration et paramétrisation au préalable, mais pas de développement. Ceci ne sera pas vrai dans les bases de données relationnelles, ou <a href="/bases-de-donnees-relationnelles-adequates-pour-des-relations/" data-type="post" data-id="10493">une table peut autant représenter une entité qu&#8217;une relation, et attribut représentera tantôt une réelle information, tantôt une clé primaire ou étrangère</a>.</p>



<p>Les <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">Knowledge graphs</a> sont typiquement un exemple où une interface graphique générique pourra offrir une grande plus-value sans nécessiter de développement spécifique.</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-2.png"><img loading="lazy" decoding="async" width="834" height="313" src="/wp-content/uploads/2023/12/image-2.png" alt="" class="wp-image-19655" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2.png 834w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2-300x113.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-2-768x288.png 768w" sizes="auto, (max-width: 834px) 100vw, 834px" /></a></figure>



<p>Pour illustrer cette possibilité, nous allons parcourir un certain nombre d&#8217;outils, des plus simples aux plus élaborés, qui permettent de visualiser des données stockées dans une base de données orientée graphe <a href="https://neo4j.com/">Neo4J</a>.&nbsp;</p>



<h1 class="wp-block-heading">Librairies JavaScript</h1>



<p>Il existe de nombreuses librairies capables d&#8217;afficher un réseau (<a href="https://visjs.org/">vis.js</a>, <a href="https://d3js.org/">D3</a>, <a href="https://www.sigmajs.org/">Sigma.js</a>, &#8230;). Mais certaines permettent directement d&#8217;interagir avec Neo4j. On peut donc avoir, dans le JavaScript, une requête Cypher (le langage de requêtes de Neo4j), qui sera envoyée au serveur Neo4j, et dont le résultat pourra être affiché à l&#8217;écran&nbsp;:</p>



<ul class="wp-block-list">
<li><a href="https://github.com/neo4j-contrib/neovis.js/">Neovis.js</a> (Extension de vis.js, gratuit) ;</li>



<li><a href="https://github.com/Nhogs/popoto">popoto.js</a> (Extension de D3.js, gratuit) ;</li>



<li><a href="https://cytoscape.org/">Cytoscape.js</a>, probablement la librairie open-source la plus évoluée, compagnon de CytoScape Desktop que nous évoquerons plus bas ;</li>



<li><a href="https://cambridge-intelligence.com/keylines/">KeyLines</a>, solution commerciale très évoluée à destination des entreprises.</li>
</ul>



<p>Ces solutions ne répondent pas directement à la possibilité évoquée ci-dessus d&#8217;un outil qu&#8217;il suffit de paramétrer, puisqu&#8217;elles nécessitent des développements importants avant une mise en production. Par ailleurs, le fait qu&#8217;elles puissent communiquer directement avec Neo4j rend sans doute les développements plus faciles, mais implique aussi qu&#8217;un accès direct à Neo4j depuis le navigateur est ouvert, et que les informations de connexion sont présentes dans le code JavaScript, ou demandées à l&#8217;utilisateur.</p>



<h1 class="wp-block-heading">Ingestion</h1>



<p>Une large gamme de produits permettent d&#8217;ingérer des données Neo4j dans leur propre système de données, soit en aspirant la totalité des données, soit en exécutant une requête Cypher pour en récupérer le résultat.</p>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-5.png"><img loading="lazy" decoding="async" width="506" height="196" src="/wp-content/uploads/2023/12/image-5.png" alt="" class="wp-image-19688" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-5.png 506w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-5-300x116.png 300w" sizes="auto, (max-width: 506px) 100vw, 506px" /></a></figure>



<p>Nous pouvons par exemple citer deux outils open-source destinés à de l&#8217;analyse réseaux&nbsp;:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://gephi.org/">Gephi</a>, avec un plugin dédié. On a le choix entre l&#8217;importation de la totalité des nœuds et relations appartenant à un ou des type(s) sélectionné(s), ou uniquement le résultat d&#8217;une requête Cypher. Le processus est malheureusement assez laborieux et nécessite de bonnes connaissances de Cypher, ce qui ne permet pas de mettre cette solution dans les mains d&#8217;un expert métier. Il est par exemple nécessaire de fournir une requête listant les nœuds à importer, puis une autre requête listant les relations. Il sera de fait particulièrement complexe d&#8217;importer l&#8217;ensemble du réseau à une distance de maximum 3 d&#8217;un nœud &#8220;cible&#8221;.<br>Par ailleurs, une fois les données importées, elle seront complètement découplées de la base de données. Il ne sera pas possible, à moins d&#8217;un nouvel import, de récupérer les voisins d&#8217;un nœud présent dans l&#8217;espace de travail.</li>
</ul>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-6.png"><img loading="lazy" decoding="async" width="653" height="249" src="/wp-content/uploads/2023/12/image-6.png" alt="" class="wp-image-19689" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-6.png 653w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-6-300x114.png 300w" sizes="auto, (max-width: 653px) 100vw, 653px" /></a></figure>



<ul class="wp-block-list">
<li><a href="https://cytoscape.org/">Cytoscape</a>, avec un plugin dédié (Cytoscape Neo4j Plugin). Sur le papier, il s&#8217;agit d&#8217;une solution plus avancée que celle de Gephi&nbsp;: l&#8217;intégration des données via une requête est beaucoup plus souple, et une fois qu&#8217;une partie du réseau est importée, on peut en deux clics aller chercher les voisins d&#8217;un nœud présent dans l&#8217;espace de travail. On a donc un véritable outil d&#8217;exploration. Néanmoins, trois limitations sont à noter&nbsp;:
<ul class="wp-block-list">
<li>Lors de nos tests, si les nœuds étaient correctement importés, ça n&#8217;était pas le cas des relations, importées de façon très aléatoire ;</li>



<li>On ne peut pas enrichir une visualisation avec une nouvelle requête (qui créera une nouvelle visualisation), ce qui limite fortement l&#8217;interactivité ;</li>



<li>Cytoscape est à la base un outil conçu pour la bioinformatique et la chimie. S&#8217;il est extrêmement puissant, il est également complexe, et difficile à mettre dans les mains d&#8217;utilisateurs peu techniques.</li>
</ul>
</li>
</ul>



<p>En dehors de ces solutions open-source, il existe un grand nombre de plateformes professionnelles et commerciales, aux possibilités d&#8217;analyse très étendues, se focalisant sur une approche &#8220;graphe&#8221; et permettant d&#8217;importer un grand nombre de formats de données, dont Neo4j. En général à destination d&#8217;organisation (sécurité, renseignement&#8230;) ayant des besoins d&#8217;investigation, elles dupliqueront donc les données de Neo4j (compliquant la synchronisation) et les combineront potentiellement à d&#8217;autres. On peut par exemple citer (<a href="https://neo4j.com/developer-blog/15-tools-for-visualizing-your-neo4j-graph-database/">plus de détails ici</a>)&nbsp;:</p>



<ul class="wp-block-list">
<li><a href="https://graphaware.com/products/hume/">Hume (GraphAware)</a></li>



<li><a href="https://virtualitics.com/">Virtualitics</a></li>



<li><a href="https://www.kineviz.com/">Kineviz GraphXR</a></li>



<li><a href="https://siren.io/">Siren</a></li>



<li><a href="https://www.graphistry.com/">Graphistry</a></li>
</ul>



<h1 class="wp-block-heading">Exploration</h1>



<p>Intéressons-nous maintenant à des applications qui permettront directement de se connecter à une base de données Neo4j pour l&#8217;explorer, sans copier les données dans un système interne, et sans demander de développement, du moins dans un premier temps.</p>



<p>Citons tout d&#8217;abord l&#8217;outil de base fourni (gratuitement) avec Neo4j&nbsp;: <a href="https://neo4j.com/developer/neo4j-browser/" target="_blank" rel="noreferrer noopener">Neo4j Browser</a>. Il s&#8217;agit d&#8217;un outil à destination des développeurs ou data-scientists, permettant de tester des requêtes et d&#8217;en visualiser le résultat, avec des possibilités d&#8217;expansion (affichage des voisins d&#8217;un nœud) limitées. Il faut toujours commencer par une requête Cypher, et on ne peut étendre un nœud qu&#8217;en affichant la totalité de ses voisins.</p>



<h2 class="wp-block-heading">Neo4j Bloom</h2>



<p><a href="https://neo4j.com/product/bloom/">Neo4j Bloom</a> est une option (payante) de la version Enterprise de Neo4j (payante aussi), il s&#8217;agit là d&#8217;un véritable outil à destination d&#8217;experts métier. Il pourront rechercher des informations en &#8220;full text&#8221;, étendre sélectivement (ajouter uniquement les voisins d&#8217;un certain type, ou lié via une relation d&#8217;un certain type), et même définir graphiquement des &#8220;patterns&#8221; à rechercher, sans nécessiter la moindre ligne de Cypher. </p>



<p>Bloom est disponible gratuitement avec Neo4j Desktop (version installée localement), mais uniquement pour explorer des graphes locaux, et sans possibilités de sauvegarder ses visualisations, rendant cette version gratuite peu compatible avec une utilisation dans un contexte professionnel.</p>



<h2 class="wp-block-heading">yWorks Neo4j Explorer</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-1.png"><img loading="lazy" decoding="async" width="212" height="55" src="/wp-content/uploads/2023/12/image-1.png" alt="" class="wp-image-19654" style="width:200px"/></a></figure>



<p>Développé par la même société que yFiles ou yEd, <a href="https://www.yworks.com/neo4j-explorer/">yWorks Neo4j Explorer</a> offre (gratuitement) une interface simple, permettant une recherche full-text, une expansion sélective et offre même la possibilité d&#8217;utiliser ChatGPT pour générer une requête Cypher répondant à un besoin spécifique. On regrettera cependant ne pas y trouver de réelle possibilité de sauvegarder ou de partager une visualisation.</p>



<p>On peut utiliser yWorks Explorer soit en utilisant la <a href="https://www.yworks.com/neo4j-explorer/">version cloud</a>, soit en l&#8217;installant dans Neo4j Desktop. Il est à noter que dans la version cloud, la connexion à la base de données se fait depuis le navigateur, et qu&#8217;il est donc possible d&#8217;accéder à une base de données interne ou locale.</p>



<h2 class="wp-block-heading">Graphileon</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image.png"><img loading="lazy" decoding="async" width="250" height="125" src="/wp-content/uploads/2023/12/image.png" alt="" class="wp-image-19653" style="width:200px"/></a></figure>



<p><a href="https://graphileon.com/">Graphileon</a>, version cloud (payant) ou desktop (gratuite, mais est dépréciée) n&#8217;est à ce stade pas réellement accessible à tous, parce qu&#8217;elle nécessite une requête Cypher comme point de départ. Mais on offre la possibilité de créer une &#8220;app&#8221;, permettant à des développeurs de rajouter des boutons à l&#8217;interface ayant une action programmée, ce qui étendra les fonctionnalités. Les possibilités de l&#8217;outil sont cependant relativement limitées, nécessitant par ailleurs souvent des compétences techniques, comme la nécessité d&#8217;éditer du JavaScript pour modifier les styles (couleurs, formes, icônes&#8230;).</p>



<p>Le petit plus est la séparation entre un utilisateur &#8220;admin&#8221;, qui configure la connexion à la DB, et l&#8217;utilisateur &#8220;classique&#8221;, qui n&#8217;a ainsi pas besoin de connaître les informations techniques de la base de données.</p>



<h2 class="wp-block-heading">Tom Sawyer Graph Database Browser</h2>



<figure class="wp-block-image alignright is-resized"><img loading="lazy" decoding="async" width="205" height="60" src="/wp-content/uploads/2023/12/image-7.png" alt="Tom Sawyer Software" class="wp-image-19702" style="width:200px"/></figure>



<p>De la part d&#8217;un tel éditeur de logiciel, on aurait pu s&#8217;attendre à un outil comparable à ses concurrents présentés sur cette page, mais en ce qui concerne l&#8217;exploration de Neo4j, il n&#8217;en est rien. Une interface vieillotte, des possibilités de paramétrisation des styles nécessitant d&#8217;éditer un code à la JavaScript, des requêtes Cypher comme seul point de départ, pas de recherche full-text (à part dans objets déjà présents dans l&#8217;espace de travail), pas d&#8217;expansion sélective&#8230; S&#8217;il s&#8217;agissait d&#8217;un outil gratuit, il aurait pu constituer une alternative valable, mais <a href="https://www.tomsawyer.com/graph-database-browser">Tom Sawyer Graph Database Browser</a> ne propose que des options payantes. La valeur de cet éditeur est sans doute à trouver dans les autres produits de son catalogue.</p>



<h2 class="wp-block-heading">Linkurious Enterprise</h2>



<figure class="wp-block-image alignright size-large is-resized"><a href="/wp-content/uploads/2023/12/image-3.png"><img loading="lazy" decoding="async" width="1024" height="158" src="/wp-content/uploads/2023/12/image-3-1024x158.png" alt="" class="wp-image-19656" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-1024x158.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-300x46.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-768x119.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-1536x238.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-3-2048x317.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>À notre sens le plus évolué des outils testés jusqu&#8217;ici. Pour les utilisateurs finaux, <a href="https://linkurious.com/">Linkurious Enterprise</a> propose une interface facile à prendre en main pour les non-initiés, des possibilités puissantes de recherche, de filtrage ou de personnalisation des styles ; des visualisations qui peuvent être sauvegardées, organisées, partagées, exportées ou commentées. Pour les administrateurs, la possibilité de gérer finement les utilisateurs, groupes, droits d&#8217;accès, en les liant potentiellement à un AD ou LDAP. </p>



<p>On regrettera l&#8217;absence d&#8217;un outil tel que celui proposé par Bloom, permettant de construire des requêtes (relativement) élaborées sans nécessiter la connaissance de Cypher. Mais ceci est compensé par la possibilité pour les administrateurs de définir des requêtes Cypher, éventuellement paramétriques, permettant aux utilisateurs des recherches ou extensions puissantes, sans connaissances techniques.</p>



<p>Une API  avancée permet par ailleurs une grande automatisation. On peut par exemple créer automatiquement une visualisation, pour en créer ensuite un &#8220;widget&#8221; (mini-vue interactive) que l&#8217;on pourra ensuite intégrer dans une application.</p>



<p>Contrairement à la majorité des outils cités dans cet article, il n&#8217;existe pas de version gratuite de Linkurious, même limitée.</p>



<h2 class="wp-block-heading">Graphlytic</h2>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2023/12/image-4.png"><img loading="lazy" decoding="async" width="893" height="219" src="/wp-content/uploads/2023/12/image-4.png" alt="" class="wp-image-19657" style="width:200px" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4.png 893w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4-300x74.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/12/image-4-768x188.png 768w" sizes="auto, (max-width: 893px) 100vw, 893px" /></a></figure>



<p>Sans doute la seule réelle alternative à Bloom ou Linkurious, on aura avec <a href="https://graphlytic.com/">Graphlytic </a>une version gratuite, soit via Neo4j Desktop, soit en on-premise, mais avec un seul utilisateur. On reste cependant un niveau en dessous en termes de possibilités&nbsp;: aspects collaboratifs limités, pas vraiment d&#8217;exploration sélective, pas de requêtes paramétriques. </p>



<p>On notera cependant un &#8220;Query builder&#8221;, encore limité mais avec du potentiel, la possibilité de personnaliser le style (taille de nœuds, couleurs, styles et épaisseur de bords, formes de flèches&#8230;) de façon fine, la présence du API ou la connexion à une SSO (non testés).</p>



<h1 class="wp-block-heading">Conclusions</h1>



<p>Il existe donc un certain nombre d&#8217;alternatives permettant l&#8217;exploration de données dans Neo4j (ainsi que, souvent, d&#8217;autres modèles comme MemGraph ou AllegroGraph). Cela va d&#8217;outils simples et gratuits à la portée de petites organisations, comme yWorks ou Graphlytic, à des solutions beaucoup plus élaborées, mais à des prix que seules des grosses structures peuvent s&#8217;offrir, comme Bloom ou Linkurious. Mais il faudra bien sûr tenir compte d&#8217;un ensemble de critères non détaillés ici ; quel est le modèle de &#8220;<em>pricing&#8221;</em>, l&#8217;outil est-il compatible avec l&#8217;infrastructure logicielle et réseau de l&#8217;entreprise, qu&#8217;en est-il par rapport au GDPR&#8230;</p>



<p>Une première évaluation avec un outil gratuit permettra de mettre en évidence toutes ces contraintes, de sorte de choisir l&#8217;outil idéal en toute connaissance de cause.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><span style="color: #999999;"><em>Ce post est une contribution individuelle de Vandy Berten, spécialisé&nbsp;</em>en<em>&nbsp;data science&nbsp;chez Smals Research. Cet article est écrit en son nom propre et n’impacte en rien le point de vue de Smals.</em></span></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Fake it till you make it &#8211; an introduction to synthetic data</title>
		<link>https://www.smalsresearch.be/fake-it-till-you-make-it-an-introduction-to-synthetic-data/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Thu, 01 Dec 2022 14:58:48 +0000</pubDate>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[synthetic data]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/fake-it-till-you-make-it-an-introduction-to-synthetic-data/</guid>

					<description><![CDATA[Slides van de webinar voor Smals Academy op 01/12/2022 (texte fran&#231;ais&#160;: voir ci-dessous) Een synthetische dataset is een fictieve dataset die de kenmerken van een echte dataset zo goed mogelijk nabootst. Een correct samengestelde synthetische dataset kan, omdat het om louter fictieve gegevens gaat, probleemloos gedeeld, hergebruikt of gepubliceerd worden. Zo kan de toegang tot [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Slides van de webinar voor Smals Academy op 01/12/2022 </strong>(texte fran&ccedil;ais&nbsp;: voir ci-dessous)
</p><div>Een synthetische dataset is een fictieve dataset die de kenmerken van een echte dataset zo goed mogelijk nabootst. Een correct samengestelde synthetische dataset kan, omdat het om louter fictieve gegevens gaat, probleemloos gedeeld, hergebruikt of gepubliceerd worden. Zo kan de toegang tot de echte, gevoelige gegevens, tot een minimum herleid worden. Maar in welke mate is zo&rsquo;n fictieve dataset nog representatief voor de echte data? En wat kan je ermee doen?</div><div>In dit webinar gaan we dieper in op het concept van synthetische data en op de praktische bekommernissen die komen kijken bij het aanmaken ervan. We leggen daarbij de focus op tabulaire gegevens zoals we ze kunnen terugvinden in de meeste klassieke databases. Mogelijke toepassingsgebieden voor de overheid zullen worden toegelicht. We leren daarbij dat er geen &ldquo;1-druk-op-de-knop&rdquo; oplossing bestaat en dat het vaak nodig is om allerlei extra randvoorwaarden op te leggen, afhankelijk van het type gegevens dat we behandelen en waarvoor we de data willen gebruiken.</div><div>Op basis van een experiment met open source componenten en een open dataset, kunnen we aanbevelingen geven om de aanmaak van een synthetische dataset stelselmatig te verbeteren. We gaan in op de afwegingen die daarbij gemaakt moeten worden en we gaan na in welke mate analyses op synthetische data nog representatief zijn voor de onderliggende echte data. Tot slot belichten we kort de commerci&euml;le markt, die erg snel evolueert onder invloed van de ontwikkelingen in artifici&euml;le intelligentie.</div>


<hr class="wp-block-separator has-alpha-channel-opacity">


<p></p><div>Un ensemble de donn&eacute;es synth&eacute;tiques est un ensemble de donn&eacute;es fictives qui reproduit le plus fid&egrave;lement possible les caract&eacute;ristiques d&#8217;un ensemble de donn&eacute;es r&eacute;elles. Un ensemble de donn&eacute;es synth&eacute;tiques correctement constitu&eacute; peut, comme il s&#8217;agit de donn&eacute;es purement fictives, &ecirc;tre librement partag&eacute;, r&eacute;utilis&eacute; ou publi&eacute;. L&#8217;acc&egrave;s aux donn&eacute;es sensibles, r&eacute;elles peut ainsi &ecirc;tre limit&eacute; &agrave; un minimum. Mais dans quelle mesure un tel ensemble de donn&eacute;es fictives est-il encore repr&eacute;sentatif des donn&eacute;es r&eacute;elles&nbsp;? Et que pouvez-vous en faire&nbsp;?</div><div>Lors de ce webinaire, nous nous pencherons sur le concept de donn&eacute;es synth&eacute;tiques ainsi que sur les pr&eacute;occupations pratiques qui interviennent dans leur cr&eacute;ation. Nous nous concentrerons sur les donn&eacute;es tabulaires telles qu&#8217;elles se trouvent dans la plupart des bases de donn&eacute;es classiques.
Nous pr&eacute;senterons les domaines d&#8217;application possibles pour le gouvernement. Nous verrons ainsi qu&#8217;il n&#8217;existe pas de solution miracle et qu&#8217;il s&#8217;agit souvent de poser diverses conditions pr&eacute;alables suppl&eacute;mentaires, selon le type de donn&eacute;es que nous traitons et l&#8217;usage que nous voulons en faire.</div><div>Sur la base d&#8217;une exp&eacute;rience men&eacute;e avec des composants open source et un lot de donn&eacute;es ouvert, nous pourrons &eacute;mettre des recommandations pour am&eacute;liorer syst&eacute;matiquement la cr&eacute;ation d&#8217;un ensemble de donn&eacute;es synth&eacute;tiques. Nous aborderons les &eacute;l&eacute;ments &agrave; consid&eacute;rer dans ce processus et verrons dans quelle mesure les analyses bas&eacute;es sur des donn&eacute;es synth&eacute;tiques sont repr&eacute;sentatives des donn&eacute;es r&eacute;elles sous-jacentes. Enfin, nous pr&eacute;senterons bri&egrave;vement le march&eacute; commercial, qui &eacute;volue &agrave; une vitesse vertigineuse sous l&#8217;influence des d&eacute;veloppements de l&#8217;intelligence artificielle.</div>







                <h1 class="wp-block-heading">Presentation</h1>
            
            


            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2022/12/20221201-infosessie-synthdata-Final.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of 20221201-infosessie-synthdata-Final."></object>
                <a id="wp-block-file--media-55cbc05f-232c-4a5f-b404-be844c9623ee" href="https://www.smalsresearch.be/wp-content/uploads/2022/12/20221201-infosessie-synthdata-Final.pdf">20221201-infosessie-synthdata-Final</a><a href="https://www.smalsresearch.be/wp-content/uploads/2022/12/20221201-infosessie-synthdata-Final.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-55cbc05f-232c-4a5f-b404-be844c9623ee">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Honey, I scraped the kids &#8211; over taalmodellen en privacy</title>
		<link>https://www.smalsresearch.be/honey-i-scraped-the-kids/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Fri, 17 Jun 2022 08:34:33 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[data capture]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Machine Learning]]></category>
		<category><![CDATA[open data]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">/?p=17396</guid>

					<description><![CDATA[De datasets die ten grondslag liggen van enorme taalmodellen zijn zonder veel poespas gescraped van het internet. Een korte zoektocht naar  persoonsgebonden gegevens hierin, brengt al snel heel wat boven water.]]></description>
										<content:encoded><![CDATA[
<p>Taalmodellen, die gebruikt worden voor applicaties zoals automatische vertaling, chatbots, en het <a href="/de-ai-als-auteur/">genereren van teksten</a>, worden steeds groter. Nadat OpenAI&#8217;s <a href="https://github.com/openai/gpt-3">GPT-3</a> nogal wat <a href="https://www.youtube.com/watch?v=_x9AwxfjxvE">furore </a>had gemaakt met haar <a href="https://github.com/elyase/awesome-gpt3">spectaculaire toepassingen</a>, volgen nu regelmatig nog grotere modellen &#8211; Google&#8217;s <a href="https://arxiv.org/abs/2101.03961">Switch</a> of het Chinese <a href="https://en.wikipedia.org/wiki/Wu_Dao">Wu Dao</a> zijn maar enkele van de voorbeelden. (Het woord &#8220;taalmodel&#8221; mag men trouwens met een korrel zout nemen &#8211; in de praktijk gaat het nog steeds om niet meer dan een &#8220;woordvolgordemodel&#8221;)</p>



<p>Enorme taalmodellen moeten worden getraind met enorme datasets. Om die te verzamelen wordt op geen bron meer of minder gekeken: <a href="https://pile.eleuther.ai/">The Pile</a>, zowat de grootste dataset van Engelstalige tekst die vandaag bestaat, tikt ongeveer 825 GB aan. De volledige Engelstalige Wikipedia maakt er deel van uit, voor 6.3 GB, oftewel 0.7% van de collectie. Andere databronnen zijn <a href="https://commoncrawl.org/">CommonCrawl</a> , <a href="https://openwebtext2.readthedocs.io/en/latest/">OpenWebText</a> , maar er worden ook tekstfragmenten gebruikt afkomstig van Github, ArXiv, PubMed, StackExchange, OpenSubtitles, zelfs het <a href="https://www.statmt.org/europarl/">Europees Parlement</a>. </p>



<p>Veel van die datasets zijn met eenvoudige <a href="https://en.wikipedia.org/wiki/Web_scraping">webscraping </a>scripts verzameld. Of dat <a href="https://www.scraperapi.com/blog/is-web-scraping-legal/">allemaal wel mag</a> volgens copyright- en privacywetgevingen allerhande, is een ingewikkelde vraag met een nog ingewikkelder antwoord en dus maakt men daar voor het gemak in eerste instantie vaak abstractie van. Kwaliteitschecks en fijnmazige filters zijn tijdrovend als je ze accuraat wil maken, en in de wedloop om het grootste taalmodel sneuvelen die dus helaas ook maar al te vaak. </p>



<p>Gegeven de enorme verscheidenheid aan bronnen, websites, tekstformatteringen en dataverzamelingsmethodes, is het zo haast onvermijdelijk geworden dat in datasets van die grootteorde toch nog <a href="https://ec.europa.eu/info/law/law-topic/data-protection/data-protection-eu_nl">persoonsgegevens </a>of <a href="https://economie.fgov.be/nl/themas/intellectuele-eigendom/intellectuele-eigendomsrechten/auteursrecht-en-naburige/auteursrechten">auteursrechtelijk</a> beschermde teksten terechtkomen &#8211; zelfs als men moeite doet om enigszins correct te handelen. Reden genoeg om zelf eens in zo&#8217;n dataset te duiken en te kijken wat we daarin terugvinden.</p>



<h1 class="wp-block-heading">OSCAR</h1>



<figure class="wp-block-image alignright size-full is-resized"><a href="/wp-content/uploads/2022/06/avatar_hub278c5e06b117b962e66239a5e135575_291648_270x270_fill_lanczos_center_3.png"><img loading="lazy" decoding="async" width="270" height="270" src="/wp-content/uploads/2022/06/avatar_hub278c5e06b117b962e66239a5e135575_291648_270x270_fill_lanczos_center_3.png" alt="OSCAR logo" class="wp-image-17500" style="width:135px;height:135px" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/06/avatar_hub278c5e06b117b962e66239a5e135575_291648_270x270_fill_lanczos_center_3.png 270w, https://www.smalsresearch.be/wp-content/uploads/2022/06/avatar_hub278c5e06b117b962e66239a5e135575_291648_270x270_fill_lanczos_center_3-150x150.png 150w" sizes="auto, (max-width: 270px) 100vw, 270px" /></a><figcaption class="wp-element-caption">OSCAR logo</figcaption></figure>



<p><a href="https://oscar-corpus.com/">OSCAR </a>is een meertalige dataset die regelmatig wordt gebruikt voor niet-Engelstalige taalmodellen. De Nederlandstalige subset ervan kan dienen als basis van een <a href="https://blog.ml6.eu/dutch-gpt2-autoregressive-language-modelling-on-a-budget-cff3942dd020">Nederlandstalige tekstgenerator</a>. OSCAR is op zijn beurt afgeleid van <a href="https://commoncrawl.org/">CommonCrawl</a>, een grootschalige dataset van scraped websites, waarvan de makers wel aangeven dat <a href="https://www.robotstxt.org/">robots.txt</a> en HTML <a href="https://microformats.org/wiki/Main_Page">no-follow</a> specificaties gehonoreerd werden, maar waar verder weinig meer mee gebeurd is dan gegevensopslag. OSCAR groepeert die per taal, voegt wat <a href="https://ids-pub.bsz-bw.de/frontdoor/index/index/docId/9021">extra preprocessing</a> toe, en zet de tekstfragmenten in willekeurige volgorde, om zo copyrightproblemen te vermijden. We doen hier geen uitspraak over de vraag of dat wel voldoende is voor dat doel. Een bijkomend effect daarvan is wel dat de inhoudelijke relatie tussen opeenvolgende tekstfragmenten in deze dataset dus verloren is gegaan. (De <a href="https://arxiv.org/abs/2201.06642">laatste paper</a> van de auteurs probeert daar alsnog een mouw aan te passen.)</p>



<p>We bekijken de Nederlandstalige gegevens uit de eerste versie van deze dataset uit 2019 (toegang tot <a href="https://huggingface.co/datasets/oscar-corpus/OSCAR-2109">versie 2021</a> of <a href="https://huggingface.co/datasets/oscar-corpus/OSCAR-2201">versie 2022</a> vereisen registratie of aanvraag). Deze is vrij beschikbaar in de dataset repository van Huggingface, dat ook een eerste <a href="https://huggingface.co/datasets/oscar/viewer/unshuffled_deduplicated_nl/train.">preview van de inhoud</a> voorziet. Bij Huggingface vermeldt men summier dat de dataset <a href="https://huggingface.co/datasets/oscar#personal-and-sensitive-information">persoonlijke of gevoelige informatie</a> kan bevatten, en dat de training van een AI-model op basis van deze dataset gevoelig kan zijn voor <a href="https://huggingface.co/datasets/oscar#discussion-of-biases">biases</a>, zonder dieper in te gaan op deze problematiek. De verantwoordelijkheid hiervoor wordt bij de gebruiker van de dataset gelegd.</p>



<p>De Nederlandstalige subset van OSCAR bestaat uit 126.064.721 tekstfragmenten van één tot enkele zinnen lang, die we kunnen samengevoegen tot 1 tekstbestand met een grootte van ongeveer 40GB. In wat volgt doorzoeken we deze dataset naar gegevens die als persoonlijk of gevoelig beschouwd zouden kunnen worden. Het valt aan te nemen dat die gegevens grotendeels zijn gescrapet zonder medeweten van de originele auteurs of van de websites waarop ze oorspronkelijk gepubliceerd waren. We tonen telkens een selectie van wat we zoal terugvinden ter illustratie, maar om de mogelijke privacy- en copyrightproblemen niet erger te maken dan ze al zouden kunnen zijn, maskeren we in dit artikel de gevonden gevoelige gegevens alsnog en markeren we ze rood. </p>



<h1 class="wp-block-heading">Gevoelige gegevens in OSCAR</h1>



<p>Door gewoon reguliere expressies toe te passen, die je vaak kan <a href="https://regex101.com/library">copy-pasten van het internet</a>, kunnen we al veel boven water halen.&nbsp;Om emailadressen te detecteren, gebruiken we een relatief eenvoudig patroon, waarmee we <strong>685.968 potentiële matches</strong> terugvinden (let wel dat veel algemene emailadressen, bijvoorbeeld van helpdesks of infolijnen of grote organisaties, herhaaldelijk voorkomen):</p>



<pre class="wp-block-code"><code>grep -a -e "&#91;a-zA-Z0-9._]\+@&#91;a-zA-Z]\+.&#91;a-zA-Z]\+" oscar_nl_full.txt</code></pre>



<ul>
<li><em>Ik gooide enkele nieuwe data online! Wie zin heeft kan zich inschrijven door te mailen naar <span style="color: #ff0000;">e*******s@gmail.com</span></em></li>
<li><em>Ontdek hoe je een WordPress thema vindt dat echt bij jou past! www.speciaalgeselecteerd.nl jouw gids voor WordPress thema s Door: <span style="color: #ff0000;">S******* v** N********</span> Datum: 1-1-2016 E-mail: <span style="color: #ff0000;">s********@innonet.nl</span> WordPress</em></li>
<li><em>De hoofdleiding bestaat uit <span style="color: #ff0000;">D***** V******<span style="color: #000000;">,</span> G***** G*******<span style="color: #000000;">,</span> M**** W****** <span style="color: #000000;">en</span> F***** V*** B*****<span style="color: #000000;">,</span></span> hen kan je contacteren via <span style="color: #ff0000;">0497******</span> (<span style="color: #ff0000;">D*****</span>), <span style="color: #ff0000;">0493******</span> (<span style="color: #ff0000;">G*****</span>), <span style="color: #ff0000;">0477******</span> (<span style="color: #ff0000;">M****</span>) en <span style="color: #ff0000;">0498******</span> (<span style="color: #ff0000;">F*****</span>). Een mailtje naar <span style="color: #ff0000;">i***@c*********.be</span> is ook altijd mogelijk. Zij zullen jullie graag helpen met vragen, opmerkingen of klachten.</em></li>
</ul>



<p>Veel emailadressen lijken afkomstig van contactpagina&#8217;s op websites van bedrijven, organisaties, maar je herkent ook overduidelijk verenigingen, lokale initiatieven, jeugdbewegingen, en forumgebruikers die hun persoonlijke contactgegevens achterlaten, waaronder telefoonnummers. Het volgende patroon zoekt naar cijfercombinaties die eruit zien als een Belgisch telefoonnummer, in de meest voorkomende schrijfwijzen. (Het patroon is iets te algemeen opgesteld, met als nadeel dat we er ook onderdelen van niet-telefoonnummers mee vinden.) Dat leidt alleszins al tot <strong>289.461 potentiële matches</strong>:</p>



<pre class="wp-block-code"><code>grep -a -P "(((\+|00)32&#91; ]?(?:\(0\)&#91; ]?)?)|0){1}(4(60|&#91;789]\d)\/?(\s?\d{2}\.?){2}(\s?\d{2})|(\d\/?\s?\d{3}|\d{2}\/?\s?\d{2})(\.?\s?\d{2}){2})" oscar_nl_full.txt 
</code></pre>



<ul>
<li><em>Tijdens de openingstijden kan je via de Live Chat of via de telefoon <span style="color: #ff0000;">07********</span> vragen stellen aan één van onze medewerkers.</em></li>
<li><em>[&#8230;] Heeft u vragen over onze werkwijze, prijzen of materialen dan zijn we bereikbaar op de nummers <span style="color: #ff0000;">03/***.**.**</span> en <span style="color: #ff0000;">03/***.**.**</span>. Ook kunt u een e-mail sturen naar [email protected] of het contactformulier invullen.</em></li>
<li><em>Op 22 september vertrekken we op speel-weekend naar Ronse. Wil je nog mee? Als de bliksem bellen naar <span style="color: #ff0000;">R******* 0496/**.**.**</span></em></li>
<li><em>Propere betonnen palen 8 stuks, geen beton/cement aan de onderkant van de paal- lengte 2.05m. Bieden vanaf €7/stuk. Tel <span style="color: #ff0000;">0478/******</span></em></li>
</ul>



<p>Ook hier vinden we veel contactgegevens van bedrijven, maar een aanzienlijk deel zijn ook persoonlijke telefoonnummers afkomstig van berichten die mensen postten op online marktplaatsen of zoekertjeswebsites. Bankrekeningnummers, BTW-nummers e.d. duiken ook op tussen de gevonden data. Om te blijven focussen op persoonsgerelateerde data, gaan we nog op zoek naar Twitter of Instagram handles. Deze kunnen bijvoorbeeld afkomstig zijn van conversaties op Twitter en Instagram zelf, van internetfora waar mensen erover spreken, of van de footers van webpagina&#8217;s met links naar sociale media. Afgezien van enkele bedrijven wiens naam of product met een @ begint, gaan achter de meeste gevonden handles echte, actieve mensen of organisaties schuil. We vinden zo <strong>131.364 potentiële matches</strong>:</p>



<pre class="wp-block-code"><code>grep -a -e " @&#91;a-zA-Z0-9]\+" oscar_nl_full.txt</code></pre>



<ul>
<li>Vandaag waren we op bezoek bij Leo Timmers, maker van Een huis voor Harry, het Prentenboek van het Jaar 2019! En we gingen Billy ontmoeten, de kat waar Harry op geïnspireerd is. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f60d.png" alt="😍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ik had dus de dag van m’n leven. <span style="color: #ff0000;">@v***********</span> #cat #books #brussels #reading #catsofbrussels #eenhuisvoorharry&nbsp;</li>
<li>[&#8230;] <span style="color: #ff0000;">R*****</span> twitterde dit naar mij en <span style="color: #ff0000;">@p********</span>, afgelopen zondagmiddag. We hadden het over de blogs die Ruud had willen schrijven die dag: drie stuks maar liefst. De blogs kwamen er inderdaad niet. Nooit meer. <span style="color: #ff0000;">R*****</span> overleed maandagavond <span style="color: #ff0000;">[datum]</span>. Ik heb een goede vriend verloren.</li>
<li>Zeg <span style="color: #ff0000;">@********</span> wat willen jullie nou in de omgangsvorm: &#8216;u&#8217; of &#8216;je&#8217;? Maak een keuze! <span style="color: #ff0000;">https://t.co/********</span></li>
<li><span style="color: #ff0000;">@********</span> En niet alleen dat. Het kenteken <span style="color: #ff0000;">*-***-**</span> staat mooi op beeld. Kijk dus uit voor deze asociale weggebruiker, mede-weggebruikers. @ <span style="color: #ff0000;">[datum]</span></li>
</ul>



<p>Er duikt duidelijk een heel palet aan persoonsgebonden informatie in deze dataset op, zoals ook nummerplaten, berichten over ziekte of overlijden, politieke voorkeuren, informatie over wanneer personen waar geweest zijn, en nog heel wat meer. Met hetzelfde gemak vinden we ook beledigingen tegen personen terug, verwensingen allerhande, racistische fragmenten, &#8230; we kunnen alleszins heel lang bezig blijven als we hierop enige grip willen krijgen in zo&#8217;n dataset.  </p>



<p>Een heel ander gevoelig onderwerp is erotische inhoud. Er zijn alvast <strong>2.459.800 matches </strong>voor woorden die beginnen met &#8220;seks&#8221; of &#8220;sex&#8221; in dit eerste deeltje van de dataset. Voorbeelden daarvan geven we terwille van de goede smaak niet mee, maar u mag de auteur op zijn woord geloven dat de meeste gevonden tekstfragmenten niet van droog-wetenschappelijke papers of schoolse seksuele opvoeding afkomstig zijn. Op een totaal van 126 miljoen zinnen, kunnen we zo schatten dat zulke inhoud ongeveer <strong>2% van het totaal</strong> uitmaakt in deze dataset.&nbsp;</p>



<h1 class="wp-block-heading">Kom ik er in voor?</h1>



<p>Dat kunnen we gemakkelijk achterhalen:</p>



<pre class="wp-block-code"><code>grep -a -e "Joachim Ganseman" oscar_nl_full.txt  </code></pre>



<ul class="wp-block-list">
<li>De 27e Internationale Olympiade Informatica vond plaats in Almaty, Kazachstan. De Belgische ploeg werd gevormd door Damien Galant (5e middelbaar), Robin Jadoul, Mattéo Couplet en Nico Ekkart (allen 6e middelbaar). Zij werden begeleid door Damien Leroy en Joachim Ganseman. [&#8230;]</li>



<li>[&#8230;] De bouwstenen voor artificiële intelligentie (AI) liggen klaar, maar ze staan op los zand. Dhr. Joachim Ganseman van Smals Research bestudeerde de zwaktes van AI. In zijn artikel op de Research-blog bespreekt hij een aantal uitdagingen voor de toekomst. </li>



<li>Joachim Ganseman wordt onderscheiden voor de ijver waarmee hij als jonge doctoraatsstudent de Belgische informatica-olympiade heeft gesticht, coördineert en communiceert in beide landshelften, met bijzondere inspanningen voor de toegankelijkheid voor alle leerlingen, ongeacht voorkennis.</li>
</ul>



<p>In 7 tekstfragmenten komt mijn volledige naam voor, voornamelijk in verband met mijn engagement bij de <a href="https://www.be-oi.be/">Belgische Informatica-olympiade</a> van 2011 tot 2018. Geen info die iets schandaligs of schaamtelijks bevat, integendeel, maar ik was niet op de hoogte. Als je ooit met naam en toenaam in de krant of op een website van een grotere organisatie hebt gestaan, lijkt de kans alleszins groot dat je naam in dat verband ook in de OSCAR dataset voorkomt. Het blijft dus erg belangrijk om in het achterhoofd te houden dat <a href="https://www.ikbeslis.be/jongeren/privacy-online/denk-na-voor-je-iets-post">dat wat eenmaal op het internet staat, er erg moeilijk terug af gaat</a>.</p>



<p>Misschien kan het een goed idee zijn om, naar analogie van <a href="https://haveibeenpwned.com/">Have I Been Pwned</a> die je waarschuwt voor paswoordlekken, een gelijkaardige dienst te hebben bij <a href="https://huggingface.co/">dataset repositories</a> waarmee gebruikers kunnen checken of hun persoonlijke informatie voorkomt in datasets? Tijd en middelen ontbreken om zoiets zelf verder uit te werken, maar we laten het hier staan als een interessante suggestie.</p>



<h1 class="wp-block-heading">En dan?</h1>



<p>We moeten nog vermelden dat de makers van de CommonCrawl en OSCAR datasets zelf niet Nederlandstalig zijn. Zij hebben dan ook niet onmiddellijk manieren ter beschikking om de verzamelde fragmenten in het Nederlands (en in de meeste van de andere 165 talen in OSCAR) op hun inhoudelijke merites te gaan beoordelen, en presenteren deze datasets &#8220;as is&#8221;. </p>



<p>Gegeven het feit dat persoonsgebonden gegevens gemakkelijk te vinden zijn op het internet voor wie  een beetje zoekt &#8211; en zeker op sociale media of op marktplaatsen waar ze gretig uitgewisseld worden &#8211; is het niet verwonderlijk dat deze gegevens ook terechtkomen in datasets verzameld via webscraping, als er een breed net wordt uitgegooid en weinig wordt gefilterd.</p>



<p>Smals Research is een technisch team zonder juristen in haar rangen; we laten uitspraken over het wettelijke kader rond webscraping, auteursrechten, en de gebruiksvoorwaarden van websites, in een internationale context, dan ook liever over aan <a href="https://www.law.kuleuven.be/citip">mensen die daar meer van kennen dan wij</a>. Het is in onze sector wel algemeen bekend dat de persoonsgegevens van EU-ingezetenen beschermd worden door de <a href="https://ec.europa.eu/info/law/law-topic/data-protection/data-protection-eu_nl">GDPR</a>. Dat houdt onder andere in dat zij de <a href="https://www.gegevensbeschermingsautoriteit.be/professioneel/avg/rechten-van-de-burgers/het-recht-van-inzage">inzage </a>en verwijdering van hun gegevens moeten kunnen vragen, en informatie moet kunnen krijgen over het gebruik ervan. Het wordt natuurlijk moeilijk om dat recht effectief uit te oefenen, als gegevens op elk moment in een externe database kunnen worden overgenomen, zonder medeweten van die persoon of zelfs van de website waarop ze gepubliceerd waren. </p>



<figure class="wp-block-image alignleft size-medium"><a href="/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman.png"><img loading="lazy" decoding="async" width="300" height="225" src="/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman-300x225.png" alt="NLG systemen schrijven tekst op basis van wat ze tijdens de trainingsfase hebben gezien." class="wp-image-16313" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman-768x576.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman.png 1024w" sizes="auto, (max-width: 300px) 100vw, 300px" /></a><figcaption class="wp-element-caption">Een AI-model dat tekst schrijft, doet dat op basis van wat het tijdens de trainingsfase heeft gezien. [&#8220;Bookshelf Writer&#8221;, Andreas Refsgaard, Kåre Magnus Sand Solvåg, Riccardo Cereser (c) Copenhagen Institute of Interaction and Design]</figcaption></figure>



<p>Wie van zulke datasets gebruik maakt om AI systemen te trainen, is technisch gesproken de daarin begrepen persoonsgegevens aan het verwerken, en lijkt zo alvast automatisch een verantwoordelijkheid te hebben ten aanzien van die betreffende personen. Het is daarnaast niet ondenkbaar dat een <a href="https://www.analyticsvidhya.com/blog/2021/07/data-leakage-and-its-effect-on-the-performance-of-an-ml-model/">verkeerd of slecht getraind AI-systeem</a> deze gegevens expliciet opneemt in het resulterend model, en ze aanwendt om bepaalde beslissingen te nemen, wat een <a href="https://www.microsoft.com/en-us/research/theme/fate/">risico op bias</a> met zich meebrengt. Tot slot weet je nooit of er ergens een slecht beveiligde website gescrapet werd door de dataset-maker, waardoor er misschien login-gegevens of paswoorden voorkomen in de dataset.</p>



<h1 class="wp-block-heading">Een alternatieve werkwijze</h1>



<p>De onderzoeksgroep <a href="https://www.rug.nl/research/clcg/research/cl/">Computationele Linguïstiek</a> van de Universiteit van Groningen bouwde een <a href="https://dx.doi.org/10.18653/v1/2021.findings-acl.74">eigen variant</a> van een Nederlandstalig GPT-2 model. Zij zijn natuurlijk wél Nederlandstalig, en waren ook selectiever in het kiezen van hun trainingsdata. In hun paper lezen we dat die bestaat uit de Nederlandstalige Wikipedia (2.0GB), een grote hoeveelheid E-books (6.5GB), een <a href="https://research.utwente.nl/en/publications/twnc-a-multifaceted-dutch-news-corpus">dataset van nieuwsartikels</a> die weliswaar nog van 2007 dateert (2.9GB) aangevuld met artikels van andere nieuwswebsites (2.1GB). Na het wegfilteren van duplicaten is dat goed voor een trainingsdataset van 13GB aan Nederlandstalige tekst. Gegeven deze bronnen is het aannemelijk dat hun dataset alvast correcter geschreven Nederlands bevat van een inhoudelijk hogere standaard.</p>



<p>De eigenlijke dataset vonden we na een korte zoektocht niet onmiddellijk terug, dus het is moeilijk de inhoud verder te bekijken &#8211; wie weet waar ze ergens beschikbaar zou zijn, mag het steeds laten weten. Het valt alleszins te verwachten dat de inhoud van deze dataset minder problematisch zal zijn op het vlak van persoonlijke gegevens dan OSCAR. Langs de andere kant stelt zich, met een dataset afkomstig van krantenartikels en e-books, misschien wel nog een copyrightprobleem.</p>



<p>Kieskeurig zijn qua trainingsdata heeft weliswaar een keerzijde. Een generatief taalmodel getraind op een selecte dataset is gelimiteerder qua teksten die het kan produceren. Tekstfragmenten die lijken op sociale-media-posts zullen moeilijk gegenereerd kunnen worden door een model dat niet getraind werd op data afkomstig van sociale media, en een hoge aandeel e-books leidt ook tot prozaïscher teksten. Tot slot maakt het groot aandeel van oudere nieuwsartikels ook dat het getrainde model teksten &#8220;uit die tijd&#8221; zal produceren, en relatief minder woordenschat en zinswendingen kent over recente trends, technologische uitvindingen of politieke ontwikkelingen.</p>



<h1 class="wp-block-heading">Conclusie</h1>



<p>We hebben hier slechts één Nederlandstalige dataset onder de loep genomen, maar het spreekt voor zich dat dezelfde problemen zich stellen in gelijkaardige datasets voor andere talen.</p>
<p>Het valt op dat enkele eenvoudige filters, bijvoorbeeld om emailadressen, rekeningnummers, persoonlijke profielinformatie of andere persoonsgegevens te detecteren, al een heel deel van deze problematische inhoud zouden kunnen wegfilteren. Een sluitende garantie geven dat er niets fouts meer voorkomt is haast onmogelijk in datasets van deze grootteorde, maar hier hebben we toch kunnen illustreren dat er soms wel érg weinig moeite gedaan lijkt te zijn om de datasets een beetje op te schonen. </p>
<p>Propere datasets maken, deze inhoudelijk onderzoeken en daarbij in de diepte graven, kost natuurlijk tijd en moeite &#8211; enkel om problematische stukjes weg te vijlen die in hun geheel maar een klein deeltje uitmaken van de hele dataset, wat dus waarschijnlijk ook maar een kleine impact zou hebben op het daaruit resulterende taalmodel. Het is moeilijk hard te maken dat zulk monnikenwerk zich economisch terugverdient, en garanties dat je effectief alles verwijdert zijn er evenmin.</p>
<p>Toch is het belangrijk dat er voldoende aandacht geschonken wordt aan de kwaliteit van de onderliggende datasets. Als dat niet werkbaar is vanwege hun grootte, moet je je minstens een idee vormen van de impact van mogelijke onregelmatigheden erin. Een <a href="https://www.gegevensbeschermingsautoriteit.be/professioneel/avg/effectbeoordeling-geb">data protection impact assessment</a> is net daarvoor bedoeld, en is in sommige gevallen verplicht.</p>
<p><span style="text-decoration: underline;"><strong>Het blind hergebruiken van een dataset die je zelf niet hebt samengesteld, is een slecht idee.</strong></span> Dat geldt bij uitbreiding eigenlijk ook voor het indirect gebruik ervan via een derde partij of een externe software-library. Dit is overigens een algemeen advies dat geldt voor elke toepassing van machine learning. Wie beter wil doen en ethiek wat hoger in het vaandel wil dragen, vindt goede startpunten in de paper <a href="https://arxiv.org/abs/1803.09010">Datasheets for Datasets</a> en bij initiatieven zoals <a href="https://ainowinstitute.org/">AI Now</a>.</p>



<p>______________________</p>



<p><em>Dit is een ingezonden bijdrage van Joachim Ganseman, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Data scrambling: synthetische data in de praktijk</title>
		<link>https://www.smalsresearch.be/data-scrambling-synthetische-data-in-de-praktijk/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Wed, 23 Mar 2022 14:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[data center]]></category>
		<category><![CDATA[Data Integration]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[synthetic data]]></category>
		<guid isPermaLink="false">/?p=17110</guid>

					<description><![CDATA[In dit artikel kijken we naar de praktische bekommernissen als we tools voor synthetische data inzetten: wat komt een data professional die hiermee aan de slag moet zoal tegen?]]></description>
										<content:encoded><![CDATA[
<p>Oracle definieerde <em>data scrambling</em> ooit <a href="https://docs.oracle.com/cd/E11857_01/em.111/e18709/T508706T512067.htm">als volgt</a>: <em>&#8220;the process to obfuscate or remove sensitive data. This process is irreversible so that the original data cannot be derived from the scrambled data.&#8221;</em> Als zodanig hoort het zeker thuis onder de <a href="/wanneer-is-welke-privacybevorderende-technologie-nuttig/">privacybevorderende technologieën waarvan eerder spake</a>: het doel is de gegevens zo goed mogelijk af te schermen, maar ze toch (deels) bruikbaar te houden voor derden. In strikte zin is scrambling slechts een <a href="https://www.imperva.com/learn/data-security/data-masking/">vorm </a>van <a href="https://www.datamasker.com/DataMasking_WhatYouNeedToKnow.pdf">data masking</a>, maar in dit artikel hanteren we een bredere definitie en rekenen we o.a. ook shuffling en substituties ertoe. Deze technologieën worden onder andere toegepast bij banken, waar testers en ontwikkelaars wel een stacktrace moeten kunnen onderzoeken of een programma moeten testen, maar daarbij geen inzage mogen krijgen in de echte bankgegevens van klanten.</p>



<p>Als het doel is om een functioneel alternatief te voorzien voor gevoelige data, zijn tools voor de creatie van <a href="/synthetic-data/">synthetische data</a> bij uitstek geschikt. Ze kunnen immers meer dan enkel de bestaande gegevens door elkaar gooien: ze zijn gemaakt om de structuur van gegevens aan te leren, waarna je willekeurig veel nieuwe gegevens volgens dezelfde structuur kan aanmaken. In combinatie met <a href="https://faker.readthedocs.io/en/master/">generatoren</a> voor totaal fictieve gegevens, hebben we daarmee alles voorhanden om niet alleen de originele gegevens te verbergen, maar ook om te zorgen dat wat in de plaats komt, realistisch oogt. </p>



<p>Dat betekent echter niet dat het een kwestie is van een druk op de knop. Eén en ander hangt af van allerlei randvoorwaarden en aannames over de inhoud en structuur van de gegevens. Afhankelijk van de beoogde toepassing of het doel, kan het nodig zijn om extra beperkingen en filters op te leggen, of misschien net om bepaalde delen van de gegevens buiten beschouwing te laten. In dit artikel kijken we vooral naar die <strong>praktische bekommernissen</strong>: wat kom je zoal tegen als data professional die synthetische data moet aanmaken?</p>



<p></p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2022/03/2022-03-23_13h12_45.png"><img loading="lazy" decoding="async" width="1024" height="447" src="/wp-content/uploads/2022/03/2022-03-23_13h12_45-1024x447.png" alt="" class="wp-image-17153" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h12_45-1024x447.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h12_45-300x131.png 300w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h12_45-768x335.png 768w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h12_45-1536x670.png 1536w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h12_45.png 1648w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Synthetische data in de praktijk: uit de originele data (boven) wordt de structuur approximatief aangeleerd, het resulterende generatieve model kan daarna realistisch lijkende fictieve gegevens genereren (onder).</figcaption></figure>



<h1 class="wp-block-heading">Setup</h1>



<p>Wie een dataset wil scramblen, heeft uiteraard toegang nodig tot de originele gegevens. Het spreekt voor zich dat het uploaden van gevoelige data naar een cloud service of zelfs het gebruik van een <a href="/distributie-van-cloud-services/">Docker container voorzien door een derde partij</a>, slechts mogelijk is als er grondig is nagedacht over GDPR-compliance, eventueel een Data Protection Impact Assessments (DPIA) is opgesteld, en best ook met de DPO is overlegd. We doen zelf geen enkele uitspraak over de geschiktheid van eender welke tool vis-à-vis de GDPR-wetgeving. Voor al wat volgt gaan we ervan uit dat we werken met tabulaire, tekstuele of numerieke gegevens, die lokaal beschikbaar zijn &#8211; met andere woorden, een grote spreadsheet.</p>



<h2 class="wp-block-heading">De markt</h2>



<p>In een <a href="/synthetic-data/">vorig artikel</a> vermeldden we al enkele spelers vanuit de optiek van AI-projecten en software testing. Hier ligt onze focus meer op de privacybescherming en data science. Voor het analyseren en synthetiseren van tabulaire gegevens is er een heel sterk groeiende markt. Enkele interessante spelers zijn de volgende &#8211; en er zijn er ongetwijfeld nog veel meer:</p>



<ul class="wp-block-list">
<li><a href="https://mostly.ai/">Mostly.ai</a></li>



<li><a href="https://ydata.ai/">YData</a></li>



<li><a href="https://www.tonic.ai/">Tonic</a></li>



<li><a href="https://gretel.ai/">Gretel</a></li>



<li><a href="https://www.synthesized.io/">Synthesized.io</a></li>
</ul>



<p>Open source tools zijn er minder en zijn vaak afkomstig van projecten die op universiteiten zijn begonnen. <a href="https://www.benerator.de/">Benerator </a>vermelden we apart omdat deze al langer bestaat en ook een uitgebreid commercieel aanbod heeft. Jongere open source initiatieven zijn onder andere:</p>



<ul class="wp-block-list">
<li><a href="https://sdv.dev/">Synthetic Data Vault (SDV)</a></li>



<li><a href="https://mimesis.name/master/">Mimesis</a></li>



<li><a href="https://dmey.github.io/synthia/">Synthia</a></li>



<li><a href="https://dataresponsibly.github.io/">Data Responsibly</a>&#8216;s <a href="https://github.com/DataResponsibly/DataSynthesizer">DataSynthesizer</a></li>



<li>MITRE&#8217;s <a href="https://synthetichealth.github.io/synthea/">Synthea</a> / <a href="https://synthea.mitre.org/">SyntheticMass</a> (toegespitst op eHealth)</li>
</ul>



<p>SDV is momenteel de populairste van de open source tools, en we gebruiken deze voor al wat volgt. In onze <a href="/download/review/quick_review/QR-SDV.pdf">Quick Review</a> vind je meer uitleg over deze tool.</p>



<h2 class="wp-block-heading">Het stappenplan</h2>



<p>Het plan van aanpak om synthetische data te produceren is bij de meeste tools heel gelijkaardig. We kunnen het onderverdelen in 6 grote stappen: </p>



<ol class="wp-block-list">
<li>Upload en <strong>inlezen </strong>van de gegevens. Met name de <a href="https://nl.wikipedia.org/wiki/Tekencodering">tekst-encodering </a>kan hier wel eens voor problemen zorgen als de gegevens uit oudere bronnen afkomstig zijn. Problemen hiermee moeten opgelost worden voordat men aan de volgende stappen begint.</li>



<li><strong>Analyse </strong>en typering van de gegevens. Voor elke kolom: welke zijn de minima, maxima, de waarden die voorkomen, zijn er missende waarden, etc. Omdat de computer niet weet wat de achterliggende betekenis van de gegevens is, is het vaak nodig om in deze stap manueel correcties uit te voeren:
<ul class="wp-block-list">
<li>Niet alle getalwaarden kan je zomaar beschouwen als &#8220;hoeveelheden&#8221; die je vrij kan optellen of aftrekken. Sommige zijn categoriën, zoals <a href="https://statbel.fgov.be/sites/default/files/Over_Statbel_FR/Nomenclaturen/NACE-BEL%202008_NL.pdf">NACE codes</a> of <a href="/la-jointure-spatiale-la-cle-de-lanalytique-geographique/">postcodes</a>, andere zijn misschien onderdeel van een datum.</li>



<li>Ontbrekende gegevens zal je in sommige gevallen kunnen gelijkstellen met 0 of met een reeds aanwezige <em>default</em> categorie, maar vaak wil je ze misschien beschouwen als een klasse apart. Een ontbrekende geboortedatum wilt immers niet zeggen dat iemand geboren is in het jaar 0.</li>
</ul>
</li>



<li><strong>Transformatie </strong>van gegevens. Hierbij worden o.a. ontbrekende gegevens afgesplitst, of categorische variabelen omgezet in een <a href="https://en.wikipedia.org/wiki/One-hot">getal-encodering </a>om compacter voorgesteld te worden. Deze stap gebeurt vooral achter de schermen, maar het is vaak mogelijk om manueel configuratie-opties toe te voegen: van sommige kolommen willen we bijvoorbeeld forceren dat de waarden altijd uniek zijn, andere kolommen willen we misschien negeren.</li>



<li>Een <strong>generatief model trainen</strong>. Dit kunnen zowel <a href="https://en.wikipedia.org/wiki/Copula_(probability_theory)">&#8220;klassieke&#8221; statistische modellen</a> zijn als <a href="https://proceedings.neurips.cc/paper/2019/file/254ed7d2de3b23ab10936522dd547b78-Paper.pdf">deep-learning varianten</a>. Sommige modellen zijn enigszins in staat om diepere verbanden tussen de gegevens te reproduceren, maar dit blijft erg afhankelijk van de hoeveelheid gegevens en hun distributie. </li>



<li><strong>Genereren </strong>van nieuwe gegevens. Bij gebruik van een generatief model staat er in principe geen limiet op de hoeveelheid gegevens die aangemaakt kan worden.</li>



<li><strong>Evalueren en visualiseren</strong> van de resultaten. De meeste commerciële tools genereren een mooi eindrapport met daarin een verslag van het hele proces en enkele samenvattende grafieken die toelaten om in een oogopslag te zien of er anomalieën zijn, en of er nog andere correcties toegevoegd dienen te worden. Bij open-source tools is dat vaak beperkt tot enkele metrieken en moet je verdere gegevensanalyse zelf bijprogrammeren. </li>
</ol>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2022/03/2022-03-23_17h13_49.png"><img loading="lazy" decoding="async" width="1024" height="426" src="/wp-content/uploads/2022/03/2022-03-23_17h13_49-1024x426.png" alt="synthetic data concept" class="wp-image-17159" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_17h13_49-1024x426.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_17h13_49-300x125.png 300w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_17h13_49-768x320.png 768w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_17h13_49.png 1117w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Het concept van synthetic data generation. Bron: Haoran Li, Li Xiong, Lifan Zhang, and Xiaoqian Jiang, &#8220;<em><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4496798/">DPSynthesizer: Differentially Private Data Synthesizer for Privacy Preserving Data Sharing</a></em>&#8220;</figcaption></figure>



<h2 class="wp-block-heading">Gegevens</h2>



<p>Wie de tools liefst niet uittest op eigen (gevoelige) data, vindt veel <a href="https://www.kaggle.com/datasets">datasets op Kaggle</a>. Zelf maakten we voor onze testen onder andere gebruik van een variant op de <a href="https://www.kaggle.com/uciml/adult-census-income">Adult Census Income</a> dataset.</p>



<h1 class="wp-block-heading">Praktische bekommernissen</h1>



<h2 class="wp-block-heading">Telgegevens</h2>



<p>Sommige datasets bevatten tellingen. Dat kan het resultaat zijn van een COUNT() functie in de SQL-query voor data-extractie. Om dan een correcte inschatting te kunnen maken van de distributies van de andere variabelen, is het nodig om deze telling ongedaan te maken en de tabel te &#8220;unrollen&#8221;. Een nieuw gegenereerde tabel moet nadien natuurlijk terug &#8220;opgeteld&#8221; worden om terug in het originele formaat te staan. Op deze manier kan men desgewenst ook garanderen dat de resulterende tabel ook effectief hetzelfde aantal records voorstelt als in de originele database, zelfs al is er een ander aantal combinaties van variabelen. De kolom met de telvariabele wordt uiteraard niet meegenomen in het generatief model.</p>



<h2 class="wp-block-heading">Behoud van alle mogelijkheden</h2>



<p>Voor sommige toepassingen kan het nodig zijn dat een gesynthetiseerde dataset zeker ook alle mogelijke waarden bevat die voorkomen in de originele dataset &#8211; bij wijze van representativiteit voor de originele dataset. Maar met name als bepaalde waarden erg zeldzaam zijn, bestaat er een reëel risico dat ze niet genoeg doorwegen bij de training van het generatief model, waardoor ze achteraf bijna nooit gegenereerd worden. De meeste generatieve modellen laten het <a href="https://sdv.dev/SDV/user_guides/single_table/gaussian_copula.html#conditional-sampling">conditioneel samplen</a> van gegevens toe: datapunten kunnen gegenereerd worden waarvoor de waarde van een of meerdere variabelen vaststaan. De distributie van de andere waarden volgt dan een <a href="https://en.wikipedia.org/wiki/Bayes%27_theorem">conditionele distributie</a>, gegeven deze vaste waarden. Doe dat voor elke waarde die voorkomt in de originele dataset, en men kan garanderen dat elke waarde (alleszins onafhankelijk) voorkomt. Dit vraagt weliswaar wat extra programmeerwerk om gedaan te krijgen, en bovendien impliceert dit ook dat een outputdataset een bepaalde minimumgrootte zal hebben.</p>



<h2 class="wp-block-heading">Duplicaten en overlap</h2>



<p>Het genereren van nieuwe gegevens gebeurt door te <a href="https://en.wikipedia.org/wiki/Sample_(statistics)">samplen</a> uit een generatief model &#8211; te vergelijken met het trekken van een lottocombinatie. Zeker als er veel gegevens worden gesynthetiseerd, is het altijd mogelijk dat er twee keer hetzelfde tussenzit. Is dat ongewenst, dan moet een optie toegevoegd worden om duplicaten te verwijderen &#8211; en nadien opnieuw gegevens bij te genereren totdat de gewenste grootte opnieuw is bereikt. Eventueel kan men ook forceren dat gesynthetiseerde gegevens zeker niet mogen voorkomen in de originele dataset &#8211; dat de twee datasets dus volledig disjunct zijn. Dat laatste voegt echter weinig toe qua privacybescherming: zonder kennis van de originele dataset, kan men steeds bogen op een zekere <a href="https://www.vldb.org/pvldb/vol10/p481-bindschaedler.pdf">plausible deniability</a> dat een synthetisch record identiek zou zijn aan een record uit de echte dataset.</p>



<h2 class="wp-block-heading">Trainingstijd</h2>



<p>Zeker bij grote datasets met veel variabelen, en bij gebruik van deep learning tools kan het een lange tijd in beslag nemen om een generatief model te trainen. Dat maakt het moeilijk om iteratief te werk te gaan bij het verfijnen van de opties. Het kan nuttig zijn om tijdens de ontwikkeling, de dataset ten grondslag van de training te beperken tot enkele duizenden willekeurig geselecteerde records. Daarbij mogen we al wat hierboven al werd vermeld natuurlijk niet uit het oog verliezen &#8211; bijvoorbeeld, ook hier kan het nuttig zijn om een extra optie te hebben die garandeert dat een selectie uit de trainingset nog steeds minstens 1 datapunt bevat voor elke waarde van elke variabele.</p>



<h2 class="wp-block-heading">Afhankelijke kolommen</h2>



<p>Een kolom die volledig (lineair) afhankelijk is van een of meerdere andere kolommen, moeten we verwijderen en achteraf terug herberekenen. Dat is typisch het geval bij wiskundige afhankelijkheden: een kolom die een som is van twee andere kolommen, of een percentage van een andere kolom voorstelt. We kunnen best niet hopen dat een generatief model dat verband zelf aanleert. Het is veel zekerder om zulke afhankelijke kolommen gewoon te verwijderen uit de dataset, en nadat een nieuwe dataset is gegenereerd, deze kolommen terug te berekenen op basis van de gesynthetiseerde data en dan pas toe te voegen.</p>



<h2 class="wp-block-heading">Constraints</h2>



<p>Iemands geboortedatum valt altijd vroeger dan iemands sterfdatum. Dat is logisch, maar als men voor een fictief persoon een nieuwe geboortedatum en sterfdatum genereert uit het generatief model dat werd getraind op de distributies van alle geboorte- en sterfdata in een dataset, dan kan het voorvallen dat deze logische beperking niet altijd gerespecteerd blijft. Het kunnen opleggen van <em>constraints</em> &#8211; de ene variabele is altijd groter of kleiner dan een andere, of altijd positief of negatief, etc. &#8211; is een belangrijke feature. Eenvoudige beperkingen, zoals zonet aangehaald, zijn eventueel nog eenvoudig te implementeren door &#8220;rejection sampling&#8221;: voldoet een gesynthetiseerd record niet aan alle constraints, wordt het gedeleted en wordt een nieuw gegenereerd, totdat alle records voldoen. Worden de constraints ingewikkelder of strikter, dan kan het nodig zijn om zelf de nodige filters te programmeren, of om een post-processing stap te definiëren waarin correcties uitgevoerd kunnen worden. </p>



<h2 class="wp-block-heading">Kolommen bevriezen</h2>



<p>Willen we een dataset scramblen met een kolom <em>geslacht</em> en een kolom <em>woonplaats</em>, dan is het eigenlijk voldoende om enkel de kolom met woonplaatsen door elkaar te husselen om een goed gemengde dataset te bekomen. Het geslacht is daar onafhankelijk van, en kunnen we even goed negeren. Het bevriezen van kolommen, in feite gewoon het verwijderen voor de verwerking en terug eraan plakken na het einde, kan zo een grote tijdswinst opleveren. Het is weeral een kolom minder waarvan de distributie aangeleerd moet worden. </p>
<p>Kolommen bevriezen, impliceert weliswaar een voorwaarde: ofwel dat de gesynthetiseerde dataset even lang moet zijn als de originele zodat de dimensies overeenkomen, ofwel dat de gegevens in de bevroren kolom(men) helemaal willekeurig verdeeld zijn, dus op geen enkele manier gesorteerd of gegroepeerd, zodat de bevroren kolom(men) zonder effect op de gegevensdistributie kunnen verkort of verlengd worden. Dat laatste kan echter moeilijk te bewijzen zijn.</p>
<p>Maar zeker als het de bedoeling is dat een gesynthetiseerde dataset even groot is als de originele, wat toch vaak voorkomt, is het een enorm grote tijdswinst als van een dataset met 60 kolommen, er slechts 6 moeten gesynthetiseerd worden om een voldoende gescramblede dataset te krijgen. Bovendien zal een generatief model met minder kolommen meestal ook accurater getraind kunnen worden, dus is het resultaat waarschijnlijk zelfs kwalitatief beter. Eventueel kan de synthetische dataset achteraf nog eens geshuffled worden om enige overgebleven structurele gelijkenis met de originele dataset te verbergen. </p>



<h2 class="wp-block-heading">Rapportering en grafieken</h2>



<p>De gescramblede dataset moet nog vergeleken worden met het origineel, om te verifiëren dat de procedure wel goed verlopen is en of er bepaalde parameters beter aangepast zouden kunnen worden. Het visualiseren van datasets is een uitdaging op zich, waarbij rekening moet worden gehouden met het type van variabele en de waarden die ze kan aannemen. Boxplots zijn vaak een goede keuze voor continue variabelen, en staafdiagrammen voor categorische variabelen. Daarbij moet aandacht worden besteed aan de assen, die overeen moeten komen om in een oogopslag te kunnen vergelijken. Het kan nodig zijn hier en daar extra te groeperen of aggregeren om grafieken van complexe categorische variabelen overzichtelijk te houden. Voor de verbanden tussen twee variabelen kan men verschillende vormen van bivariate plots, heatmaps en correlatiematrices benutten. Werkt men in Python dan zijn <a href="https://matplotlib.org/">matplotlib </a>en <a href="https://seaborn.pydata.org/tutorial.html">seaborn</a> nuttige grafische libraries. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2022/03/2022-03-23_13h13_51.png"><img loading="lazy" decoding="async" width="1024" height="684" src="/wp-content/uploads/2022/03/2022-03-23_13h13_51-1024x684.png" alt="" class="wp-image-17156" srcset="https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h13_51-1024x684.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h13_51-300x200.png 300w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h13_51-768x513.png 768w, https://www.smalsresearch.be/wp-content/uploads/2022/03/2022-03-23_13h13_51.png 1355w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Drie generatieve modellen uit de <a href="https://sdv.dev/">SDV library</a> toegepast op de <a href="https://www.kaggle.com/uciml/adult-census-income">Adult Census Income</a> dataset: een statistisch model (links), deep learning model (rechts), en combinatie van de twee (midden). Enkele variabelen worden geplot als staafdiagrammen, met de distributies van originele data in blauw en synthetische data in oranje. De distributies van individuele variabelen worden approximatief benaderd maar hier en daar zijn er nog merkbare verschillen: er is mogelijk nog ruimte voor verdere optimalisatie door het finetunen van enkele parameters.</figcaption></figure>



<h1 class="wp-block-heading">Conclusie</h1>



<p>Met synthetische data generatoren hebben we een krachtige tool in handen om data scrambling te kunnen doen. We kunnen er bovendien meer mee dan enkel de gegevens door elkaar haspelen: desgewenst interpoleren ze ook tussen minimum- en maximumwaarden, of tussen datums, en zo kunnen ze ook fictieve gegevens genereren volgens dezelfde structuur als de originele dataset. Het aanmaken van een echt goede synthetische dataset vergt vaak een iteratieve aanpak, om het achterliggend generatief model te finetunen. </p>



<p>We merken in de praktijk dat er heel wat <strong>extra checks en balances</strong> komen kijken bij het werken met echte datasets. Het is zelden zo dat een generatief model gegenereerd uit een willekeurige dataset met default parameters, vanaf de eerste keer optimaal is. Met name erg ongelijke distributies zorgen voor problemen in het leerproces en voor statistische instabiliteit in het resulterende generatief model. Bij wijze van voorbeeld: als een dataset slechts 1 persoon bevat met een zeldzame ziekte, en het is toevallig een 43-jarige Limburger, dan riskeren we dat het systeem leert dat alle personen met deze ziekte per definitie 43-jarige Limburgers moeten zijn. Bovendien merken we dat we de beste resultaten bekomen als een dataset weinig variabelen heeft, en voor elke waarde van elke variabele veel datapunten (rijen, samples). Dit alles maakt dat we de beste resultaten vaak bekomen door zoveel mogelijk kolommen te bevriezen, en het aantal te scramblen kolommen te beperken tot het minimum noodzakelijke om het doel van scrambling te bereiken. Die oefening kan voor elke dataset anders zijn. </p>



<p>Een vraag die regelmatig terugkomt is: kunnen we <strong>dezelfde analytics</strong> op de dusdanig gescramblede / gesynthetiseerde dataset loslaten en leidt dat dan tot dezelfde conclusies? Het antwoord is: het hangt ervan af hoe diep je wilt gaan. De structuur van de gegevens wordt in het generatief model immers approximatief aangeleerd. Daarbij merken we: </p>



<ul class="wp-block-list">
<li>De statistieken en verdeling van individuele variabelen (minimum, maximum, gemiddelde etc.) blijven meestal <strong>relatief goed </strong>behouden,</li>



<li>De verbanden tussen twee variabelen (correlatie etc.) blijven <strong>matig </strong>behouden, en hoe gelijkmatiger en stabieler deze variabelen zijn verdeeld hoe beter dat dat lukt,</li>



<li>De verbanden tussen meerdere variabelen (regressies etc.) blijven <strong>relatief slecht</strong> behouden of gaan verloren.</li>
</ul>



<p>Voor complexe analyses zijn scrambled of synthetische data dus zeker <strong>geen drop-in replacement</strong> voor de echte data. Ze zijn wel erg nuttig voor het testen of ontwikkelen van data processing scripts of analyse-pipelines, omdat we wel een goed beeld hebben van welke waarden er allemaal voorkomen en in welk bereik deze vallen. </p>



<p>We hebben nog heel wat andere potentiële struikelblokken die we in de praktijk kunnen tegenkomen niet besproken. Er kunnen afhankelijkheden bestaan tussen rijen &#8211; bijvoorbeeld, een tabel die verschillende records bevat per persoon. Er kunnen ook verbanden zijn in de tijd &#8211; bijvoorbeeld datasets die bestaan uit opeenvolgende kwartalen, of datasets waarin de datums die voorkomen alleen maar werkdagen zijn en nooit weekenddagen, wat maakt dat je niet zomaar eender welke datum kan synthetiseren. Een dataset kan ook bestaan uit meerdere tabellen die met elkaar verbonden zijn. Zulke complexere problemen zijn mogelijk nog voer voor een vervolg-artikel later dit jaar.</p>



<p>______________________</p>



<p><em>Dit is een ingezonden bijdrage van Joachim Ganseman, IT consultant bij Smals Research. &nbsp;Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Leximancer &#8211; Tekstuele analyse</title>
		<link>https://www.smalsresearch.be/leximancer-tekstuele-analyse/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Tue, 19 Oct 2021 14:09:37 +0000</pubDate>
				<category><![CDATA[Quick reviews]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[Leximancer]]></category>
		<category><![CDATA[NLP]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/leximancer-tekstuele-analyse/</guid>

					<description><![CDATA[Leximancer is een commerciële tool die uit een grote hoeveelheid tekst de belangrijkste onderwerpen identificeert, deze groepeert in gerelateerde concepten, en de relaties ertussen visualiseert. De gebruiker kan bij elke tussenstap de resultaten verfijnen. Mogelijke toepassingsdomeinen zijn digitaal forensisch onderzoek of inspectie, analyse van grootschalige bevragingen, of pers- of literatuurreviews. &#160; Leximancer est un outil [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Leximancer is een commerciële tool die uit een grote hoeveelheid tekst de belangrijkste onderwerpen identificeert, deze groepeert in gerelateerde concepten, en de relaties ertussen visualiseert. De gebruiker kan bij elke tussenstap de resultaten verfijnen. Mogelijke toepassingsdomeinen zijn digitaal forensisch onderzoek of inspectie, analyse van grootschalige bevragingen, of pers- of literatuurreviews.</p>




<p>&nbsp;</p>




<p>Leximancer est un outil commercial qui dans une grande quantité de texte, identifie les sujets les plus importants, les regroupe en concepts connexes, et visualise les relations entre eux. L&#8217;utilisateur peut affiner les résultats à chaque étape intermédiaire. Parmi les domaines d&#8217;application possibles se trouvent la criminalistique ou l&#8217;inspection numérique, l&#8217;analyse des questionnaires à grande échelle ou encore les revues de presse/littérature.</p>







            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2021/10/QR-Leximancer.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of QR-Leximancer."></object>
                <a id="wp-block-file--media-e50b418b-e665-46cb-bf2b-dac0359e4205" href="https://www.smalsresearch.be/wp-content/uploads/2021/10/QR-Leximancer.pdf">QR-Leximancer</a><a href="https://www.smalsresearch.be/wp-content/uploads/2021/10/QR-Leximancer.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-e50b418b-e665-46cb-bf2b-dac0359e4205">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
