menu icon

Plonger dans le NLP avec Elastic

Un aperçu sur le NLP et un guide pratique sur la façon dont il peut être utilisé avec la Suite Elastic pour améliorer les capacités de recherche.

Plonger dans le NLP avec Elastic

Introduction

Le traitement automatique du langage naturel est un domaine fascinant qui a connu des progrès considérables ces dernières années. Lors d’un de nos événements “Search & Data”, notre collègue Vincent Brehin nous a présenté une conférence sur la facon dont le NLP est utilisé pour améliorer la recherche et l’analyse.

Dans cet article, nous allons fournir un résumé de cette présentation, explorer les bases du NLP et ses applications dans la recherche et l’analyse de données.

L'évolution du traitement du langage naturel

Le traitement automatique de la langue naturelle est un domaine interdisciplinaire qui combine l’informatique, la linguistique et l’intelligence artificielle. Pas étonnant qu’il existe depuis des décennies, fascinant le monde académique. En effet, le NLP a ses racines dans les premiers jours de l’informatique lorsque les chercheurs ont commencé à explorer les moyens de permettre aux machines de traiter le langage humain.

  1. L’une des premières tentatives de développement d’un système NLP a été fait a Georgetown dans les années 1950. Des chercheurs de l’Université de Georgetown ont créé un système de traduction automatique capable de traduire des phrases simples à partir du russe vers l’anglais. Le système reposait sur un ensemble de règles que les chercheurs avaient définies manuellement.

  2. Dans les années 1960, le premier chatbot, ELIZA, a été créé par Joseph Weizenbaum au MIT. Il a utilisé la correspondance de modèles et la substitution pour simuler une conversation avec un humain.

  3. Puis dans les années 1970, des systèmes comme SHRDLU et PARRY ont été développés pour comprendre des commandes en langage naturel et générer des réponses appropriées.

  4. Dans les années 2000, le NLP a commencé à évoluer vers des modèles statistiques et probabilistes. Le modèle de langage probabiliste neuronal (NPLM), proposé en 2003, utilise un réseau de neurones pour modéliser la distribution de probabilité des mots dans une phrase. Cela a permis au système de mieux gérer l’incertitude et la variabilité du langage naturel.

  5. Plus récemment, avec l’essor du deep learning, des modèles comme Word2Vec et BERT ont révolutionné le domaine du NLP. En particulier, BERT, un modèle de deep learning, basé sur l’architecture de transformer, qui peut être affinée pour diverses tâches NLP, telles que la recherche de vecteurs, la réponse aux questions et l’analyse des sentiments.

alt text
NLP jusqu'en 2018

De la recherche par mot-clé à la recherche sémantique

Le traitement du langage naturel est un élément essentiel de toutes les technologie modernes de recherche. Chaque requête de recherche est exprimée en langage naturel, ce qui signifie que le moteur de recherche doit l’analyser pour interpréter notre langue. Elasticsearch peut compter sur un analyseur pour la segmentation de texte, la recherche de mots et filtrage. Ceci, utilisé en conjonction avec le “scoring vector” et l’index inversé, permettent au moteur de recherche d’identifier les documents les plus pertinents à partir de la requête de recherche de nos utilisateurs.

alt text
Comment marche an analyzer?

L’un des problèmes de la recherche par mot-clef repose sur le manque de capacité à comprendre le sens et le contexte des mots, ce qui peut entraîner des résultats non pertinents même lorsque la requête est techniquement correcte. Pour pallier ces limites, la technologie de recherche a évolué vers la “recherche sémantique”. Cette évolution a été stimulée par les progrès de l’intelligence artificielle, en particulier dans le NLP.

Les algorithmes modernes de NLP ont fait de grands progrès dans l’exécution de diverses tâches sur les données textuelles. En voici quelques applications :

Named Entity Recognition

