<?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>big data &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/big-data/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Tue, 21 Apr 2026 10:13:13 +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>big data &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>AI agents: avantages, défis et cas d&#8217;utilisation</title>
		<link>https://www.smalsresearch.be/agents-ia-avantages-defis-et-cas-utilisation/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Thu, 08 May 2025 14:20:26 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=22578</guid>

					<description><![CDATA[Les agents IA ont le vent en poupe. Mais que sont-ils exactement ? Et que peuvent-ils nous apporter?]]></description>
										<content:encoded><![CDATA[
<p><em>Dit artikel is ook beschikbaar in het <a href="/ai-agents-voordelen-uitdagingen-en-usecases/">Nederlands</a>.</em></p>
<p>Les agents IA ont le vent en poupe. Mais que sont-ils exactement&nbsp;? Que peuvent-ils nous apporter et à quoi devons-nous faire attention&nbsp;? Cet article de blog offre un aperçu des possibilités, des risques et des applications concrètes des agents IA.</p>



<h1 class="wp-block-heading">Que sont les agents IA?</h1>



<p>On peut décrire les agents IA comme des entités logicielles autonomes ou semi-autonomes qui utilisent l&#8217;IA pour percevoir, prendre des décisions, exécuter des actions et atteindre des objectifs. Tout comme une agence de voyage qui organise et réserve tout un voyage de manière indépendante en fonction de vos souhaits, les agents IA illustrent le concept d'&#8221;<em>agency</em>&#8221;&nbsp;: la capacité de prendre des décisions et d&#8217;agir de manière indépendante dans un contexte numérique.</p>
<p>Voici les caractéristiques typiques des agents IA&nbsp;:</p>
<ul>
<li><strong>Autonomie </strong>: exécuter des tâches de manière indépendante, avec peu ou pas d&#8217;intervention humaine.</li>
<li><strong>Objectifs complexes </strong>: être capable de déterminer efficacement les étapes intermédiaires pour atteindre des objectifs complexes.</li>
<li><strong>Environnements complexes</strong>&nbsp;: la capacité à s&#8217;adapter à des circonstances changeantes et à des imprévus, tels que des objectifs modifiés, de nouvelles informations ou des outputs inattendus d&#8217;un système externe.</li>
</ul>
<p>Les caractéristiques ci-dessus s&#8217;appliquent à des degrés divers aux agents IA, ce qui signifie que l'&#8221;<em>agency</em>&#8221; doit être considérée comme un spectre&nbsp;: plus ces caractéristiques sont présentes, plus un agent est capable d&#8217;effectuer des tâches complexes de manière autonome.</p>



<h1 data-pm-slice="1 1 []">L&#8217;anatomie des agents IA</h1>
<p>Les agents IA se composent généralement de plusieurs éléments qui, ensemble, rendent possible leur comportement intelligent&nbsp;:</p>
<figure id="attachment_22419" aria-describedby="caption-attachment-22419" style="width: 1028px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2025/04/components.png"><img fetchpriority="high" decoding="async" class="size-full wp-image-22419" src="/wp-content/uploads/2025/04/components.png" alt="De componenten van AI agents" width="1028" height="355" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/04/components.png 1028w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-300x104.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-768x265.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-1024x354.png 1024w" sizes="(max-width: 1028px) 100vw, 1028px" /></a><figcaption id="caption-attachment-22419" class="wp-caption-text"><span style="font-size: revert; color: initial;">Les composants des agents IA</span></figcaption></figure>
<ul>
<li><strong>Le modèle d&#8217;IA pour le raisonnement</strong>&nbsp;: la capacité à planifier une série d&#8217;actions pour atteindre des objectifs et à prendre des décisions même avec des données incomplètes. On observe ici une tendance des &#8220;chat models&#8221; classiques vers des &#8220;reasoning models&#8221; qui sont mieux à même de découper les problèmes en étapes plus petites, de corriger les erreurs et d&#8217;essayer plusieurs stratégies.</li>
<li><strong>La base de connaissance</strong>&nbsp;: connaissances spécifiques à un domaine, souvent obtenues grâce à des techniques de <a href="/qualite-dun-systeme-generatif-de-questions-reponses/">Retrieval-Augmented Generation (RAG)</a>.</li>
<li><strong>La mémoire</strong>&nbsp;: capacité à mémoriser des informations sur les étapes ou interactions précédentes. Cela peut être à court terme (au cours d&#8217;une session) ou à plus long terme (sur plusieurs sessions). La mémoire permet aux agents IA de fournir des réponses cohérentes, de se souvenir des décisions précédentes et de rendre l&#8217;interaction plus fluide.</li>
<li><strong>Les outils</strong>&nbsp;: des outils tels que les moteurs de recherche, les bases de données ou les API peuvent être reliés à de grands modèles de langage (LLM). Sur la base d&#8217;une description des outils, le modèle peut alors déterminer quel outil doit être utilisé pour effectuer une tâche donnée, ainsi que les paramètres d&#8217;entrée.</li>
</ul>
<p>Ces différents composants sont configurés et orchestrés avec des outils dédiés comme <a href="https://www.langchain.com/langgraph">LangGraph</a>, <a href="https://www.llamaindex.ai/">LlamaIndex</a>, <a href="https://www.crewai.com/">CrewAI</a>, etc.</p>
<figure id="attachment_22420" aria-describedby="caption-attachment-22420" style="width: 1096px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2025/04/tool_use.png"><img decoding="async" class="size-full wp-image-22420" src="/wp-content/uploads/2025/04/tool_use.png" alt="Toolgebruik" width="1096" height="402" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use.png 1096w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-300x110.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-768x282.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-1024x376.png 1024w" sizes="(max-width: 1096px) 100vw, 1096px" /></a><figcaption id="caption-attachment-22420" class="wp-caption-text">Utilisation d&#8217;outils &#8211; Sur la base des données d&#8217;entrée, le modèle selectionne la fonction <em>multiply</em> et identifie les paramètres (8 et 2)</figcaption></figure>
<p>Les agents IA peuvent être activés de différentes manières. Souvent, c&#8217;est par le biais d&#8217;un input textuel ou vocal, comme dans une interface de chat. Mais un trigger peut également provenir automatiquement d&#8217;un processus&nbsp;: par exemple, la création d&#8217;un nouveau fichier, la réception d&#8217;un e-mail ou une modification dans une base de données. Cette flexibilité rend les agents IA utilisables dans des workflows très variés.</p>
<p>Une évolution intéressante est la &#8220;<strong><em>multi-agent collaboration</em></strong>&#8221;&nbsp;: plusieurs agents IA travaillent ensemble, chacun avec sa propre spécialisation ou tâche. Grâce à la communication mutuelle et à la répartition des tâches, ils peuvent traiter des problèmes complexes plus efficacement qu&#8217;un agent unique. Pensez par exemple à une équipe d&#8217;agents qui rédigent ensemble un rapport, où un agent collecte les données, un autre les analyse et un troisième rédige le rapport.</p>
<p>Bien que les agents IA deviennent toujours plus autonomes, la présence d&#8217;un &#8220;<strong><em>human in the loop</em></strong>&#8221; reste essentielle. En effet, une supervision humaine permet non seulement de détecter rapidement les erreurs ou les comportements indésirables, elle renforce également la confiance et la fiabilité du système, notamment dans les applications critiques où la précision et l&#8217;éthique jouent un rôle majeur.</p>



<h1 data-pm-slice="1 3 []">Avantages et applications</h1>
<p>Nous avons établi de quels éléments un agent IA est composé. Voyons maintenant quels avantages il peut offrir&nbsp;:</p>
<ul>
<li><strong>Automatisation des tâches</strong>&nbsp;: les agents IA peuvent effectuer de manière autonome des tâches répétitives et chronophages, ce qui permet aux collaborateurs de se concentrer sur des tâches plus stratégiques.</li>
<li><strong>Assistance à la prise de décision</strong>&nbsp;: par l&#8217;analyse rapide de grandes quantités de données et la fourniture d&#8217;informations pertinentes, les agents IA peuvent aider à prendre des décisions plus éclairées et mieux fondées.</li>
<li><strong>Interaction intelligente avec les utilisateurs </strong>: les agents IA peuvent communiquer de manière naturelle et contextuelle par texte ou par voix, ce qui permet des interactions plus fluides et plus personnalisées avec les utilisateurs finaux.</li>
</ul>
<p>Les domaines d&#8217;application suivants pourraient bénéficier d&#8217;une valeur ajoutée potentielle grâce aux agents IA&nbsp;:</p>
<ul>
<li><strong>Environnements utilisateurs</strong>&nbsp;: dans les environnements orientés vers le client, les agents IA peuvent être utilisés pour des helpdesks automatisés, des chatbots ou des recommandations personnalisées.</li>
<li><strong>Traitement de l&#8217;information </strong>: les agents IA sont particulièrement adaptés à l&#8217;analyse et à la structuration de grandes quantités d&#8217;informations. Ils peuvent résumer des documents, détecter des tendances ou extraire des informations pertinentes à partir de sources de données complexes.</li>
<li><strong style="font-size: revert; color: initial;">Applications créatives </strong><span style="font-size: revert; color: initial;">: dans les secteurs créatifs, les agents IA peuvent aider à rédiger des rapports, générer des textes pour les réseaux sociaux ou même participer à la conception de nouvelles campagnes. Ils font alors office de sparring-partner créatif ou d&#8217;assistant productif.</span></li>
</ul>



<h1 data-pm-slice="1 1 []">Défis et risques</h1>
<p>Bien que cette technologie dispose d&#8217;un potentiel considérable, il est essentiel de prendre en compte certains points importants&nbsp;:</p>
<ul>
<li><strong>Imprévisibilité</strong>&nbsp;: les agents IA peuvent être imprévisibles en raison de leur nature non déterministe ; ils fournissent parfois des résultats inattendus ou incohérents, difficiles à reproduire et à comprendre.</li>
<li><strong>Problèmes liés aux LLM</strong>&nbsp;: les modèles de langage peuvent &#8220;halluciner&#8221;, faire des erreurs de planification ou de raisonnement, et faire de mauvais choix lors de la sélection d&#8217;outils ou de l&#8217;identification d&#8217;entités.</li>
<li><strong>Debugging complexe</strong>&nbsp;: en raison de la nature &#8220;black box&#8221; des modèles de langage, il est difficile de déterminer pourquoi un agent a pris une décision particulière. Plus l&#8217;agent IA est complexe, plus il est difficile d&#8217;identifier la cause exacte des erreurs. Des outils de traçage spécialisés ne sont donc pas un luxe.</li>
<li><strong>Coût et lenteur</strong>&nbsp;: particulièrement dans les situations où la planification et la replanification sont continues ou lorsque l&#8217;agent doit effectuer de nombreuses étapes, le résultat final peut se faire attendre et les coûts liés à l&#8217;utilisation de grands modèles de langage peuvent augmenter.</li>
<li><strong>Défis liés à la production </strong>: la création d&#8217;un premier prototype demande généralement peu d&#8217;efforts. Le véritable défi réside dans la mise en œuvre fiable et performante dans un environnement de production réel.</li>
</ul>
<p>Etant donné que, dans de nombreux cas, nous ne pouvons pas nous fier aveuglément aux résultats des agents IA, une intervention humaine est encore souvent nécessaire pour garantir la fiabilité et la qualité.</p>
<h1 data-pm-slice="1 1 []">Examples pratiques</h1>
<p>Voici quelques exemples concrets d&#8217;agents IA illustrant les possibilités offertes&nbsp;:</p>
<ol>
<li><strong> Research agent</strong>&nbsp;: on voit émerger de plus en plus de systèmes destinés à effectuer des recherches, qui ne se limitent pas aux outils payants des grands fournisseurs (cf <a href="https://openai.com/index/introducing-deep-research/">OpenAI Deep Research</a>), mais comprennent également des alternatives ouvertes. L&#8217;objectif d&#8217;un tel agent de recherche est d&#8217;obtenir rapidement des informations sur un sujet donné. L&#8217;agent rédige des rapports de manière autonome, avec une contribution humaine pour la structure du rapport et la possibilité d&#8217;ajuster l&#8217;output. Un web search est utilisé comme outil pour collecter des informations sur le sujet donné et sur les thèmes spécifiques de chaque section. On utilise le reasoning pour planifier la structure du rapport, réfléchir aux sections générées et suggérer des questions de follow-up afin de poursuivre l&#8217;analyse à l&#8217;aide de l&#8217;outil de recherche web.</li>
<li><strong> Agentic IDE</strong>: l&#8217;IA agentielle fait de plus en plus son apparition dans le développement de logiciels. Des outils tels que <a href="https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode">GitHub Copilot &#8220;agent mode&#8221;</a> font appel à des techniques d&#8217;IA non seulement pour fournir des suggestions pendant la programmation, mais également pour accomplir des tâches complètes de manière autonome. Pensez par exemple à la génération de code, à la refactorisation de plusieurs fichiers, à la rédaction de scripts de test et même à la correction automatique d&#8217;erreurs dans le cadre d&#8217;une approche itérative par essais et erreurs. L&#8217;agent comprend l&#8217;objectif global de la tâche, exécute les actions par étapes et reformule son approche si nécessaire, tout comme le ferait un programmeur humain. Il agit ainsi comme un assistant de programmation intelligent qui permet aux développeurs de travailler plus rapidement et de manière plus cohérente.</li>
<li><strong style="font-size: revert; color: initial;">Smart search </strong><span style="font-size: revert; color: initial;">: chez Smals, nous explorons les possibilités d&#8217;une fonction de recherche intelligente dans le contexte d&#8217;un environnement de travail. Dans la situation actuelle, les utilisateurs doivent naviguer parmi plus de 30 critères de recherche pour obtenir un résultat satisfaisant. L&#8217;objectif de cette expérience est de rendre la recherche beaucoup plus conviviale en permettant aux utilisateurs de formuler leur requête en langage naturel. L&#8217;agent peut désambiguïser la question (s&#8217;agit-il par exemple d&#8217;une entité ou d&#8217;une personne&nbsp;?) et convertir ensuite la question désambiguïsée en une requête JSON structurée permettant d&#8217;appeler une API de recherche.</span></li>
</ol>



<h1 data-pm-slice="1 1 []">Quand (ne pas) l&#8217;utiliser?</h1>
<p>Les agents IA peuvent être intéressants dans des situations où les solutions traditionnelles et déterministes ne suffisent pas. Pensez à des contextes impliquant de grandes quantités de données non structurées, en langage naturel ou avec des conditions changeantes où un comportement adaptatif est souhaitable. Les agents IA peuvent également apporter une valeur ajoutée dans le cadre de prises de décision complexes ou en tant qu&#8217;assistants dans des tâches comportant de nombreuses variables.</p>
<p>La checklist ci-dessous peut vous aider à déterminer si un agent IA est approprié&nbsp;:</p>
<p><strong>Quand un agent IA est-il une bonne idée&nbsp;?</strong></p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La tâche est complexe et difficile à formaliser complètement</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Le travail implique l&#8217;utilisation du langage naturel ou de données non structurées</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> La tâche est fréquente et prend actuellement beaucoup de temps</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Le contexte change régulièrement ou est incertain</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Il y a une valeur ajoutée évidente (gain de temps, meilleure qualité, évolutivité)</p>
<p><strong>Quand vaut-il mieux s&#8217;abstenir&nbsp;?</strong></p>
<p>✘ La tâche exige une grande précision et une absence totale d&#8217;erreurs (par exemple, dans le domaine médical ou financier)</p>
<p>✘ Le domaine est strictement réglementé ou contient des données personnelles sensibles</p>
<p>✘ La tâche nécessite une intuition humaine, de l&#8217;empathie ou des considérations éthiques</p>
<p>✘ La tâche est simple et peut être facilement résolue à l&#8217;aide de systèmes classiques basés sur des règles</p>
<p>Attention&nbsp;: les agents IA ne sont pas toujours tenus de fonctionner de manière totalement autonome. Dans la plupart des cas, leur efficacité est maximale dans un rôle d&#8217;assistance, comme un copilote intelligent qui prépare des analyses, émet des suggestions ou effectue un travail préparatoire, tandis que la responsabilité finale reste entre les mains de l&#8217;homme.</p>



<h1 data-pm-slice="1 1 []">Conclusion</h1>
<p>Les agents IA ont clairement le vent en poupe. Ils promettent des gains d&#8217;efficacité considérables et de nouvelles possibilités dans des domaines aussi variés que le service à la clientèle, la recherche, le développement de logiciels et la gestion de l&#8217;information. Grâce à leur capacité de raisonnement, à leur accès aux connaissances et à l&#8217;utilisation d&#8217;outils, ils peuvent atteindre un haut niveau d&#8217;autonomie.</p>
<p>Il est toutefois important d&#8217;aborder cette technologie avec la prudence nécessaire. Les agents IA sont encore en cours de développement et sont confrontés à des défis fondamentaux en matière de fiabilité, de transparence et de performance. Dans de nombreux cas, l&#8217;intervention et la supervision humaines restent indispensables.</p>
<p>Quiconque expérimente aujourd&#8217;hui les agents IA acquiert des connaissances précieuses sur la manière dont ces systèmes peuvent être intégrés dans les processus et les organisations. Les années à venir seront déterminantes pour l&#8217;évolution de cette technologie. Peut-elle passer du statut de gadget à un rôle à part entière dans le fonctionnement quotidien des organisations&nbsp;? Les agents IA ont le potentiel d&#8217;apporter une valeur ajoutée évidente, à condition qu&#8217;ils soient utilisés à bon escient.</p>



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



<p><em data-rich-text-format-boundary="true">Ce post est une contribution individuelle de Bert Vanhalst, IT consultant 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>AI agents: voordelen, uitdagingen en usecases</title>
		<link>https://www.smalsresearch.be/ai-agents-voordelen-uitdagingen-en-usecases/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Tue, 22 Apr 2025 09:37:02 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Productivity]]></category>
		<category><![CDATA[software engineering]]></category>
		<guid isPermaLink="false">/?p=22407</guid>

					<description><![CDATA[AI Agents zijn volop in opmars. Maar wat zijn het precies? En wat kunnen ze voor ons betekenen?]]></description>
										<content:encoded><![CDATA[
<p><em>Cet article est aussi disponible <a href="/agents-ia-avantages-defis-et-cas-utilisation/">en français</a>.</em></p>



<p>AI agents zijn volop in opmars. Maar wat zijn het precies? Wat kunnen ze voor ons betekenen, en waar moeten we voor oppassen? Deze blogpost geeft een overzicht van de mogelijkheden, risico&#8217;s en concrete toepassingen van AI agents.</p>



<h1 class="wp-block-heading">Wat zijn AI agents?</h1>



<p>AI agents kunnen omschreven worden als autonome of semiautonome software-entiteiten die AI gebruiken om waar te nemen, beslissingen te nemen, acties uit te voeren en doelen te bereiken. Net als een reisbureau dat op basis van jouw wensen zelfstandig een hele reis samenstelt en boekt, illustreren AI agents het concept van <em>&#8220;agency&#8221;</em>: het vermogen om zelfstandig beslissingen te nemen en te handelen binnen een digitale context.</p>



<p>Dit zijn de typische kenmerken van AI agents:</p>



<ul class="wp-block-list">
<li><strong>Autonomie:</strong> zelfstandig taken uitvoeren met weinig tot geen menselijke tussenkomst.</li>



<li><strong>Complexe doelen:</strong> tussenstappen efficiënt kunnen bepalen om complexe doelen te kunnen bereiken.</li>



<li><strong>Complexe omgevingen:</strong> het vermogen om zich aan te passen aan veranderende omstandigheden en onverwachte zaken, zoals bijgestuurde doelen, nieuwe informatie of onverwachte output van een extern systeem.</li>
</ul>



<p>De bovenstaande kenmerken zijn in mindere of meerdere mate van toepassing op AI agents, wat maakt dat &#8220;agency&#8221; gezien moet worden als een spectrum: hoe sterker deze eigenschappen aanwezig zijn, hoe beter een agent in staat is om complexe taken autonoom uit te voeren.</p>



<h1 data-pm-slice="1 1 []">De anatomie van AI agents</h1>
<p>AI agents bestaan doorgaans uit meerdere bouwstenen die samen hun intelligent gedrag mogelijk maken:</p>
<figure id="attachment_22419" aria-describedby="caption-attachment-22419" style="width: 1028px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2025/04/components.png"><img decoding="async" class="size-full wp-image-22419" src="/wp-content/uploads/2025/04/components.png" alt="De componenten van AI agents" width="1028" height="355" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/04/components.png 1028w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-300x104.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-768x265.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/04/components-1024x354.png 1024w" sizes="(max-width: 1028px) 100vw, 1028px" /></a><figcaption id="caption-attachment-22419" class="wp-caption-text">De componenten van AI agents</figcaption></figure>
<ul data-spread="false">
<li>
<p><strong>Reasoning model </strong>(redeneervermogen)<strong>:</strong> het vermogen om een opeenvolging van acties te plannen om doelstellingen te bereiken, en beslissingen kunnen nemen zelfs met onvolledige gegevens. Hier zien we een trend van de klassieke &#8220;chat models&#8221; naar &#8220;reasoning models&#8221; die beter in staat zijn om problemen op te splitsen in kleinere stappen, fouten kunnen verbeteren en meerdere strategieën kunnen uitproberen.</p>
</li>
<li>
<p><strong>Knowledge base:</strong> domein-specifieke kennis die vaak opgehaald wordt via <a href="/kwaliteit-van-een-generatief-vraag-antwoordsysteem/">Retrieval-Augmented Generation (RAG)</a> technieken.</p>
</li>
<li>
<p><strong>Geheugen: </strong>het vermogen om informatie over eerdere stappen of interacties te onthouden. Dit kan zowel op korte termijn zijn (binnen een sessie) als op langere termijn (over meerdere sessies heen). Geheugen stelt AI agents in staat om consequente antwoorden te geven, eerdere beslissingen te onthouden en de interactie vloeiender te maken.</p>
</li>
<li>
<p><strong>Tools:</strong> tools, zoals zoekmachines, databanken of API’s, kunnen gekoppeld worden aan grote taalmodellen (LLM&#8217;s). Op basis van een beschrijving van de tools kan het model dan bepalen welke tool er moet gebruikt worden om een bepaalde taak uit te voeren, tezamen met de input-parameters.</p>
</li>
</ul>
<p>Deze verschillende componenten worden geconfigureerd en georchestreerd met behulp van specifieke tools zoals <a href="https://www.langchain.com/langgraph">LangGraph</a>, <a href="https://www.llamaindex.ai/">LlamaIndex</a>, <a href="https://www.crewai.com/">CrewAI</a>, etc.</p>
<figure id="attachment_22420" aria-describedby="caption-attachment-22420" style="width: 1096px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2025/04/tool_use.png"><img loading="lazy" decoding="async" class="size-full wp-image-22420" src="/wp-content/uploads/2025/04/tool_use.png" alt="Toolgebruik" width="1096" height="402" srcset="https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use.png 1096w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-300x110.png 300w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-768x282.png 768w, https://www.smalsresearch.be/wp-content/uploads/2025/04/tool_use-1024x376.png 1024w" sizes="auto, (max-width: 1096px) 100vw, 1096px" /></a><figcaption id="caption-attachment-22420" class="wp-caption-text">Toolgebruik &#8211; Op basis van de input selecteert het model de <em>multiply</em> functie en identificeert de parameters (8 en 2)</figcaption></figure>
<p>AI agents kunnen op verschillende manieren worden geactiveerd. Vaak gebeurt dit via tekst- of spraakinput, zoals in een chatinterface. Maar een trigger kan ook automatisch komen vanuit een proces: bijvoorbeeld de aanmaak van een nieuw bestand, het binnenkomen van een e-mail, of een wijziging in een database. Deze flexibiliteit maakt AI agents inzetbaar in uiteenlopende workflows.</p>
<p>Een interessante evolutie is <strong>&#8220;multi-agent collaboration&#8221;</strong>: hierbij werken meerdere AI agents samen, elk met een eigen specialisatie of taak. Door onderling te communiceren en taken te verdelen, kunnen ze complexe problemen efficiënter en effectiever aanpakken dan een enkelvoudige agent. Denk bijvoorbeeld aan een team van agents die samen een rapport opstellen, waarbij een agent data verzamelt, een andere analyseert en een derde het rapport schrijft.</p>
<p>Hoewel AI agents steeds autonomer worden, blijft een <strong>&#8220;human in the loop&#8221;</strong> essentieel. Menselijke supervisie helpt niet alleen om fouten of ongewenst gedrag tijdig te detecteren, maar verhoogt ook het vertrouwen en de betrouwbaarheid van het systeem – zeker in kritieke toepassingen waar nauwkeurigheid en ethiek een grote rol spelen.</p>



<h1 data-pm-slice="1 3 []">Voordelen en toepassingen</h1>
<p>Nu we weten uit welke bouwstenen AI agents zijn opgebouwd, kunnen we eens kijken welke voordelen ze kunnen bieden:</p>
<ul data-spread="false">
<li>
<p><strong>Automatisering van taken:</strong> AI agents kunnen repetitieve en tijdrovende taken zelfstandig uitvoeren, waardoor medewerkers zich kunnen focussen op meer strategisch werk.</p>
</li>
<li>
<p><strong>Ondersteuning bij besluitvorming:</strong> door snel grote hoeveelheden data te analyseren en relevante inzichten aan te reiken, kunnen AI agents helpen bij het nemen van betere en beter onderbouwde beslissingen.</p>
</li>
<li>
<p><strong>Intelligente interactie met gebruikers:</strong> AI agents kunnen op een natuurlijke en contextbewuste manier communiceren via tekst of spraak, wat leidt tot vlottere en persoonlijkere interacties met eindgebruikers.</p>
</li>
</ul>
<p>In de volgende toepassingsdomeinen kunnen AI agents potentieel een meerwaarde bieden:</p>
<ul data-spread="false">
<li>
<p><strong>Gebruikersomgevingen:</strong> in klantgerichte omgevingen kunnen AI agents ingezet worden voor geautomatiseerde helpdesks, chatbots of gepersonaliseerde aanbevelingen.</p>
</li>
<li>
<p><strong>Informatieverwerking:</strong> AI agents zijn bijzonder geschikt voor het analyseren en structureren van grote hoeveelheden informatie. Ze kunnen documenten samenvatten, trends detecteren of relevante informatie extraheren uit complexe databronnen.</p>
</li>
<li>
<p><strong>Creatieve toepassingen:</strong> in creatieve sectoren kunnen AI agents ondersteuning bieden bij het opstellen van rapporten, het genereren van teksten voor sociale media of zelfs het meedenken over nieuwe campagnes. Ze functioneren hierbij als creatieve sparringpartner of productieve assistent.</p>
</li>
</ul>



<h1 data-pm-slice="1 1 []">Uitdagingen en Risico&#8217;s</h1>
<p>Hoewel de technologie veel potentieel heeft, is het cruciaal om stil te staan bij enkele belangrijke aandachtspunten:</p>
<ul data-spread="false">
<li>
<p><strong>Onvoorspelbaarheid:</strong> AI agents kunnen onvoorspelbaar zijn vanwege hun niet-deterministische aard; ze leveren soms onverwachte of inconsistente resultaten die moeilijk te reproduceren en te begrijpen zijn.</p>
</li>
<li>
<p><strong>Problemen met LLM&#8217;s:</strong> taalmodellen kunnen &#8220;hallucineren&#8221;, fouten maken bij het plannen of redeneren, en verkeerde keuzes maken bij de selectie van tools of het identificeren van entiteiten.</p>
</li>
<li>
<p><strong>Complexe debugging:</strong> vanwege de black-box-aard van taalmodellen is het moeilijk om te achterhalen waarom een agent een bepaalde beslissing gemaakt heeft. Hoe complexer de AI agent, hoe moeilijker het is om de exacte oorzaak van fouten te identificeren. Gespecialiseerde tracing tools zijn hierbij geen overbodige luxe.</p>
</li>
<li>
<p><strong>Kost en traagheid:</strong> vooral in situaties waarbij continu gepland en herpland wordt of de agent veel stappen doorloopt kan de finale output op zich laten wachten en kunnen de kosten voor het gebruik van grote taalmodellen oplopen.</p>
</li>
<li>
<p><strong>Productie-uitdagingen:</strong> een eerste prototype bouwen kost doorgaans relatief weinig moeite. De échte uitdaging ligt in het betrouwbaar en performant inzetten in een echte productie-omgeving.</p>
</li>
</ul>
<p>Aangezien we in veel gevallen niet blindelings kunnen vertrouwen op de output van AI agents, is er momenteel nog vaak een menselijke tussenkomst nodig om betrouwbaarheid en kwaliteit te waarborgen.</p>
<h1 data-pm-slice="1 1 []">Praktische voorbeelden</h1>
<p>Om de mogelijkheden te illustreren volgen hieronder enkele concrete voorbeelden van AI agents:</p>
<p><strong>1. Research agent:</strong> meer en meer zien we systemen opduiken om reseach uit te voeren, niet enkel betalende tools van de grote leveranciers (cf <a href="https://openai.com/index/introducing-deep-research/">OpenAI Deep Research</a>), maar ook open alternatieven. Het doel van zo&#8217;n research agent is om snel inzicht te krijgen in een bepaalde topic. De agent stelt zelfstandig rapporten op, met menselijke input voor de structuur van het rapport en de mogelijkheid om de output bij te sturen. Web search wordt ingezet als tool om informatie te verzamelen over de opgegeven topic en over de specifieke topics van elke sectie. Er wordt gebruik gemaakt van reasoning om de structuur van het rapport te plannen en om te reflecteren over de gegenereerde secties en follow-up vragen te suggereren om verdere analyse uit te voeren met behulp van de web search tool.</p>
<p><strong>2. Agentic IDE:</strong> meer en meer zien we agentic AI opduiken bij softwareontwikkeling. Tools zoals <a href="https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode">GitHub Copilot &#8220;agent mode&#8221;</a> schakelen AI-technieken in om niet enkel suggesties te geven tijdens het programmeren, maar ook om volledige taken autonoom af te ronden. Denk hierbij aan het genereren van code, uitvoeren van refactorings over meerdere bestanden, schrijven van testscripts en zelfs het automatisch verbeteren van fouten in een iteratieve trial-and-error aanpak. De agent begrijpt het bredere doel van de taak, voert stapsgewijs acties uit en herformuleert zijn aanpak indien nodig – net zoals een menselijke programmeur dat zou doen. Hierdoor fungeert hij als een intelligente programmeerassistent die ontwikkelaars sneller en consistenter laat werken.</p>
<p><strong>3. Smart search:</strong> binnen Smals verkennen we de mogelijkheden van een slimme zoekfunctie in de context van een werkomgeving. In de huidige situatie moeten gebruikers hun weg vinden in meer dan 30 zoekcriteria om tot een goed resultaat te komen. Het doel van dit experiment is om het zoeken veel gebruiksvriendelijker te maken door gebruikers toe te laten hun zoekopdracht te formuleren in natuurlijke taal. De agent kan de vraag desambiguëren (gaat het bijvoorbeeld over een entiteit of een persoon?) en de gedesambigueerde vraag vervolgens omzetten naar een gestructureerde JSON-query waarmee een search-API kan aangeroepen worden.</p>



<h1 data-pm-slice="1 1 []">Wanneer (niet) gebruiken?</h1>
<p>AI agents kunnen interessant zijn in situaties waar traditionele, deterministische oplossingen tekortschieten. Denk aan contexten met grote hoeveelheden ongestructureerde data, natuurlijke taal, of veranderende omstandigheden waar adaptief gedrag wenselijk is. Ook voor complexe besluitvorming of als assistent in taken met veel variabelen kunnen AI agents meerwaarde bieden.</p>
<p>Om te beoordelen of een AI agent gepast is, kan onderstaande checklist helpen:</p>
<p><strong>Wanneer is een AI agent een goed idee?</strong></p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> De taak is complex en moeilijk volledig te formaliseren</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Er wordt gewerkt met natuurlijke taal of ongestructureerde data</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> De taak komt frequent voor en kost vandaag veel tijd</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> De context verandert regelmatig of is onzeker</p>
<p><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2714.png" alt="✔" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Er is een duidelijke meerwaarde (tijdswinst, betere kwaliteit, schaalbaarheid)</p>
<p><strong>Wanneer beter niet?</strong></p>
<p>✘ De taak vereist hoge nauwkeurigheid en foutloosheid (bv. medisch, financieel)</p>
<p>✘ Het domein is strikt gereguleerd of bevat gevoelige persoonsgegevens</p>
<p>✘ De taak vraagt menselijke intuïtie, empathie of ethische afwegingen</p>
<p>✘ De taak is eenvoudig en goed oplosbaar via klassieke regelgebaseerde systemen</p>
<p>Let op: AI agents hoeven niet altijd volledig autonoom te opereren. In veel gevallen zijn ze het meest effectief in een assisterende rol – als slimme copiloot die analyses voorbereidt, suggesties doet of voorbereidend werk levert, terwijl de eindverantwoordelijkheid bij de mens blijft.</p>



<h1 data-pm-slice="1 1 []">Conclusie</h1>
<p>AI agents zitten duidelijk in de lift. Ze beloven enorme efficiëntiewinsten en nieuwe mogelijkheden in uiteenlopende domeinen, van klantendiensten en research tot softwareontwikkeling en informatiebeheer. Dankzij hun redenerend vermogen, toegang tot kennis en toolgebruik kunnen ze een hoog niveau van autonomie bereiken.</p>
<p>Toch is het belangrijk om deze technologie met de nodige voorzichtigheid te benaderen. AI agents zijn nog volop in ontwikkeling en kampen met fundamentele uitdagingen rond betrouwbaarheid, transparantie en performantie. In veel gevallen is menselijke tussenkomst en supervisie nog onmisbaar.</p>
<p>Wie vandaag experimenteert met AI agents, bouwt waardevolle kennis op over hoe deze systemen kunnen geïntegreerd worden in processen en organisaties. De komende jaren zullen bepalend zijn voor hoe deze technologie evolueert. Kan ze van hype evolueren naar een volwaardige, ingebedde rol in de dagelijkse werking van organisaties? AI agents hebben het potentieel om een duidelijke meerwaarde te leveren, mits we ze verstandig inzetten.</p>



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



<p><em data-rich-text-format-boundary="true">Dit is een ingezonden bijdrage van Bert Vanhalst, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>De meilleurs résultats de recherche grâce aux bases de données vectorielles</title>
		<link>https://www.smalsresearch.be/de-meilleurs-resultats-de-recherche-grace-aux-bases-de-donnees-vectorielles/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Thu, 20 Jun 2024 08:47:05 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Information management]]></category>
		<guid isPermaLink="false">/?p=20640</guid>

					<description><![CDATA[Dans le monde de l'IA, les bases de données vectorielles sont devenues un outil important. 
Elles nous permettent de stocker et de fouiller efficacement de grandes quantités de données, fonction essentielle pour de nombreuses applications.]]></description>
										<content:encoded><![CDATA[
<p><a href="/betere-zoekresultaten-met-vector-databases/"><em>Nederlandstalige versie</em></a></p>



<p>Dans le monde de l&#8217;IA, les bases de données vectorielles sont devenues un outil important. <br />Elles nous permettent de stocker et de fouiller efficacement de grandes quantités de données non structurées, fonction essentielle pour de nombreuses applications.</p>



<h2 class="wp-block-heading">Embeddings vectoriels</h2>



<p>Les bases de données vectorielles gèrent essentiellement des données vectorielles, c&#8217;est-à-dire des données représentées sous la forme d&#8217;une série de nombres, ou vecteurs, représentant un point dans un espace à haute dimension. La quantité de nombres dans un vecteur correspond à la quantité de dimensions.</p>
<p>La conversion des données en vecteurs s&#8217;opère sur la base d&#8217;un modèle d&#8217;embedding, où est captée leur signification (sémantique). On parle d&#8217;embeddings vectoriels. Par exemple, le vecteur du mot &#8220;chiot&#8221; sera proche du vecteur du mot &#8220;chien&#8221;, et plus éloigné du vecteur du mot &#8220;pomme&#8221;.</p>
<figure id="attachment_20558" aria-describedby="caption-attachment-20558" style="width: 659px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/vector_embeddings.png"><img loading="lazy" decoding="async" class="wp-image-20558 size-full" src="/wp-content/uploads/2024/06/vector_embeddings.png" alt="Vector embeddings" width="659" height="236" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/vector_embeddings.png 659w, https://www.smalsresearch.be/wp-content/uploads/2024/06/vector_embeddings-300x107.png 300w" sizes="auto, (max-width: 659px) 100vw, 659px" /></a><figcaption id="caption-attachment-20558" class="wp-caption-text">Création d&#8217;embeddings vectoriels</figcaption></figure>
<p>Ces vecteurs sont sauvegardés sous forme indexée dans une base de données vectorielle, de manière à ce que la recherche s&#8217;effectue le plus efficacement possible.</p>



<h2 class="wp-block-heading">Recherche de similarité</h2>



<p>Les bases de données vectorielles se distinguent par le fait qu&#8217;elles peuvent rechercher des données similaires par rapport à une requête d&#8217;entrée (query). On parle de recherche de similarité&nbsp;: au lieu de rechercher des correspondances exactes, les bases de données vectorielles peuvent rechercher les données les plus similaires à une requête donnée.</p>
<p>Cette &#8220;similarité&#8221; est calculée sur la base de la distance entre les vecteurs dans l&#8217;espace de recherche&nbsp;: plus la distance entre deux vecteurs est faible, plus ils sont similaires. Plusieurs fonctions permettent de calculer la distance entre deux vecteurs. Le choix peut dépendre de plusieurs facteurs&nbsp;: les données, le modèle d&#8217;embedding utilisé et le compromis entre précision et vitesse d&#8217;exécution.</p>
<figure id="attachment_20567" aria-describedby="caption-attachment-20567" style="width: 860px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/distance_functions_EN.png"><img loading="lazy" decoding="async" class="wp-image-20567 size-full" src="/wp-content/uploads/2024/06/distance_functions_EN.png" alt="Distance functions" width="860" height="307" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN.png 860w, https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN-300x107.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN-768x274.png 768w" sizes="auto, (max-width: 860px) 100vw, 860px" /></a><figcaption id="caption-attachment-20567" class="wp-caption-text">Fonctions de distance pour le calcul de la similarité entre vecteurs</figcaption></figure>
<p>La méthode la plus évidente pour chercher les vecteurs les plus proches d&#8217;un vecteur de requête consiste à comparer exhaustivement le vecteur de requête à tous les vecteurs présents dans la base de données (k-Nearest-Neighbors ou kNN). Nous avons ainsi la certitude de trouver les k vecteurs les plus proches. Dans ce cas, nous obtenons une précision parfaite. L&#8217;inconvénient de cette méthode est qu&#8217;elle nécessite beaucoup de calculs et qu&#8217;elle n&#8217;est pas extensible.</p>
<figure id="attachment_20561" aria-describedby="caption-attachment-20561" style="width: 482px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/kNN.png"><img loading="lazy" decoding="async" class="size-full wp-image-20561" src="/wp-content/uploads/2024/06/kNN.png" alt="" width="482" height="377" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/kNN.png 482w, https://www.smalsresearch.be/wp-content/uploads/2024/06/kNN-300x235.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></a><figcaption id="caption-attachment-20561" class="wp-caption-text">k-Nearest-Neighbors</figcaption></figure>
<p>Pour effectuer des recherches plus performantes parmi de grandes quantités de données, il existe des méthodes approximatives où il n&#8217;y a pas de comparaison exhaustive entre la requête et les vecteurs de la base de données (Approximative Nearest Neighbors ou ANN). La méthode la plus utilisée est sans doute HNSW (Hierarchical Navigable Small World). Il s&#8217;agit d&#8217;une méthode basée sur un graphe hiérarchique où chaque nœud représente un vecteur et où les liens entre les nœuds indiquent la distance qui les sépare. Lors d&#8217;une recherche, l&#8217;algorithme navigue efficacement dans le graphe, en commençant par les niveaux supérieurs (où la densité des nœuds est moindre) et en descendant progressivement vers les niveaux inférieurs pour trouver les voisins les plus proches.</p>



<h2 class="wp-block-heading">Recherche hybride</h2>



<p>La recherche hybride est une technique de recherche avancée qui combine les atouts de la recherche vectorielle et ceux de la recherche classique par mot-clé. La recherche par mot-clé (recherche lexicale) utilise les correspondances exactes des mots-clés dans le texte. Elle est rapide et simple, mais manque parfois de nuances contextuelles. La recherche vectorielle (recherche sémantique) tient compte du sens. Dans la pratique, une combinaison des deux méthodes débouche sur de meilleurs résultats que chaque méthode individuelle.</p>
<figure id="attachment_20572" aria-describedby="caption-attachment-20572" style="width: 562px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/hybrid_search_EN.png"><img loading="lazy" decoding="async" class="wp-image-20572 size-full" src="/wp-content/uploads/2024/06/hybrid_search_EN.png" alt="Hybrid search" width="562" height="646" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/hybrid_search_EN.png 562w, https://www.smalsresearch.be/wp-content/uploads/2024/06/hybrid_search_EN-261x300.png 261w" sizes="auto, (max-width: 562px) 100vw, 562px" /></a><figcaption id="caption-attachment-20572" class="wp-caption-text">Recherche hybride</figcaption></figure>
<p>Pour améliorer encore la pertinence des résultats de recherche, il est possible d&#8217;appliquer le classement sémantique, qui consiste à utiliser un modèle de machine learning avancé pour réorganiser les résultats de la recherche en fonction de leur pertinence par rapport à la requête. Il s&#8217;agit généralement d&#8217;une fonction payante ou d&#8217;une API facturée sur la base de son utilisation. À titre d&#8217;exemple d&#8217;un tel service, nous pouvons citer <a href="https://cohere.com/rerank">Cohere Rerank</a>.</p>



<h2 class="wp-block-heading">Domaines d&#8217;application</h2>



<p>Les bases de données vectorielles peuvent être utilisées pour un grand nombre d&#8217;applications :</p>
<ul>
<li>Recherche sémantique &#8211; Il est clair à présent que les bases de données vectorielles peuvent grandement contribuer à l&#8217;amélioration des résultats d&#8217;une recherche sur la base de la signification sémantique plutôt que sur la seule base des correspondances exactes.</li>
<li><em>Question answering &amp; RAG</em>&#8211; Depuis peu, les <a href="/un-propre-systeme-de-questions-reponses-base-sur-des-modeles-de-langue/">systèmes génératifs de questions-réponses</a> font l&#8217;objet d&#8217;une grande attention. Dans un tel système, les bases de données vectorielles peuvent servir d&#8217;extracteur. On parle de <a href="/qualite-dun-systeme-generatif-de-questions-reponses/"><em>Retrieval Augmented Generation (RAG)</em></a>. Dans cette approche, un modèle de langage formule des réponses basées sur les informations les plus pertinentes d&#8217;une base de connaissances.</li>
<li>Recommandations &#8211; Les bases de données vectorielles peuvent également être utilisées pour recommander des informations ou des produits aux utilisateurs, en fonction ou non de leur historique ou de leurs préférences.</li>
</ul>
<p>Recherche de similarité multimodale (<em>Multimodal similarity search</em>) &#8211; Certains modèles d&#8217;embedding sont capables de créer des vecteurs pour plusieurs types de données : non seulement du texte, mais aussi des images, de l&#8217;audio ou de la vidéo. Les bases de données vectorielles peuvent ainsi permettre la recherche de contenus similaires, qu&#8217;il s&#8217;agisse de textes, d&#8217;images, d&#8217;audio ou de vidéo.</p>



<h2 class="wp-block-heading">Aperçu du marché</h2>



<p>Les acteurs initiaux du marché des bases de données vectorielles comme <a href="https://www.trychroma.com/">Chroma</a>, <a href="https://milvus.io/">Milvus</a>, <a href="https://www.pinecone.io/">Pinecone</a> et <a href="https://weaviate.io/">Weaviate</a>, proposaient essentiellement des solutions spécifiques. <br />Ce n&#8217;est que plus tard que les acteurs plus établis ont pris le train en marche. Ainsi, <a href="https://www.elastic.co/enterprise-search/vector-search">ElasticSearch</a> et Postgresql (avec l&#8217;extension <a href="https://github.com/pgvector/pgvector">pgvector</a>) prennent également en charge la recherche vectorielle. Bien évidemment, les grands acteurs sont également représentés dans le paysage : Microsoft propose <a href="https://azure.microsoft.com/en-us/products/ai-services/ai-search">Azure AI Search</a>, Google <a href="https://cloud.google.com/vertex-ai/docs/vector-search/overview">Vector AI Vector Search</a> et Amazon <a href="https://aws.amazon.com/kendra/">Kendra</a>.</p>
<p>Presque toutes les solutions s&#8217;intègrent à des solutions d&#8217;orchestration LLM telles que <a href="/publications/document/?docid=279">LangChain</a> et <a href="https://www.llamaindex.ai/">LlamaIndex</a>. De plus en plus, les bases de données vectorielles fournissent également un support intégré pour RAG, où la création d&#8217;embeddings et l&#8217;invocation d&#8217;un modèle de langage n&#8217;ont plus besoin d&#8217;être orchestrées en dehors de la base de données vectorielle.</p>
<p>Il convient également de mentionner <a href="https://neo4j.com/docs/cypher-manual/current/indexes/semantic-indexes/vector-indexes/">Neo4j</a>, qui prend en charge la recherche vectorielle en plus de la recherche dans le graphe, ce qui le rend adapté aux cas de données structurées et non structurées.</p>



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



<p>Enfin, nous pouvons affirmer que les bases de données vectorielles peuvent fournir des résultats de recherche meilleurs et plus pertinents qu&#8217;une simple recherche par mot-clé. <br>Dans les applications génératives de réponse aux questions, les bases de données vectorielles peuvent aider un modèle de langage à formuler des réponses basées sur les informations les plus pertinentes d&#8217;une base de connaissances. S&#8217;il n&#8217;est pas évident de faire fonctionner de grands modèles de langage sur une infrastructure propriétaire, cela est bien possible avec une base de données vectorielle en guise de composant d&#8217;extraction, ce qui peut être un facteur favorable dans le contexte de la protection des données.</p>
<p>D&#8217;après notre propre expérience, la recherche hybride, à savoir une combinaison de recherche vectorielle et de recherche lexicale, peut être une solution rapide pour améliorer les résultats de la recherche. Le classement sémantique peut en outre renforcer la pertinence des résultats.</p>



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



<p><em data-rich-text-format-boundary="true">Ce post est une contribution individuelle de Bert Vanhalst, IT consultant 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>Betere zoekresultaten met vector databases</title>
		<link>https://www.smalsresearch.be/betere-zoekresultaten-met-vector-databases/</link>
					<comments>https://www.smalsresearch.be/betere-zoekresultaten-met-vector-databases/#comments</comments>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Mon, 10 Jun 2024 08:46:52 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[Information management]]></category>
		<guid isPermaLink="false">/?p=20557</guid>

					<description><![CDATA[In de wereld van AI zijn vector databases een belangrijk hulpmiddel geworden. Ze stellen ons in staat om grote hoeveelheden gegevens efficiënt op te slaan en te doorzoeken, wat cruciaal is voor veel toepassingen.]]></description>
										<content:encoded><![CDATA[
<p><a href="/de-meilleurs-resultats-de-recherche-grace-aux-bases-de-donnees-vectorielles/"><em>Version en français</em></a></p>



<p>In de wereld van AI zijn vector databases een belangrijk hulpmiddel geworden. Ze stellen ons in staat om grote hoeveelheden ongestructureerde gegevens efficiënt op te slaan en te doorzoeken, wat cruciaal is voor veel toepassingen.</p>



<h2 class="wp-block-heading">Vector embeddings</h2>



<p>Vector databases beheren in essentie vectorgegevens. Dat zijn gegevens die worden weergegeven als een reeks getallen, of vectoren, die een punt in een hoog-dimensionale ruimte vertegenwoordigen. Het aantal getallen in een vector komt overeen met het aantal dimensies.</p>
<p>Het omzetten van gegevens naar vectoren gebeurt op basis van een embedding model, waarbij de betekenis (semantiek) ervan gecapteerd wordt. We spreken van <em>vector embeddings</em>. Zo zal de vector voor het woord “puppy” bijvoorbeeld dicht bij de vector voor “hond” liggen, en verder weg van “appel”.</p>
<figure id="attachment_20558" aria-describedby="caption-attachment-20558" style="width: 659px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/vector_embeddings.png"><img loading="lazy" decoding="async" class="size-full wp-image-20558" src="/wp-content/uploads/2024/06/vector_embeddings.png" alt="Vector embeddings" width="659" height="236" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/vector_embeddings.png 659w, https://www.smalsresearch.be/wp-content/uploads/2024/06/vector_embeddings-300x107.png 300w" sizes="auto, (max-width: 659px) 100vw, 659px" /></a><figcaption id="caption-attachment-20558" class="wp-caption-text">Het aanmaken van vector embeddings</figcaption></figure>
<p>Die vectoren worden geïndexeerd in een vector database opgeslagen, op zo een manier dat het opzoeken zo efficiënt mogelijk verloopt.</p>



<h2 class="wp-block-heading">Similarity search</h2>



<p>Het unieke aan vector databases is dat ze kunnen zoeken naar gelijkaardige gegevens ten opzichte van een inputvraag (<em>query</em>). We spreken van <em>similarity search</em>: in plaats van te zoeken naar exacte overeenkomsten kunnen vector databases zoeken naar gegevens die het meest vergelijkbaar zijn met een gegeven query.</p>
<p>Dat ‘vergelijkbaar zijn’ wordt berekend op basis van de afstand tussen vectoren in de zoekruimte: hoe kleiner de afstand tussen twee vectoren, hoe vergelijkbaarder ze zijn. Er bestaan verschillende functies om de afstand tussen twee vectoren te berekenen. De keuze kan afhangen van verschillende factoren: de gegevens, het gebruikte embedding model, en de afweging tussen accuraatheid en snelheid van uitvoering.</p>
<figure id="attachment_20567" aria-describedby="caption-attachment-20567" style="width: 860px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/distance_functions_EN.png"><img loading="lazy" decoding="async" class="size-full wp-image-20567" src="/wp-content/uploads/2024/06/distance_functions_EN.png" alt="Distance functions" width="860" height="307" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN.png 860w, https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN-300x107.png 300w, https://www.smalsresearch.be/wp-content/uploads/2024/06/distance_functions_EN-768x274.png 768w" sizes="auto, (max-width: 860px) 100vw, 860px" /></a><figcaption id="caption-attachment-20567" class="wp-caption-text">Afstandsfuncties voor het berekenen van de gelijkenis tussen vectoren</figcaption></figure>
<p>De meest voor de hand liggende manier om de dichtste vectoren te zoeken ten opzichte van een query vector is om de query vector exhaustief te vergelijken met alle vectoren in de databank (<em>k-Nearest-Neighbors</em> of kNN). Op die manier zijn we zeker dat we de k dichtste vectoren terugvinden. We krijgen  in dit geval perfecte accuraatheid. De keerzijde is echter dat het een rekenintensieve methode is die niet schaalt.</p>
<figure id="attachment_20561" aria-describedby="caption-attachment-20561" style="width: 482px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/kNN.png"><img loading="lazy" decoding="async" class="size-full wp-image-20561" src="/wp-content/uploads/2024/06/kNN.png" alt="" width="482" height="377" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/kNN.png 482w, https://www.smalsresearch.be/wp-content/uploads/2024/06/kNN-300x235.png 300w" sizes="auto, (max-width: 482px) 100vw, 482px" /></a><figcaption id="caption-attachment-20561" class="wp-caption-text">k-Nearest-Neighbors</figcaption></figure>
<p>Om performanter te kunnen zoeken in grote hoeveelheden gegevens zijn er approximatieve methodes waarbij er geen exhaustieve vergelijking is tussen de query en de vectoren in de databank (<em>Approximative Nearest Neighbors</em> of ANN). De meest gebruikte methode hiervoor is wellicht HNSW (<em>Hierarchical Navigable Small World</em>). Dat is een methode op basis van een hiërarchische graaf waarbij elke node een vector vertegenwoordigt en de links tussen de nodes de afstand ertussen aangeeft. Tijdens een zoekopdracht navigeert het algoritme efficiënt door de graaf, beginnend op hogere niveaus (waar de dichtheid van nodes lager is) en geleidelijk afdalend naar lagere niveaus om de dichtste buren te vinden.</p>



<h2 class="wp-block-heading">Hybrid search</h2>



<p><em>Hybrid search</em> is een geavanceerde zoektechniek die de sterktes van vector search combineert met die van een klassieke <em>keyword search</em>. Keyword search (lexicaal zoeken) maakt gebruik van exacte overeenkomsten van trefwoorden in de tekst. Het is snel en eenvoudig, maar mist soms de contextuele nuances. Bij vector search (semantisch zoeken) wordt de betekenis in rekening gebracht. In de praktijk blijkt dat een combinatie van beide methodes betere resultaten oplevert dan elke methode afzonderlijk.</p>
<figure id="attachment_20572" aria-describedby="caption-attachment-20572" style="width: 562px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2024/06/hybrid_search_EN.png"><img loading="lazy" decoding="async" class="size-full wp-image-20572" src="/wp-content/uploads/2024/06/hybrid_search_EN.png" alt="Hybrid search" width="562" height="646" srcset="https://www.smalsresearch.be/wp-content/uploads/2024/06/hybrid_search_EN.png 562w, https://www.smalsresearch.be/wp-content/uploads/2024/06/hybrid_search_EN-261x300.png 261w" sizes="auto, (max-width: 562px) 100vw, 562px" /></a><figcaption id="caption-attachment-20572" class="wp-caption-text">Hybrid search</figcaption></figure>
<p>Om de relevantie van de zoekresultaten nog te verbeteren kan er <em>semantic ranking</em> toegepast worden. Daarbij wordt een geavanceerd machine learning model gebruikt om de zoekresultaten te herschikken op basis van hun relevantie ten opzichte van de zoekopdracht. Dit is typisch een betalende feature of API waarbij je betaalt volgens verbruik. Een voorbeeld van zo’n dienst is <a href="https://cohere.com/rerank">Cohere Rerank</a>.</p>



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



<p>Vector databases kunnen voor een divers aantal toepassingen ingezet worden:</p>
<ul>
<li><em>Semantic search</em> – Het mag ondertussen duidelijk zijn dat vector databases een belangrijke bijdrage kunnen leveren bij het verbeteren van de zoekresultaten op basis van semantische betekenis in plaats van enkel exacte matches.</li>
<li><em>Question answering &amp; RAG</em> – Recent is er veel aandacht voor <a href="/een-eigen-vraag-en-antwoordsysteem-op-basis-van-taalmodellen/">generatieve vraag-antwoordsystemen</a>. Vector databases kunnen ingezet worden als retriever component in zo’n systeem. Men spreekt over <em><a href="/kwaliteit-van-een-generatief-vraag-antwoordsysteem/">Retrieval Augmented Generation (RAG)</a></em>. Dit is een aanpak waarbij een taalmodel antwoorden formuleert op basis van de meest relevante informatie uit een kennisbank.</li>
<li><em>Aanbevelingen (recommender systemen)</em> – Vector databases kunnen ook ingezet worden om informatie of producten aan te bevelen aan gebruikers, al dan niet op basis van hun historiek of voorkeuren.</li>
<li><em>Multimodal similarity search</em> – Bepaalde embedding modellen zijn in staat om vectoren aan te maken voor meerdere types van gegevens: niet enkel tekst, maar ook afbeeldingen, audio of video. Vector databases kunnen op die manier zoeken mogelijk maken naar gelijkaardige content, ongeacht of het gaat over tekst, afbeeldingen, audio of video.</li>
</ul>



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



<p>De initiële spelers op de markt voor vector databases, zoals <a href="https://www.trychroma.com/">Chroma</a>, <a href="https://milvus.io/">Milvus</a>, <a href="https://www.pinecone.io/">Pinecone</a> en <a href="https://weaviate.io/">Weaviate</a>, boden voornamelijk purpose-built oplossingen aan. Pas later sprongen de meer gevestigde spelers op de kar. Zo bieden <a href="https://www.elastic.co/enterprise-search/vector-search">ElasticSearch</a> en Postgresql (met de <a href="https://github.com/pgvector/pgvector">pgvector</a> extensie) ook ondersteuning voor vector search. Uiteraard zijn ook de grote spelers vertegenwoordigd in het landschap: Microsoft biedt <a href="https://azure.microsoft.com/en-us/products/ai-services/ai-search">Azure AI Search</a>, Google <a href="https://cloud.google.com/vertex-ai/docs/vector-search/overview">Vector AI Vector Search</a> en Amazon <a href="https://aws.amazon.com/kendra/">Kendra</a>.</p>
<p>Zo goed als alle oplossingen integreren met LLM orchestratie oplossingen zoals <a href="/publications/document/?docid=279">LangChain</a> en <a href="https://www.llamaindex.ai/">LlamaIndex</a>. Meer en meer bieden vector databases ook ingebouwde ondersteuning voor RAG, waarbij het aanmaken van embeddings en aanroepen van een taalmodel niet meer extern aan de vector database moet georchestreerd worden.</p>
<p>Ook vermeldenswaardig is <a href="https://neo4j.com/docs/cypher-manual/current/indexes/semantic-indexes/vector-indexes/">Neo4j</a>, dat naast graph search ook vector search ondersteunt en daarmee geschikt is voor cases met zowel gestructureerde als ongestructureerde gegevens.</p>



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



<p>Tot slot kunnen we stellen dat vector databases kunnen zorgen voor betere, relevantere zoekresultaten ten opzichte van een eenvoudige keyword search. Bij generative question answering toepassingen kunnen vector databases helpen een taalmodel antwoorden te laten formuleren op basis van de meest relevante informatie uit een kennisbank. Terwijl het niet evident is om grote taalmodellen op eigen infrastructuur te draaien, is dat bij vector database als retrieval component wel mogelijk, wat een gunstige factor kan zijn in het kader van gegevensbescherming.</p>
<p>Uit eigen ervaring merken we dat hybride search, een combinatie van vector search en lexical search, een quick win kan zijn om de zoekresultaten te verbeteren. Semantic ranking kan daarbovenop nog een extra boost geven aan de relevantie van de resultaten.</p>



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



<p><em data-rich-text-format-boundary="true">Dit is een ingezonden bijdrage van Bert Vanhalst, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/betere-zoekresultaten-met-vector-databases/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Un propre système de questions/réponses basé sur des modèles de langue</title>
		<link>https://www.smalsresearch.be/un-propre-systeme-de-questions-reponses-base-sur-des-modeles-de-langue/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Tue, 25 Jul 2023 09:42:15 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">/?p=18858</guid>

					<description><![CDATA[Suite au lancement de ChatGPT, une masse d'outils permettant de répondre à des questions concernant votre propre contenu voient le jour. Le principe est très simple : téléchargez vos documents (PDF, Word, etc.) et vous pouvez presque immédiatement poser des questions, généralement dans un environnement de type "chatbot".

Dans cet article, nous décrivons le fonctionnement d'un tel système de réponse aux questions et nous apportons quelques précisions sur la qualité que l'on peut attendre des résultats.]]></description>
										<content:encoded><![CDATA[
<p><a href="/een-eigen-vraag-en-antwoordsysteem-op-basis-van-taalmodellen/"><em>Nederlandstalige versie</em></a></p>



<h1 class="wp-block-heading"><strong>Modèles de langue</strong></h1>



<p>Ces derniers mois, nous avons tous pu découvrir la puissance de l&#8217;IA générative, avec <a href="https://chat.openai.com/">ChatGPT</a> occupant le devant de la scène. À la base, il y a les modèles de langue larges (<em>large language models</em> &#8211; LLM): des réseaux neuronaux à grande échelle avec de nombreux paramètres entraînés à partir de grandes quantités de texte. Voici quelques applications de ces LLM :</p>



<ul class="wp-block-list">
<li><strong>Générer </strong>un texte&nbsp;: pensez ainsi à un brouillon pour un mail&nbsp;;</li>



<li><strong>Résumer</strong> un texte&nbsp;;</li>



<li><strong>Traduire</strong>&nbsp;;</li>



<li><strong>Classifier</strong> du texte&nbsp;; cela inclut le &#8216;sentiment analysis&#8217;, comme la classification de commentaires de clients comme positifs ou négatifs&nbsp;;</li>



<li><strong>Répondre à des questions</strong>&nbsp;;</li>



<li><strong>Reconnaître</strong> des entités, telles que des noms de personnes&nbsp;;</li>



<li><strong>Aider à écrire du code&nbsp;:</strong> voir l&#8217;article de blog sur <a href="/de-ai-augmented-developer/">De AI-Augmented Developer</a></li>
</ul>



<p>Une application populaire est celle des réponses aux questions. Suite au lancement de ChatGPT, une masse d&#8217;outils permettant de répondre à des questions concernant votre propre contenu voient le jour. Le principe est très simple&nbsp;: téléchargez vos documents (PDF, Word, etc.) et vous pouvez presque immédiatement poser des questions, généralement dans un environnement de type &#8220;chatbot&#8221;.</p>



<p>Dans cet article, nous décrivons le fonctionnement d&#8217;un tel système de réponse aux questions et nous apportons quelques précisions sur la qualité que l&#8217;on peut attendre des résultats.</p>



<h1><strong>Question answering</strong> <strong>basé sur des modèles de langue</strong> </h1>



<p>Le schéma ci-dessous présente les éléments qui composent un système de ‘question answering’ basé sur des modèles de langue. La partie supérieure (en bleu) représente toutes les étapes nécessaires à la préparation du contenu :</p>
<ul>
<li>Comme point de départ, nous avons une base de connaissance (<em>knowledge base)</em> composée d&#8217;un ou plusieurs documents. Il peut s&#8217;agir de différents formats comme PDF, Word ou des pages web. Dans cette première étape, le texte est extrait du document ;</li>
<li>Le texte est ensuite divisé en de plus petits fragments (<strong><em>chunks</em></strong>) ;</li>
<li>Ces fragments sont ensuite convertis en <strong><em>embeddings</em></strong>, une représentation numérique du texte qui permet de retrouver plus facilement des extraits de texte sémantiquement comparables ;</li>
<li>Enfin, ces embeddings sont stockés dans une base de données vectorielles (<strong style="font-size: revert; color: initial;"><em>vector store</em></strong><span style="font-size: revert; color: initial;">).</span></li>
</ul>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2023/08/qa2.png"><img loading="lazy" decoding="async" width="1024" height="414" src="/wp-content/uploads/2023/08/qa2-1024x414.png" alt="" class="wp-image-18979" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-1024x414.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-300x121.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-768x310.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2.png 1300w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Représentation schématique de question answering basé sur un modèle de langue</figcaption></figure>



<p>Après cette phase préparatoire, l’utilisateur final peut poser une question au système (voir la partie inférieure du schéma), celle-ci est ensuite traitée comme suit : la question de l&#8217;utilisateur (<strong><em>query</em></strong>) est convertie en embeddings, permettant de rechercher dans la base de données vectorielle (<strong><em>retrieval</em></strong>) les documents les plus proches sémantiquement de cette question. Ensuite, un <strong><em>prompt </em></strong>est envoyé au modèle de langue. Il contient toutes les informations nécessaires pour obtenir une réponse du modèle de langue: la question initiale de l&#8217;utilisateur, les documents pertinents trouvés et la mission spécifique (instruction) pour le modèle de langue. Enfin, nous obtenons une réponse générée, accompagnée d&#8217;une indication des sources (numéros de pages ou URL de sites web) si souhaité.</p>
<p>On peut se demander pourquoi ne pas immédiatement envoyer tous les documents de la base de connaissance au modèle de langue en tant que contexte. Il y a principalement deux raisons à cela. Premièrement, la taille du contexte que nous pouvons transmettre est limitée. Par exemple, le modèle populaire GPT-3.5-turbo est limité à 4000 <strong><em>tokens</em></strong>. Les tokens désignent la plus petite unité significative en laquelle un texte peut être divisé. Un token peut être un mot entier, mais aussi une partie de mot ou un signe de ponctuation, en fonction de la méthode de <strong><em>tokenization</em></strong> utilisée.</p>
<p>Une deuxième raison est le coût du recours à un modèle de langue large. En effet, il dépend du nombre de tokens en input et output. Ainsi, plus nous fournissons de contexte à l&#8217;input, plus le coût est élevé.</p>



<h1><strong>Frameworks</strong></h1>
<p>Les applications basées sur l&#8217;architecture ci-dessus peuvent être rapidement développées grâce à des frameworks comme <a href="https://python.langchain.com/">Langchain</a>. Ils offrent généralement des abstractions permettant d&#8217;exécuter en quelques lignes de code les tâches décrites dans le schéma ci-dessus (extraire le texte, le diviser, créer et sauvegarder les embeddings). Ils agissent également comme une sorte d&#8217;orchestrateur pour relier l&#8217;input de l&#8217;utilisateur à la base de données vectorielles et au modèle de langue.</p>
<p>En guise d&#8217;expérience, nous nous sommes lancé avec Langchain pour construire une application de question answering sur la base d&#8217;un PDF ou d&#8217;une page web. Avec la connaissance nécessaire du framework, la mise en place est très rapide.</p>



<h1><strong>Qualité du output</strong></h1>
<p>La principale question est bien sûr de savoir dans quelle mesure les réponses que nous recevons sont exactes. Nos expériences montrent que les réponses sont parfois impressionnantes : correctes, bien résumées et quelquefois accompagnées d&#8217;un raisonnement correct, par exemple pour interpréter si un montant de la question est supérieur ou inférieur à un montant limite.</p>
<p>Nous devons malheureusement aussi constater que les réponses sont souvent peu précises ou incomplètes, voire carrément fausses. Intuitivement, on pourrait penser que cela est intrinsèque à la nature générative des modèles linguistiques et au phénomène des hallucinations. Un facteur au moins aussi important est l&#8217;étape de <em>retrieval</em>&nbsp;: la recherche des fragments de texte les plus pertinents dans lesquels le modèle de langue doit trouver les informations pour composer une réponse. Si les informations utiles pour une réponse ne se trouvent pas dans les fragments de texte fournis, on ne peut pas s&#8217;attendre à ce que le modèle de langue renvoie une réponse exacte.</p>
<p>Indépendamment de ces failles, il existe un certain nombre de techniques permettant d&#8217;améliorer la qualité de l’output, notamment :</p>
<ul>
<li>Combiner le retrieval sémantique avec un retrieval lexical classique ;</li>
<li>Inclure des sources pertinentes supplémentaires dans la base de connaissance ;</li>
<li>Prompt engineering : adapter les instructions données au modèle de langue;</li>
<li>L&#8217;ajustement de la taille des chunks et de la taille de du chevauchement entre les chunks. Nous notons ici que la limite du contexte des modèles de langue augmente. Ainsi, OpenAI fournit un modèle avec un contexte de 16 000 tokens. Cela permet d&#8217;inclure davantage de contexte. L&#8217;augmentation de la taille des chunks peut garantir que les informations sémantiquement liées restent plus longtemps dans un même chunk.</li>
<li>Enfin, on peut également envisager d&#8217;affiner un modèle de langue, mais c&#8217;est beaucoup plus lourd.</li>
</ul>



<h1><strong>Conclusion</strong></h1>
<p>Il serait bien de pouvoir mettre en place un système capable de répondre à des questions sur nos propres données avec un effort très limité. Cependant, la précision de la réponse reste un point d’attention important.&nbsp;Ce n&#8217;est pas pour rien que ces applications affichent invariablement un avertissement indiquant que les réponses peuvent être inexactes ou erronées et qu&#8217;il est toujours conseillé de vérifier le résultat.</p>



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



<p><em>Ce post est une contribution individuelle de Bert Vanhalst, IT consultant 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 eigen vraag- en antwoordsysteem op basis van taalmodellen</title>
		<link>https://www.smalsresearch.be/een-eigen-vraag-en-antwoordsysteem-op-basis-van-taalmodellen/</link>
		
		<dc:creator><![CDATA[Bert Vanhalst]]></dc:creator>
		<pubDate>Wed, 28 Jun 2023 16:06:51 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[Information management]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">/?p=18734</guid>

					<description><![CDATA[Naar aanleiding van de lancering van ChatGPT duiken er massaal tools op die toelaten om vragen te beantwoorden over je eigen content. Het wordt heel eenvoudig voorgesteld: upload je documenten (PDF, Word, etc.) en je kan quasi onmiddellijk vragen beginnen stellen, typisch in een chatbot-achtige omgeving.

In dit artikel geven we aan hoe zo'n question answering systeem in elkaar steekt en vertellen we wat meer over de kwaliteit die we kunnen verwachten van de output.]]></description>
										<content:encoded><![CDATA[
<p><a href="/un-propre-systeme-de-questions-reponses-base-sur-des-modeles-de-langue/"><em>Version en français</em></a></p>



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



<p>De laatste maanden heeft iedereen kunnen kennismaken met de kracht van generatieve AI, met <a href="https://chat.openai.com/">ChatGPT</a> als grote blikvanger. Aan de basis liggen grote taalmodellen (<em>large language models</em> &#8211; LLM&#8217;s): grootschalige neurale netwerken met heel veel parameters die getraind zijn op grote hoeveelheden tekst. Een aantal toepassingen van dergelijke LLM&#8217;s zijn:</p>



<ul class="wp-block-list">
<li><strong>Genereren</strong> van tekst: denk bijvoorbeeld aan een draft voor een email;</li>



<li><strong>Samenvatten</strong> van tekst;</li>



<li><strong>Vertalingen </strong>uitvoeren;</li>



<li><strong>Classificeren</strong> van tekst: hieronder valt sentiment analyse, zoals het classificeren van klantenreviews als positief of negatief;</li>



<li><strong>Vragen beantwoorden</strong>;</li>



<li><strong>Entiteiten herkennen</strong>, zoals persoonsnamen;</li>



<li><strong>Assisteren bij het schrijven van code</strong>: zie de blogpost over <a href="/de-ai-augmented-developer/">De AI-Augmented Developer</a>.</li>
</ul>



<p>Een populaire toepassing is het beantwoorden van vragen. Naar aanleiding van de lancering van ChatGPT duiken er massaal tools op die toelaten om vragen te beantwoorden over je eigen content. Het wordt heel eenvoudig voorgesteld: upload je documenten (PDF, Word, etc.) en je kan quasi onmiddellijk vragen beginnen stellen, typisch in een chatbot-achtige omgeving.</p>



<p>In dit artikel geven we aan hoe zo&#8217;n <em>question answering </em>systeem in elkaar steekt en vertellen we wat meer over de kwaliteit die we kunnen verwachten van de output.</p>



<h1>Question answering op basis van taalmodellen</h1>



<p>Onderstaand schema geeft in grote lijnen weer welke componenten onderdeel uitmaken van een question answering systeem op basis van taalmodellen. Het bovenste gedeelte (blauw) zijn alle stappen die nodig zijn om de content klaar te zetten:</p>
<ul>
<li>Als startpunt hebben we een knowledge base met één of meerdere documenten. Het kan gaan om verschillende formaten, zoals PDF, Word of webpagina&#8217;s. In deze eerste stap wordt de tekst uit de documenten gehaald;</li>
<li>Vervolgens wordt de tekst opgesplitst in kleinere stukken (<strong><em>chunks</em></strong>);</li>
<li>Die stukken tekst worden dan omgezet naar <strong><em>embeddings</em></strong>, dat is een numerieke voorstelling van tekst die het gemakkelijker maakt om semantisch vergelijkbare stukken tekst terug te vinden;</li>
<li>Uiteindelijk worden de embeddings bijgehouden in een databank (<strong><em>vector store</em></strong>).</li>
</ul>



<figure class="wp-block-image aligncenter size-large"><a href="/wp-content/uploads/2023/08/qa2.png"><img loading="lazy" decoding="async" width="1024" height="414" src="/wp-content/uploads/2023/08/qa2-1024x414.png" alt="" class="wp-image-18979" srcset="https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-1024x414.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-300x121.png 300w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2-768x310.png 768w, https://www.smalsresearch.be/wp-content/uploads/2023/08/qa2.png 1300w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Schematische voorstelling van question answering op basis van een taalmodel</figcaption></figure>



<p>Na deze voorbereidingsfase kunnen we als eindgebruiker een vraag stellen aan het systeem (zie onderste gedeelte in het schema). Dit gaat als volgt: de vraag van de gebruiker (<strong><em>query</em></strong>) wordt omgezet naar embeddings, wat toelaat om in de vector store de documenten op te zoeken (<em>retrieval</em>) die het meest semantisch verwant zijn met deze vraag. Vervolgens wordt een <strong><em>prompt</em> </strong>naar het taalmodel gestuurd, dit is alle informatie die nodig is om een antwoord te bekomen van het taalmodel: de originele vraag van de gebruiker, de relevante gevonden documenten en de specifieke opdracht (instructie) voor het taalmodel. We krijgen tenslotte een gegenereerd antwoord terug, indien gewenst samen met vermelding van de bronnen (paginanummers of website URL&#8217;s).</p>
<p>We kunnen ons afvragen waarom we niet meteen alle documenten uit de knowledge base als context meegeven aan het taalmodel. Daar zijn hoofdzakelijk twee redenen voor. Eerst en vooral is er een beperking op de grootte van de context die we kunnen meegeven. Het populaire GPT-3.5-turbo model heeft bijvoorbeeld een limiet van 4000 <strong><em>tokens</em></strong>. Met tokens wordt de kleinste betekenisvolle eenheid bedoeld waarin tekst kan worden opgesplitst. Een token kan een volledig woord zijn, maar het kan ook een deel van een woord zijn of een leesteken, afhankelijk van de gebruikte methode voor <em>tokenization</em>.</p>
<p>Een tweede reden is de kost voor het aanroepen van een taalmodel. Die is namelijk afhankelijk van het aantal tokens in de input en de output. Hoe meer context we meegeven met de input, hoe hoger dus de kost.</p>



<h1>Frameworks</h1>
<p>Toepassingen op basis van de bovenstaande architectuur kunnen snel ontwikkeld worden dankzij frameworks zoals <a href="https://python.langchain.com/">Langchain</a>. Ze bieden typisch abstracties aan om in enkele lijnen code de taken uit te voeren uit het schema hierboven (tekst extraheren, tekst opsplitsen, embeddings aanmaken en opslaan). En ze fungeren als een soort orchestrator om de gebruikersinput te verbinden met de vector store en het taalmodel.</p>
<p>Als experiment gingen we aan de slag met Langchain om een question answering toepassing te bouwen op basis van een PDF of webpagina&#8217;s. Met de nodige kennis van het framework is dit heel snel opgezet.</p>



<h1>Kwaliteit van de output</h1>
<p>De hamvraag is natuurlijk hoe accuraat de antwoorden zijn die we terugkrijgen. Uit onze experimenten blijkt dat de antwoorden soms indrukwekkend goed zijn: accuraat, mooi samengevat en soms met correcte redenering zoals het interpreteren of een bedrag uit de vraag boven of onder een bepaald grensbedrag ligt.</p>
<p>Maar we moeten helaas ook constateren dat de antwoorden dikwijls onnauwkeurig zijn of onvolledig, tot zelfs ronduit fout. Intuïtief kan men denken dat dit intrinsiek is aan het generatieve karakter van taalmodellen en het fenomeen van hallucinaties. Een minstens even belangrijke factor is echter de <em>retrieval</em> stap: het opzoeken van de meest relevante stukken tekst waarin het taalmodel de informatie moet vinden om een antwoord op te stellen. Indien de informatie die nuttig is voor een antwoord niet in die aangeleverde stukken tekst staat, kunnen we niet verwachten dat het taalmodel een accuraat antwoord teruggeeft.</p>
<p>Los van waar het fout gaat, zijn er een aantal technieken om de kwaliteit van de output te verhogen, waaronder:</p>
<ul>
<li>Semantische retrieval combineren met een klassieke lexicale retrieval;</li>
<li>Bijkomende relevante bronnen opnemen in de knowledge base;</li>
<li>Prompt engineering: de instructie aanpassen die gegeven wordt aan het taalmodel;</li>
<li>Het aanpassen van de grootte van de chunks en de grootte van de overlap tussen de chunks. We merken hierbij op dat de limiet op de context van de taalmodellen groter wordt. Zo biedt OpenAI een model met een context van 16.000 tokens.&nbsp;Daardoor kan meer context meegegeven worden.&nbsp; Het verhogen van de grootte van de chunks kan ervoor zorgen dat semantisch verwante informatie meer samenblijft in één chunk.</li>
<li>Tenslotte kan er ook gedacht worden aan het finetunen van een taalmodel, maar dat is veel omslachtiger.</li>
</ul>



<h1>Conclusie</h1>
<p>Het zou mooi zijn om met een heel beperkte inspanning een systeem te kunnen opzetten dat in staat is om vragen te beantwoorden over onze eigen data. De accuraatheid van het antwoord is echter nog een groot aandachtspunt.&nbsp;Er is een goede reden waarom er bij dergelijke toepassingen steevast een disclaimer te zien is die stelt dat de antwoorden onnauwkeurig of foutief kunnen zijn en dat het steeds aangeraden is om het resultaat te controleren.</p>



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



<p><em data-rich-text-format-boundary="true">Dit is een ingezonden bijdrage van Bert Vanhalst, IT consultant bij Smals Research. Dit artikel werd geschreven in eigen naam en neemt geen standpunt in namens Smals.</em></p>
]]></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>Governance volgens Mattheus</title>
		<link>https://www.smalsresearch.be/governance-volgens-mattheus/</link>
					<comments>https://www.smalsresearch.be/governance-volgens-mattheus/#comments</comments>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Tue, 14 Dec 2021 07:00:00 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[data governance]]></category>
		<category><![CDATA[Data Mining]]></category>
		<category><![CDATA[egov]]></category>
		<category><![CDATA[governance]]></category>
		<category><![CDATA[methodology]]></category>
		<category><![CDATA[social]]></category>
		<category><![CDATA[standards]]></category>
		<guid isPermaLink="false">/?p=16627</guid>

					<description><![CDATA[Automatisering, zelfs digitalisering, is niet zomaar vrijblijvend, en al zeker niet bij overheden. Governance, vrij vertaald als deugdelijk bestuur, is een vaag begrip, maar het belang ervan illustreren we in dit artikel aan de hand van enkele voorbeelden.]]></description>
										<content:encoded><![CDATA[
<p>Wie zich interesseert in bestuurskunde, is ongetwijfeld vertrouwd met het <a href="https://nl.wikipedia.org/wiki/Mattheuseffect">Mattheus-effect</a>. Het stelt dat de voordelen van systemen zoals sociale zekerheid onevenredig toestromen naar de hogere (midden)klasse, die ze eigenlijk het minst nodig heeft. Het treedt bijvoorbeeld op wanneer je, om een voordeel toegekend te krijgen (premie, subsidie, uitkering, belastingaftrek,&#8230;), eerst en vooral moet weten dat het voordeel bestaat, en daarna eerst tijd en moeite moet kunnen steken in een foutloze aanvraag bij de juiste dienst. Het effect is goed gedocumenteerd en wordt <a href="https://www.uantwerpen.be/nl/onderzoeksgroep/csb/">al decennia bestudeerd</a>.</p>



<p>Automatisering is een belangrijk wapen om het Mattheus-effect tegen te gaan. Het <a href="https://www.ksz-bcss.fgov.be/nl/project/geharmoniseerde-sociale-statuten-gss">automatisch toekennen van bepaalde voordelen</a> aan de hand van objectieve criteria zorgt idealiter voor een gelijke behandeling van alle burgers ongeacht stand en rang. Daarnaast zorgt automatisering ook voor tijdswinst, minder papier, en lagere kosten op lange termijn. <a href="https://www.smals.be/nl/content/activiteitenverslag-2020">Veel projecten waar Smals bij betrokken is, dragen daar aanzienlijk toe bij</a>: ze besparen de overheid, burgers en bedrijven jaarlijks miljarden euro&#8217;s, om niet te zeggen tonnen papier, inkt en postzegels.</p>



<p>We schreven al uitvoerig over de talloze <a href="https://www.fast.ai/2019/01/29/five-scary-things/">randvoorwaarden </a>die opduiken als men Artificiële Intelligentie correct wil inzetten (<a href="/enkele-valkuilen-in-ai/">[1]</a>, <a href="/ai-en-desinformatie/">[2]</a>, <a href="/5-vragen-om-te-stellen-voor-de-start-van-een-ai-project/">[3]</a>, <a href="/lintelligence-artificielle-dans-le-secteur-public/">[4]</a>, <a href="/lethique-dans-lintelligence-artificielle/">[5]</a>, <a href="/ia-lethique-en-pratique/">[6]</a>), maar ook een gewone procesautomatisering, zelfs digitalisering, is niet zomaar vrijblijvend, en al zeker niet bij overheden. <a href="https://law.stanford.edu/2021/11/05/ai-and-the-corrosive-effect-of-using-carless-definition/">Automatisering is niet gelijk aan artificiële intelligentie</a>, maar men geeft nog steeds een deel van de controle uit handen aan een machine. Naast winsten in snelheid en kostprijs, kan dat ook <a href="https://www.youtube.com/watch?v=zUQgthIs7pM">allerlei beperkingen</a> introduceren. Door de schaalvergroting loopt het, als het fout loopt, ook ineens heel erg fout. Reden genoeg om reeds vanaf de planningsfase nauwgezet aandacht te besteden aan de bredere effecten van een automatiseringsproject.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:35% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="240" height="300" src="/wp-content/uploads/2021/12/ASM_AR17_Corporate-Governance_2-240x300.jpg" alt="" class="wp-image-16754 size-medium" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/12/ASM_AR17_Corporate-Governance_2-240x300.jpg 240w, https://www.smalsresearch.be/wp-content/uploads/2021/12/ASM_AR17_Corporate-Governance_2.jpg 327w" sizes="auto, (max-width: 240px) 100vw, 240px" /></figure><div class="wp-block-media-text__content">
<p>Wil een geautomatiseerd proces goed werken, dan is het belangrijk dat het actief en &#8220;als een goede huisvader&#8221; wordt beheerd. Permanente monitoring is nodig zodat problemen snel gedetecteerd en opgelost kunnen worden. Manueel ingrijpen moet mogelijk blijven, het moet duidelijk zijn wie waarvoor verantwoordelijk is, en alles moet mee evoluer<span data-mce-type="bookmark" id="mce_1_start" data-mce-style="overflow:hidden;line-height:0px" style="overflow:hidden;line-height:0px"><span data-mce-type="bookmark" id="mce_1_start" data-mce-style="overflow:hidden;line-height:0px" style="overflow:hidden;line-height:0px">en wanneer nodig. In het Engels wordt dat al eens aangeduid met (corporate) &#8220;<a href="https://nl.wikipedia.org/wiki/Governance">governance</a>&#8220;, vrij vertaald &#8220;deugdelijk bestuur&#8221;. Het is een vaag begrip, maar in dit artikel hoop ik het belang ervan te kunnen illustreren aan de hand van enkele spraakmakende voorbeelden uit het buitenland.</span></span></p>



<p class="has-small-font-size">(<em>afbeelding: &#8220;corporate governance&#8221;, (c) Asmi-corporatereporting.com, 2017, Licensed CC BY-SA 4.0 <a href="https://creativecommons.org/licenses/by-sa/4.0">https://creativecommons.org/licenses/by-sa/4.0</a>, via Wikimedia Commons)</em></p>


</div></div>



<p></p>



<h2 class="wp-block-heading">Wat kan er zoal misgaan?</h2>



<h3 class="wp-block-heading">Frankrijk</h3>



<p>De Franse <em>Caisse des Allocations Familiale (CAF)</em> nam in 2021 een nieuw systeem in gebruik voor de berekening van huisvestingstoelagen. <a href="https://www.mediapart.fr/journal/france/190621/la-reforme-des-apl-vire-au-cauchemar-pour-les-allocataires-et-ses-agents/prolonger">Helaas was het systeem niet volledig compatibel</a> met een ander systeem voor de registratie van sommige arbeidsprestaties, nodig om de hoogte van die uitkering te bepalen. Als gevolg kregen <a href="https://demarchesadministratives.fr/actualites/caf-les-allocataires-exasperes-apres-des-bugs-en-serie">minstens 120.000 mensen een foutieve schuldvordering</a> in de bus, automatisch aangemaakt, voor zogezegd teveel ontvangen uitkeringen. De toevloed aan reacties, en alle correcties die vaak manueel aangebracht moesten worden, zorgden voor <a href="https://www.ouest-france.fr/societe/logement/pagaille-dans-les-aides-au-logement-la-caf-explique-d-ou-viennent-les-bugs-00345f00-bed9-11eb-a219-8f747c6d3d1b">veel extra werklast</a> bij de dienst die al met veel vertragingen te kampen had, wat op zijn beurt aanleiding gaf tot <a href="https://www.dossierfamilial.com/actualites/social-sante/reforme-des-apl-retards-de-versements-pourquoi-ca-grince-a-la-caf-893503">stakingen</a>. Negen maanden later <a href="https://www.ouest-france.fr/societe/logement/pagaille-dans-les-aides-au-logement-la-caf-explique-d-ou-viennent-les-bugs-00345f00-bed9-11eb-a219-8f747c6d3d1b">wachtten nog steeds 32.000 mensen op de correctie</a> van hun dossier.</p>



<h3 class="wp-block-heading">Verenigd Koninkrijk</h3>



<p>Het Verenigd Koninkrijk heeft geen rijksregister zoals België. Mensen moeten hun identiteit <a href="https://www.gov.uk/government/publications/introducing-govuk-verify/introducing-govuk-verify">op een andere manier bewijzen</a>: met een rijbewijs, bankrekening, telefooncontract of een internationaal paspoort. Dat zorgt al voor een eerste probleem, omdat net de meest kwetsbaren die het meeste belang hebben bij die diensten, <a href="https://publications.parliament.uk/pa/cm201719/cmselect/cmpubacc/1748/1748.pdf">door hun kleinere administratieve/digitale voetafdruk niet geauthenticeerd</a> geraken. Daarnaast is <a href="https://www.bbc.com/news/uk-48887753">identiteitsfraude</a> een groot probleem.</p>



<p><a href="https://www.gov.uk/universal-credit">Universal Credit</a> is een geautomatiseerd sociaal vangnet voor de laagste inkomens, dat bestaat uit de fusie van 6 aparte uitkeringen. Hun doel om de zaken te vereenvoudigen hebben ze echter ook doorgetrokken in de berekeningswijze: die neemt enkel het inkomen van een vorige maand in rekening. Dat zorgt voor grote <a href="https://www.hrw.org/report/2020/09/29/automated-hardship/how-tech-driven-overhaul-uks-social-security-system-worsens">problemen bij mensen die onregelmatig betaald krijgen</a>, of wanneer loon plots vervroegd uitbetaald wordt omwille van feestdagen: zij hebben in sommige maanden plots een hoger inkomen, in andere maanden geen, en krijgen daardoor heel erg fluctuerende uitkeringen. Het perverse effect daarvan is dat <a href="https://barrowcadbury.org.uk/wp-content/uploads/2023/11/CPAG-Rough-justice-2018.pdf">twee mensen met dezelfde job, gezinssamenstelling en jaarinkomen, toch verschillende uitkeringen kunnen krijgen</a>, enkel en alleen omdat hun salaris op een ander moment wordt uitbetaald.</p>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:33% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="300" height="76" src="/wp-content/uploads/2021/12/640px-Universal_Credit.svg_-300x76.png" alt="" class="wp-image-16757 size-medium" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/12/640px-Universal_Credit.svg_-300x76.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/12/640px-Universal_Credit.svg_.png 640w" sizes="auto, (max-width: 300px) 100vw, 300px" /></figure><div class="wp-block-media-text__content">
<p>Een <a href="https://www.theguardian.com/uk-news/2019/jan/11/four-single-mothers-win-high-court-benefits-battle-against-dwp-universal-credit">rechtszaak</a> daar<span data-mce-type="bookmark" id="mce_1_start" data-mce-style="overflow:hidden;line-height:0px" style="overflow:hidden;line-height:0px">over werd door de Bri<span data-mce-type="bookmark" id="mce_1_start" data-mce-style="overflow:hidden;line-height:0px" style="overflow:hidden;line-height:0px">tse overheid verloren. Het maken van de opgedragen aanpassingen zal de <a href="https://www.theguardian.com/society/2020/jul/10/cost-of-rolling-out-universal-credit-rises-by-14bn-say-auditors">kost van het geplaagde systeem</a>, nu reeds lopend in de miljarden pond, alleen nog maar verder doen toenemen. Let wel dat het probleem hier niet zozeer bij de automatisering ligt, wel bij het ontwerp: de regering had expliciet besloten tot deze berekeningswijze, omdat ze gemakkelijker en efficiënter te implementeren was.</span></span></p>



<p class="has-small-font-size"><em>(afbeelding: Wordmark for Universal Credit, (c) UK Government, licensed under the&nbsp;<a href="https://nationalarchives.gov.uk/doc/open-government-licence/version/1/">Open Government Licence version 1.0</a>&nbsp;(OGL v1.0).</em><span data-mce-type="bookmark" id="mce_1_start" data-mce-style="overflow:hidden;line-height:0px" style="overflow:hidden;line-height:0px"></span></p>
</div></div>



<h3 class="wp-block-heading">Australië</h3>



<p>In Australië deed de <a href="https://theconversation.com/robodebt-was-a-fiasco-with-a-cost-we-have-yet-to-fully-appreciate-150169">RoboDebt </a>affaire veel stof opwaaien. Frauduleus betaalde uitkeringen terugvorderen deden ze al langer, maar in 2015 maakten ze een cruciale verandering: het verifiëren van een &#8220;match&#8221; tussen de databanken sociale zekerheid (DHS) en financiën (ATO), werd geautomatiseerd. Dat nam effectief een stap van menselijke controle in de ketting weg. Het hoofddoel was om elke &#8220;match&#8221; op te volgen, daar waar ze vroeger slechts de meest flagrante inbreuken konden najagen omwille van het manuele werk. Dat leidde in het eerste jaar al tot een 40 keer hoger volume.</p>



<p>Helaas was niet elke &#8220;match&#8221; ook terecht. De uitkeringen werden immers in perioden van 14 dagen toegekend, terwijl de belastingdienst gegevens had per fiscaal jaar. Bij gebrek aan inkomstengegevens per 14 dagen werd een gemiddelde van het jaarinkomen toegepast, maar net zoals in het voorbeeld van UK, leidde dat tot ongewenste neveneffecten, en moesten burgers plots schulden gaan terugbetalen die ze nooit gemaakt hadden. In 2019 werd het systeem door de rechtbank onwettelijk verklaard, en in 2021 moest de overheid een <a href="https://en.wikipedia.org/wiki/Robodebt_scheme">schikking ter waarde van $1.8 miljard Australische dollar</a> treffen met de bijna 500.000 gedupeerden. Ook hier lag de fout bij de wetgever, die niet voldoende had nagedacht over de aannames en mogelijke neveneffecten bij het opstellen van de berekeningswijze van het systeem.</p>



<h3 class="wp-block-heading">USA</h3>



<p>In de Verenigde Staten doken problemen op bij de automatisering van <a href="https://interrai.org/">RAI</a>. Dit <em>Resident Assessment Instrument</em> is een lange vragenlijst voor zwaar zorgbehoevenden. Aan de hand van het resultaat wordt o.a. berekend op hoeveel thuiszorg iemand een beroep mag doen. Ook in België wordt een variant ervan gebruikt die <a href="https://www.belrai-kennisportaal.be/over-belrai">BelRAI</a> heet. Het automatiseren daarvan moet heel omzichtig gebeuren. Als bijvoorbeeld de vraag of iemand voetproblemen heeft beantwoord wordt met &#8220;nee&#8221;, kan dat zijn omdat die gezond is, maar even goed omdat die geamputeerde voeten heeft &#8211; en die laatste behoeft uiteraard meer zorg.  </p>



<p>In Arkansas liep het <a href="https://www.theverge.com/2018/3/21/17144260/healthcare-medicaid-algorithm-arkansas-cerebral-palsy">fout bij onderaannemers die een verkeerde versie van de vragenlijst hadden gebruikt</a>, en daarnaast bepaalde ziektebeelden, zoals hersenverlamming, niet correct hadden verwerkt. Pas tijdens de rechtszaak werd duidelijk waar de fouten precies lagen, o.a. doordat de rechter verplichtte om de resultaten eens manueel na te rekenen. Het systeem bleek dermate complex, en de code werd zodanig afgeschermd, dat ook de bevoegde ambtenaren niet in staat waren geweest om de fout te ontdekken. Zo was het voor eindgebruikers nooit duidelijk waarom de evaluatie tot een bepaald resultaat leidde, wat het op zijn beurt erg moeilijk maakte een evaluatie aan te vechten of te overreden. Het gebruik van RAI op zich werd door de rechtbank wel als wettig beschouwd.</p>



<h3 class="wp-block-heading">India</h3>



<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:33% auto"><figure class="wp-block-media-text__media"><img loading="lazy" decoding="async" width="400" height="244" src="/wp-content/uploads/2021/12/A_sample_of_Aadhaar_card.jpg" alt="" class="wp-image-16759 size-full" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/12/A_sample_of_Aadhaar_card.jpg 400w, https://www.smalsresearch.be/wp-content/uploads/2021/12/A_sample_of_Aadhaar_card-300x183.jpg 300w" sizes="auto, (max-width: 400px) 100vw, 400px" /></figure><div class="wp-block-media-text__content">
<p>India heeft hetzelfde probleem als het Verenigd Koninkrijk, nl. dat het lange tijd geen eengemaakt burgerregister had en dat andere systemen (rijbewijzen, stembiljetten, geboorteaktes) onderling incompatibel zijn. Het bijhouden van gegevens op kaartjes en papieren is er ook geen sinecure voor de armeren en ongeletterden onder hun bevolking. In een ambitieus programma om iedere Indiër een sociaal identiteitsnummer te geven (zoals onze vroegere <a href="https://nl.wikipedia.org/wiki/SIS-kaart">SIS-kaart</a>), startte India het <a href="https://en.wikipedia.org/wiki/Aadhaar">Aadhaar</a> project, dat ook biometrische authenticatie op basis van de vingerafdruk omvat. </p>



<p class="has-small-font-size"><em>(afbeelding: <a href="https://commons.wikimedia.org/wiki/File:A_sample_of_Aadhaar_card.jpg">&#8220;A sample of Aadhaar card&#8221;</a>, by <a href="https://commons.wikimedia.org/wiki/User:PageImp">Pagelmp</a>, licensed under the&nbsp;<a href="https://en.wikipedia.org/wiki/en:Creative_Commons">Creative Commons</a>&nbsp;<a href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Attribution-Share Alike 4.0 International</a>&nbsp;license. Source Wikimedia Commons.)</em></p>
</div></div>



<p>De praktijk blijkt echter weerbarstiger. Er zijn technologische vereisten om het te kunnen toepassen: een vingerafdruklezer en een stabiele internetverbinding. Bovendien zijn de vingerafdrukken niet altijd meer herkenbaar bij wie een leven lang handenarbeid heeft verricht. Ook fouten bij de manuele data-entry, wat tijd en geld kost om te laten corrigeren, zorgen voor problemen. Er <a href="https://scroll.in/topic/38792/identity-project">duiken dan ook veel rapporten op</a> van grote aantallen kwetsbaren die de toegang tot sociale diensten, onderwijs, vergunningen, kindergeld of voedselrantsoenen wordt ontzegd omdat ze <a href="https://scroll.in/article/868836/aadhaar-in-the-worlds-biggest-biometric-id-experiment-many-have-fallen-through-the-gaps">door de mazen van het Aadhaar-systeem</a> vallen.</p>



<h3 class="wp-block-heading">Nederland</h3>



<p>In Nederland viel de regering over de <a href="https://www.vrt.be/vrtnws/nl/2021/10/21/toeslagenaffaire-nederland-1-115-kinderen-weggehaald-bij-gedupe/">toeslagenaffaire</a>. Vele duizenden gezinnen kwamen in grote problemen door onterechte beschuldigingen van subsidiefraude. De affaire is complex, maar aan de basis ligt de opsporingsdienst voor belastingfraude die zich danig heeft vergaloppeerd. Het probleem lag hier o.a. bij een <a href="https://www.trouw.nl/politiek/hoe-de-belastingdienst-lage-inkomens-profileerde-in-de-jacht-op-fraude~bbb66add/?utm_source=link&amp;utm_medium=app&amp;utm_campaign=shared%20content&amp;utm_content=free">gebrekkige training en validatie van een machine-learning model</a>, dat een risicoclassificatie moest geven aan dossiers en daarbij zonder veel nadenken steunde op parameters zoals nationaliteit, die erg gevoelig zijn voor discriminatie. Daarnaast was de inhoud van verschillende onderliggende databanken, o.a. de <a href="https://nl.wikipedia.org/wiki/Fraude_Signalerings_Voorziening">Fraude Signalerings Voorziening</a>, onoordeelkundig verzameld: <a href="https://www.taxence.nl/nieuws/onderzoek-pwc-fsv-lijst-bracht-duizenden-burgers-in-problemen/">een telefoontje naar de belastingdienst kon voldoende</a> zijn om erin opgenomen te zijn als potentieel fraudeur. De opsporingsdienst vertrouwde echter quasi blindelings op de gegevens en risicoscores, en gebruikte ze als rechtvaardiging om drastisch te werk te gaan bij terugvorderingen, weigeringen van afbetalingsplannen, enz. Daarbij ontbrak het aan een richtinggevend kader van bovenaf, interne monitoring of audit, en mogelijkheden tot aantekenen van beroep. De databank werd op basis van <a href="https://www.belastingdienst.nl/wps/wcm/connect/nl/contact/content/het-systeem-fraude-signalering-voorziening-fsv">inbreuken op de privacywetgeving</a> stopgezet en de belastingdienst kreeg <a href="https://tweakers.net/nieuws/190452/belastingdienst-krijgt-2-komma-75-miljoen-euro-avg-boete-voor-rol-in-toeslagenaffaire.html">een stevige boete</a>. </p>



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



<p>De bovenstaande verhalen hebben meestal 1 ding gemeen: alles gaat goed totdat op een bepaald moment ergens een bocht teveel wordt afgesneden zonder dat er tijdig wordt ingegrepen. Dat moet ons niet tegenhouden om te automatiseren, want er zijn ook duidelijke voordelen: voor de overheid qua <a href="/rpa-betaalbot-bij-hvw/">schaalbaarheid</a>, voor de burger o.a. door <a href="https://financien.belgium.be/nl/particulieren/belastingaangifte/aangifte/voorstel-van-vereenvoudigde-aangifte">vermindering van administratie</a>. Met dit artikel willen we vooral aandacht vestigen op de noodzaak om daarbij voldoende te investeren in planning en opvolging, om een goede grip te houden. Dat omvat ook een <a href="https://www.cs.princeton.edu/~arvindn/talks/MIT-STS-AI-snakeoil.pdf">realistische blik</a>, aandacht voor <em><a href="https://www.interaction-design.org/literature/topics/ux-design">user experience</a></em> en duidelijke adoptie van <a href="https://oecd.ai/en/dashboards/ai-principles">waarden en principes</a> (transparantie, <em>accountability</em>, &#8230;). </p>



<p>Het grote verschil tussen een ambtenaar in persoon en een geautomatiseerd systeem, is dat <a href="https://ali-alkhatib.com/papers/chi/street-level_algorithms/street-level_algorithms.pdf">een ambtenaar aanpassingen kan maken en verfijningen kan toebrengen nog <em>voordat </em>een beslissing genomen wordt, terwijl een algoritme enkel maar gecorrigeerd kan worden <em>nadat </em>het al een beslissing heeft gemaakt</a>. Dat laatste veroorzaakt frustratie en een nood aan ingrijpen achteraf. Er is een risico dat bepaalde doelgroepen onevenredig het slachtoffer zijn van zulke fouten. Ook kan bij de gebruikers van geautomatiseerde systemen, een zekere verblinding, laksheid, of neiging tot het afschuiven van verantwoordelijkheid ontstaan: &#8220;de computer zegt het dus het zal wel zo zijn&#8221;. Er moeten dus toegankelijke procedures zijn om beroep aan te tekenen tegen een beslissing en correcties moeten eenvoudig doorgevoerd kunnen worden.</p>



<p>Daarnaast blijft het altijd mogelijk dat programmeurs de regels onvolledig of foutief inbrengen in een programma, of dat ze andere interpretaties en aannames hanteren dan de regelgevers. Er is dus nood aan een zekere <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1012360">waakzaamheid, transparantie en inspraak</a> in het hele implementatieproces, zeg maar &#8220;<a href="https://en.wikipedia.org/wiki/Project_governance">project governance</a>&#8220;. Ook de uitvoerende ambtenaren moeten blijven begrijpen wat er gebeurt en waarom. Daarbij hoort ook een goede methode om feedback te verwerken die vanop de werkvloer aangebracht wordt. </p>



<p>Er bestaat vooralsnog geen vaste manier om <em>compliance </em>of <em>governance </em>ontegensprekelijk te garanderen. Het zijn nog steeds vage begrippen, en ook nogal wat wetgeving blijft vaag: zo staat het woord &#8220;redelijk&#8221; maar liefst 38 keer in de <a href="https://eur-lex.europa.eu/legal-content/NL/TXT/?uri=CELEX:32016R0679">GDPR</a>, en het woord &#8220;passend&#8221; zelfs 125 keer, zonder verdere specificatie van wat we daar nu concreet onder moeten verstaan. In de VS worden basisregels voor bedrijfsbeheer opgelegd door de <a href="https://en.wikipedia.org/wiki/Sarbanes%E2%80%93Oxley_Act">Sarbanes-Oxley Act</a>. In België bestaan er de <a href="https://www.corporategovernancecommittee.be/nl">Code Lippens</a> voor beursgenoteerde, en <a href="https://www.codebuysse.com/nl/default.aspx">Code Buysse</a> voor niet-beursgenoteerde ondernemingen. Ondertussen wordt in Europa verder gewerkt aan o.a. een <a href="https://www.consilium.europa.eu/en/press/press-releases/2021/11/30/promoting-data-sharing-presidency-reaches-deal-with-parliament-on-data-governance-act/">Data Governance Act</a> om een kader te scheppen voor verantwoord (her)gebruik van gegevens. </p>



<p><a href="https://docs.microsoft.com/en-us/compliance/regulatory/offering-home">Deze en andere regulatorische raamwerken</a> zijn misschien niet perfect sluitend. Ze adopteren, eventueel <a href="https://www.iso.org/certification.html">certifiëren</a>, en regelmatig eraan toetsen, zorgt op korte termijn wel voor extra <em>overhead</em> en kosten, maar het legt de lat ook hoger en kan zo op lange termijn veel zorgen voorkomen. Het is ook meestal goede reclame. Uit alle aangehaalde voorbeelden blijkt natuurlijk ook dat daarvoor de nodige wil moet bestaan bij, en middelen ter beschikking gesteld moeten worden door, de bevoegde beleidsmakers.</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>
					
					<wfw:commentRss>https://www.smalsresearch.be/governance-volgens-mattheus/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Smals KG Checklist: déterminer si un graphe de connaissances peut résoudre un problème concret</title>
		<link>https://www.smalsresearch.be/smalls-kg-checklist/</link>
		
		<dc:creator><![CDATA[Christophe Debruyne]]></dc:creator>
		<pubDate>Thu, 12 Aug 2021 12:17:20 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Knowledge Graph]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[standards]]></category>
		<guid isPermaLink="false">/?p=16366</guid>

					<description><![CDATA[Cette contribution se situe dans une série d’articles sur les graphes de connaissances (les « knowledge graphs » en anglais). Nous vous présentons le Smals KG Checklist, un outil qui vous aide à déterminer si un graphe de connaissances serait utile, voire indispensable, pour résoudre un problème dans votre organisation. Le Smals KG Checklist a été présenté [&#8230;]]]></description>
										<content:encoded><![CDATA[<blockquote>
<p>Cette contribution se situe dans une série d’articles sur <a href="/les-graphes-de-connaissance-incontournable-pour-lintelligence-artificielle-2/">les graphes de connaissances</a> (les « knowledge graphs » en anglais). Nous vous présentons le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a>, un outil qui vous aide à déterminer si un graphe de connaissances serait utile, voire indispensable, pour résoudre un problème dans votre organisation. Le Smals KG Checklist a été présenté au sein du <a href="https://2021-eu.semantics.cc/">SEMANTiCS 2021</a>, un congrès scientifique et industriel autour des graphes de connaissances.</p>
</blockquote>
<h1>La différence entre les graphes et les graphes de connaissances</h1>
<p>Nous avons déjà traité <a href="/les-graphes-de-connaissance-quelques-applications/">les graphes de connaissances</a> et <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">les (bases de données) graphes</a>. Mais quelle est la différence entre les deux? Dans les grandes lignes, les bases de données graphes nous permettent de stocker des données représentées en graphe et les graphes de connaissances sont un type de graphe spécifique qu’on stocke dans des bases de données graphes. Autrement dit, tous les graphes de connaissances sont des graphes mais l’inverse n’est pas vrai.</p>
<p>Quelles sont donc les caractéristiques qui séparent les graphes de connaissances des autres graphes? C’est une question qu’on se pose souvent dans l’industrie et la recherche. En 2020, Hogan et al. ont publié un rapport plutôt académique qui traite le sujet des graphes de connaissances. Ils présentent plusieurs définitions de ce concept, ce qui ajoute à la confusion.  Par contre, toutes ces définitions nous permettent de synthétiser les caractéristiques d’un graphe de connaissances. C’est un graphe qui représente des entités (sous forme de nœuds) et leurs relations (sous forme de d’arêtes), et qui adhère à trois conditions&nbsp;:</p>
<ol>
<li><strong><span style="color: #339966;">Le graphe intègre des informations de différentes sources hétérogènes</span></strong>&nbsp;: bases de données, documents, connaissances reprises dans les têtes des experts, …</li>
<li><strong><span style="color: #ff00ff;">Un schéma qui décrit les types et relations utilisés dans le graphe de connaissances.</span></strong> Ce schéma, également nommé <em>ontologie</em>, fait partie du graphe de connaissances.</li>
<li><span style="color: #ff6600;"><strong>Le graphe est utilisé pour déduire des informations implicites à travers les informations explicites.</strong></span> C’est-à-dire, d’utiliser le graphe de connaissances pour découvrir des nouvelles relations, types, etc. en utilisant des algorithmes ou des applications.</li>
</ol>
<p>La première condition est évidente. La traduction d’une base de données relationnelle vers une base de données graphe peut être utile pour optimaliser les requêtes, mais le résultat n’est pas un graphe de connaissances ; le résultat non seulement ne combine pas d’autres informations, mais il manque aussi au résultat une description détaillée des concepts et relations et enfin, le résultat n’est utilisé que pour optimaliser un processus existant. Ce sont les deux autres conditions qui sont plus complexes et nuancées.</p>
<h2>Le Schéma (ou ontologie) d’un graphe de connaissances</h2>
<p>La <a href="https://www.sciencedirect.com/science/article/pii/S0169023X97000566">définition</a> d’un schéma (ontologie) d’un graphe de connaissances est : <em>« une spécification formelle et explicite d&#8217;une conceptualisation partagée »</em>. Cette définition semble compliquée, mais il suffit de comprendre chaque partie de cette définition.</p>
<p>Nous prenons par exemple l’ONSS et la Banque-Carrefour des Entreprises (BCE). L’ONSS et la BCE ont des informations sur des entreprises, mais de points de vue différents. Si l’ONSS et la BCE décident de partager des informations sur des entreprises, ils auront besoin d’une ontologie pour éviter des malentendus. La <strong><em>conceptualisation partagée</em></strong> inclut donc le concept « entreprise » et ses relations, définitions, règles, etc. Les représentants des deux parties se mettent d’accord sur cette conceptualisation partagée en discutant et en réutilisant des informations existantes (législations, glossaires, etc.). Cette conceptualisation partagée reste « dans la tête » des représentants, donc il faut mettre ces accords quelque part : on parle alors de la <strong><em>spécification</em></strong>. La spécification contient les descriptions et définitions de la conceptualisation. Mais la spécification doit être <strong><em>explicite</em></strong>, c’est-à-dire enregistrée quelque part (p. ex., un fichier) et cette spécification doit être <strong><em>formelle</em></strong> (logique ou mathématique) pour que des logiciels puissent l’utiliser.</p>
<p>Il existe des normes pour créer ces schémas ; <a href="https://www.w3.org/TR/rdf-schema/">RDFS</a> et <a href="https://www.w3.org/OWL/">OWL</a> sont deux exemples. RDFS nous permet de créer des hiérarchies de concepts et de relations. OWL est beaucoup plus expressif et nous permet de créer des règles pour valider un graphe de connaissances. Les use cases d’une organisation nous informent quelle langue est préférable. Ces langues nous permettent de décrire que&nbsp;:</p>
<ul>
<li>Chaque entreprise est un agent ;</li>
<li>Chaque personne est un agent ;</li>
<li>Une entité ne peut pas être à la fois une personne et une entreprise (possible avec OWL) ;</li>
<li>Si une entité a un numéro BCE, cette entité est une entreprise ;</li>
<li>…</li>
</ul>
<p>En ajoutant des descriptions en langage naturel, ce schéma rend les données sémantiques pour les logiciels et les utilisateurs. En donnant la requête « donne-moi une liste des agents », un logiciel est capable d’interpréter le schéma et d’inclure les personnes et les entreprises.</p>
<p>Les bases de données graphes comme Neo4j ont souvent une notion de types de nœuds, mais ne soutiennent pas les relations entre ces types, par exemple. La réalisation d’un <em>knowledge grap</em>h non seulement nécessite la construction du schéma, mais aussi l’<em>utilisation </em>de ce schéma en utilisant&nbsp;:</p>
<ul>
<li>une extension d’une base de données graphe ou d’une application sur cette base de données graphe <em><strong>capable d’interpréter un schéma</strong></em>. Un exemple est le <a href="https://neo4j.com/labs/neosemantics/">RDF &amp; Semantics Plugin</a> de Neo4j ; ou</li>
<li>des bases de données graphes <em><strong>conçues pour les graphes de connaissances</strong></em> comme <a href="https://www.stardog.com/">Stardog</a> et <a href="https://jena.apache.org/">Apache Jena</a>.</li>
</ul>
<p>Le schéma est donc un graphe qu’on ajoute au graphe de données et qui est interprété d’une manière spécifique.</p>
<h2>Déduire des informations implicites</h2>
<p>La troisième condition est que le graphe de connaissances soit utilisé pour déduire des informations implicites ou « cachées » dans le graphe, en utilisant :</p>
<ul>
<li>L’intelligence artificielle symbolique (exploitant le schéma) ;</li>
<li>L’intelligence artificielle statistique (machine ou deep learning) ;</li>
<li>Des applications qui « comprennent » les graphes grâce au schéma.</li>
</ul>
<p>Nous avons déjà évoqué l’IA symbolique dans la section précédente. En effet, le langage de schéma permet aux logiciels de déduire des informations. Si l’entité représentant <em>Christophe</em> est du type <em>Personne</em>, cet entité est aussi du type <em>Agent</em>. Ce genre d’IA utilise des logiques formelles pour arriver à ces déductions. L’usage de l’IA symbolique nécessite un schéma.</p>
<p>L’IA statistique, <a href="https://medium.com/dair-ai/an-illustrated-guide-to-graph-neural-networks-d5564a551783">appliquée au graphes</a>, nous permet de prédire des liens entre des entités ou même de prédire les catégories d’une nouvelle entité. L’usage d’un schéma nous permet de fournir des graphes plus riches, en déduisant un maximum d’informations, à ces algorithmes.</p>
<p>Et puis nous avons les applications « intelligentes » qui « comprennent » les graphes de connaissances. Ces applications exploitent le schéma et/ou le langage de schéma pour faciliter les tâches. Pour la <a href="https://en.wikipedia.org/wiki/Faceted_search">recherche facettée</a>, que nous connaissons tous des ventes en ligne, les types et les valeurs des relations sont interprétées pour créer des critères de recherche. Des outils comme <a href="https://metaphacts.com/ontodia">Ontodia</a>, traités dans un <a href="/publications/document/?docid=236">product review</a>, nous permettent d’explorer et d’analyser les contenus d’un graphe de connaissances d’une manière visuelle. Ontodia non seulement interprète le schéma pour guider les fouilles, mais l’outil interprète aussi les contenus du graphe pour choisir les visualisations. Ces outils permettent donc aux usagers de découvrir eux-mêmes des nouvelles informations dans le graphe de connaissances.</p>
<h1>Le Smals KG Checklist</h1>
<p>Reconnaitre la différence entre les graphes et les graphes de connaissances n’est pas évident, non seulement pour des informaticiens non-spécialistes mais aussi, et surtout, pour les organisations. Au sein de Smals et ses membres, par exemple, l’usage et les possibilités des bases de données graphes sont reconnus ; pour faciliter, entre autres, <a href="/le-marche-du-travail-salarie-en-belgique-une-analyse-reseau-partie-1/">les analyses de réseau</a>. Mais quand est-ce qu’un projet nécessite un graphe de connaissances ? Pour répondre à cette question, Smals Research a développé le Smals KG Checklist. <em>A partir d’une problématique concrète</em>, le but du Smals KG Checklist est de déterminer si une solution à cette problématique requiert les trois conditions remplies et le développement d’un graphe de connaissances est une piste valable.</p>
<p>La <strong><a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener">checklist</a>,</strong> disponible en PDF sous licence<em> Creative Commons,</em> se compose de deux parties.  Dans la première partie, nous allons d’abord&nbsp;: 1) décrire la problématique, 2) identifier les parties prenantes, et 3) identifier les concepts clefs (partagés par les parties prenantes). Les réponses à ces trois questions nous donnent un cadre pour les discussions suivantes.</p>
<p>La quatrième question se compose de trois blocs, une pour chaque condition, et chaque bloc à sa propre couleur. Ces trois blocs requièrent l’usage de la deuxième partie de la checklist et nous y retrouvons les mêmes couleurs.</p>
<p><figure id="attachment_16374" aria-describedby="caption-attachment-16374" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png"><img loading="lazy" decoding="async" class="size-full wp-image-16374" src="/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png" alt="Part I of the Smals KG Checklist. " width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-1-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16374" class="wp-caption-text">Part I of the Smals KG Checklist.</figcaption></figure></p>
<p>Le violet correspond au <strong><em>schéma du graphe de connaissances</em></strong>. Nous retrouvons, dans la Section I, la connaissance des experts, la réutilisation des ontologies, la formalisation des législations, … et même la réutilisation des schémas existants. Les schémas des bases de données (relationnelles) contiennent souvent une représentation de nos concepts et relations que nous pouvons « réutiliser ». Si une des cases de la Section I est remplie (ou, voir plus tard, une des cases de la Section V), cette condition est remplie.</p>
<p>Le vert correspond à <strong>l’<em>intégration des informations et données</em></strong>. Dès que plusieurs cases dans ces sections sont cochées, cette condition est remplie. Mais d’où viennent ces informations et ces données ?</p>
<ul>
<li>Section II se focalise sur l’intégration des données structurées (bases de données, fichiers Excel, …)</li>
<li>Section IV se focalise sur l’intégration des données non-structurées (documents, Tweets, …)</li>
<li>Section III, au milieu des sections II et IV, se focalise sur les métadonnées (d’où viennent les informations, leurs dates de créations, …)</li>
</ul>
<p>Remarquez que la Section I a deux couleurs. La connaissance des experts peut contribuer au schéma et au graphe, par exemple. Dès que nous intégrons des bases de données existantes, nous allons (souvent) utiliser les schémas de ces bases de données pour le schéma du graphe de connaissances (surtout quand nous devons créer le schéma nous-même).</p>
<p>L’orange correspond à la <em>découverte des informations implicites</em>. Les Section V, VI, et VII correspondent respectivement avec l’IA symbolique, l’IA statistique, et les applications. Remarquez que la Section V nécessite un schéma et que la section VII est à moitié remplie en orange. Nous pouvons argumenter que la consultation des entités sous forme de page Web (comme, par exemple <a href="https://dbpedia.org/resource/Brussels">la page de Bruxelles</a> de la graphe de connaissances DBpedia) est utile pour les utilisateurs, mais pas vraiment une application intelligente. Nous essayons de capter les applications intelligentes : c’est à dire celles qui interprètent le graphe de connaissances. Si une des cases dans les Section V et VI est remplie et/ou des applications intelligentes sont identifiées, la condition est remplie.</p>
<p><figure id="attachment_16377" aria-describedby="caption-attachment-16377" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png"><img loading="lazy" decoding="async" class="size-full wp-image-16377" src="/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png" alt="Part II of the Smals KG Checklist." width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/smals-kg-checklist-part-2-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16377" class="wp-caption-text">Part II of the Smals KG Checklist.</figcaption></figure></p>
<p>Une fois que les trois blocs de la première partie sont complétés, nous sommes capables de répondre à la cinquième question : est-ce que les trois conditions sont remplies ? Si oui, il est probable qu’un graphe de connaissances soit une solution (élégante) à cette problématique. La sixième question, en gris, nous permet d’enregistrer des pistes pour élargir le graphe de connaissances.</p>
<h1>Une démonstration</h1>
<div>
<p dir="ltr">Nous illustrons le Smals KG Checklist avec la problématique de <a href="https://fr.wikipedia.org/wiki/Raidi%C3%B3_Teilif%C3%ADs_%C3%89ireann" target="_blank" rel="noopener" data-saferedirecturl="https://www.google.com/url?q=https://fr.wikipedia.org/wiki/Raidi%25C3%25B3_Teilif%25C3%25ADs_%25C3%2589ireann&amp;source=gmail&amp;ust=1628840797070000&amp;usg=AFQjCNE_GD5reXyvMeljtwhNVmqD3d6d0g">RTÉ</a>, la chaine nationale de l’Irlande.</p>
<div dir="ltr">
<p>Le RTÉ gère quatre systèmes d’archives&nbsp;: un pour des photos, un pour des films, un pour des documents, et un pour des sons. Chaque système était autonome ; il était conçu avec d’autres procédures pour gérer les métadonnées et pour permettre de retrouver les éléments. Au fil du temps, chaque équipe a même développé ses propres coutumes.</p>
<p>Si un journaliste ou un chercheur devaient faire des recherches sur un sujet, par exemple un politicien irlandais, ces personnes devaient non seulement consulter les 4 systèmes, mais aussi être au courant de comment les informations étaient encodées dans chaque système. Les informations disponibles n’étaient pas riches non plus ; une photo pouvait avoir comme sujet « Dublin », mais le système ne contenait pas l’information « Dublin est la capitale de l’Irlande ».</p>
<p>Le RTÉ, en partenariat avec une université irlandaise, avait lancé <a href="https://dri.ie/dri-insight-rte-project">un projet de graphe de connaissances</a>. L’auteur de cet article était impliqué dans ce projet. Le but du projet était de développer un graphe de connaissances (proof-of-concept) pour faciliter la découverte et l’analyse des données contenues dans ces archives et de promouvoir les métadonnées à des entités. Par exemple, le sujet d’une photo qui n’était auparavant qu’une simple valeur littérale comme « Bruxelles » est transformée en entité d’une ville qui porte le nom de « Bruxelles » en français. En conséquence, il peut être ajouté à cette entité d’autres relations comme le nom en néerlandais et « est la capitale de » avec une entité qui représente la Belgique. Le résultat est une conceptualisation plus détaillée, ce qui nous permet de formuler des requêtes comme&nbsp;: « donne-moi une liste de tous les documents de la capitale de la Belgique» sans connaître le nom de cette ville.</p>
</div>
</div>
<p><figure id="attachment_16405" aria-describedby="caption-attachment-16405" style="width: 1312px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-visual.png"><img loading="lazy" decoding="async" class="size-full wp-image-16405" src="/wp-content/uploads/2021/08/rte-visual.png" alt="Le projet de graphe de connaissances de RTÉ" width="1312" height="689" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual.png 1312w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-300x158.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-768x403.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-visual-1024x538.png 1024w" sizes="auto, (max-width: 1312px) 100vw, 1312px" /></a><figcaption id="caption-attachment-16405" class="wp-caption-text">Le projet de graphe de connaissances de RTÉ</figcaption></figure></p>
<div>
<div dir="ltr"> </div>
<p dir="ltr">Ce projet, lancé en 2013, rempli les trois conditions d’un knowledge graph. Mais pour illustrer le Smals KG Checklist, nous avons fait, ci-dessous, l’exercice pour déterminer si un graphe de connaissances était nécessaire. Il s’avère qu’une solution pour RTÉ nécessitait&nbsp;: un schéma pour réaliser l’analyse et la découverte des données; RTÉ était capable de réutiliser des normes existantes; l’intégration de quatre bases de données <em><strong>et</strong> </em>des informations externes (enrichissement) ; et le développement des outils qui exploitaient le graphe et le schéma pour soutenir les activités des journalistes et des chercheurs.</p>
</div>
<p><figure id="attachment_16409" aria-describedby="caption-attachment-16409" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-1.png"><img loading="lazy" decoding="async" class="size-full wp-image-16409" src="/wp-content/uploads/2021/08/rte-1.png" alt="Première partie du checklist, remplie pour le projet de RTÉ" width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-1-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16409" class="wp-caption-text">Première partie de la checklist, remplie pour le projet de RTÉ</figcaption></figure><br />
<figure id="attachment_16410" aria-describedby="caption-attachment-16410" style="width: 1502px" class="wp-caption aligncenter"><a href="/wp-content/uploads/2021/08/rte-2.png"><img loading="lazy" decoding="async" class="size-full wp-image-16410" src="/wp-content/uploads/2021/08/rte-2.png" alt="Deuxième partie du checklist, remplie pour le projet de RTÉ" width="1502" height="1129" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2.png 1502w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-300x225.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-768x577.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/08/rte-2-1024x770.png 1024w" sizes="auto, (max-width: 1502px) 100vw, 1502px" /></a><figcaption id="caption-attachment-16410" class="wp-caption-text">Deuxième partie de la checklist, remplie pour le projet de RTÉ</figcaption></figure></p>
<h1>En conclusion</h1>
<div>
<p dir="ltr">Le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a> est conçu pour être utilisé dans un contexte collaboratif, par exemple un workshop. Il est nécessaire qu’il y ait au moins une personne (p. ex., le modérateur) qui maitrise le sujet des graphes de connaissances et que cette personne remplisse le Smals KG Checklist pendant les discussions.</p>
<p dir="ltr"><span style="font-size: revert; color: initial;">Une fois complété (voir affiné au fil du temps) et les trois conditions remplies, le <a href="/wp-content/uploads/2021/06/smals-kg-checklist.pdf" target="_blank" rel="noopener"><strong>Smals KG Checklist</strong></a> contient une description d’un projet de graphe de connaissances à haut niveau (avec le scope, les attentes, les applications, …). Cette checklist devient donc un document précieux pour les décisions GO/NO-GO, par exemple dans les phases de début des méthodologies Prince2.</span></p>
</div>
<hr />
<p><em>Cet article de blog est une contribution individuelle de Christophe Debruyne, spécialisé en knowledge graph 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>De AI als auteur: een blik op Natural Language Generation</title>
		<link>https://www.smalsresearch.be/de-ai-als-auteur/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Tue, 29 Jun 2021 10:14:42 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[computational creativity]]></category>
		<category><![CDATA[Natural Language Processing]]></category>
		<category><![CDATA[NLG]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Productivity]]></category>
		<guid isPermaLink="false">/?p=16259</guid>

					<description><![CDATA[In deze blogpost kijken we naar twee categorieën van NLG systemen. De eerste moet het hebben van templates en grammaticale regels, en geeft een strikt deterministische output. De tweede is gebaseerd op machine learning met een scheut randomness, en benadert zo meer wat we "creatief schrijven" zouden kunnen noemen.]]></description>
										<content:encoded><![CDATA[
<p><em>Het zijn twee korte verhalen die een hele andere kijk geven op hoe technologie de toekomst kan veranderen. De eerste is er op gericht om mensen van een nieuwe techniek te helpen en om nieuwe ideeën te ontwikkelen. De tweede, die wordt gekenmerkt door meer inzicht in wat de toekomstige mogelijkheden zullen zijn en ook wat de nadelen en valkuilen zijn.</em></p>



<p>Bovenstaand paragraafje werd geschreven door een <a href="https://gpt2.ml6.eu/nl">GPT-2 taalmodel dat in het Nederlands werd getraind</a> door de Gentse startup ML6. Volgens hun taalmodel is dit een plausibele aanvulling op de titel van dit stuk. En het mag gezegd: qua stijl, woordkeuze en coherentie tussen opeenvolgende zinnen is dit zeker niet slecht. Of het ook inhoudelijk consistent en betekenisvol is, is nog iets anders: de aandachtige lezer besluipt toch nog een gevoel van &#8220;woordenbrij&#8221;, al is het maar omdat een echt correcte tekst zou verwijzen naar de verhalen als &#8220;<em>Het</em> eerste&#8221; en &#8220;<em>Het</em> tweede&#8221;.</p>



<p>Dit geeft wel een idee van waar we vandaag staan qua Natural Language Generation (NLG) in het Nederlands. De agile <a href="https://blog.ml6.eu/dutch-gpt2-autoregressive-language-modelling-on-a-budget-cff3942dd020">manier waarop ML6 dit heeft uitgewerkt</a> is trouwens een uitstekende illustratie van wat we <a href="/natural-language-processing-in-het-nederlands/">in een eerdere blogpost al concludeerden</a>: het tweaken van bestaande NLP systemen met je eigen datasets en voor je eigen doeleinden is het afgelopen jaar veel gemakkelijker geworden &#8211; al blijft beschikbaarheid van voldoende grote datasets wel een voorwaarde voor degelijke resultaten, en dat is moeilijker voor minder courante talen.</p>



<figure class="wp-block-image size-large is-resized"><a href="/wp-content/uploads/2021/06/Rita_2021-06-29-17_29_58-The-Sorting-Hat-Bot-@SortingBot-_-Twitter.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2021/06/Rita_2021-06-29-17_29_58-The-Sorting-Hat-Bot-@SortingBot-_-Twitter.png" alt="Creatieve toepassingen van tekstgeneratoren: het maken van rijmpjes in jambische tetrameter." class="wp-image-16312" width="662" height="261" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_29_58-The-Sorting-Hat-Bot-@SortingBot-_-Twitter.png 662w, https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_29_58-The-Sorting-Hat-Bot-@SortingBot-_-Twitter-300x118.png 300w" sizes="auto, (max-width: 662px) 100vw, 662px" /></a><figcaption>Creatieve toepassingen van tekstgeneratoren: deze twitterbot rijmt in jambische tetrameter [&#8220;Sorting Bot&#8221;, Darius Kazemi, 2015]</figcaption></figure>



<p>De geschiedenis van tekstgeneratoren gaat een heel eind terug. De <a href="https://plato.stanford.edu/entries/turing-test/">Turing Test</a> vereist al dat een computer een realistisch klinkend antwoord op een gestelde vraag moet kunnen samenstellen. De <a href="https://en.wikipedia.org/wiki/ELIZA">eerste chatbots</a> waren, ondanks hun eenvoud, opvallend goed in staat om een conversatie te simuleren. Recenter zagen verschillende generatoren voor langere teksten gaande van <a href="https://pdos.csail.mit.edu/archive/scigen/">academische papers</a> tot <a href="https://sebpearce.com/bullshit/">new-age bullshit</a> het licht. Op basis van de laatste evoluties in <a href="https://en.wikipedia.org/wiki/Deep_learning#Natural_language_processing">deep learning voor Natural Language Processing</a>, is het aansturen van je eigen <a href="https://play.aidungeon.io/main/home">adventure game</a> slechts een van de vele <a href="https://github.com/elyase/awesome-gpt3">creatieve toepassingen</a>. Met wat goede wil is ook <a href="https://en.wikipedia.org/wiki/Machine_translation">automatische vertaling</a> een vorm van NLG &#8211; we genereren immers een equivalent van de oorspronkelijke tekst, maar dan in een andere taal. En als we code ook als tekst beschouwen, valt het generatieve luik van  <a href="https://www.gartner.com/reviews/market/enterprise-low-code-application-platform">Low Code Application Platforms</a> er ook onder. </p>



<p>Hier kijken we naar twee categorieën van NLG systemen die fundamenteel verschillen van elkaar en op een heel andere manier tot resultaten komen. De eerste categorie moet het hebben van templates en grammaticale regels, en produceert een strikt deterministische output. De tweede categorie is gebaseerd op machine learning met een scheut randomness, en benadert zo meer wat we &#8220;creatief schrijven&#8221; zouden kunnen noemen. We beperken ons hier louter tot het genereren van tekst, waarbij je al weet wat je zou willen zeggen of welke richting je uit wil. Het <a href="https://en.wikipedia.org/wiki/Natural-language_understanding">begrijpen van vragen </a>of het <a href="https://en.wikipedia.org/wiki/Information_retrieval">opzoeken van informatie</a>, zoals bij <a href="/tag/chatbot/">chatbots</a> en <a href="https://en.wikipedia.org/wiki/Question_answering">question answering</a> systemen, kan aan het genereren van een tekst voorafgaan, maar zijn afzonderlijke concepten die buiten de scope van dit artikel vallen.</p>



<figure class="wp-block-image size-large is-style-default"><a href="/wp-content/uploads/2021/06/GPT3-failures-lacker.io-2021-06-30-08_28_57-Giving-GPT-3-a-Turing-Test.png"><img loading="lazy" decoding="async" width="366" height="308" src="/wp-content/uploads/2021/06/GPT3-failures-lacker.io-2021-06-30-08_28_57-Giving-GPT-3-a-Turing-Test.png" alt="Vraag en antwoord van GPT-3." class="wp-image-16318" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-failures-lacker.io-2021-06-30-08_28_57-Giving-GPT-3-a-Turing-Test.png 366w, https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-failures-lacker.io-2021-06-30-08_28_57-Giving-GPT-3-a-Turing-Test-300x252.png 300w" sizes="auto, (max-width: 366px) 100vw, 366px" /></a><figcaption>Er zijn spectaculaire GPT-3 demo&#8217;s, maar het systeem is nog steeds niet intelligent en genereert net zo gemakkelijk absurde output. [(c) Kevin Lacker, &#8220;Giving GPT-3 a Turing Test&#8221;, Jul 6, 2020]</figcaption></figure>



<h2 class="wp-block-heading">Grammaticale template engines</h2>



<p>De &#8220;klassieke&#8221; manier om teksten te genereren is met templates. De meesten onder ons gebruiken die wel eens in Word en Powerpoint, en wie evenementen organiseert heeft misschien ervaring met <a href="https://mailchimp.com/help/all-the-merge-tags-cheat-sheet/">MailChimp</a>. Een template is zoals een formulier: een deel is vooraf geschreven en ligt vast, de rest moet je nog aanvullen met eigen gegevens of inhoud. Die inhoud kan je zelf schrijven, of halen uit een database. Maar zo&#8217;n rechtstreekse copy-paste uit een database heeft beperkingen: dat wat je invoegt moet immers ook grammaticaal passen in de omliggende vaste tekst. Dat wordt moeilijker als we in detail willen gaan of enigszins willen variëren.</p>



<p>Retailers of grote online handelaars bieden soms duizenden producten aan op hun website, elke dag verschijnen en verdwijnen er dingen uit het assortiment. Voor elk product moet een wervend tekstje op de website komen zodra het aan de database wordt toegevoegd. Om niet telkens dezelfde tekst te doen verschijnen, wil je &#8220;<em>met onze blauwe suède schoenen</em>&#8221; al eens afwisselen met &#8220;<em>Deze schoen is blauw en gemaakt van suède,</em>&#8221; en hetzelfde moet ook werken voor &#8220;<em>rode lederen laarzen</em>&#8221; of &#8220;<em>grote Amerikaanse koelkasten</em>&#8220;. </p>



<p>Het doel van zulke <a href="https://nlpprogress.com/english/data_to_text_generation.html">data-to-text NLG</a> is om op basis van een database met mogelijk gevarieerde inhoud, toch correcte teksten te kunnen genereren. Daarvoor moeten voornaamwoorden, meervouden, verbuigingen en vervoegingen flexibel aangepast kunnen worden al naargelang het beschreven object en haar eigenschappen. In het Frans moet het <em>accord de l&#8217;adjectif</em> correct zijn, in het Duits de naamvallen, in het Nederlands de lidwoorden. Idealiter wordt er ook elegant met ontbrekende gegevens omgegaan, kunnen we de zinsvolgorde al eens veranderen, en tegelijk zorgen dat we ook niets onnodig herhalen.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator.png"><img loading="lazy" decoding="async" width="1024" height="317" src="/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator-1024x317.png" alt="Een scenario geschreven door een tekstgenerator" class="wp-image-16311" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator-1024x317.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator-300x93.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator-768x238.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/06/Rita_2021-06-29-17_25_41-Godard-Generator.png 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>In 1963 suggereerde Umberto Eco dat tegen 1993 iedereen zijn eigen filmscenario à la carte zou kunnen samenstellen. Hij voegde er een patroon voor Godard-achtige films bij, hier gerealiseerd met de RiTa NLG templating engine. [&#8220;Godard Film Generator&#8221;, Mark Sample, naar een idee uit &#8220;Diario Minimo&#8221;, Umberto Eco]</figcaption></figure>



<p>Echte NLG template engines maken gebruik van een woordenboek en een grammaticale <em>rule engine</em> om dat allemaal correct te kunnen genereren. Verschillende bedrijven zijn actief in deze markt, vaak voorzien zij grafische interfaces en integraties die het gebruiksgemak heel wat kunnen verhogen. Er zijn ook open-source oplossingen waaronder <a href="https://github.com/simplenlg/simplenlg">SimpleNLG</a>, <a href="https://rednoise.org/rita/">RiTa</a> en <a href="https://rosaenlg.org/rosaenlg/3.0.0/index.html">RosaeNLG</a>. Een NLG template in die laatste ziet eruit als volgt: </p>



<pre class="wp-block-preformatted">| #[+subjectVerbAdj('enquête', {verb: 'être', tense: 'PASSE_COMPOSE', aux: 'AVOIR'}, 'ouvert', {det:'INDEFINITE'})]
| concernant
| #[+value('réclamation', {det:'POSSESSIVE', adj: 'contesté', adjPos: 'AFTER', number:'P' })]</pre>



<p>Dit genereert: &#8220;<em>Une enquête a été ouverte concernant ses réclamations contestées</em>&#8220;. De meeste parameters in dit voorbeeld, zoals de woorden &#8216;<em>enquête</em>&#8216;, &#8216;<em>ouvert</em>&#8216;, &#8216;<em>réclamation</em>&#8216;, &#8216;<em>contesté</em>&#8216;, kunnen vlot vervangen worden door andere woorden (van dezelfde woordsoort) en dan zal deze template een even correcte zin produceren. Parameters zoals werkwoordstijd en type voornaamwoord zijn eveneens gemakkelijk aanpasbaar.</p>



<p>Het gebruik van NLG op basis van grammaticale template engines heeft een paar duidelijke voordelen:</p>



<ul class="wp-block-list"><li>De hoge parametriseerbaarheid maakt dat je met 1 goed ontwikkelde NLG template teksten kan genereren over relatief heterogene collecties van gegevens.</li><li>Je hebt volledige controle over de output, alle output is gegarandeerd conform het template.</li><li>Slim gebruik van synoniemen, alternatieve beschrijvingen, wisselende zinsvolgorde, gelinkte voornaamwoorden etc. kunnen veel variatie van de output opleveren. </li></ul>



<p>Het belangrijkste nadeel is dat zulke grammaticale templates erg snel erg complex worden. Als ook variatie en synoniemen ingebouwd moeten worden, is zo&#8217;n template al snel vele malen langer dan de tekst die ze genereert. NLG templates ontwikkelen die goed geparametriseerd en breed inzetbaar zijn, is tijdrovend secuur werk en vereist bovendien een uitstekende kennis van grammatica. Als een klassieke substitutie-oplossing waarin je slechts hoeft te copy-pasten al tot een voldoende kwalitatief resultaat leidt, dan bieden NLG templating engines weinig meerwaarde.</p>



<h2 class="wp-block-heading">Creatief schrijven met neurale netwerken</h2>



<p>Een volledig andere manier om teksten te genereren werd mogelijk dankzij machine learning en met name deep learning, waarmee op basis van enorme hoeveelheden bestaande tekst (denk ter grootte van een paar keer de  volledige wikipedia) een taalmodel getraind kan worden dat &#8220;weet&#8221; welke woorden in welke context het meest geschikt zijn. Zulke <a href="https://jalammar.github.io/how-gpt3-works-visualizations-animations/">taalmodellen &#8220;voorspellen&#8221;</a> het meest plausibele volgende, of ontbrekende, woord. Doe dat vele keren na elkaar en je genereert uiteindelijk ook een tekst.</p>



<p>Kleine taalmodelletjes zitten al een tijdje in onze smartphone, waar toetsenbord-apps suggesties geven voor het volgende woord in een tekstbericht. De taalmodellen van vandaag zijn vele malen groter en kunnen veel beter rekening houden met context, zeker sinds de opkomst van de zogenaamde <a href="https://jalammar.github.io/illustrated-transformer/">transformer architectuur</a>. Die zit achter verschillende taalmodellen die furore hebben gemaakt in de laatste paar jaren, zoals BERT, T5 en GPT. <a href="https://arxiv.org/abs/2005.14165">GPT-3</a> is dusdanig groot dat eenzelfde model inzetbaar is voor <a href="https://beta.openai.com/examples">verschillende taken</a>. De geselecteerde derde partijen die van OpenAI aan de slag mochten met het model maakten al <a href="https://www.youtube.com/watch?v=G6Z_S6hs29s">indrukwekkende</a> <a href="https://www.youtube.com/watch?v=cpWEXQkpBFQ">applicaties</a>. </p>



<p>Het kost heel wat <a href="https://www.theregister.com/2020/11/04/gpt3_carbon_footprint_estimate/">geld, hardware en tijd</a> om zelf zulke taalmodellen te trainen. Wie niet zulke financiële resources heeft, moet vertrekken van een bestaand model dat ter beschikking wordt gesteld door de grote spelers, en trachten dat te verfijnen. Daarmee ben je wel afhankelijk van de dataset die gebruikt werd om het originele model te trainen. Met die trainingsdata, die niet altijd openlijk beschikbaar is, zijn verschillende problemen. Ze zijn deels gescraped van allerlei internetfora, wat maakt dat er nogal wat <a href="https://ai.googleblog.com/2020/12/privacy-considerations-in-large.html">persoonlijke gegevens in terechtkomen die kunnen uitlekken</a>. Het overgenomen discours van minder appetijtelijke fora leidt dan weer tot sterke <a href="https://thenextweb.com/news/gpt-3-has-consistent-and-creative-anti-muslim-bias-study-finds">bias in de gegenereerde teksten</a>. </p>



<p></p>



<figure class="wp-block-image size-full is-resized"><a href="/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman.png" alt="NLG systemen schrijven tekst op basis van wat ze tijdens de trainingsfase hebben gezien." class="wp-image-16313" width="512" height="384" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/rita_bookshelfwriter_bibleapachespiderman.png 1024w, 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" sizes="auto, (max-width: 512px) 100vw, 512px" /></a><figcaption>NLG systemen schrijven tekst op basis van wat ze tijdens de trainingsfase hebben 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>Mede daarom wordt de toegang tot GPT-3 angstvallig bewaakt door OpenAI. Voorganger GPT-2 is wel vrij beschikbaar en de oefening om dat ook eens te trainen in het Nederlands werd al gedaan door onder andere de <a href="https://research.rug.nl/en/publications/as-good-as-new-how-to-successfully-recycle-english-gpt-2-to-make-">Universiteit van Groningen</a> [<a href="https://github.com/wietsedv/gpt2-recycle">code</a>] en de <a href="https://blog.ml6.eu/dutch-gpt2-autoregressive-language-modelling-on-a-budget-cff3942dd020">Gentse AI-startup ML6</a> [<a href="https://colab.research.google.com/drive/1Y31tjMkB8TqKKFlZ5OJ9fcMp3p8suvs4?usp=sharing">code</a> en <a href="https://gpt2.ml6.eu/">demo</a>]. Beiden maken andere keuzes voor de manier waarop ze trainen, en gebruiken bovendien verschillende datasets: het Groningse GroNLP model is getraind op voornamelijk wikipedia, e-books en nieuwswebsites, terwijl ML6 zich baseert op <a href="https://oscar-corpus.com/">OSCAR</a>, een subset van de <a href="https://commoncrawl.org/">CommonCrawl </a>webscraping dataset. Beide hebben hun eigen voor- en nadelen: tekst gegenereerd door het GroNLP model gaat al snel lijken op een stationsromannetje, terwijl de OSCAR dataset heel wat bankrekeningnummers, bestaande adresgegevens en zelfs erotiek bevat. </p>



<p>GPT taalmodellen werken als volgt: men geeft een aanzet (een <em>prompt</em>) en laat dan het model vrij aanvullen. Dat aanvullen kan je verder vrij weinig sturing geven, je draait bij wijze van spreken gewoon de woordenkraan open. Eventueel kan je een gebruiker laten kiezen uit verschillende mogelijkheden, of de output alsnog filteren (als je bepaald taalgebruik wil weren), maar dat moet je zelf toevoegen. </p>



<p>Een fictieve biografie van ondergetekende uit een parallel universum, gegenereerd door GroNLP, klinkt als volgt (tekst in vet gegeven als aanzet):</p>



<p><em><strong>Joachim Ganseman is informaticus en heeft gestudeerd aan de Universiteit van Antwerpen. </strong>Levensloop. Hij begon zijn opleiding in het Koninklijk Belgisch Staatsinstituut voor Landbouw (KOCO) te Brussel, waar hij ook een landbouwdiploma kreeg. Hij werkte daar onder andere als assistent-accountant bij Yves Van den Bucket uit 1988 tot 1997. In 1996 was hij adjunct-adjunct-directrice met wie hij contact zocht tussen verschillende Europese landen over hun beleid inzake voedselveiligheid.</em></p>



<p>Dezelfde aanzet bij ML6 genereert de volgende biografie &#8211; ik heb duidelijk een carrière in de agro-sector gemist:</p>



<p><em><strong>Joachim Ganseman is informaticus en heeft gestudeerd aan de Universiteit van Antwerpen.&nbsp;</strong> Als onderzoeker werkte hij veel in het bedrijf van de jonge kunstenaar en producent van het meest uiteenlopende werk: de tuin, het terras, de terras- en het terrasrestaurant. Tijdens zijn werkzaamheden werd hij de expert en de eerste specialist in het werk van Ganseman. Hij specialiseerde zich in de tuinontwerp. Zijn onderzoek naar tuinontwerp is gebaseerd op de vele verschillende tuinontwerpen en is te vinden op diverse sites zoals: websites, mobiele applicaties, apps en sites van partijen.</em></p>



<p>De repetitiviteit blijft moeilijk te controleren. Je wil dat de output bij hetzelfde thema blijft maar dat geeft een risico op in herhaling vallen, terwijl veel vrijheid dan weer riskeert dat de tekst plots een heel andere richting uitgaat. Deze Nederlandstalige GPT-2 modellen zijn ook nog relatief klein, de context van de aanzet is vaak na een drietal zinnen al vergeten en dan zie je soms rare sprongen in de thematiek gebeuren. </p>



<p>Uit de aanzet die je geeft zal het model bepaalde aannames afleiden over de stijl, taalgebruik en inhoud van wat moet volgen. Zo genereer je met hetzelfde model zowel deze serieus klinkende (inhoudelijk absurde) quasi-wettekst, als het daaropvolgende (oneetbare) quasi-recept:</p>



<ul class="wp-block-list"><li><em><strong>Artikel 478, eerste lid, Gerechtelijk wetboek bepaalt dat </strong>degene die bij of krachtens deze wet wordt vervolgd wegens een strafbaar feit in de eerste aanleg bij de aanvang van de terechtzitting is verschenen, onverwijld zal worden vervangen door een gewezen rechter-commissaris.</em></li><li><em><strong>2 eieren , 500g boter , 500g suiker , 100g bloem , 1 stokje vanille. Recept:  </strong>Voeg de kaneel, kaneel en vanille toe aan de mix, voeg nog een beetje vanille, voeg 1 theelepel vanille toe. Meng met een lepel de suiker en klop door tot hij zacht genoeg is om dit een eierdooistokje te maken. Voeg vervolgens de melk, kaneel en vanille toe en voeg dit nog een beetje bij het product. Klop alles goed door elkaar en bestrooi de mix erover.</em></li></ul>



<p>Via een goed doordachte prompt kunnen we het model dus heel verschillende output laten produceren. Voor echt gespecialiseerde taken zoals het genereren van een machinevertaling of programmeercode, zal het finetunen van het model op een speciaal daarvoor gemaakte dataset misschien wel nog robuustere resultaten geven, zoals bij <a href="https://huggingface.co/mrm8488/t5-base-finetuned-wikiSQL">deze omzetting van Engelse tekst naar SQL queries</a>.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem.png"><img loading="lazy" decoding="async" width="1024" height="822" src="/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem-1024x822.png" alt="Om GPT-3 in te zetten als codegenerator moet je geschikte voorbeelden geven als prompt." class="wp-image-16324" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem-1024x822.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem-300x241.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem-768x617.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/06/GPT3-prompt-codegenerator-sharifshameem.png 1360w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Om GPT-3 in te zetten als codegenerator moet je geschikte voorbeelden geven als prompt. [bron: Twitter, @sharifshameem, Jul 13, 2020]</figcaption></figure>



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



<p>Het gebruik van NLG templating engines is aangewezen wanneer er een duidelijke meerwaarde is ten opzichte van de klassieke substitutie-templates (copy-paste), en wanneer de gegenereerde teksten bedoeld zijn voor de buitenwereld. Toepassingen zijn onder andere:</p>



<ul class="wp-block-list"><li>Het maken van regelmatige tekstuele rapporten of notificaties over constant binnenstromende gegevens, zoals weerberichten, de financiële markten, de sportuitslagen, maar ook statusrapporten van IT systemen, sensorgegevens van IoT devices, etc.</li><li>Het aanmaken van sterk gepersonaliseerde teksten, over bvb. de inhoud van een winkelmandje, of van een persoonlijk dossier, hetgeen per gebruiker erg kan verschillen.</li><li>Het maken van gevarieerde teksten voor omvangrijke productdatabases bij grote retailers, deelplatformen etc.</li></ul>



<p>Het gebruik van deep learning taalmodellen voor het genereren van tekst is veel riskanter. Zeker als de training van die modellen niet volledig onder eigen controle is gebeurd, is een manuele validatie en correctie van de output altijd aangewezen. Je accepteert immers ook niet blind de suggesties van je smartphonetoetsenbord. Deze aanpak vindt dus vooral intern zijn nut, binnen de organisatie, op plaatsen waar creatief schrijven vandaag veel tijd opeist. We denken onder andere aan:</p>



<ul class="wp-block-list"><li>Assistentie bij het schrijven of als tool tegen writer&#8217;s block, door het suggereren van plausibele aanvullingen.</li><li>Het aanmaken van realistisch ogend maar toch fictief opleidingsmateriaal. Dit is nuttig wanneer het niet wenselijk zou zijn dat personen in opleiding echte dossiers inkijken, bvb. omwille van privacyredenen.</li><li>Het maken van examenvragen.</li><li>Het maken van (tekstuele) <a href="/synthetic-data/">synthetische datasets</a> &#8211; mits kwaliteitscontrole, filtering en validatie van de output.</li><li>In UX analyse, voor het verzinnen van willekeurige persona&#8217;s, fictieve biografieën en gebruiksscenario&#8217;s.</li></ul>



<p>De kwaliteit van de vandaag beschikbare Nederlandstalige generatieve modellen, blijft nog wel wat achter bij dat wat de media haalt in het Engels &#8211; wat ook <a href="https://www.standaard.be/cnt/dmf20210319_05008561">De Standaard</a> opmerkte toen zij aan het testen gingen. Om dat ten gronde te verbeteren zal ook werk gemaakt moeten worden van zorgvuldiger samengestelde Nederlandstalige trainingsdatasets.</p>



<p>Voor specifieke toepassingen zoals codegeneratie, verwachten we dat gespecialiseerde modellen relatief snel hun weg zouden kunnen vinden in de bestaande professionele IDEs. Microsoft heeft <a href="https://venturebeat.com/2021/05/25/microsoft-uses-gpt-3-to-add-ai-features-to-power-apps/">recent aangekondigd</a> een deel van de functionaliteit van GPT-3 in te bouwen in hun Power Apps low-code platform, en <a href="https://copilot.github.com/">Github lanceert met CoPilot</a> een &#8220;AI Pair Programmer&#8221; als plugin voor de Visual Studio Code editor. Ongetwijfeld zullen anderen volgen, en zo vinden we suggesties van krachtiger tekstgeneratoren misschien binnenkort al terug als plugin in de gangbare developer tools. </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>
	</channel>
</rss>
