Les meilleures librairies NLP en Python (2020)

Si vous souhaitez voir les meilleures librairies NLP Python à un seul endroit, alors vous allez adorer ce guide.

Nous avons testé toutes ces librairies et en utilisons aujourd’hui une bonne partie dans nos projets NLP.

2020, l’année du NLP ?

NLP ou Natural Language Processing (Traitement du Langage Naturel en Français) est un domaine de l’intelligence artificielle permettant de traiter la donnée texte et d’en extraire de l’information pertinente afin que nos machines puissent la comprendre la sémantique ou encore la connotation du langage humain. Avec notre agence data science, nous travaillons sur de nombreuses applications qui incluent du NLP comme la génération automatique de texte, la classification de texte, l’analyse de sentiments, la traduction, le rapprochement sémantique entre deux phrases etc…

L’année 2019 a été chargée riche en découverte dans ce domaine. De nouveaux concepts ont émergés permettant d’améliorer toujours plus la pertinence des modèles. Toujours dans une dynamique de rendre ces nouvelles technologies de plus en plus accessible la communauté data science à mise en place de nombreux outils. L’année 2020 est l’année de mise en production de vos modèles NLP.

Framework BERT (Google)

Embedding – MLM (Modélisation du langage masqué) – NSP (Prédiction de la phrase suivante)

Mise en Open Source par Google fin 2018 et mise en production dans le moteur de recherche pour langue anglaise en Octobre 2019, le framework BERT a révolutionné la façon dont la donnée texte est transformé par nos modèles. Il est un des framework NLP avec la meilleur représentation sémantique de la langue anglaise à ce jour grâce à sa capacité à embarquer beaucoup plus d’informations que ses concurrents lors du processus de vectorisation. Sa flexibilité et sa facilité d’utilisation en font un incontournable. Il existe aussi deux versions françaises: CamemBERT et FlauBERT.

Github: https://github.com/google-research/bert

Transformers (Hugging Face)

Embedding – Tokenization – Génération de texte

Pour moi la meilleure library Python NLP à ce jour, Hugging Face à fait parler d’elle ces deux dernières années. Tout d’abord en 2018 avec sa première levée de fond d’environ 4M€ puis en 2019 avec une nouvelle levée de fond de plus de 13M€. Nous avons vus beaucoup de modèles mise en Open Source ces derniers temps et il n’a fallu que très peu de temps afin qu’il soit implémenté dans cette library. La communauté autour de celle ci est tout simplement une des plus efficaces. Vous retrouverez la possibilité d’utiliser de nombreux algorithmes telle que BERT, GPT-2, RoBERTa, XLM, DistilBert, XLNet, CTRL. Elle vous fournira simplement accès à l’utilisation des architectures ou des modèles pré-entrainés du State Of The Art en matière de NLP. Facile d’utilisation, vous allez pouvoir réaliser des tâches de transfert learning afin d’adapter au mieux la représentation sémantique à vos propre données.

Github: https://github.com/huggingface/transformers

Tokenizers (Hugging Face)

Tokenization – Recherche – Production

La plus récente des library de la liste, Tokenizers a été publié le 10 janvier 2020. Elle fournit une implémentation des tokenizers les plus utilisés aujourd’hui, avec un accent sur la performance et la polyvalence.

Github: https://github.com/huggingface/tokenizers

FLAIR 

Named Entity Recognition – Multilingue – Embedding

Sortie en 2018 par l’équipe recherche de Zalando, cette library s’avère des plus efficaces notamment sur la tâche Name Entity Recognition (NER, Reconnaissance des entités nommées).Flair possède son propre embeddings mais embraque aussi celui de BERT et d’ELMo. Et tout cela pour plusieurs langages. Le NER est une tâche très utile dans le pipeline NLP, le traitement des entités nommées doit être différent de celui des autres mots que l’on peut retrouver dans votre donnée texte. Cette library vous aidera grandement dans cette tâche.

Github: https://github.com/flairNLP/flair

SpaCy

Production – Tokenization – State of the art speed

spaCy est une library NLP open-source en Python. Elle est conçue explicitement pour une utilisation en production. Elle supporte la tokenisation pour plus de 49 langues et fait partie des incontournables dans vos pipeline NLP. Entièrement écrit en Cython, cette library excelle de par sa vitesse de traitement et sa gestion optimisée de la mémoire. Elle possède une compatibilité avec les plus grands framework de Deep Learning telle que TensorFlow et PyTorch. spaCy est votre meilleure option pour préparer vos données en vu d’une ingestion par une IA.

Github: https://github.com/explosion/spaCy

Pattern

Web mining – Scraping – Network analysis