NER est le processus d’identification et de classification des entités nommées dans les données textuelles, telles que les noms de personnes, d’organisations, de lieux, et d’autres entités. Les algorithmes NLP modernes utilisent Champ aléatoire conditionnel (CRF) ou Réseaux de neurones récurrents (RNN), pour analyser le contexte du texte et prédire les entités nommées. Ces modèles sont généralement entraînés sur de grands ensembles de données annotés, où les entités sont étiquetées pour que le modèle apprenne.

alt text
Named Entity Recognition

Sentiment analysis

L’analyse des sentiments est le processus d’analyse des émotions, des opinions ou des attitudes exprimées dans les données textuelles. Les algorithmes NLP modernes utilisent des modèles d’apprentissage automatique, tels que les machines à vecteurs de support (SVM), les classificateurs Naive Bayes, ou Deep Neural Networks (DNNs), pour classer le sentiment du texte comme positif, négatif ou neutre. Ces modèles sont généralement entraînés sur de grands ensembles de données annotés, où le sentiment du texte est marqué pour le modèle puisse apprendre.

alt text
Sentiment analysis

Question answering

QA est la technique qui permet à une machine de répondre automatiquement à une question posée en langage naturel. Les algorithmes NLP modernes utilisent des modèles d’apprentissage automatique, tels que BERT ou GPT, pour répondre aux questions. Ces modèles sont formés sur de grands ensembles de données de questions et de réponses et sont capables de générer une réponse basée sur le contexte de la question.

Pour en savoir plus sur Question Answering, consultez cet article :

Question answering, a more human approach for our research on all.site

alt text
An explanation of QA

Intégration des modernes techniques de NLP dans Elasticsearch

Si vous souhaitez effectuer des tâches de traitement du langage naturel dans votre cluster, vous devez déployer un modèle pre-entraîné approprié. La méthode la plus simple consiste à utiliser un modèle qui a déjà été affiné pour le type de tâche que vous souhaitez effectuer. C’est là que Hugging Face entre en jeu et se positionne en outil idéal.

alt text
Flux pour charge un model avec Eland

Pour télécharger et envoyer directement le modèle souhaité à notre cluster, nous pouvons utiliser le client Eland Python. Vous trouverez ci-dessous un exemple de commande pour ce processus :


eland_import_hub_model
--cloud-id <cloud-id> \ 
-u <username> -p <password> \ 
--hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \ 
--task-type ner \
--start

L’utilisation de l’option –start permet de déployer le modèle directement dans notre cluster. Il est également possible d’utiliser l’API Elastic pour le déploiement de modèle. Actuellement, seuls les modèles pytorch sont pris en charge pour le déploiement.

Une fois que c’est fait, il est possible d’utiliser la fonctionnalité de “ingestion pipeline” d’Elasticsearch afin d’utiliser le modèle NLP pour l’inférence. En effet, le pipeline d’ingestion permet à l’utilisateur de prétraiter, transformer et enrichir les données avant l’indexation : l’utilisateur peut incorporer le modèle NLP dans le flux de traitement des données pour extraire des “features” à partir des données textuelles et améliorer la pertinence de la recherche. Par exemple, nous pouvons déduire l'évaluation des messages ou des tweets à l’aide d’un modèle affiné pour l’analyse des sentiments, ou nous pouvons également utiliser l’inférence à l’ingestion pour intégrer nos données dans des vecteurs denses afin d’effectuer une recherche vectorielle.

Pour ce faire, il faut :

  1. Configurer le cluster élastique avec des données et de model ML
  2. Créer un pipeline d’inférence
  3. Définir le mapping de l’index avec un champ “dense vector”
  4. Ré-indexer, ajouter des embeddings à l’aide du pipeline d’inférence
  5. Effectuer une recherche sémantique, en utilisant knn sur les termes de recherche vectorisés

Pour en savoir plus, vous pouvez lire comment déployer un modèle d’incorporation de texte et l’utiliser pour la recherche sémantique

Tout cela n’est inclus que dans la licence Platinum d’Elasticsearch. Mais ne vous inquiétez pas, il est possible de faire tout ça gratuitement. Une approche consiste à utiliser un module Flask, comme “Flask-RESTful”, pour créer une API RESTful qui se connecte à Elasticsearch et implémente la recherche vectorielle.

