L’architecture de YouTaQA repose sur une conception innovante intégrant des opérations de prétraitement sur les données de Wikipédia et une structure d’index optimisée. Ce système intelligent utilise des classifieurs de passages et des modules d’extraction de réponses pour fournir des informations précises et pertinentes.
Chapitre 3 :
Conception et implémentation de YouTaQA
Introduction
Dans ce présent chapitre, nous allons présenter la conception de la solution proposée. Nous décrivons les différentes opérations de prétraitement effectuées sur l’ensemble de données de Wikipédia, nous présentons aussi la structure de notre index. De plus, nous détaillons dans ce chapitre l’architecture et les paramètres utilisés pour notre classifieur des passages et de notre module d’extraction des réponses.
Architecture globale du système YouTaQA
Notre système est basé sur le Deep Learning et de la recherche d’information. Son but principal est de permettre aux utilisateurs d’avoir des réponses exactes à leurs questions uniquement en se basant sur un moteur de recherche qui dispenserait l’utilisateur de fournir des documents ou autre chose mis à part la question. Afin d’atteindre l’objectif de notre système, comme illustré dans la Figure 3.1, nous avons conçu une architecture composée de trois modules de base et une interface pour interagir avec l’utilisateur :
Un Moteur de Recherche d’Information (MRI) qui sert à fournir les 5 passages les plus pertinents à une question donnée.
Un module de classification (MC) des passages basé sur le Deep Learning pour choisir et identifier parmi les 5 résultats du moteur de recherche le meilleur passage susceptible de contenir la bonne réponse à la question.
Un module d’extraction des réponses (MER) basé sur le Deep Learning qui permet d’extraire la réponse exacte à partir du passage choisi par le classifieur dans l’étape précédente.
FIGURE 3.1: Schéma global du systeme YouTaQA
Le choix des jeux de données
Il existe plusieurs jeux de données utilisés pour l’apprentissage des QAS (Section 1.4). Durant notre projet, pour l’entrâınement du système proposé, nous allons utiliser SQuAD (Stanford Question Answering Dataset).
SQUAD
SQUAD a été proposé par l’université de Stanford. Il contient un nombre impressionnant de questions (100.000 questions posées par des gens sur plus de 500 articles de différents domaines sur Wikipedia). Les passages dans SQuAD ont été extraits des articles de Wikipédia et couvrent un large éventail de sujets dans des domaines variés, allant des célébrités de la musique aux concepts abstraits. De plus, les questions sans réponses étaient le talon d’achille des jeux de données des systèmes questions-réponses, là encore, SQuAD fournit 50.000 questions sans réponses posées aléatoirement par la foule qui ont pour but de ressembler à des questions qui n’ont pas de réponses.
Un passage est un paragraphe d’un article d’une longueur variable. Chaque passage de SQuAD est accompagné de plusieurs questions. Ces questions sont basées sur le contenu du passage et qui peuvent avoir des réponses en lisant le passage. Enfin, pour chaque question, il existe une ou plusieurs réponses. Etant donné que les réponses sont des segments des passages, cela permettra au système d’apprendre d’une manière optimale la façon dont il doit extraire les réponses de ces passages. De plus, dans SQuAD, les mots des questions sont souvent des synonymes de mots dans le passage, il s’agit d’une variation lexicale en raison de la synonymie.
Pour avoir une vision plus claire sur la structure de SQuAD, nous présentons ci-dessous un exemple d’une question extraite du jeu de données :
« question » : « When did Beyonce start becoming popular? »,
« id » : « 56be85543aeaaa14008c9063 », « answer » : « in the late 1990s », « answer start » : 269,
« is impossible » : false,
« context » : « Beyonce Giselle Knowles-Carter is an American singer, songwriter, record producer and actress. Born and raised in Houston, Texas, she performed in various singing and dancing com- petitions as a child, and rose to fame in the late 1990s ».
L’exemple ci-dessus est un exemple d’une question sur SQuAD à partir d’un passage « context » d’un article de Wikipédia. Comme nous pouvons le voir, chaque question est identifiée par un « id ». De plus, nous avons une variable booléenne « is impossible » qui permet de préciser si le passage contient une réponse à la question ou non. Dans le cas ou` le passage contient une réponse à la question, la variable « answer start » indique l’index du début de la réponse dans le champs « context ».
Wikipedia
Puisque les questions proposées dans le jeu de données SQUAD sont basées sur des articles de Wikipedia, en vue d’établir un moteur de recherche, nous avons utilisé Wikipédia comme base de documents. Cette dernière offre l’intégralité de ses articles en plusieurs langues, parmi elles l’anglais. Wikipedia est disponible en ligne gratuitement en format XML 1 et comprend plus de 6.1 millions d’articles [Wik, 2020].
Comme nous pouvons le voir dans la Figure 3.2, notre base de documents a une structure XML qui permet de pourvoir des informations telles que le titre de l’article, la date de création, l’identifiant unique de l’article et le plus important qui est le contenu de l’article fractionné en sections.
Moteur de recherche MRI
Un moteur de recherche est un programme basé sur la recherche d’information et qui collecte et organise un ensemble de documents afin de faciliter la quête d’un ou plusieurs documents. De base, les utilisateurs saisissent une requête sur ce qu’elles aimeraient trouver et le moteur fournit le contenu qui correspond à ce
https://dumps.wikimedia.org/enwiki/latest/
FIGURE 3.2: Structure XML d’un article Wikipédia
qu’elles veulent. Pour notre moteur de recherche, nous avons suivi la même philosophie. Nous nous sommes basés sur la collection exhaustive d’articles fournie par Wikipédia.
Pré-traitement de la base Wikipédia
Fractionnement des articles
Après avoir choisi la base de wikipédia, et afin de simplifier la manipulation de la grande quantité des données de notre base de données, nous avons procédé à une répartition des articles de wikipédia sur trois niveaux d’arborescence de dossiers. Pour cela, chaque article sera répertorié suivant son id unique (eg. L’article avec l’id = 00020201 sera placé dans le répertoire 00/02/02/ sous le nom 00020201.xml) comme le montre la Figure 3.3.
Interprétation de la syntaxe de Wikipédia
Dans ses articles, Wikipédia utilise souvent une syntaxe spéciale nommée « WikiText » 2 qui sert à maquiller ses articles (par exemple, appliquer du gras sur le mot « Bonjour » revient à écrire « » »Bonjour » » » dans ses articles en format brut ), ce qui nous a causés une certaine difficulté. Afin de remédier à ce problème, nous avons
WikiText : Langage de balisage qui permet la mise en forme du contenu des articles de Wikipédia.
FIGURE 3.3: Arborescence des fichiers XML.
appliqué un formatage du texte en utilisant le script WikiExtractor 3 qui nous a permis de nous débarrasser de la mise en page appliquée par Wikipédia.
Indexation des articles
Après avoir traité les articles de Wikipédia, nous avons indexé ces articles en utilisant la bibliothèque Py-Lucene. Dans cette étape, nous avons procédé à l’implémentation d’un analyseur personnalisé pour notre index inversé 4. Cet analyseur sert à appliquer les transformations du texte telles que la suppression des mots vides, la tokenisation, la normalisation et le stemming 5 des mots de chaque article.
Pour but de faciliter la tâche de notre future module d’extraction des réponses, et afin de booster les performances de notre système en terme de temps d’exécution, au lieu de considérer les articles en eux-mêmes comme des documents, nous avons eu l’idée de considérer les sections des articles comme documents afin de peaufiner la recherche suite à une requête donnée. Pour éclaircir tout cela, nous avons illustré dans la Figure l’exemple d’une page Wikipédia et comment l’index va considérer cet article en divisant le même article en trois documents.
WikiExtractor : Un script Python qui permet de convertir la mise en page appliqué par wikipédia en un text pure sans syntaxe.
Index inversé : C’est une structure de données qui stocke la correspondance entre le contenu, tel que des mots ou des chiffres, et ses emplacements dans un document ou un ensemble de documents.
https://en.wikipedia.org/wiki/Stemming
FIGURE 3.4: Schéma représentatif des sections d’un article Wikipédia
Notre index est constitué de 5 champs essentiels :
L’identifiant de l’article qui est unique à chaque article (Champs de type LongPoint).
Le titre de l’article (Champs de type StringField).
L’identifiant de la section (Champs de type LongPoint).
Le titre de la section (Champs de type StringField).
Le contenu de la section, c’est le contenu principal de chaque document (Champs de type TextField).
Méthodes de recherche adoptées
Pour le processus de recherche, nous avons opté pour deux méthodes de recherche différentes applicables sur notre index.
Méthode de recherche SimpleFieldSearch : La première méthode de recherche, qui est la plus basique, sera en fait une méthode de recherche qui, après avoir extrait les mots clés d’une requête, permet de rechercher les mots clés dans le contenu des documents seulement.
Méthode de recherche MultifieldsSearch : Cette méthode consiste à faire une recherche sur à la fois le contenu et le titre.
Module de classification MC
Comme décrit dans la Section 2.2.3, BERT est un modèle pré-entrâıné basé sur le « Transfer Learning » capable de réaliser plusieurs tâches NLP. Parmi ces tâches, nous retrouvons la classification de texte. Pour notre cas, nous avons utilisé BERT Base Uncased dans le but de réduire le temps d’exécution durant les expérimentations.
FIGURE 3.5: La phase de tokenisation des entrées.
Pour ajouter une tâche de classification de texte à BERT, nous intégrons à la fois la question et le passage dans la saisie. Comme première étape, nous commençons par la tokenisation de notre jeu de données afin de le coder suivant le même format. La fonction de tokenisation parcourt les données et concatène chaque paire de Question-Passage comme illustré dans la Figure 3.5.
Chaque séquence (paire) commence par le token de classification spécial [CLS] en plus d’un autre token spécial [SEP] qui sépare les deux parties de l’entrée et permet ainsi à BERT de différencier la question et le passage. Afin que tous les tokens soient de la même taille, nous avons défini une taille maximale aux séquences d’entrée égale à 300, complétée avec un remplissage (padding) avec le mot clé [PAD] dans le cas ou` la taille du passage concaténé à la question est inférieure à la taille de l’entrée fixée. BERT utilise « Segment Embeddings » afin de différencier la question du passage. Dans la Figure 3.5, A et B représentent les « Segment Embeddings » ajoutés aux tokens codés avant de les passer comme paramètres d’entrée.
FIGURE 3.6: La classification du texte avec BERT.
Le premier token de chaque séquence d’entrée de BERT est toujours un token de classification [CLS] c-à-dire qu’il est utilisé pour les tâches de classification NLP de BERT [Devlin et al., 2018]. Le MC prend comme entrée la question et le passage, les passe sur les 12 couches de BERT Base et produit comme sortie une prédiction que le passage contient la réponse recherchée (Figure 3.6). La valeur de sortie est ensuite normalisée avec la fonction Sigmoid 6 pour enfin avoir une classification binaire c-à-dire 1 si le passage contient la réponse et 0 sinon.
Module d’extraction de réponses MER
En ce qui concerne le module d’extraction de la réponse, nous avons mis en oeuvre un modèle qui, étant donné une question et un passage reçu par le MC, BERT doit retourner la partie du texte correspondante à la bonne réponse. En d’autres termes, le modèle prédit le début et la fin de la réponse exacte à partir du passage donné qui est le plus susceptible de répondre à la question. Pour ce faire, notre modèle doit passer par l’étape d’entrâınement en utilisant un ensemble de données destiné à ce cas de figure. Dans ce cas, nous allons utiliser SQuAD.
Après avoir sélectionné le passage le plus pertinent parmi ceux retournés par le MRI, le module d’extraction le prend comme entrée, accompagné par la question posée. Comme c’était le cas pour le MC, le MER prend comme entrée la paire Question – Passage candidat tokenisée et produit en sortie la réponse jugée exacte à la question donnée et qui est extraite à partir du passage. Le MER proposé a été entrâıné avec BERT Base Uncased.
(a) Extraction du début de la réponse
(b) Extraction de la fin de la réponse
FIGURE 3.7: Extraction du début et fin de la réponse avec BERT.
Pour chaque token dans le passage choisi, nous l’introduisons dans le classificateur de token de début/fin. L’extracteur de début/fin passe l’entrée sur les 12 couches de BERT Base et produit un vecteur de sortie (les rectangles oranges produits par la dernière couche dans la Figure 3.7) ou` chaque case représente la sortie d’un mot du texte.
Ce vecteur est ensuite multiplié par une matrice de début/fin (représentée dans la Figure 3.7 par des rectangles bleus/rouges). La taille de cette matrice est 768*N tel que N représente la taille du passage d’entrée. Le produit est donc un vecteur de taille N sur lequel la fonction Softmax 7 est appliquée pour avoir un nouveau vecteur de probabilités (dont la somme est égale à 1).
Chaque casei du vecteur représente la probabilité que le moti tel que i ∈ N représente le début/la fin de la réponse.
BERT englobe les deux modèles d’extraction de début et de fin qui s’entrâınent séparément. Il comporte une dernière couche qui s’occupe de les fusionner pour délimiter à la fin la réponse à la question posée. Dans l’exemple illustré dans la Figure 3.7, le MER choisi le token 340 comme début de réponse et M comme fin de réponses suivant leurs probabilités.
https://fr.wikipedia.org/wiki/Fonction softmax
Déploiement du système YouTaQA
Afin d’interagir avec les utilisateurs de notre système, nous avons mis en œuvre une application web SPA 8 complète qui fournit une expérience utilisateur facile en appliquant les dernières normes UI 9 et l’utilisation du Material Design 10 fourni par Google comme nous pouvons le voir dans la capture d’écran de notre interface dans la Figure 3.8. Pour cela, nous avons utilisé pour le front-end un template Colorlib 11 bâtis en utilisant VueJs 12, Bootstrap 13 pour le front-end et le framework python Django 14 pour le back-end.
FIGURE 3.8: Capture d’écran de l’application web YouTaQA
Conclusion
Dans ce chapitre nous avons décrit l’architecture de notre système de la saisie de la question par l’utilisateur jusqu’à l’obtention des résultats en passant par plusieurs étapes qui sont : (i) La sélection des passages pertinents, (ii) La classification de ces derniers par probabilité et (iii) L’extraction de la réponse exacte à partir du meilleur passage choisi. Nous présenterons dans le chapitre suivant nos résultats ainsi que leurs discussions.
____________________________
SPA (Single page application) : c’est une application qui n’a pas besoin de recharger la page dans le navigateur pendant son utilisation.
UI (user interface) : signifie « interface utilisateur », c’est la présentation graphique d’une application.
Material Design : C’est un ensemble de règles de design proposées par Google et qui s’appliquent à l’interface graphique. https://colorlib.com/wp/templates/
VueJs : c’est un framework pour construire des interfaces utilisateur à base de javascript.
Bootstrap : c’est un framework CSS pour construire des interfaces utilisateur.
Django : c’est un framework web gratuit écrit en Python qui sert à développer des applications web.