Foreword
The original version of this blog post was published in January 2024.
An update took place in November 2024 to reference four new models.
Qu’est-ce que la reconnaissance d’entités nommées ?
La reconnaissance d’entités nommées (souvent abrégée en NER d’après l’anglais Named Entity Recognition) est une tâche de NLP consistant à étiqueter les séquences de mots d’un texte qui sont des noms de choses (personnes, sociétés, lieux, maladies, etc.).
D’un point de vue technique, la tâche de NER peut être considérée comme de la classification où au lieu de classifier au niveau de la phrase entière (pour de l’analyse de sentiment par exemple), l’on classifie au niveau du mot en indiquant à quelle classe appartient le mot traité.
Jeux de données de NER
Le jeu de données le plus connu et faisant référence en NER, est le jeu de données CoNLL-2003 (Conference on Computational Natural Language Learning) de Erik F. Tjong Kim Sang et Fien De Meulderet (2003). Créé pour l’anglais et l’allemand, les autres langues ont généralement adopté son formatage.
Ci-dessous un exemple de lignes de ce jeu de données :
En ce qui concerne le français, des jeux de données ont été créés suivant la méthodologie de CoNLL-2003. On peut citer :
- WikiNER de Nothman et al. (2013) qui est un jeu de données (pour la partie en français) de 120 682 données d’entraînement et 13 410 de test. Les entités annoncées sont LOC (Localisations), ORG (Organisations), PER (Personnalités) et MISC (Divers) et sont réparties de la façon suivante :
Split | O | PER | LOC | ORG | MISC |
---|---|---|---|---|---|
train | 2 781 968 | 116 633 | 140 345 | 41 547 | 73 411 |
test | 305 131 | 13 345 | 15 220 | 3 896 | 8 183 |
- Wikiann de Rahimi et al. (2019) based on Pan, Xiaoman, et al. (2019) qui est un jeu de données (pour la partie en français) avec 20 000 données d’entraînement, 10 000 de validation et 10 000 de test. Les entités annoncées sont LOC, ORG, PER et MISC et sont réparties de la façon suivante :
Split | O | PER | LOC | ORG |
---|---|---|---|---|
train | 65 292 | 21 992 | 21 273 | 28 231 |
validation | 32 167 | 10 826 | 10 826 | 14 401 |
test | 32 612 | 11 027 | 10 844 | 14 271 |
- MultiNERD de Tedeschi et Navigli (2022) qui est un jeu de données (pour la partie en français) de 140 880 données d’entraînement, de 17 610 de validation et de 17 695 de test. Les entités annoncées sont PER, LOC, ORG, ANIM, BIO, CEL, DIS, EVE, FOOD, INST, MEDIA, PLANT, MYTH, TIME, VEHI et sont réparties de la façon suivante :
Split | O | PER | LOC | ORG | ANIM | BIO | CEL | DIS | EVE | FOOD | INST | MEDIA | MYTH | PLANT | TIME | VEHI |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
train | 2 979 567 | 151 201 | 218 858 | 109 429 | 12 800 | 21 | 3 031 | 4 107 | 20 523 | 3 282 | 992 | 19 943 | 1 591 | 4 543 | 23 555 | 1 129 |
validation | 402 643 | 17 599 | 14 151 | 3 498 | 766 | 0 | 392 | 698 | 2 009 | 795 | 157 | 1 444 | 541 | 832 | 6 456 | 156 |
test | 406 146 | 18 591 | 14 124 | 3 685 | 844 | 6 | 390 | 709 | 2 137 | 776 | 174 | 1 615 | 453 | 654 | 4 872 | 96 |
- MultiCoNER v2 de Fetahu et al. (2023) qui est un jeu de données (pour la partie en français) de 120 682 données d’entraînement et 13 410 de test. Les entités annoncées sont Location (incluant Facility, OtherLOC, HumanSettlement, Station), Creative Work (incluant VisualWork, MusicalWork, WrittenWork, ArtWork, Software), Group (incluant MusicalGRP, PublicCORP, PrivateCORP, AerospaceManufacturer, SportsGRP, CarManufacturer, ORG), Person (incluant Scientist, Artist, Athlete, Politician, Cleric, SportsManager, OtherPER), Product (incluant Clothing, Vehicle, Food, Drink, OtherPROD), Medical (incluant Medication/Vaccine, MedicalProcedure, AnatomicalStructure, Symptom, Disease) et sont réparties de la façon suivante :
Split | O | OtherPER | Artist | WrittenWork | VisualWork | Politician | HumanSettlement | ArtWork | Athlete | Facility | MusicalWork | MusicalGRP | ORG | Scientist | Cleric | PrivateCorp | SportsManager | OtherPROD | Software | PublicCorp | Disease | OtherLOC | Vehicle | AnatomicalStructure | Station | SportsGRP | Drink | Food | CarManufacturer | Symptom | Medication / Vaccine | Clothing | AerospaceManufacturer | MedicalProcedure |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
train | 196 008 | 3 748 | 7 268 | 4 536 | 3 588 | 2 456 | 5 864 | 408 | 2 908 | 2 240 | 1 304 | 1 242 | 2 670 | 630 | 930 | 390 | 650 | 1 504 | 1 040 | 800 | 564 | 588 | 824 | 556 | 754 | 1 482 | 466 | 672 | 488 | 410 | 506 | 426 | 418 | 424 |
validation | 10 430 | 202 | 378 | 234 | 176 | 134 | 310 | 26 | 144 | 108 | 54 | 60 | 146 | 38 | 40 | 22 | 30 | 90 | 46 | 44 | 32 | 26 | 40 | 30 | 40 | 70 | 22 | 26 | 26 | 20 | 24 | 22 | 22 | 22 |
- Pii-masking-200k de la société ai4Privacy (2023) qui est un jeu de données (pour la partie en français) de 61 958 données d’entraînement. Les entités annoncées sont Prefix, Firstname, Lastname, Date, Time, Phoneimei, Username, Email, State, Jobarea, Url, City, Currency, Accountname, Creditcardnumber, Creditcardcvv, Phonenumber, Creditcardissuer, Currencysymbol, Amount, Sex, Useragent, Jobtitle, Ipv4, Ipv6, Jobtype, Companyname, Gender, Street, Secondaryaddress, County, Age, Accountnumber, IP, Ethereumaddress, Bitcoinaddress, Middlename, IBAN, Vehiclevrm, Dob, Pin, Password, Currencyname, Litecoinaddress, Currencycode, Buildingnumber, Ordinaldirection, Maskednumber, Zipcode, BIC, Nearbygpscoordinate, MAC, Vehiclevin, Eyecolor, Height et SSN, et sont réparties de la façon suivante :
Split | Prefix | Firstname | Lastname | Date | Time | Phoneimei | Username | State | Jobarea | Url | City | Currency | Accountname | Creditcardnumber | Creditcardcvv | Phonenumber | Creditcardissuer | Currencysymbol | Amount | Sex | Useragent | Jobtitle | Ipv4 | Ipv6 | Jobtype | Companyname | Gender | Street | Secondaryaddress | County | Age | Accountnumber | IP | Ethereumaddress | Bitcoinaddress | Middlename | IBAN | Vehiclevrm | Dob | Pin | Password | Currencyname | Litecoinaddress | Currencycode | Buildingnumber | Ordinaldirection | Maskednumber | Zipcode | BIC | Nearbygpscoordinate | MAC | Vehiclevin | Eyecolor | Height | SSN | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
train | 3 980 | 20 081 | 6 114 | 5 832 | 3 587 | 2 924 | 3 502 | 5 201 | 3 659 | 3 550 | 3 462 | 3 406 | 2 318 | 3 566 | 3 882 | 1 219 | 3 366 | 2 017 | 3 874 | 3 684 | 4 042 | 3 207 | 3 534 | 3 489 | 3 426 | 3 971 | 3 571 | 3 876 | 3 753 | 3 696 | 3 740 | 3 924 | 3 491 | 2 971 | 2 151 | 3 412 | 3 718 | 3 006 | 1 145 | 4 098 | 999 | 3 807 | 1 078 | 1 113 | 1 093 | 3 887 | 1 920 | 3 304 | 3 728 | 1 040 | 2 908 | 1 597 | 1 013 | 1 528 | 1 472 | 3 334 |
Il s’agit ici des principaux jeux de données « propres », au sens qu’ils sont utilisables facilement car disponibles sur le Hub de Hugging Face. Nous verrons cependant dans la section suivante que la qualité des données de certains jeux de données cités à l’instant est questionnable et a donc nécessité un nettoyage avant de pouvoir les utiliser pour entraîner un modèle.
Il convient de noter qu’il existe d’autres jeux de données de NER en français. Cependant, ceux-ci sont soit de moindre qualité, nécessitent alors un prétraitement très lourd pour être exploitables, soit trop spécialisés. On peut par exemple citer les jeux de données suivants :
- Annotation référentielle du Corpus Arboré de Paris 7 en entités nommées (Referential named entity annotation of the Paris 7 French TreeBank) [in French] de Sagot et al. (2012) qui est utilisé dans la littérature scientifique comme benchmark du CamemBERT ou du FlauBERT par exemple mais qui n’est pas accessible librement.
- QUAERO de Névéol et al. (2014) qui est un jeu de données spécialisé dans le domaine médical.
- POLYGLOT-NER d’Al-Rfou et al. (2014) est un jeu de données issu de Wikipedia mais présentant d’importants doutes sur la qualité de l’annotation.
- Europeana Newspapers de Neudecker (2016) qui est un jeu de données obtenu par OCR de vieux journaux de la BnF.
- HIPE-2022 de Faggioli et al. (2022) qui regroupe quatre jeux de données (ajmc de Romanello et al. (2020), hipe2020 d’Ehrmann et al. (2020), letemps d’Ehrmann et al. (2016),
newseye d’Hamdi et al. (2021)) obtenus par OCR de vieux journaux (fin XIX - début XXème).
- DAWT de Spasojevic et al. (2017) n’est plus disponible en ligne suite au rachat de l’entreprise ayant créé ce jeu de données.
Dans le cadre de nos expérimentations, nous avons décidé de travailler avec deux configurations.
La première consiste à prendre en compte les entités LOC (Localisations), ORG (Organisations) et PER (Personnalités) permettant ainsi de travailler sur la concaténation des jeux MultiCONER, MultiNERD, Pii-masking-200k, Wikiann et WikiNER. C’est-à-dire que dans ce cas-ci, pour les jeux de données gérant d’autres entités que les trois considérées, nous réannotons ces entités supplémentaires à O (Other).
La seconde consiste à prendre en compte les entités LOC (Localisations), ORG (Organisations), PER (Personnalités) et MISC (Divers) permettant ainsi de travailler sur la concaténation des jeux MultiCONER, MultiNERD, Pii-masking-200k et WikiNER. C’est-à-dire que dans ce cas-ci, nous excluons Wikiann qui ne possède pas d’entités MISC et pour les jeux de données possédant des entités autres que LOC, ORG et PER mais pas explicitement MISC, nous réannotons ces entités supplémentaires en MISC.
Fuites de données et duplication
En nous intéressant à la qualité des jeux de données listés, nous avons pu constater qu’individuellement ils contenaient des fuites de données entre les échantillons d’entraînement et de test, ainsi que des données dupliquées.
A noter également qu’à l’issue du nettoyage individuel, un nettoyage supplémentaire doit être effectué. En effet, une donnée présente dans l’échantillon d’entraînement d’un jeu de données A et donc non présente dans l’échantillon de test de A, peut être présente dans l’échantillon de test de B, ce qui crée une fuite lors de la création du jeu de données A+B.
A titre d’information, les statistiques concernant le nombre de fuites et de duplications pour les cinq jeux de données de NER que nous avons retenus dans le cadre de nos expérimentations sont les suivantes :
- MultiCONER :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 13 lignes soit 0,083 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 0 lignes soit 0 %
• Lignes dupliquées dans l'échantillon d'entraînement : 170 lignes soit 1,081 %
• Lignes dupliquées dans l'échantillon de validation : 1 ligne soit 0,121 %
• Lignes dupliquées dans l'échantillon de test : 2 lignes soit 0,233 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 1,754%.
- MultiNERD :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 69 lignes soit 0,049 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 20 lignes soit 0,114 %
• Lignes dupliquées dans l'échantillon d'entraînement : 2 600 lignes soit 1,846 %
• Lignes dupliquées dans l'échantillon de validation : 201 lignes soit 1,141 %
• Lignes dupliquées dans l'échantillon de test : 58 lignes soit 0,328 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 0,833%.
- Pii-masking-200k :
Ce jeu de données ne contient ni fuites ni duplications de données.
- WikiNER :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 22 lignes soit 0,019 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 1 lignes soit 0,017 %
• Lignes dupliquées dans l'échantillon d'entraînement : 562 lignes soit 0,49 %
• Lignes dupliquées dans l'échantillon de validation : 5 lignes soit 0,127 %
• Lignes dupliquées dans l'échantillon de test : 17 lignes soit 0,127 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 0,440%.
- Wikiann :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 742 lignes soit 3,710 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 473 lignes soit 4,730 %
• Lignes dupliquées dans l'échantillon d'entraînement : 1889 lignes soit 9,445 %
• Lignes dupliquées dans l'échantillon de validation : 700 lignes soit 7,000 %
• Lignes dupliquées dans l'échantillon de test : 644 lignes soit 6,440 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 18,590%.
Nous pouvons constater que plus de 80% des jeux de données considérés contenaient des fuites ou des duplications.
Les statistiques concernant le nombre de fuites et de duplications pour la concaténation des cinq jeux de données de NER que nous avons retenus dans le cadre de nos expérimentations sont les suivantes :
- Configuration à 3 entités (LOC, ORG et PER) :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 1071 lignes soit 0,371 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 613 lignes soit 1,799 %
• Lignes dupliquées dans l'échantillon d'entraînement : 1839 lignes soit 0,638 %
• Lignes dupliquées dans l'échantillon de validation : 8 lignes soit 0,023 %
• Lignes dupliquées dans l'échantillon de test : 8 lignes soit 0,019 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 4,015%.
- Configuration à 4 entités (LOC, ORG, PER et MISC) :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test : 1028 lignes soit 0,384 %
• Fuites entre l'échantillon de validation et l'échantillon de test : 134 lignes soit 0,552 %
• Lignes dupliquées dans l'échantillon d'entraînement : 1779 lignes soit 0,664 %
• Lignes dupliquées dans l'échantillon de validation : 1 lignes soit 0,004 %
• Lignes dupliquées dans l'échantillon de test : 1 lignes soit 0,003 %
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 3,647%.
Les jeux de données de NER nettoyés (sans fuites de données ni duplications) sont disponibles sur Hugging Face : frenchNER_3entities et frenchNER_4entities.
Quel modèle pour résoudre une tâche de NER ?
N’importe quel modèle de transformer est capable de résoudre cette tâche, que ce soit un transformer complet (encodeur et décodeur), un transformer décodeur, ou un transformer encodeur. Seule la façon dont sont fournies les données au modèle diffère entre les différentes approches.
En pratique, les modèles de type encodeur sont les plus utilisés. Du fait qu’ils sont les plus adaptés pour résoudre des tâches de classification, et probablement par habitude. En effet, dans le cas du français, les transformers encodeur ont été disponibles avant les transformers décodeur et les transformers complets.
Soulignons également que le modèle CamemBERT de Martin et al. (2019) semble davantage utilisé que le FlauBERT de He et al. (2019) pour la tâche de NER, sans qu’il n’y ait d’explications sur la raison.
En novembre 2024, Antoun et al. (2024) ont introduit le CamemBERT 2.0. Dans ce papier, ils proposent en réalité deux modèles : un CamemBERT2 et un CamemBERTa2. Ces modèles sont entraînés sur plus de données que dans leur première version et ont l'intérêt de pouvoir gérer une séquence de 1024 tokens contre 512 précédemment.
Notons aussi qu’en plus du choix du modèle, la tâche de NER peut s’effectuer au niveau du token ou bien au niveau d’un n-gram de tokens consécutifs. Cette étendue de tokens ayant le nom de span dans la littérature.
Une librairie efficace et simple d’utilisation pour effectuer de la NER au niveau d’une span est SpanMarker de Tom Aarsen (2023).
Quelques modèles finetunés sur la tâche de NER sont disponibles en open-source. On peut lister :
- Le modèle Ner-french (un modèle Bi-LSTM) finetuné sur WikiNER au niveau du token par Flair et plus particulièrement Akbik et al. (2018)
- Le modèle Camembert-ner finetuné sur WikiNER au niveau du token par Jean-Baptiste Polle
- Le modèle DistillCamemBERT base finetuné sur WikiNER au niveau du token par le Crédit Mutuel et plus particulièrement par Delestre et Amar (2022)
La limite de ces modèles est qu’aucun d’entre eux n’utilise la totalité des données disponibles à disposition puisqu’ils sont tous les trois entraînés uniquement sur le jeu de données WikiNER. Cela a pour conséquence (cf. la partie évaluation) de spécialiser les modèles sur des données de type Wikipedia et bride alors leur capacité à généraliser sur de nouvelles données. De plus, comme indiqué précédemment, WikiNER possède des fuites de données et des duplications faussant les performances réelles des modèles.
De plus, aucun modèle de NER en français n’est disponible en taille large.
Compte tenu de ces limites, nous avons développé notre propre modèle au CATIE : le NERmembert. Celui-ci utilise l’ensemble des données de qualité à disposition en open-source et a été entraîné en plusieurs configurations. Le tout gratuitement et librement en open-source :
- https://huggingface.co/CATIE-AQ/NERmembert-base-3entities
- https://huggingface.co/CATIE-AQ/NERmembert-large-3entities
- https://huggingface.co/CATIE-AQ/NERmembert2-3entities
- https://huggingface.co/CATIE-AQ/NERmemberta-3entities
- https://huggingface.co/CATIE-AQ/NERmembert-base-4entities
- https://huggingface.co/CATIE-AQ/NERmembert-large-4entities
- https://huggingface.co/CATIE-AQ/NERmembert2-4entities
- https://huggingface.co/CATIE-AQ/NERmemberta-4entities
Métriques et évaluation
Quelles sont les performances des modèles ? Pour cela décrivons d’abord les métriques sur lesquelles sont évalués les modèles de NER.
Métriques
En NER, on donne généralement la précision, le rappel et le score F1 (qui est la moyenne harmonique des deux précédentes métriques) pour chaque entité ainsi qu’au global. L’accuracy peut également être renseignée.
Évaluation
D’un point de vue implémentation, pour calculer les métriques énoncées ci-dessus, le mieux est d’utiliser le package Python evaluate d’Hugging Face.
Cas à 3 entités
Ci-dessous, nous listons les tableaux des résultats des performances des différents modèles considérés dans la configuration à trois entités (PER, LOC, ORG) du jeu de données frenchNER_3entities.
Pour des raisons de place, nous ne présentons que le F1 des différents modèles. Vous pouvez consulter les résultats complets (i.e. toutes les métriques) dans les cartes de modèles disponibles sur Hugging Face.
Modèle |
Paramètres |
Contexte |
PER |
LOC |
ORG |
---|---|---|---|---|---|
Jean-Baptiste/camembert-ner |
110M |
512 tokens |
0,941 |
0,883 |
0,658 |
cmarkea/distilcamembert-base-ner |
67,5M |
512 tokens |
0,942 |
0,882 |
0,647 |
NERmembert-base-4entities |
110M |
512 tokens |
0,951 |
0,894 |
0,671 |
NERmembert-large-4entities |
336M |
512 tokens |
0,958 |
0,901 |
0,685 |
NERmembert-base-3entities |
110M |
512 tokens |
0,966 |
0,940 |
0,876 |
NERmembert2-3entities |
111M |
1024 tokens |
0,967 |
0,942 |
0,875 |
NERmemberta-3entities |
111M |
1024 tokens |
0,970 |
0,943 |
0,881 |
NERmembert-large-3entities |
336M |
512 tokens |
0,969 |
0,947 |
0,890 |
On peut observer que les modèles NERmembert (quel que soit le nombre d’entités considérés) performent mieux que les autres modèles. Cela s’explique vraisemblablement par le fait qu’ils aient vu trois fois plus de données lors du finetuning.
De même, on peut voir que les modèles larges ont de meilleurs résultats que les modèles bases.
Notons que la différence de performance est particulièrement marquée entre les NERmembert 3 entités et les modèles non NERmembert avec des écarts de plus de 20 points sur l’entité ORG par exemple.
Les modèles NERmembert apparaissent comme plus généralistes comparés aux non NERmembert qui ont été entraînés uniquement sur le jeu de données WikiNER et donc spécialisés sur des données de type Wikipedia. Ils obtiennent d’ailleurs de meilleurs résultats que les NERmembert sur ce jeu de données là.
Nous constatons également ceci : alors que cmarkea/distilcamembert-base-ner annonce les meilleurs résultats sur WikiNER, une fois les fuites et duplications du jeu de données supprimées, c'est en réalité Jean-Baptiste/camembert-ner qui donne les meilleurs résultats.
Sachant que WikiNER et Wikiann sont tous deux basés sur Wikipédia, nous nous attendions à ce que ces deux modèles obtiennent de bonnes performances sur Wikiann également. A notre surprise, cela ne s'observe pas dans les résultats.
Enfin, on peut remarquer un écart entre le modèle NERmembert 3 entités et le modèle NERmembert 4 entités. La différence entre les deux configurations est que les NERmembert 3 entités ont vu un peu plus de données, à savoir le jeu de données Wikiann qui fait environ 25 000 lignes supplémentaires. Dans le détail des résultats par jeu de données disponibles ci-dessous, on peut d’ailleurs voir que le modèle base à 4 entités donne des performances équivalentes ou supérieures au modèle base à 3 entités sur les jeux de données qu’ils ont en commun mais rencontre des difficultés sur Wikiann.
Pour plus de détails, vous pouvez étendre l’onglet ci-après afin d’afficher les résultats obtenus pour chacun des jeux de données.
Résultats par jeux de données
MultiCoNER
Modèle |
PER |
LOC |
ORG |
---|---|---|---|
Jean-Baptiste/camembert-ner |
0,940 |
0,761 |
0,723 |
cmarkea/distilcamembert-base-ner |
0,921 |
0,748 |
0,694 |
NERmembert-base-3entities |
0,960 |
0,887 |
0,876 |
NERmembert2-3entities |
0,958 |
0,876 |
0,863 |
NERmemberta-3entities |
0,964 |
0,865 |
0,859 |
NERmembert-large-3entities |
0,965 |
0,902 |
0,896 |
MultiNERD
Modèle |
PER |
LOC |
ORG |
---|---|---|---|
Jean-Baptiste/camembert-ner |
0,962 |
0,934 |
0,888 |
cmarkea/distilcamembert-base-ner |
0,972 |
0,938 |
0,884 |
NERmembert-base-3entities |
0,985 |
0,973 |
0,938 |
NERmembert2-3entities |
0,985 |
0,972 |
0,933 |
NERmemberta-3entities |
0,986 |
0,974 |
0,945 |
NERmembert-large-3entities |
0,987 |
0,979 |
0,953 |
WikiNER
Modèle |
PER |
LOC |
ORG |
---|---|---|---|
Jean-Baptiste/camembert-ner |
0,986 |
0,966 |
0,938 |
cmarkea/distilcamembert-base-ner |
0,983 |
0,964 |
0,925 |
NERmembert-base-3entities |
0,969 |
0,945 |
0,878 |
NERmembert2-3entities |
0,969 |
0,946 |
0,866 |
NERmemberta-3entities |
0,971 |
0,948 |
0,885 |
NERmembert-large-3entities |
0,972 |
0,950 |
0,893 |
WikiAnn
Modèle |
PER |
LOC |
ORG |
---|---|---|---|
Jean-Baptiste/camembert-ner |
0,867 |
0,722 |
0,451 |
cmarkea/distilcamembert-base-ner |
0,862 |
0,722 |
0,451 |
NERmembert-base-3entities |
0,947 |
0,906 |
0,886 |
NERmembert2-3entities |
0,950 |
0,911 |
0,910 |
NERmemberta-3entities |
0,953 |
0,902 |
0,890 |
NERmembert-large-3entities |
0.949 |
0.912 |
0.899 |
Cas à 4 entités
Ci-dessous, nous listons les tableaux des résultats des performances des différents modèles considérés dans la configuration à quatre entités (PER, LOC, ORG, MISC) du jeu de données frenchNER_4entities.
Modèle |
Paramètres |
Contexte |
PER |
LOC |
ORG |
MISC |
---|---|---|---|---|---|---|
Jean-Baptiste/camembert-ner |
110M |
512 tokens |
0,971 |
0,947 |
0,902 |
0,663 |
cmarkea/distilcamembert-base-ner |
67,5M |
512 tokens |
0,974 |
0,948 |
0,892 |
0,658 |
NERmembert-base-4entities |
110M |
512 tokens |
0,978 |
0,958 |
0,903 |
0,814 |
NERmembert2-4entities |
111M |
1024 tokens |
0,978 |
0,958 |
0,901 |
0,806 |
NERmemberta-4entities |
111M |
1024 tokens |
0,979 |
0,961 |
0,915 |
0,812 |
NERmembert-large-4entities |
336M |
512 tokens |
0,982 |
0,964 |
0,919 |
0,834 |
Encore une fois, pour des raisons de place, nous ne présentons que le F1 des différents modèles. Vous pouvez consulter les résultats complets (i.e. toutes les métriques) dans les cartes de modèles disponibles sur Hugging Face.
Les résultats sont dans le même sillon que ce qu’on peut observer pour la configuration à 3 entités.
A savoir que les modèles NERmembert (quel que soit le nombre d’entités considérés) performent mieux que les autres modèles et que les modèles larges ont de meilleurs résultats que les modèles bases.
Sur les entités PER, LOC et ORG, les NERmembert 3 entités ont des résultats semblables aux NERmembert 4 entités. L’intérêt des NERmembert 4 entités est qu’ils gèrent l’entité supplémentaire MISC.
A nouveau, les NERmembert apparaissent comme plus généralistes en comparaison aux non NERmembert. Comme pour la configuration à trois entités, ces modèles obtiennent de meilleurs résultats sur WikiNER mais ont des difficultés sur les autres jeux de données.
Il y a un écart important sur la catégorie MISC. Une explication pourrait être la nature de la définition de cette entité. En effet, pour WikiNER, il s’agit principalement de noms d’œuvres (livres ou films par exemple), là où MultiNERD et MultiCoNER gèrent en plus des noms médicaux (maladies/symptômes) et des produits (marques de véhicule/nourriture/vêtements).
Pour plus de détails, vous pouvez étendre l’onglet ci-après afin d’afficher les résultats obtenus pour chacun des jeux de données.
Résultats par jeux de données
MultiCoNER
Modèle |
PER |
LOC |
ORG |
MISC |
---|---|---|---|---|
Jean-Baptiste/camembert-ner |
0,940 |
0,761 |
0,723 |
0,560 |
cmarkea/distilcamembert-base-ner |
0,921 |
0,748 |
0,694 |
0,530 |
NERmembert-base-4entities |
0,960 |
0,890 |
0,867 |
0,852 |
NERmembert2-4entities |
0,964 |
0,888 |
0,864 |
0,850 |
NERmemberta-4entities |
0,966 |
0,891 |
0,867 |
0,862 |
NERmembert-large-4entities |
0,969 |
0,919 |
0,904 |
0,864 |
MultiNERD
Modèle |
PER |
LOC |
ORG |
MISC |
---|---|---|---|---|
Jean-Baptiste/camembert-ner |
0,962 |
0,934 |
0,888 |
0,419 |
cmarkea/distilcamembert-base-ner |
0,972 |
0,938 |
0,884 |
0,430 |
NERmembert-base-4entities |
0,985 |
0,973 |
0,938 |
0,770 |
NERmembert2-4entities |
0,986 |
0,974 |
0,937 |
0,761 |
NERmemberta-4entities |
0,987 |
0,976 |
0,942 |
0,770 |
NERmembert-large-4entities |
0,987 |
0,976 |
0,948 |
0,790 |
WikiNER
Modèle |
PER |
LOC |
ORG |
MISC |
---|---|---|---|---|
Jean-Baptiste/camembert-ner |
0,986 |
0,966 |
0,938 |
0,938 |
cmarkea/distilcamembert-base-ner |
0,983 |
0,964 |
0,925 |
0,926 |
NERmembert-base-4entities |
0,970 |
0,945 |
0,876 |
0,872 |
NERmembert2-4entities |
0,968 |
0,945 |
0,874 |
0,871 |
NERmemberta-4entities |
0,969 |
0,950 |
0,897 |
0,871 |
NERmembert-large-4entities |
0,975 |
0,953 |
0,896 |
0,893 |
Modèles de span
Nous avons listé ci-dessus des modèles entraînés au niveau du token. Nous avons également entraîné des modèles au niveau de n-gram de tokens consécutifs avec la librairie SpanMarker. La littérature sur le sujet (le mémoire de Tom Aarsen auteur de SpanMarker en fait une bonne synthèse) tend à indiquer que les modèles entraînés au niveau de span donnent de meilleures performances que les modèles entraînés au niveau du token.
Nous obtenons des résultats inverses dans nos expériences :
Cas à 3 entités
Modèle |
PER |
LOC |
ORG |
---|---|---|---|
Span Marker (frenchNER_3entities) |
0,959 |
0,924 |
0,850 |
NERmembert-base-3entities |
0,966 |
0,940 |
0,876 |
Cas à 4 entités
Modèle |
PER |
LOC |
ORG |
MISC |
---|---|---|---|---|
Span Marker (frenchNER_4entities) |
0,966 |
0,939 |
0,892 |
0,760 |
NERmembert-base-4entities |
0,978 |
0,958 |
0,903 |
0,814 |
Nous avançons deux possibilités à ces résultats. La première est que les performances peuvent varier en fonction des langues (Tom Aarsen nous ayant indiqué que des observations similaires ont été observées en espagnol).
La seconde est que les résultats obtenus en anglais sont biaisés et donc en réalité non fiables. En effet, le jeu de données CoNLL2003 qui est massivement utilisé en anglais contient lui aussi des fuites de données et duplications :
• Fuites entre l'échantillon d'entraînement et l'échantillon de test 78 lignes soit 0.556%.
• Fuites entre l'échantillon de validation et l'échantillon de test : 25 lignes soit 0.769%.
• Lignes dupliquées dans l'échantillon d'entraînement : 1 350 lignes soit 9.615%.
• Lignes dupliquées dans l'échantillon de validation : 269 lignes soit 8.277%.
• Lignes dupliquées dans l'échantillon de test : 269 lignes soit 7.79 %.
Ainsi entre les fuites et les duplications, les performances mesurées sur l’échantillon de test sont faussées d’au moins 10,77%.
Enfin, nous terminons cette section en soulignant que l’entraînement d’un modèle SpanMarker prend trois fois plus de temps qu’un NERmembert.
Exemple d’utilisations
from transformers import pipeline
ner = pipeline('token-classification', model='CATIE-AQ/NERmembert-base-4entities', tokenizer='CATIE-AQ/NERmembert-base-4entities', aggregation_strategy="simple")
results = ner(
"Le dévoilement du logo officiel des JO s'est déroulé le 21 octobre 2019 au Grand Rex. Ce nouvel emblème et cette nouvelle typographie ont été conçus par le designer Sylvain Boyer avec les agences Royalties & Ecobranding. Rond, il rassemble trois symboles : une médaille d'or, la flamme olympique et Marianne, symbolisée par un visage de femme mais privée de son bonnet phrygien caractéristique. La typographie dessinée fait référence à l'Art déco, mouvement artistique des années 1920, décennie pendant laquelle ont eu lieu pour la dernière fois les Jeux olympiques à Paris en 1924. Pour la première fois, ce logo sera unique pour les Jeux olympiques et les Jeux paralympiques."
)
print(results)
[{'entity_group': 'MISC', 'score': 0.9456432, 'word': 'JO', 'start': 36, 'end': 38},
{'entity_group': 'LOC', 'score': 0.9990527, 'word': 'Grand Rex', 'start': 75, 'end': 84},
{'entity_group': 'PER', 'score': 0.99884754, 'word': 'Sylvain Boyer', 'start': 165, 'end': 178},
{'entity_group': 'ORG', 'score': 0.99118334, 'word': 'Royalties & Ecobranding', 'start': 196, 'end': 219},
{'entity_group': 'PER', 'score': 0.9446552, 'word': 'Marianne', 'start': 299, 'end': 307},
{'entity_group': 'MISC', 'score': 0.97599506, 'word': 'Art déco', 'start': 438, 'end': 446},
{'entity_group': 'MISC', 'score': 0.99798834, 'word': 'Jeux olympiques', 'start': 550, 'end': 565},
{'entity_group': 'LOC', 'score': 0.7205312, 'word': 'Paris', 'start': 568, 'end': 573},
{'entity_group': 'MISC', 'score': 0.996698, 'word': 'Jeux olympiques', 'start': 635, 'end': 650},
{'entity_group': 'MISC', 'score': 0.9955608, 'word': 'Jeux paralympiques', 'start': 658, 'end': 676}]
Si vous souhaitez tester le modèle de manière plus directe, un démonstrateur a été créé et est hébergé sous la forme d’un Space sur Hugging Face disponible ici ou bien ci-dessous :
Améliorations possibles
Terminons en listant des améliorations possibles à ce travail.
Dans la section sur la description des données, nous avons listé les effectifs disponibles par type d’entités. Il est possible de relever un déséquilibre se ressentant par la suite sur les résultats (pour les entités ORG et MISC notamment). Un travail important consisterait ainsi à équilibrer les entités à notre disposition en effectuant par exemple de l’augmentation de données par simple substitution d’une valeur d’une entité par un autre du même type. Cela peut se faire en utilisant des entités déjà présentes dans notre jeu de données (ce qui pourrait permettre de rendre la valeur d’une entité plus robuste au contexte l’entourant) ou bien issues de sources externes (pour les ORG on peut penser à des données issues des chambres de commerce ou de l’INSEE par exemple).
Un autre travail consisterait à ajouter d’autres entités mais nécessiterait un effort conséquent d’annotation.
Conclusion
Nous introduisons le modèle NERmembert en huit versions différentes. L'ensemble des modèles entraînés sont accompagnés des jeux de données que nous avons utilisés qui sont sans fuites de données ou duplications. Le tout est librement accessible gratuitement sur Hugging Face.
Citations
Modèles
@misc {NERmemberta2024,
author = { {BOURDOIS, Loïck} },
organization = { {Centre Aquitain des Technologies de l'Information et Electroniques} },
title = { NERmemberta-3entities (Revision 989f2ee) },
year = 2024,
url = { https://huggingface.co/CATIE-AQ/NERmemberta-3entities },
doi = { 10.57967/hf/3640 },
publisher = { Hugging Face }
}
@misc {NERmembert2024,
author = { {BOURDOIS, Loïck} },
organization = { {Centre Aquitain des Technologies de l'Information et Electroniques} },
title = { NERmembert-large-4entities (Revision 1cd8be5) },
year = 2024,
url = { https://huggingface.co/CATIE-AQ/NERmembert-large-4entities },
doi = { 10.57967/hf/1752 },
publisher = { Hugging Face }
}
Jeux de données
@misc {frenchNER2024,
author = { {BOURDOIS, Loïck} },
organization = { {Centre Aquitain des Technologies de l'Information et Electroniques} },
title = { frenchNER_4entities (Revision f1e8fef) },
year = 2024,
url = { https://huggingface.co/datasets/CATIE-AQ/frenchNER_4entities },
doi = { 10.57967/hf/1751 },
publisher = { Hugging Face }
}
Références
- Introduction to the CoNLL-2003 Shared Task: Language-Independent Named Entity Recognition de Erik F. Tjong Kim Sang et Fien De Meulder (2003)
- http://dx.doi.org/10.1016/j.artint.2012.03.006">Learning multilingual named entity recognition from Wikipedia de Nothman et al. (2013)
- Massively Multilingual Transfer for NER de Rahimi et al. (2019)
- Massively Multilingual Transfer for NER de Pan, Xiaoman, et al. (2019)
- MultiNERD: A Multilingual, Multi-Genre and Fine-Grained Dataset for Named Entity Recognition (and Disambiguation) de Tedeschi et Navigli (2022)
- SemEval-2023 Task 2: Fine-grained Multilingual Named Entity Recognition (MultiCoNER 2) de Fetahu et al. (2023)
- Pii-masking-200k d’ai4Privacy (2023)
- Annotation référentielle du Corpus Arboré de Paris 7 en entités nommées (Referential named entity annotation of the Paris 7 French TreeBank) [in French] de Sagot et al. (2012)
- The Quaero French Medical Corpus: A Ressource for Medical Entity Recognition and Normalization de Névéol et al. (2014)
- POLYGLOT-NER: Massive Multilingual Named Entity Recognition d’Al-Rfou et al. (2014)
- Europeana Newspapers de Neudecker (2016)
- HIPE-2022 de Faggioli et al. (2022)
- ajmc de Romanello et al. (2020)
- Overview of CLEF HIPE 2020: Named Entity Recognition and Linking on Historical Newspapers d’Ehrmann et al. (2020)
- Diachronic Evaluation of NER Systems on Old Newspapers d’Ehrmann et al. (2016)
- A Multilingual Dataset for Named Entity Recognition, Entity Linking and Stance Detection in Historical Newspapers d’Hamdi et al. (2021)
- DAWT: Densely Annotated Wikipedia Texts across multiple languages de Spasojevic et al. (2017)
- CamemBERT: a Tasty French Language Model de Martin et al. (2019)
- FlauBERT: Unsupervised Language Model Pre-training for French de He et al. (2019
- CamemBERT 2.0: A Smarter French Language Model Aged to Perfection de Antoun et al. (2024)
- SpanMarker d’Aarsen (2023)
- ner-french d’Akbik et al. (2018)
- camembert-ner de Polle (2021)
- distilcamembert de Delestre et Amar (2022)