Pattern est un outil de web mining qui vous permettra de récupérer et traiter de la donnée texte extraite de réseau sociaux ou page web, visualiser des graphes mais aussi utiliser certains modèles de Machine Learning. Elle vous permettra de récupérer facilement de la donnée de Twitter, Facebook, Wikipedia ou encore MédiaWiki. Pattern peut aussi s’utiliser pour de l’analyse de sentiments 

On retrouve une syntaxe simple et directe – les noms des fonctions et les paramètres sont choisis de manière à ce que les commandes soient auto-explicatives. Bien qu’elle ne soit pas aussi connue que spaCy ou NLTK, elle contient des fonctionnalités telles que la recherche de superlatifs et de comparaisons, et la détection de faits et d’opinions qui la distingue des autres bibliothèques NLP.

Github: https://github.com/clips/pattern

 Natural Language Toolkit (NLTK)

Pipeline – Easy to use interface – Data

NLTK ou Natural Language Toolkit est certainement une des library les plus répandus en Python lorsqu’il s’agit de travailler avec des données texte, on la retrouve notamment dans de nombreux tutoriels. Elle fournit un accès à plus de 50 corpus et ressources lexicales telles que WordNet, ainsi qu’une suite de bibliothèques de traitement de texte pour la classification, la tokenisation, la lemmatisation etc… Elle fournit une bonne introduction pratique à la programmation pour le NLP en Python.

Github: https://github.com/nltk/nltk

Gensim

Topic Modeling – Information Retrieval – Indexation de documents

Gensim se présente comme étant une bibliothèque Python faites le topic modeling, l’indexation de documents et la recherche de similarités avec de grands corpus. Son nom provient de “Generate Similar” car elle est basé sur une collection de scripts Python permettant de générer une courte liste des articles les plus similaires à un article donné. À ce jour, Gensim est un library robuste, efficace et facile à utiliser pour réaliser des modélisations sémantiques non supervisées à partir de texte simple. Le public cible est essentiellement la communauté du traitement du langage naturel (NLP) et de la recherche d’information (IR). 

Github: https://github.com/RaRe-Technologies/gensim

Polyglot

Multilingue – Pipeline – Sentiment analysis

Polyglot est une library permettant de mettre en place un pipeline de NLP supportant des applications multilingues. Les fonctionnalités comprennent la tokenisation, la détection de la langue, la reconnaissance d’entités nommées, l’analyse des sentiments etc…Moins connu que les autres library et moins suivi par la communauté, elle n’en reste pas moins un outil utile et à connaître.

Github: https://github.com/aboSamoor/polyglot

TextBlob

Pipeline – NLTK – PATTERN

TextBlob fournit une API simple pour plonger dans des tâches courantes de traitement du langage naturel (NLP) telles que le balisage de parties de discours, l’extraction de phrases nominatives, l’analyse des sentiments, la classification, la traduction, l’intégration à WordNet, l’analyse syntaxique et plus encore. Elle peut aussi vous permettre facilement d’importer assez facilement de nombreux fichiers possédant une nomenclature bien défini.

Github: https://github.com/sloria/TextBlob

 CoreNLP

Multilingue – Pipeline – Multi language de programmation

L’objectif de Stanford CoreNLP est de rendre la mise en place d’application d’un ensemble d’outils d’analyse linguistique à un texte. Stanford CoreNLP intègre de nombreux outils de NLP de Stanford, y compris le tagger POS (Part of Speech), le NER (Named Entity Recognizer), l’analyseur syntaxique, l’analyse des sentiments, l’extraction d’informations. Ces outils utilisent divers composants d’apprentissage machine probabiliste, à base de règles et de Deep Learning. Supportant 6 langue différentes, elle est écrite en Java et il est possible de l’utiliser avec d’autre langage de programmation tel que Python.

Github: https://github.com/stanfordnlp/CoreNLP

PyTorch-NLP

Deep Learning – Embedding – Pytorch 

Construite avec l’état de l’art des méthodes NLP, elle a été conçue dès le premier jour pour supporter le prototypage rapide. PyTorch-NLP est livré avec des embeddings, des connecteurs avec différents jeux de données, des métriques déjà implémentés, des modules de réseaux neuronaux et des encodeurs de texte pré-entraînés.

Github: https://github.com/PetrochukM/PyTorch-NLP

GluonNLP

Recherche – Prototypage – Deep Learning

GluonNLP est une boîte à outils permettant de prétraiter facilement des de la données textuelle, d’accéder à un ensemble de données et de mettre en place des modèles neuronaux pour vous aider à accélérer vos recherches en Traitement du Langage Naturel. GluonNLP fournit des implémentations des modèles de Deep Learning à l’état de l’art pour le  NLP, la réalisation de tâches pour les pipelines et les modèles de données textuelles. Il est conçu pour les ingénieurs, les chercheurs et les étudiants afin de prototyper rapidement des idées de recherche et des produits basés sur ces modèles. Elle fait partie de DMLC Distributed (Deep) Machine Learning Community, connu aussi pour la création du modèle de Machine Learning XGBoost.

