VT2017 ONLP
- Auteur : Brochier Aymeric
- Enseignants : Georges-Pierre Bonneau
- Date : 20/10/2017
Abstract
Apache OpenNLP is an open source Java library based on machine-learning. It is used to process natural text. It supports the most communs NLP task such as (Sentence detection, POS-tagging,tokenization).I will talk about functionalities, performances with the support of a comparative study[1]
Résumé
Apache OpenNLP est une bibliothèque libre écrite en entièrement en java basé sur de l'apprentissage automatique. Elle supporte les principales tâches du traitement automatique du langage naturel tel que la détection de phrase ,l’étiquetage morpho-syntaxique,la tokenisation,..).Je vais parler des fonctionnalités et performance avec le support d’une étude comparative
Apache OpenNLP
Apache OpenNLP est un projet opensource dont le code est disponible sur github https://github.com/apache/opennlp
A l’heure ou j’écris ces lignes il y a un peu moins de 20 contributeurs qui ont effectué plus de 1700 commit et sur ce projet. Sa renommée actuelle est de 429 stars. Au niveau du nombre de ligne de code j’en ai compté un peu moins de 66 919 en java (grâce à CLOC)
Avant de rentrer dans les détails je vais vous présenter les résultats d’une étude destiné à comparer cette boite à outils avec d’autre au niveau des fonctionnalités et des performance.[1]
Une première différence est la cible des texte : certaines boites à outils sont conçue pour étudier les tweet alors que les autres boites sont plus génériques.
La distinction principale au niveau des fonctionnalité est la présence ou non du chunking et du NER
Je vais détailler quelques tâches de base mais vous pouvez lire une explication similaire dans l’étude cité précédemment.
- La tache (NER) Name Entity Recognition consiste a classifier dans un texte les mots correspondant à une certaine catégorie (noms des personnes, les lieux, les organisations les dates.
- Le POS-tagging consiste à marquer chaque mots d’une phrase par sa catégorie(nom,verbe …)
Les performances
Les métriques utiliser pour classifier ces différents outils sont celles classiquement utilisé dans le traitement automatique de texte [2] :
- Précision : La précision donne le pourcentage de réponses correctes
- Rappel : Le rappel donne le pourcentage des réponses correctes qui sont données
Tableau de résultats : pour que ce document reste synthétique je n’ai fourni que deux des tableaux de résultat présent dans [1]
Donc en résume si vous souhaité faire du traitement automatique sur des tweet OpenNLP n’est pas le meilleur choix. En revanche cet outils a su montré des scores de rappel et précision très élevés pour les taches tokenisation et POS-taging sur un dataset de texte génériques (voir l’étude pour plus de détails)
Pour la liste complète des fonctionnalité offerte par cet outils il faut aller vois la documentation sur le site officiel : https://opennlp.apache.org/docs/1.8.2/manual/opennlp.html
Attention certain site indique des fonctionnalité qui ne semble pas présente dans l’outil.
Chaque sous module possède un modèle pour certaines langue de base La plupart donnent également la possibilité d’entraîner un modèle ou d’évaluer un modèle. 1. Language Detector,2. Sentence Detector,3. Tokenizer,4. Name Finder,5. Document Categorizer ,6. Part-of-Speech Tagger,7. Lemmatizer,8. Chunker,9. Parser
DEMO
Pour la petite démonstration :
J’ai choisi de tester sur docker en suivant les instructions sur https://github.com/joeferner/node-java pour avoir node-java puis https://www.npmjs.com/package/opennlp pour des petit exemple de code simple. Si vous suivez les liens vous trouverez les exemples de base que j’ai modifié pour la demomonstration. (point négatif si on veut écrire les fichier depuis le container il semblerai que l’on ne puisse utiliser que vim.)
Références
[1]Alves, A.O., Oliveira, H.G., & Pinto, A.M. (2016). Comparing the Performance of Different NLP Toolkits in Formal and Social Media Text. SLATE.