menu icon

Question answering, une approche plus humaine à nos recherches sur all.site.

Tout sur les Question-Answering et comment l'implémenter en utilisant flask et elasticsearch.

Question answering, une approche plus humaine à nos recherches sur all.site.

Introduction

Il ne fait aucun doute aujourd’hui que le Question-Answering est l’une des principales approches pour rendre la recherche plus similaire à une conversation avec un vieil ami qui sait tout sur tout, plutôt qu’avec une machine. Pour ce faire, le Question Answering mêle les techniques de recherche d’informations (RI) au traitement automatique du langage naturel (TAL).

Comment ça marche?

Dans ce contexte de Question-Answering, un modèle entraîné peut être utilisé pour récupérer la réponse à une question à partir d’un texte donné, qui représente le contexte de recherche. Ce processus appelé « QA extractif » diffère du QA génératif ouvert et du QA génératif fermé, car dans le premier cas il n’y a pas de question et dans le second il n’y a pas de contexte. Dans le cas du Question-Answering extractif, il est nécessaire d’avoir une question et un contexte, mais, souvent, cela ne suffit pas pour déduire une réponse (ou du moins la bonne). En effet chaque réponse aura un score qui représente le niveau de certitude que la réponse donnée est la bonne.

alt text
How question answering works

Notre réponse au Question-Answering sur all.site

Pour Adelean, en tant que leader de l’innovation dans le domaine des moteurs de recherche, le Question-Answering représente un défi non seulement pour rendre la recherche plus pertinente, mais aussi plus amicale et familière. De plus, compte tenu de la nature collaborative de all.site, nous pensons que le Question-Answering peut répondre aux besoins de l’utilisateur de la meilleure façon.

Passons au cœur du sujet : comment le question-answering a été implémenté dans notre moteur de recherche collaboratif.

Tout d’abord, il est important de préciser que, puisque elasticsearch ne propose pas de solution open-source à proprement parler, nous avons décidé de développer notre propre solution sous la forme d’une API REST, combinant la flexibilité de Python avec le potentiel du microframework flask.

alt text
Question answering implementation in all

Alors, comment tout cela fonctionne :

A partir de la question de l’utilisateur, les termes les plus pertinents sont extraits pour effectuer la recherche. Ce filtrage, qui s’effectue à l’aide d’une liste de stop-words, permet de créer une meilleure requête de recherche qui se traduira par une meilleure sélection des documents qui vont servir de contexte dans la tâche de question-answering.

Chaque document est envoyé à l’api flask avec la question. Ici, un nettoyage supplémentaire et une sélection du fragment le plus pertinent sont effectués, afin d’avoir un contexte propre.

Une fois cela fait, la question et le contexte sont prêts : ce qui manque, c’est le modèle.

alt text
From question and context to the answer

Il est possible de créer et d’entraîner son propre modèle, ou d’utiliser des modèles pré-entraînés, en les téléchargeant depuis

Hugging Face - Question Answering

Pour nos besoins, nous avons décidé de choisir le modèle tinyroberta : il s’agit d’une version distillée du modèle de base roberta qui fournit des prédictions comparables plus rapidement. Voici quelques exemples d’importation du modèle pré-entraîné.


model_name = "deepset/tinyroberta-squad2"

tokenizer = AutoTokenizer.from_pretrained(model_name)
model = ORTModelForQuestionAnswering.from_pretrained(model_name, from_transformers=True)
nlp = pipeline("question-answering", model=model, tokenizer=tokenizer)

Dans ce cas, nous avons décidé d’utiliser un modèle ORT plus approprié pour une utilisation dans des environnements à taille limitée.

La fonction pipeline() simplifie l’utilisation du modèle pour l’inférence : dans l’apprentissage automatique, l’inférence de modèle est le processus d’utilisation d’un modèle formé pour faire des prédictions sur de nouvelles données. En d’autres termes, une fois que vous avez appris à un modèle d’apprentissage automatique à reconnaître certains modèles, l’inférence de modèle permet au modèle d’appliquer automatiquement ces connaissances à de nouveaux points de données et de faire des prédictions à leur sujet.

