<?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>NER &#8211; Smals Research</title>
	<atom:link href="https://www.smalsresearch.be/tag/ner/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.smalsresearch.be</link>
	<description></description>
	<lastBuildDate>Thu, 09 Apr 2026 12:23:30 +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>NER &#8211; Smals Research</title>
	<link>https://www.smalsresearch.be</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Starten met NLP in het Nederlands</title>
		<link>https://www.smalsresearch.be/starten-met-nlp-in-het-nederlands/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Thu, 01 Apr 2021 12:34:34 +0000</pubDate>
				<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[NER]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[Open Source Software]]></category>
		<guid isPermaLink="false">https://www.smalsresearch.be/starten-met-nlp-in-het-nederlands/</guid>

					<description><![CDATA[Slides van de webinar voor InfoSecurity op 31/03/2021 Natural Language processing technologie&#235;n gebruiken we ondertussen dagelijks, in de vorm van chatbots en virtuele assistenten &#8211; denk Siri of Google Assistant &#8211; of in tools gaande van autocomplete tot automatische vertaling. In het Engels werkt dat vrij goed; Nederlands blijft moeilijker maar er is toch ook [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>Slides van de webinar voor InfoSecurity op 31/03/2021</strong></p><p>Natural Language processing technologie&euml;n gebruiken we ondertussen dagelijks, in de vorm van chatbots en virtuele assistenten &ndash; denk Siri of Google Assistant &ndash; of in tools gaande van autocomplete tot automatische vertaling. In het Engels werkt dat vrij goed; Nederlands blijft moeilijker maar er is toch ook snelle vooruitgang. Hoe kan je nu zelf een systeem maken voor herkenning van entiteiten in Nederlandstalige documenten? Met een focus op tekst (spraak is voor een andere keer), werken we een praktisch voorbeeld uit waarvoor we gebruik maken van openlijk beschikbare documenten en open source componenten.</p><p>Les technologies de traitement du langage naturel sont d&eacute;sormais utilis&eacute;es quotidiennement, sous la forme de chatbots et d&#8217;assistants virtuels &#8211; pensez &agrave; Siri ou Google Assistant &#8211; ou dans des outils allant de l&#8217;autocompl&eacute;tion &agrave; la traduction automatique. En anglais, cela fonctionne assez bien; le n&eacute;erlandais reste plus difficile mais les progr&egrave;s sont rapides. Alors comment faire un syst&egrave;me de reconnaissance des entit&eacute;s dans les documents n&eacute;erlandais&nbsp;? En nous concentrant sur le texte (la parole est pour une autre fois), nous &eacute;laborons un exemple pratique en utilisant des documents librement disponibles et des composants open source.</p>







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


            <div data-wp-interactive="core/file" class="wp-block-file">
                <object data-wp-bind--hidden="!state.hasPdfPreview" hidden class="wp-block-file__embed" data="https://www.smalsresearch.be/wp-content/uploads/2021/04/DutchNLP-infosecurity.pdf" type="application/pdf" style="width:100%;height:600px" aria-label="Embed of DutchNLP-infosecurity."></object>
                <a id="wp-block-file--media-b82c4d71-54a6-45a3-8b93-0392448b9d0c" href="https://www.smalsresearch.be/wp-content/uploads/2021/04/DutchNLP-infosecurity.pdf">DutchNLP-infosecurity</a><a href="https://www.smalsresearch.be/wp-content/uploads/2021/04/DutchNLP-infosecurity.pdf" class="wp-block-file__button wp-element-button" download aria-describedby="wp-block-file--media-b82c4d71-54a6-45a3-8b93-0392448b9d0c">Download</a>
                </div>
            ]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Natural Language Processing in het Nederlands</title>
		<link>https://www.smalsresearch.be/natural-language-processing-in-het-nederlands/</link>
		
		<dc:creator><![CDATA[Joachim Ganseman]]></dc:creator>
		<pubDate>Wed, 31 Mar 2021 09:23:39 +0000</pubDate>
				<category><![CDATA[[NL]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Artificial intelligence]]></category>
		<category><![CDATA[automatic translation]]></category>
		<category><![CDATA[big data]]></category>
		<category><![CDATA[Natural Language Processing]]></category>
		<category><![CDATA[NER]]></category>
		<category><![CDATA[NLP]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Parsing]]></category>
		<guid isPermaLink="false">/?p=15508</guid>

					<description><![CDATA[We lezen dan wel met de regelmaat van de klok over spectaculaire vooruitgang met NLP in het Engels - herinner u GPT-3 - maar over andere, minder courant gesproken talen, horen we weinig. Iemand die NLP probeert toe te passen op het Nederlands, kan dan ook nog een paar obstakels tegenkomen. ]]></description>
										<content:encoded><![CDATA[
<p>We publiceerden eerder al verschillende artikels over de computationele verwerking van taal, in het vakjargon bekend als Natural Language Processing (NLP):</p>



<ul class="wp-block-list"><li><a href="/facetten-van-natural-language-processing-deel-1/">Facetten van Natural Language Processing: deel 1</a> &amp; <a href="/facetten-van-natural-language-processing-deel-2/">deel 2</a></li><li><a href="/nlp-modeles-de-langue/">NLP &amp; Modèles de langue (FR)</a></li><li><a href="/named-entity-recognition-une-application-du-nlp-utile/">Named Entity Recognition: une application pratique du NLP (FR)</a> </li><li><a href="/apis-voor-computervertaling-de-praktijk/">API&#8217;s voor computervertaling</a> &amp; <a href="/apis-voor-computervertaling-de-praktijk/">in de praktijk</a></li></ul>



<p>NLP is een belangrijke component in toepassingen zoals <a href="/chatbot-studentwork-lessons-learned/">chatbots</a> en <a href="/uitdagingen-bij-voicebots/">voicebots</a>. Het kan ook ingezet worden om data te annoteren en bv. een <a href="/les-graphes-de-connaissance-quelques-applications/">knowledge graph</a> te verrijken, wat dan weer beter <a href="/graph-db-vs-rdbms/">kennisbeheer</a> en <a href="/sept-bonnes-raisons-dutiliser-une-graph-database/">-ontsluiting</a> mogelijk maakt.</p>



<p>Het is niet zo moeilijk voor iemand met wat programmeervaardigheden om met NLP te experimenteren. Veel code is open source, en er zijn talloze <a href="https://www.fast.ai/2019/07/08/fastai-nlp/">goede tutorials</a> te vinden, compleet met educatieve <em>notebooks</em> in Jupyter of Google Colab en duidelijke instructievideo&#8217;s. Maar deze beperken zich veelal tot het Engels, of heel af en toe een andere grote wereldtaal. </p>



<p>We lezen dan wel met de regelmaat van de klok over spectaculaire vooruitgang met NLP in het Engels &#8211; herinner u <a href="https://en.wikipedia.org/wiki/GPT-3">GPT-3</a> &#8211; maar over minder courant gesproken talen horen we weinig. Iemand die NLP probeert toe te passen op het Nederlands, komt dan ook plots een paar obstakels tegen. Ook <a href="https://www.standaard.be/cnt/dmf20210319_05008561">De Standaard</a> merkte dit recent op, en wist daarbij te vertellen dat de trainingsdata van GPT-3 voor 92% uit Engelse tekst bestaat en voor 0,35% uit Nederlandse &#8211; toch een stevige grootteorde verschil.</p>



<p>(Noot: de evoluties in het domein van NLP en de beschikbare tools gaan snel; dit artikel is dus accuraat op het moment van schrijven maar de situatie kan volgend jaar al helemaal anders zijn.)</p>



<p><a href="https://spacy.io/">SpaCy</a> is een bekende open-source Python library voor NLP. Ze is gebruiksvriendelijk en abstraheert veel van de onderliggende complexiteit van NLP of de achterliggende Machine Learning frameworks zoals PyTorch of Tensorflow weg. Sinds versie 3.0 ondersteunen ze ook de <em><a href="https://huggingface.co/transformers/index.html">transformer</a></em> deep learning architecturen, die aan de basis liggen van de meest succesvolle recente taalmodellen. We gebruiken deze versie van SpaCy voor al wat volgt. Alternatieven voor SpaCy zijn o.a. <a href="https://stanfordnlp.github.io/stanza/">Stanza </a>en <a href="https://github.com/flairNLP/flair">Flair</a>.</p>



<h2 class="wp-block-heading">Entiteiten herkennen</h2>



<p>Een ingebouwde functionaliteit van hun taalmodellen is Named Entity Recognition (NER), het herkennen van entiteiten in een tekst. In de <a href="https://spacy.io/models/en">documentatie</a> bij elk taalmodel zien we in het <em>label scheme</em> o.a. alle categorieën die het model kan herkennen: DATE, TIME, PERCENT etc., maar ook PERSON (eigennamen), PRODUCT of WORK_OF_ART. Het is gemakkelijk dit zelf uit te proberen op een klein stukje tekst, geïnspireerd op <a href="https://course.spacy.io/en/chapter1">hun tutorial</a>:</p>



<pre class="wp-block-preformatted">import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple buys a French company for $1 billion.")
displacy.render(doc, style="ent")</pre>



<figure class="wp-block-image size-large is-style-default"><a href="/wp-content/uploads/2021/03/en_core_web_sm_demo_2.png"><img decoding="async" width="474" height="34" src="/wp-content/uploads/2021/03/en_core_web_sm_demo_2.png" alt="" class="wp-image-15660" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/en_core_web_sm_demo_2.png 474w, https://www.smalsresearch.be/wp-content/uploads/2021/03/en_core_web_sm_demo_2-300x22.png 300w" sizes="(max-width: 474px) 100vw, 474px" /></a></figure>



<p>We merken dat <em>Apple</em> wordt herkend als ORG (organisatie), <em>French</em> als NORP (nationaliteit of religieuze/politieke groep) en <em>$1 billion</em> als een geldhoeveelheid. Proberen we echter hetzelfde in het Nederlands:</p>



<pre class="wp-block-preformatted">import spacy
from spacy import displacy
nlp = spacy.load("nl_core_news_sm")
doc = nlp("Apple koopt een Frans bedrijf voor $1 miljard.")
displacy.render(doc, style="ent")</pre>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/03/nl_core_news_sm_demo_2.png"><img decoding="async" width="522" height="35" src="/wp-content/uploads/2021/03/nl_core_news_sm_demo_2.png" alt="" class="wp-image-15661" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_demo_2.png 522w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_demo_2-300x20.png 300w" sizes="(max-width: 522px) 100vw, 522px" /></a></figure>



<p>In het Nederlands wordt <em>Apple</em> plots aanzien als persoon en wordt <em>1</em> aangeduid als simpel telwoord! Eerlijkheid gebiedt ons te zeggen dat de grote versie van het taalmodel dit wel correct annoteert, op het dollarteken na. De kleine taalmodellen die we hier hebben gebruikt illustreren echter wel een belangrijk punt: er is geen garantie dat wat werkt in de ene taal, daarom ook even goed zou werken in een andere taal, ook al lijkt het dat de taalmodellen slechts verschillen qua taalcode. Het repliceren van Engelstalige NLP-succesverhalen in een andere taal, is dus geen kwestie van even snel copy-pasten.</p>



<h2 class="wp-block-heading">Waarom dat verschil?</h2>



<p>Een blik op de onderliggende automatische grammaticale analyse maakt een en ander duidelijk:</p>



<pre class="wp-block-preformatted">displacy.render(list(doc.sents), style="dep")</pre>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/03/en_core_web_sm_dependencies.png"><img fetchpriority="high" decoding="async" width="975" height="265" src="/wp-content/uploads/2021/03/en_core_web_sm_dependencies.png" alt="" class="wp-image-15664" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/en_core_web_sm_dependencies.png 975w, https://www.smalsresearch.be/wp-content/uploads/2021/03/en_core_web_sm_dependencies-300x82.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/en_core_web_sm_dependencies-768x209.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></a></figure>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/03/nl_core_news_sm_dependencies.png"><img loading="lazy" decoding="async" width="975" height="262" src="/wp-content/uploads/2021/03/nl_core_news_sm_dependencies.png" alt="" class="wp-image-15665" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_dependencies.png 975w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_dependencies-300x81.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_dependencies-768x206.png 768w" sizes="auto, (max-width: 975px) 100vw, 975px" /></a></figure>



<p>De betekenis van alle afkortingen voor woordsoorten en -functies kan je terugvinden op de website van <a href="https://universaldependencies.org/">Universal Dependencies.</a> Wat blijkt:</p>



<ul class="wp-block-list"><li><em>billion</em> wordt aanzien als telwoord, <em>miljard</em> als zelfstandig naamwoord.</li><li><em>$</em> wordt in het Engels als symbool, in het Nederlands als naamwoord geannoteerd.</li><li>In het Engels is <em>&#8220;for $1 billion&#8221;</em> afhankelijk van het werkwoord (een bijwoordelijke bepaling), in het Nederlands wordt <em>&#8220;voor $1 miljard&#8221;</em> als afhankelijk van het naamwoord <em>bedrijf</em> beschouwd.</li><li><em>Apple</em> wordt in beide talen correct aangeduid als eigennaam en onderwerp, dus de grammaticale analyse alleen is niet genoeg om het onderscheid te verklaren.</li></ul>



<p><a href="https://spacy.io/">SpaCy</a>&#8216;s taalmodel voor het Nederlands ziet de zaken dus anders dan dat voor het Engels. De <a href="https://spacy.io/models/nl">documentatie</a> ervan laat zien dat de componenten <em>tagger</em> en <em>parser</em>, die de zinsontleding voor hun rekening nemen, ook heel anders georganiseerd zijn in het Nederlands en veel complexer (of fijnmaziger?) lijken dan die voor het Engels. Ook lezen we elders dat de dataset waarop de grammaticale analyse is getraind, anders is: <a href="https://catalog.ldc.upenn.edu/LDC2013T19">OntoNotes 5</a> voor het Engels, en <a href="https://github.com/UniversalDependencies/UD_Dutch-LassySmall">LassySmall 2.5</a> en <a href="https://github.com/UniversalDependencies/UD_Dutch-Alpino">Alpino</a> uit <a href="https://universaldependencies.org/">Universal Dependencies</a> voor het Nederlands.</p>



<h2 class="wp-block-heading">Lassy, Alpino en OntoNotes</h2>



<p><a href="https://www.let.rug.nl/~vannoord/Lassy/">Lassy</a> heeft haar oorsprong in de academische wereld van de computationeel taalkundigen. Er bestaat een kleine versie en een grote versie: LassyKlein met ongeveer 1 miljoen woorden, is manueel geverifieerd; LassyGroot met ongeveer 700 miljoen woorden, is automatisch geannoteerd met het programma <a href="https://www.let.rug.nl/~vannoord/alp/Alpino/">Alpino</a> . Ze gebruikten een eigen XML-annotatieformaat geïnspireerd op het eerdere project <a href="https://lands.let.ru.nl/cgn/">Corpus Gesproken Nederlands</a>. Dit formaat verschilt nogal van het <a href="https://www.conll.org/">CoNLL</a> formaat dat vaak gebruikt wordt voor opslag van dit soort gegevens, en dat de standaard is voor de <a href="https://universaldependencies.org/">Universal Dependencies</a> datasets. Na omzetting met een <a href="https://rug-compling.github.io/">convertor</a> kon wel een subset van LassyKlein daarin opgenomen worden als <a href="https://universaldependencies.org/">UD_Dutch-LassySmall</a>. Men is daarbij wel heel selectief geweest: enkel een subset uit Wikipedia is bewaard, met daarin <strong>7388</strong> zinnen van in totaal 98163 woorden. </p>



<p>Een andere dataset gebaseerd op voornamelijk nieuwsartikels is ook beschikbaar: <a href="https://github.com/UniversalDependencies/UD_Dutch-Alpino">UD_Dutch-Alpino</a>, met daarin <strong>13578</strong> zinnen met 208601 woorden. Wie enkele van de zinnen leest, merkt dat ze vooral verzameld zijn in de vroege jaren 2000. Onderwerpen die ter sprake komen zijn bijvoorbeeld Brussel-Halle-Vilvoorde, Justine Henin-Hardenne en Wim Kok als premier van Nederland. </p>



<p><a href="https://paperswithcode.com/dataset/ontonotes-5-0">OntoNotes 5.0</a> is het Engelstalige bronmateriaal voor SpaCy&#8217;s grammaticale analyse. Het bevat naar schatting 2 miljoen woorden in <strong>+/- 300000</strong> zinnen uit gevarieerde bronnen: het merendeel uit nieuwsartikels waarvan een deel ook uit vertaalde internationale bronnen, en dan nog een klein deel uit blogs en stukken uit de Bijbel. De dataset kan gezien worden als een opvolger van de <a href="https://catalog.ldc.upenn.edu/docs/LDC95T7/cl93.html">Penn Treebank</a> , een van de eerste grote datasets voor automatische syntactische analyse. Ook OntoNotes is niet in het CoNLL formaat en vereist dus een <a href="https://conll.cemantix.org/2012/data.html">omzetting</a>.</p>



<p>Om een model te kunnen trainen, moet SpaCy de CoNLL-data nog <a href="https://spacy.io/api/cli#convert">converteren</a> in haar eigen interne formaat.</p>



<h2 class="wp-block-heading">Nederlandstalige datasets: werk aan de winkel</h2>



<p>Het valt op dat er zowat 10 keer minder trainingsdata beschikbaar is voor het Nederlands dan voor het Engels. Daarbij komt ook  het uitgebreidere label schema in de woordsoort-tagger, dus minder voorbeelden per label, en een beperkte variatie in het bronmateriaal &#8211; enkel oude nieuws- en Wikipedia-artikelen. Dan is het geen verrassing dat zelfs het <a href="https://spacy.io/models/nl#nl_core_news_lg">beste (ingebouwde) Nederlandse taalmodel</a> in SpaCy qua accuraatheid in detectie van woordsoort (<em>part-of-speech</em> <em>tags</em>, <strong>95%</strong>), zinsstructuur (<em>labeled dependencies</em>, <strong>82%</strong>) en entiteiten (F-score <strong>77%</strong>) achterblijft op hun <a href="https://spacy.io/models/en#en_core_web_sm">slechtste Engelse taalmodel</a> (resp. <strong>97%, 90%, 84%</strong>) &#8211; laat staan dat het in de buurt komt van het <a href="https://spacy.io/models/en#en_core_web_trf">beste Engelse taalmodel</a> (resp. <strong>98%, 94%, 90%</strong>). Dat laatste is weliswaar een gloednieuw <em>transformer</em>-model, en het valt te verwachten dat we dit type binnenkort ook voor het Nederlands zullen mogen verwachten in SpaCy, gezien er al enkele beschikbaar zijn in de <a href="https://huggingface.co/models?filter=nl">transformers model hub</a>.</p>



<p>Wil men de achterstand echt structureel inhalen, dan zal men op een bepaald moment toch werk moeten maken van grotere Nederlandstalige datasets voor het trainen van taalmodellen. Dat vergt veel middelen en tijd, maar misschien kan een gedeeltelijke automatisering met behulp van wat vandaag al bestaat qua automatische annotatie, aangevuld met crowdsourcing voor bv. de validatie, de zaken wat versnellen. In de zijlijn: voor het trainen van <a href="https://en.wikipedia.org/wiki/Word_embedding">word embeddings / vectors</a> hoeft de tekst niet geannoteerd te zijn. Daarvoor bestaan dus, ook in het Nederlands, wel erg grote datasets, o.a. Wikipedia dumps of <a href="https://commoncrawl.org/">Common Crawl</a>. Ook gebeurt er onderzoek naar <a href="https://research.aimultiple.com/few-shot-learning/">few-shot learning</a>, waarvoor slechts enkele geannoteerde voorbeelden voldoende zouden zijn, maar er is nog volop debat over <a href="https://gpt3experiments.substack.com/p/is-gpt-3-really-doing-few-shot-learning">wanneer en onder welke voorwaarden dat wel of niet kan werken</a>. </p>



<p>Ondertussen zijn de bestaande taalmodellen zeker niet nutteloos: we kunnen ze gemakkelijk tweaken voor onze eigen toepassingen.</p>



<h2 class="wp-block-heading">Een taalmodel verbeteren</h2>



<p>Wat kunnen we vandaag al doen om fouten te reduceren? Gelukkig is SpaCy als library modulair opgezet en iedere component van de tekstverwerkingspijplijn is naar believen aan te passen. We zagen dat het Engelse <em>billion</em> wel als getal werd gezien, maar het Nederlandse <em>miljard</em> niet.</p>



<p>Laat ons eerst kijken naar de <a href="https://spacy.io/usage/linguistic-features#language-data">taalspecifieke uitzonderingen</a> die SpaCy definieert. Daarin zien we dat in de <a href="https://github.com/explosion/spaCy/blob/master/spacy/lang/nl/lex_attrs.py">lexicale attributen</a> het woord miljard wel degelijk als getal wordt aangemerkt, <a href="https://github.com/explosion/spaCy/blob/master/spacy/lang/en/lex_attrs.py">net zoals in het Engels</a>. Alleen samengestelde getallen (&#8220;drieëntwintig&#8221;) worden op moment van schrijven nog niet zo geannoteerd in het Nederlands &#8211; hiermee hebben we al direct een eerste plek gevonden waar ruimte voor verbetering is qua analyse van het Nederlands in SpaCy! </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/03/spacy-pipeline.png"><img loading="lazy" decoding="async" width="1024" height="173" src="/wp-content/uploads/2021/03/spacy-pipeline-1024x173.png" alt="The SpaCy NLP pipeline." class="wp-image-15730" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/spacy-pipeline-1024x173.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2021/03/spacy-pipeline-300x51.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/spacy-pipeline-768x130.png 768w, https://www.smalsresearch.be/wp-content/uploads/2021/03/spacy-pipeline.png 1155w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>De SpaCy NLP pipeline. De Morphologizer is een Tagger component.</figcaption></figure>



<p>De woordsoorten worden toegekend door een <em>Morphologizer </em>in de pijplijn, dit is een component die getraind is en waarvan de uitkomst dus afhangt van de trainingsdata. En inderdaad , als we de inhoud van <a href="https://github.com/UniversalDependencies/UD_Dutch-LassySmall">UD_Dutch-LassySmall </a>en <a href="https://github.com/UniversalDependencies/UD_Dutch-Alpino">UD_Dutch-Alpino</a> erop nalezen, zijn woorden zoals <em>miljoen</em> en <em>miljard</em> er enkele keren in terug te vinden, consistent geannoteerd als NOUN.</p>



<p>Je kan desgewenst een eigen versie van de trainingsdata maken waarin dat anders is en proberen een geheel nieuwe Morphologizer component te trainen. Voor een kleine aanpassing zoals dit is een elegant alternatief ook om een op maat gemaakte component toe te voegen aan de pijplijn, die de automatische annotatie door zo&#8217;n standaard taalmodel aanpast of aanvult waar nodig of gewenst. In dit geval kunnen we een zelfgeschreven <em>AttributeRuler </em>invoegen achter de Morphologizer, die de woordsoort aanpast van  NOUN naar NUM voor NOUNs waarbij &#8220;<em>token.like_num == True</em>&#8220;:</p>



<pre class="wp-block-preformatted">ruler = nlp.add_pipe("attribute_ruler", name="fix_num", after="morphologizer")
detect = [[{"POS": "NOUN", "LIKE_NUM": True}]]  
assign = {"POS": "NUM"}  
ruler.add(patterns=detect, attrs=assign)</pre>



<figure class="wp-block-image size-large is-resized"><a href="/wp-content/uploads/2021/03/nl_core_news_sm_numfixed.png"><img loading="lazy" decoding="async" src="/wp-content/uploads/2021/03/nl_core_news_sm_numfixed.png" alt="" class="wp-image-15686" width="580" height="38" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_numfixed.png 856w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_numfixed-300x20.png 300w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_numfixed-768x51.png 768w" sizes="auto, (max-width: 580px) 100vw, 580px" /></a></figure>



<h2 class="wp-block-heading">NER updaten</h2>



<p>De Named Entity Recognition component, die het nodig vond om <em>Apple</em> een persoon te noemen, is ook een aparte component in de pijplijn die we kunnen aan- of uitschakelen, bijtrainen of desgewenst in zijn geheel vervangen. Het is niet mogelijk om een lijstje van patronen te maken waarmee alle mogelijke bedrijfsnamen herkend zouden kunnen worden, dus trainen op voorbeelden is hier onvermijdelijk. De NER-component kan hier blijkbaar enkele voorbeeldzinnen over bedrijfsacquisities gebruiken, om te leren dat niet enkel personen iets kunnen kopen.</p>



<p>SpaCy heeft sinds kort een hele <a href="https://spacy.io/usage/projects">projectarchitectuur</a> uitgebracht die het beheer en het uitvoeren van trainingsprojecten voor taalmodellen sterk vereenvoudigt. We hoeven maar een van de <a href="https://github.com/explosion/projects">templateprojecten</a> te klonen en aan te passen aan onze noden:</p>



<pre class="wp-block-preformatted">python -m spacy project clone pipelines/ner_demo_update</pre>



<p>Dit commando downloadt een kant-en-klaar project dat out-of-the-box werkt. In het bestand <em>project.yml</em> maken we de nodige aanpassingen aan de configuratie: de taal en het basismodel wijzigen naar het Nederlands, eventueel kan ook de GPU ingeschakeld worden, etc. Het <em>project.yml</em> bestand werkt zoals een <a href="https://en.wikipedia.org/wiki/Makefile">Makefile</a>: het definieert verschillende commando&#8217;s voor de voorbereiding van het data, het samenstellen van de trainingsconfiguratie, het uitvoeren van de training, het exporteren en packagen van het resulterende model en het schoonmaken van de bestandsstructuur. Je kan daar zelf naar believen onderdelen aan toevoegen. Er zijn ook mogelijkheden om het resultaat te visualiseren of via een API te publiceren, middels <a href="https://github.com/explosion/projects/tree/v3/integrations">integraties</a> met libraries zoals <a href="https://streamlit.io/">streamlit</a>, <a href="https://fastapi.tiangolo.com/">FastAPI</a>, <a href="https://wandb.ai/site">weights&amp;biases</a> en <a href="https://ray.io/">ray</a>.</p>



<p>Dan moeten we enkel nog trainingsdata in de map <em>assets</em>  zetten. Er zijn allerlei tools beschikbaar om tekst of andere data te annoteren: die van <a href="https://universaldependencies.org/tools.html">UD</a> zelf, <a href="https://labelbox.com/">LabelBox</a>, <a href="https://doccano.github.io/doccano/">Doccano</a>, &#8230; maar buiten SpaCy&#8217;s eigen <a href="https://prodi.gy/">Prodigy</a> bieden weinigen directe ondersteuning voor SpaCy. Het kan nog nodig zijn om een eigen script te maken om data te converteren naar een ondersteund formaat, en dat is met een extra lijntje code in <em>project.yml</em> snel ingevoegd. Gelukkig is het formaat gebruikt in het demoproject relatief eenvoudig en kunnen we snel manueel een JSON-file schrijven. We nemen bijvoorbeeld enkele titels van recente artikels op <a href="https://tweakers.net/">Tweakers.net</a>:</p>



<pre class="wp-block-preformatted">[
["OnePlus 9 Pro met nieuwe Sony-sensor verschijnt eind maart voor 899 euro.", {"entities":[[0,7,"ORG"],[25,29,"ORG"],[64,72,"MONEY"]]}],
["Gerucht: Discord voert gesprekken met Microsoft over mogelijke overname.",{"entities":[[9,16,"ORG"],[38,47,"ORG"]]}],
...
]</pre>



<p>Om te illustreren dat de context bepalend is om een woord als een bepaalde entiteit te markeren, vermeldt geen enkele van de voorbeeldzinnen die we gebruikten <em>Apple</em>. Eens alle onderdelen van het project zijn gedefinieerd, is de trainingsupdate met één commando uit te voeren en het resultaat al even snel te visualiseren: </p>



<pre class="wp-block-preformatted">spacy project run all
spacy project run visualize-model</pre>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2021/03/nl_core_news_sm_retrained.png"><img loading="lazy" decoding="async" width="620" height="85" src="/wp-content/uploads/2021/03/nl_core_news_sm_retrained.png" alt="" class="wp-image-15689" srcset="https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_retrained.png 620w, https://www.smalsresearch.be/wp-content/uploads/2021/03/nl_core_news_sm_retrained-300x41.png 300w" sizes="auto, (max-width: 620px) 100vw, 620px" /></a></figure>



<p>Dit geeft dus een gemengd beeld. Het goede nieuws is dat <em>Apple</em> nu wel wordt herkend als een bedrijf. Het systeem lijkt ook extra aandacht te hebben voor cijfers gevolgd door woorden, die in commerciële context wel eens een geldbedrag zouden kunnen zijn. Maar plots worden ook mensen en nationaliteiten aanzien als organisaties &#8211; en dat was vroeger niet zo. Wat is hier gebeurd? </p>



<p>Het fenomeen staat bekend als <a href="https://explosion.ai/blog/pseudo-rehearsal-catastrophic-forgetting">Catastrophic Forgetting</a>: in de ijver om de herkenning van een bepaalde categorie van entiteiten te verfijnen, zijn de andere entiteiten in het model bij het bijtrainen veel te ver naar de achtergrond gedrukt. De standaard oplossing hiervoor is om er voor te zorgen dat genoeg voorbeelden zijn toegevoegd in de trainingsdata die ook nog over al die andere entiteiten gaan, zodat je bijtraint met een gezonde mix aan voorbeelden die alle gevraagde entiteiten bevat. Het blijft dus belangrijk dat trainingsdata, ook als het enkel om een update gaat, goed gebalanceerd blijft.</p>



<h2 class="wp-block-heading">Custom NER</h2>



<p>Naast het updaten van een NER component kan je hem ook integraal vervangen door een andere die je zelf traint. Misschien vindt je de 17 entiteiten aangeboden in de huidige trainingsdata overkill, en heb je genoeg aan wat bijvoorbeeld het <a href="https://spacy.io/models/de">Duitse taalmodel</a> biedt: <em>Person</em>, <em>Organisation</em>, <em>Location </em>en <em>Miscellaneous</em>, zoals gedefinieerd in de <a href="https://metatext.io/datasets/wikiner">WikiNER</a> dataset, en die ook beschikbaar is voor het Nederlands en het Frans.</p>



<p>Dan doe je exact hetzelfde als voordien, maar, je haalt de mosterd bij het kant-en-klare <a href="https://github.com/explosion/projects/tree/v3/pipelines/ner_wikiner">SpaCy WikiNER project</a> dat je ook eenvoudig kan klonen:</p>



<pre class="wp-block-preformatted">python -m spacy project clone pipelines/ner_wikiner </pre>



<p>Dan is het een kwestie van de <a href="https://github.com/dice-group/FOX/tree/master/input/Wikiner">trainingsdata van WikiNER</a> te downloaden en te converteren naar het juiste inputformaat. Die datavoorbereiding is waarschijnlijk nog het meeste werk. Eens het model getraind en bewaard is, kan je de NER component ervan eenvoudig inpluggen in een andere analysepijplijn, op dezelfde manier als we al eerder een stukje hadden toegevoegd aan de Morphologizer.</p>



<p>Het wordt vooral interessant als we zelf nieuwe categorieën van entiteiten gaan definiëren. Er is immers geen reden om ons te beperken tot dat wat voorzien is in een of andere dataset. Voor <a href="https://paperswithcode.com/task/medical-named-entity-recognition">e-health toepassingen</a> kan het zeer nuttig zijn om ziektes, behandelingen en medicijnen in een tekst als dusdanig te markeren. In <a href="https://xuanwang91.github.io/BioNER/">biomedische tekst</a> kan het gaan over namen van genen of proteïnen. En in <a href="https://2019.semantics.cc/fine-grained-named-entity-recognition-legal-documents">juridische tekst </a> is de herkenning van wetsartikelen ongetwijfeld ook nuttig.</p>



<p>Zolang je er trainingsdata voor kan aanmaken, en je zorgt dat er een goede balans is tussen alle entiteiten die je wil herkennen, is het allemaal mogelijk. Met wetsartikelen hadden we dat bij Smals Research <a href="/facetten-van-natural-language-processing-deel-2/">al eens uitgeprobeerd</a>, met het oog op <a href="https://www.youtube.com/watch?v=8u57WSXVpmw">entity linking</a> &#8211; in dit geval, linken naar de eigenlijke wettekst via de <a href="https://eur-lex.europa.eu/eli-register/about.html">ELI</a>: </p>



<p><img loading="lazy" decoding="async" width="800" height="283" class="wp-image-12648" style="width: 800px;" src="/wp-content/uploads/2019/02/entityrecognitioncassatie_anonymized.png" alt="Entity Recognition van locaties, organisaties en wetsverwijzingen op een juridisch document" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/02/entityrecognitioncassatie_anonymized.png 999w, https://www.smalsresearch.be/wp-content/uploads/2019/02/entityrecognitioncassatie_anonymized-300x106.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/02/entityrecognitioncassatie_anonymized-768x272.png 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>



<p>Het aanhouden van de projectstructuur van SpaCy, met een workflow definitie in <em>project.yml </em>en een trainingsconfiguratie in <em>config.cfg</em> , maakt dit alles veel gemakkelijker te beheren. We staan bij Smals Research dan ook graag open om verdere experimenten te doen met Named Entity Recognition. We kunnen snel een proof-of-concept aanleveren aan iedereen die een geannoteerde trainingsdataset heeft liggen. </p>



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



<p>Er is vandaag nog wat achterstand wat betreft Nederlandstalige NLP, maar het veld verandert zeer snel. Het ontbreken van grote trainingsdatasets zet een rem op de performantie. Maar met de opkomst van transfomer modellen, ook in het Nederlands, kunnen we in de nabije toekomst zeker verbetering verwachten. </p>



<p>Ondertussen zijn de bestaande taalmodellen misschien niet perfect, maar zeker niet slecht. Ze zijn bovendien erg gemakkelijk om te tweaken en te optimaliseren voor eigen toepassingen. Wie vandaag al begint met computationele analyse van taal, zal dus gemakkelijk kunnen meesurfen met de opeenvolgende verbeteringen die we de komende maanden en jaren zeker zullen zien.</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>Named Entity Recognition&#160;: une application pratique du NLP</title>
		<link>https://www.smalsresearch.be/named-entity-recognition-une-application-du-nlp-utile/</link>
					<comments>https://www.smalsresearch.be/named-entity-recognition-une-application-du-nlp-utile/#comments</comments>
		
		<dc:creator><![CDATA[Katy Fokou]]></dc:creator>
		<pubDate>Fri, 06 Dec 2019 13:49:57 +0000</pubDate>
				<category><![CDATA[[FR]]]></category>
		<category><![CDATA[Blog post]]></category>
		<category><![CDATA[Named Entity Recognition]]></category>
		<category><![CDATA[NER]]></category>
		<category><![CDATA[NLP]]></category>
		<guid isPermaLink="false">/?p=13899</guid>

					<description><![CDATA[Dans le secteur public, les administrations font face à un nombre considérable de documents à gérer. Ces documents doivent être indexés et organisés tel qu’il soit possible de retrouver facilement de l’information. Dans ce contexte le NER ou Named Entity Recognition, une technique basée sur le machine learning et le Natural Language Processing (NLP), est [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Dans le secteur public, les administrations font face à un nombre considérable de documents à gérer. Ces documents doivent être indexés et organisés tel qu’il soit possible de retrouver facilement de l’information. Dans ce contexte le NER ou Named Entity Recognition, une technique basée sur le <em>machine learning</em> et le <em><a href="https://fr.wikipedia.org/wiki/Traitement_automatique_du_langage_naturel">Natural Language Processing</a></em> (NLP), est une solution particulièrement intéressante. Cela permet d’extraire automatiquement de l’information de documents textuels ainsi que audio et vidéo.</p>



<p>Le NER consiste à
reconnaître des entités nommées (<em>Named
Entities</em>) dans un corpus (ensemble de textes) et de leur attribuer une
étiquette telle que &#8220;nom&#8221;, &#8220;lieu&#8221;, &#8220;date&#8221;, &#8220;email&#8221;, etc. Si le NER
désigne au départ l’extraction de noms propres, de noms de lieux et de noms
d’organisations, ce concept s’est étendu à d’autres entités telles que la date,
l’email, le montant d’argent, etc. Dans bien des cas, il est utilisé pour
extraire des termes propres à un domaine comme par exemple le numéro IBAN pour
la gestion des paiements bancaires ou l’extraction de noms de gènes dans le
domaine biomédicale.</p>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/12/ner_fig_1.png" alt="" class="wp-image-13902" width="471" height="283" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_1.png 1018w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_1-300x181.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_1-768x463.png 768w" sizes="auto, (max-width: 471px) 100vw, 471px" /></figure></div>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/12/ner_fig_2-3-1024x291.png" alt="" class="wp-image-13908" width="604" height="197"/><figcaption>Exemple d’extraction d’entités nommées d’un article de journal (<a href="https://www.lesoir.be">www.lesoir.be</a>) avec le module NER de <a href="https://spacy.io/usage">spaCy</a>.</figcaption></figure></div>



<p>Développé à l’origine pour la recherche d’information (<em>information retrieval</em>), le NER a aujourd’hui de nombreuses applications outre l’indexation de documents. Il est notamment utilisé dans les systèmes de questions-réponses (Q&amp;A) qui consistent à répondre à une question posée en langage naturel en recherchant la réponse dans une collection de documents ou une base de connaissance. Pour cet usage, le NER peut s’avérer utile pour déterminer le type de réponse que le système Q&amp;A doit retourner en se basant sur des entités retrouvées dans la question (ex. un lieu, une date). </p>



<p>Le NER peut aussi
être utilisé en préalable d’autres tâches de NLP telles que <a href="https://fr.wikipedia.org/wiki/Annotation_s%C3%A9mantique">l’annotation sémantique</a>, la traduction machine, la classification ou pour
alimenter une <a href="https://fr.wikipedia.org/wiki/Ontologie_(informatique)">ontologie</a>.</p>



<p><strong>Comment implémenter un système NER&nbsp;?</strong></p>



<p>Il y a plusieurs approches pour l’implémentation d’un système NER. La première consiste à utiliser des règles prédéfinies&nbsp;(souvent des expressions régulières mais aussi des règles composées à partir d’ <a href="https://fr.wikipedia.org/wiki/%C3%89tiquetage_morpho-syntaxique">étiquettes morphosyntaxiques</a>) ; les règles offrent l’avantage&nbsp;d’être rapidement implémentées mais leur portée est restreinte. Dans l’exemple ci-dessous, on utilise une expression régulière pour reconnaître un numéro de téléphone. On constate que, selon la structure du numéro de téléphone, celui-ci sera détecté ou non par le système NER. Il faut donc écrire des règles complexes pour couvrir tous les cas de figure.</p>



<p>Exemple de
motif utilisé pour reconnaître un numéro de téléphone:
&#8220;^0\d{1,3}\/\d{2,3}\.\d{2,3}(\.\d{2})?$&#8221;</p>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/12/ner_fig_3.png" alt="" class="wp-image-13909" width="399" height="73" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_3.png 400w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_3-300x55.png 300w" sizes="auto, (max-width: 399px) 100vw, 399px" /></figure>



<p>Une autre
approche consiste à utiliser des méthodes dites statistiques c.-à-d. le <em>machine learning</em> (apprentissage machine)
et plus récemment le <em>deep learning</em>.
L’avantage de ces techniques consiste à utiliser le contexte pour reconnaître
une entité et lui attribuer une catégorie. Si l’on considère des noms tels que
Bruxelles ou Pierre Dupont, on peut les détecter sur base de règles utilisant
entre autres, la structure du mot et des éléments morphosyntaxiques mais il sera
difficile de catégoriser les entités de façon correcte. L’utilisation du <em>machine learning/deep learning</em> requiert néanmoins
un grand nombre de textes annotés manuellement pour l’entraînement et
l’évaluation du modèle NER.</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="1024" height="499" src="/wp-content/uploads/2019/12/ner_fig_4-2-1024x499.png" alt="" class="wp-image-13922" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_4-2-1024x499.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_4-2-300x146.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_4-2-768x374.png 768w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_4-2.png 1195w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption> Entraînement d’un NER statistique&nbsp;: la première étape consiste à annoter les données selon un format d’étiquetage bien défini&nbsp;:&nbsp;<a href="https://en.wikipedia.org/wiki/Inside%E2%80%93outside%E2%80%93beginning_(tagging)">BIO</a>, BIOES ou BILOU suivi par l’extraction de caractéristiques (POS-tag, étiquette du mot précédent ou suivant, case, forme du mot, …) qui servent d’input pour l’entraînement du classifieur.  </figcaption></figure>



<p>Dans la pratique, une implémentation de NER efficace est une combinaison de règles et de méthodes statistiques. Étant donné le coût en temps et en ressources nécessaire pour annoter des données et développer un modèle NER, on privilégiera autant que possible l’utilisation de règles formelles pour la détection d’entités.</p>



<p>L’implémentation
d’un système NER&nbsp;et en particulier d’un système NER basé sur du <em>machine learning/deep learning </em>pose
quelques défis:</p>



<ul class="wp-block-list"><li>La
langue. Pour l’application d’un modèle statistique, la langue d’entraînement de
l’algorithme est déterminante. Il existe des outils NLP qui permettent de faire
de la reconnaissance d’entités «&nbsp;out of the box&nbsp;» néanmoins la
plupart ces outils NER sont principalement développés pour l’anglais et peu ou
pas pour le français et le néerlandais. </li><li>Le
type de texte. Un modèle entraîné sur une structure de texte particulière n’est
pas toujours transposable à d’autres types.</li><li>Le
type d’entité que l’on souhaite reconnaître</li><li>L’
OCR. Le processus d’océrisation de documents non digitaux introduit des erreurs
qui affectent les performances du NER.</li><li>Les
entités ambiguës. Les cas de métonymie et polysémie sont difficilement
gérables. Ex.&nbsp;: dans la phrase «&nbsp;tout cela se décide à Bruxelles&nbsp;»
parle-t-on de la ville ou de l’Union Européenne&nbsp;?</li><li>Très
souvent, il y a peu de données disponibles pour entraîner le NER. Une solution
parfois utilisée pour parer cette difficulté est l’apprentissage par transfert&nbsp;(<em>transfer learning</em>) . Le <em>transfer learning</em> consiste à prendre un
modèle générique NER entraîné dans un domaine où on a beaucoup de données et de
l’affiner sur un nombre limité de données dans le domaine d’intérêt. </li><li>L’annotation
manuelle du corpus est une tâche lourde, cependant il existe des outils qui
permettent de l’exécuter de façon semi-automatique.</li></ul>



<figure class="wp-block-image is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/12/ner_fig_5-1024x283.png" alt="" class="wp-image-13911" width="631" height="174" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_5-1024x283.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_5-300x83.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_5-768x212.png 768w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_5.png 1261w" sizes="auto, (max-width: 631px) 100vw, 631px" /><figcaption> <br>  Application à un article de presse d’un <a href="https://spacy.io/models/nl">modèle NER</a> entraîné sur des textes Wikipédia. </figcaption></figure>



<div class="wp-block-image"><figure class="aligncenter is-resized"><img loading="lazy" decoding="async" src="/wp-content/uploads/2019/12/ner_fig_6-1024x360.png" alt="" class="wp-image-13912" width="637" height="223" srcset="https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_6-1024x360.png 1024w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_6-300x106.png 300w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_6-768x270.png 768w, https://www.smalsresearch.be/wp-content/uploads/2019/12/ner_fig_6.png 1222w" sizes="auto, (max-width: 637px) 100vw, 637px" /><figcaption>Application du même modèle NER à un extrait d’arrêt de cassation dont le type et la structure diffèrent des données utilisées pour l’entraînement du modèle. </figcaption></figure></div>



<p>Les résultats du
NER sont donc loin d’être parfaits. C’est pourquoi dans une implémentation
concrète, on le combine si possible avec une étape de validation. Dans
l’exemple donné en introduction de ce blog, le module NER a identifié comme
entité le mot «&nbsp;Diables&nbsp;» et l’a ensuite catégorisée comme lieu (LOC).
Il est facile de vérifier l’existence d’une entité de ce type (LOC) en la
comparant à une base de données géographiques telles que <a href="https://www.geonames.org/">GeoNames</a> ou <a href="https://www.openstreetmap.org">OpenStreetMap</a>.</p>



<p>Pour conclure, le <em>Named Entity Recognition</em> est une technique de traitement automatique du langage naturel (NLP) très utile pour le traitement et la gestion de documents. Si les entités sont très facilement reconnaissables dans un texte par un humain, l’automatisation de cette tâche ne se fait cependant pas sans difficultés. En pratique, on peut l’utiliser pour faciliter la recherche documentaire, pour le routage de courriers/documents électroniques vers les services adéquats, le paiement de facture automatique, l’enrichissement sémantique, etc.</p>



<p>____________</p>



<p><em>Ce post est une contribution individuelle de Katy Fokou, spécialisée en intelligence artificielle chez Smals Research. Cet article est écrit en son nom propre et n&#8217;impacte en rien le point de vue de Smals.</em></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.smalsresearch.be/named-entity-recognition-une-application-du-nlp-utile/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