Pour ce faire, vous pouvez commencer par vectoriser vos données textuelles utilisant un modèle d’intégration de mots pré-entrainée, tel que Word2Vec ou une version appropriée de BERT. Ensuite, vous pouvez charger les vecteurs dans Elasticsearch à l’aide du client Python Elasticsearch et créer un mapping qui inclut un champ vectoriel pour stocker les valeurs vectorielles. Une fois les vecteurs et l’index en place, vous pouvez utiliser le module Flask pour créer un endpoint qui accepte une requête et effectue une recherche vectorielle sur les documents indexés. Il s’agit de calculer la similarité vectorielle entre la requête et chaque document dans l’index et renvoyant les meilleurs résultats en fonction de leurs scores de similarité.

alt text
Flux pour le vector search

Conclusion

Le traitement du langage naturel (NLP) est devenu un aspect crucial de la recherche et de l’analyse des données. Depuis ses débuts avec l’expérience de Georgetown et le développement des premiers chatbots comme Eliza, Shardlu et Parry, le NLP a considérablement évolué au fil du temps. Aujourd’hui, des techniques NLP avancées telles que Word2Vec et BERT sont utilisées pour permettre la recherche sémantique et mieux comprendre les requêtes en langage naturel. Alors que le NLP continue d'évoluer, nous pouvons nous attendre à voir des applications encore plus puissantes et innovantes de cette technologie dans le domaine de la recherche et de l’analyse des données.

Comprendre les différences entre les vecteurs sémantiques creux et denses

31/01/2024

De plus en plus fréquemment, nous entendons parler de la recherche sémantique et de nouvelles façons de la mettre en œuvre. Dans la dernière version d'OpenSearch (2.11), la recherche sémantique à travers des vecteurs creux a été introduite. Mais que signifie vecteur creux? Comment cela diffère-t-il d'une matrice dense? Tentons de clarifier cela dans cet article.

Lire l'article

Java pour Elasticsearch, épisode 1. Requêter le cluster

18/01/2024

Découvrir comment intégrer Elasticsearch dans votre code est une aventure passionnante et, en réalité, plus simple qu'il n'y paraît. Dans ce premier article de notre série, nous allons explorer ensemble la mise en place d'un cluster de trois nœuds et la manière de s'y connecter en utilisant des certificats auto-générés, démontrant ainsi l'accessibilité et l'efficacité de ce processus.

Lire l'article

Guide complet sur le RAG Open-Source

01/12/2023

Plongée dans le Retrieval-Augmented Generation (RAG). Dans cet article, nous explorons les concepts fondamentaux derrière le RAG, en mettant l'accent sur son rôle dans l'amélioration de la compréhension contextuelle et la synthèse d'informations. De plus, nous fournissons un guide pratique sur la mise en œuvre d'un système RAG en utilisant uniquement des outils open-source et des modèles de langage volumineux.

Lire l'article

Retour de la conférence DevFest Toulouse

19/11/2023

Nous sommes de retour du DevFest Toulouse, occasion pour nous d'assister à plusieurs conférences, nous former et partager une version personnalisée de notre presentation Cloner ChatGPT avec Hugging Face et Elasticsearch.

Lire l'article

L'Art de la Vectorisation d'Images - Un Guide avec OpenSearch

01/10/2023

BLIP-2 est un modèle qui combine les forces de la vision par ordinateur et des grands modèles de langage. Ce mélange puissant permet aux utilisateurs d'engager des conversations avec leurs propres images et de générer du contenu descriptif. Dans cet article, nous verrons comment tirer parti de BLIP-2 pour créer des descriptions d'images enrichies, suivies de leur indexation en tant que vecteurs dans Opensearch.

Lire l'article

NLP dans OpenSearch

18/06/2023

Un guide pratique sur l'importation et l'utilisation de modèles NLP dans OpenSearch pour l'analyse et l'inférence de texte dans vos flux de recherche et d'analyse.

Lire l'article