Github: https://github.com/dmlc/gluon-nlp

Scikit-learn

Pipeline- Prototypage – Machine Learning

Scikit-learn est d’abord destinée au Machine Learning. Elle est développée par de nombreux contributeurs notamment dans le monde académique par des instituts français d’enseignement supérieur et de recherche comme Inria et Télécom Paris. Elle n’est pas considérée comme étant une library NLP. Cependant on retrouve de nombreuses fonctions permettant de mettre en place de nombreuses tâches de traitement du langage naturel. Elle offre de nombreuses fonctions permettant d’utiliser la méthode du Bag Of Words afin de résoudre les problèmes de classification de texte par exemple. La force de cette bibliothèque réside dans les méthodes de classes intuitives. De plus, scikit-learn dispose d’une excellente documentation qui aide les développeurs à tirer le meilleur parti de ses fonctionnalités.

Cependant, elle n’utilise pas de réseaux de neurones pour le prétraitement de texte. Donc si vous souhaitez effectuer des tâches de prétraitement plus complexes comme le POS de votre donnée textuelle, il est préférable d’utiliser d’autres bibliothèques NLP puis de revenir à scikit-learn pour la construction de vos modèles. On la privilégiera pour l’implémentation de pipeline NLP facile et peu poussée. La force de scikit provient plutôt sur la partie modélisation du processus que sur le nettoyage de votre donnée.

Github: https://github.com/scikit-learn/scikit-learn

MindMeld

Chatbots – Recherche Vocale – Deep Learning

MindMeld a été utilisé pour des applications dans des dizaines de domaines différents par certaines des plus grandes organisations mondiales. Au cours de ces déploiements en production, MindMeld a évolué pour devenir le langage idéal pour la mise en place de pipeline NLU –  Compréhension du langage naturel – en production pour tout domaine d’application personnalisé. Elle se veut être une plate-forme d’IA conversationnelle pour les interfaces vocales et les chatbots avec du Deep Learning.

Github: https://github.com/cisco/mindmeld

 HanLP: Han Language Processing

Multilingue – TensorFlow – Recherche

HanLP est multilingue et s’oriente vers les chercheurs mais aussi les entreprises, construite sur TensorFlow 2.0, pour faire progresser les techniques Deep Learning de pointe dans le milieu universitaire et industriel. Elle a été conçue dès le premier jour pour être efficace, conviviale et évolutive. Elle est livré avec des modèles pré-entraînés pour diverses langues, dont l’anglais, le chinois.

Github: https://github.com/hankcs/HanLP

AllenNLP

Recherche – Pytorch – Pipeline

AllenNLP est une library qui s’oriente vers le domaine de la recherche et est construite sur PyTorch, pour développer des modèles de Deep Learning sur une grande variété de tâches linguistiques.

Github: https://github.com/allenai/allennlp

Gpt2-simple

Génération de texte

Cette library Python permet d’utiliser facilement le modèle de génération de texte GPT-2 d’OpenAI (en particulier les versions « small » 124M et « medium » 355M). Elle permet aussi de réaliser la tâche de fine-tuning sur vos propre données, permettant ainsi d’utiliser la représentation sémantique de GPT-2 et de l’adapter à votre cas d’utilisation.

Github: https://github.com/minimaxir/gpt-2-simple

 FastText

Embedding – Pipeline – Multilingue

FastText est une library pour un apprentissage efficace pour du word embedding et de la classification de phrases développé par Facebook AI Research (FAIR). Le modèle permet de créer un algorithme d’apprentissage non supervisé ou supervisé pour obtenir son propre word embedding et avoir sa propre représentation sémantique. Facebook met à disposition des modèles pré-entrainés pour 294 langues. Il est possible de trouver les papiers de recherches associés aux méthodes utilisées.

Github: https://github.com/facebookresearch/fastText

SparkNLP

Pipeline – Multilingue – Calcul distribué

SparkNLP se présente comme la library à l’état de l’art conçu pour être utilisé avec le framework de calcul distribué Spark. 100% Open source, nativement scalable et supportant de multiple language de programmation tel que Python, Scala et Java, elle fait partie de l’incontournable en entreprise lorsqu’il s’agit de travailler dans un environnement Big Data. On y retrouve de nombreux embeddings dont celui de Bert, plus de 30 modèles pré-entraînés pour 4 langues différentes, plus de 25 tâches du pipeline NLP réalisable avec des modèles pré-entrainés et la possibilité de réaliser la plupart des tâches NLP.

Github: https://github.com/JohnSnowLabs/spark-nlp