La prédiction renvoie un résultat pour chaque document de fragment donné : ce résultat est composé de deux parties, une réponse et son score relatif. Ce n’est que si le score est supérieur à un seuil donné que la réponse sera considérée comme correcte et qu’elle sera renvoyée à l’utilisateur.


for hit in resp['hits']['hits']:
  for fragment in hit['highlight']['attachment.content']:
    context = cleanAndTrim(fragment)
    QA_input = {'question': question,
                'context' : context}

    answer = nlp(QA_input)

    if (answer.get('score') > 0.50):
      return answer.get('answer')

Définir la valeur de seuil la plus correcte peut être extrêmement difficile : en effet, si un seuil trop bas augmente le rappel et diminue le temps de réponse, en revanche un seuil trop élevé augmente la précision, mais peut diminuer le temps de réponse. Il est également très important que le contexte utilisé dans le processus d’inférence soit propre, clair et pertinent.

alt text
Workflow for question answering

C’est pour cela que les différentes étapes d’optimisation sont nécessaires.

Et après?

L’apprentissage automatique pose chaque jour de nouveaux défis pour l’avenir. En tant que leaders de l’innovation, nous devons être toujours à l’affût des nouvelles solutions et des nouvelles technologies : le question-answering n’est qu’un premier pas vers la révolution qui va rendre les moteurs de recherche plus puissants.

Par exemple, la recherche vectorielle et les transformers pré-génératifs sont de nouvelles technologies prometteuses.

Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne – retour sur la conférence ElasticON

10/03/2023

Retour sur la présentation Assurer la scalabilité d’un moteur de recherche pour des milliers de magasins en ligne par Roudy Khoury et Aline Paponaud à ElasticON 2023

Lire l'article

Retour d’Expérience - Fine-tuning d’un modèle VOSK

05/01/2022

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Lire l'article

Retour d’Expérience - Indexation des transcriptions de fichiers média

17/12/2021

all.site est un moteur de recherche collaboratif. Il fonctionne comme Bing ou Google mais il a l’avantage de pouvoir aller plus loin en indexant par exemple les contenus média et en organisant les données de systèmes comme Slack, Confluence ou l’ensemble des informations présentes dans l’intranet d’une entreprise.

Lire l'article

La revue de presse du 25 Novembre 2021

25/11/2021

Bientôt le weekend, bientôt l'hiver, alors une petite revue de presse pour occuper vos longues soirées...

Lire l'article

Nouveau meetup Search & Data - E-Commerce Search et Open Source

28/10/2021

La cinquième édition du meetup Search and Data est dédiée au search e-commerce et à l'open source. Un bel agenda pour cette édition de rentrée et de reprise.

Lire l'article

Expédition vers Synonym Graph dans Elasticsearch

21/04/2021

Dans cet article, nous expliquons comment nous sommes passés des anciens filtres de synonymes d'Elasticsearch aux nouveaux filtres de type graphe, les Synonym Graph Token Filter.

Lire l'article

Quand les requêtes sont très verbeuses

22/02/2021

Dans cet article, nous présentons une méthode simple pour réécrire les requêtes utilisateurs afin qu'un moteur de recherche basé sur des mots clés puisse mieux les comprendre. Cette méthode est très utile dans le contexte d'une recherche vocale ou une conversation avec un chatbot, contexte dans lequel les requêtes utilisateur sont généralement plus verbeuses.

Lire l'article

Enrichir les données et réécrire les requêtes avec le percolator Elasticsearch

26/04/2019

Cet article est une transcription de notre intervention cette semaine à Haystack - une conférence sur l'amélioration de la pertinence des moteurs de recherche. Nous avons montré une méthode permettant d'enrichir et de réécrire les requêtes des utilisateurs en utilisant Wikidata et le percolator Elasticsearch.

Lire l'article

A2 le moteur qui sublime Elasticsearch

13/06/2018

Elasticsearch est une technologie ouverte qui permet aux intégrateurs de construire des solutions toujours plus innovantes et puissantes.

Lire l'article