Actions

Projets

SELF/Évaluation de la production écrite chinoise

De GBLL, TAL, ALAO, etc.

< Projets:SELF
Révision datée du 15 septembre 2021 à 21:01 par Coulangs (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

< M2 IdL — TAL & ALAO/2020-2021

Projet réalisé par Yumeng DING, Jingyu LIU et Ning ZHANG

Lire la proposition de projet "SELF/diagnostic de la production écrite"

Introduction


Notre projet s’inscrit dans le projet « Système d’Évaluation en Langues à visée Formative » (SELF) et il concentre sur la production écrite chinoise au niveau de la syntaxe. En proposant une série d' exercices, le système permettra d'évaluer la production correspondante.

Contexte

Le chinois est une langue orientale et une des spécialités de cette langue est sa flexibilité. Différente de la langue française, la morphologie du chinois est relativement simple, parce qu’il n’y a pas de flexions et d’affixes grammaticales. Les mots à sens lexical sont invariables du point de vue grammatical. Les rapports syntaxiques s’expriment en général à l’aide de mots-outils indépendants (par exemple : particule et prépositions) et de l’ordre des mots. Cependant, l’ordre des mots est assez flexible et il existe encore le débat pour décider si le mandarin est une langue SVO (Sujet-Verbe-Objet) ou une langue SOV(Sujet-Objet-Verbe). Par exemple :

  • SVO : 他 打破 了 玻璃。(Il a cassé la glace.)
  • SOV : 他 把 玻璃 打破 了。(Il a cassé la glace.)

En plus, selon l’analyse faite par HSK Dynamic Composition Corpus, la fréquence de l’erreur au niveau de l’ordre des mots est très élevée.

Analyse des types d’erreur.png

Par conséquent, l’ordre des mots peut être une grande difficulté pour les apprenants pendant les études.

Problématique

Le problématique de notre projet consiste à comment nous pouvons utiliser les outils de TAL pour faciliter les apprentissages de la langue mandarin et pour évaluer leur production écrite.
Au début, il faut construire un corpus à travers le web crawler. Ensuite, il consiste à la réalisation du système principal, y compris l'emploi du module CoreNLP et les règles. Enfin, nous effectuons une interface de web sur laquelle notre système fonctionne.

Objectif

L’objectif de notre projet est de développer un outil qui permet aux apprenants de s’entraîner sur la structure syntaxique du mandarin et faire une auto-évaluation sur leurs productions écrites. Un site d’interface convivial sera aussi développé, celui qui est facile à être utilisé.

Processus principaux

  1. L’utilisateur peut en choisir un parmi une série de livres. Et puis, les textes et les phrases seront choisis aléatoirement par le système.
  2. En donnant une série de constituants de la phrase, on demande de faire remettre en ordre ces différents constituants pour obtenir une phrase significative.
  3. Le système va faire une évaluation en comparant la production avec la référence et les règles. À la fin, un score sera distribué et éventuellement afficher plus d’exemples de la même structure syntaxique pour faire familiariser.

Public visé

Le public visé est principalement les apprenants qui possèdent déjà des connaissances basiques du mandrin et donc ils connaissent les mots simples et les structures basiques (HSK2-HSK3 correspond A2 - B1 dans le cadre de CECRL). En plus, si dans le futur, il est possible de récupérer toutes les erreurs faites par les apprenants, il permet aussi aux enseignants et chercheurs de bien focaliser les difficultés rencontrées pendant les études et développer les stratégies correspondantes.

Présentation de notre travail

Codes du projet

Lien de GitHub : https://github.com/Ning107/Projet-Alao

Web scraper

Un corpus pertinent est un prérequis de ce projet. Nous allons travailler sur le corpus du site « Corpus of Teaching Chinese as Second Language »(« 汉语国际教育动态语料库 ») qui est, malheureusement, non-téléchargeable. Par conséquent, il est important de développer un script de web-scraper pour récupérer une partie de ce corpus afin de réaliser notre objectif. Nous concentrons principalement les dialogues et les textes courts.

Système principal

Ce système est le cœur de notre projet. Par rapport à cette partie, l’objectif est de réaliser le processus de donner une question et vérifier la réponse. Précisément, il peut se classifier dans 4 sous-parties. D’abord, il s’agit de choisir une phrase comme la référence. Ensuite, il faut afficher tous les tokens de cette phrase sans ordre comme la question. Troisièmement, il consiste à analyser la réponse de l’utilisateur et à vérifier si la réponse est correcte. Finalement, notre système va donner un score total pour chaque exercice.

Sélectionner une phrase

Pour la première fonction, il demande à l'utilisateur de choisir un niveau de difficulté et un livre auquel il s'intéresse. Nous donnons deux options : le niveau élémentaire et indépendant. Quant aux livres, tout est un manuel pour l’apprentissage du chinois. Vu qu' un livre contient de nombreux dialogues, notre système va sélectionner aléatoirement un texte comme un exercice, et dans ce texte, le système va également choisir aléatoirement une phrase comme la référence de question. Pour réaliser cette fonction, nous utilisons principalement la classe «java.io.File» pour lire le chemin du fichier, la classe «java.io.FileFilter» pour trouver les textes correspondants selon le nom du livre, et la classe «java.io.FileReader» pour lire le contenu du fichier.

Afficher la question

Deuxièmement, il s’agit de tokeniser la référence. A travers le module du chinois de CoreNLP, les tokens de cette phrase seront récupérés automatiquement en rappelant la fonction de «TextAnnotation». Nous les mettons dans une liste et rappelons la fonction «shuffle» afin de changer l’ordre des tokens et d’afficher aléatoirement.

Vérifier la réponse

Troisièmement, quant à l'analyse de la réponse. Nous proposons que d’abord, elle compare directement avec la référence. Si elles sont pareilles, nous vérifions que la réponse est correcte. Sinon, nous la traiterons au niveau morphosyntaxique. Avant de commencer, il faut aussi tokeniser la réponse et faire le part-of-speech, c’est le même principe que l'étape 3. on a besoin d'une liste de postags correspondants en appliquant «PartOfSpeechAnnotation».

Dans l’algorithme principal, nous parcourons la liste de postags. Pour chaque postags, nous parcourons les règles (nous choisissons les règles de 2-catégories finalement), et pour chaque règle, il faut trouver la même valeur avec le postag actuel dans la liste de X. lorsque la boucle est finie sans arrêt, nous définissons que la réponse est correcte.

Exemple1.png


Exemple2.png
  • Règles

Au niveau morphosyntaxique, nous constatons que si une catégorie de mot est fixe, il y aura des restrictions sur la catégorie des mots du contexte. Inspiré par n-grams, nous proposons des règles de 2-catégories et 3-cathegories. L'idée est de préciser autant que possible la catégorie des mots qui sont autour du mot-clé.

Ici, nous présentons les règles de 2-catégories qui sont en forme de catégorie X suivi de catégorie-clé (X est la catégorie qui n’est pas possible devant mot-clé). Vu que dans le module de CoreNLP les mots chinois se classifier en 33 catégories, si nous voulons lister toutes les possibilités, il faut vérifier 34*33 cas(y compris le cas de l’espace). De cette façon, nous aurons une liste de catégorie X pour chaque catégorie-clé.

Comme il n’existe pas des règles précises sur les catégories des mots en particulier les collocations des catégories. Nous définissons ces règles selon les grammaires du chinois, nos connaissances et les exemples que nous trouvons. Après avoir une version 1 des règles, nous les développons par les textes du corpus en sélectionnant aléatoirement 50 phrases pour améliorer nos règles comme la version 2.

Capture Règles.png


Calculer le score

Afin d'exécuter la fonction de calcul des scores des utilisateurs, il est nécessaire de créer un petit système pour vérifier les scores des questions que nous proposons aux utilisateurs.
Bien qu'au début du plan, nous espérons construire un système qui peut marquer des points en fonction du ratio de phrases. Cependant, nous avons constaté dans la pratique que cela est trop compliqué pour notre système du traitement la réponse en utilisant les règles. Nous avons donc finalement choisi d'adopter un système de score plus simple : tant que la phrase est correcte, un point est attribué et si la phrase est incorrecte, on n’ajoute pas le point.
Nous écrions les codes de cette fonction dans la boucle de l’analyse la réponse de question.

351072829.png

Site d'interface

En tant que la dernière partie de ce projet, la création d’interface du site Web est également un travail indispensable. Le but de cette partie est de proposer un moyen plus pratique au grand public. Nous avons choisi JSP (Java Server Pages) pour développer le site Web.

  • Front-end

L'objectif du front-end est de bien organiser et structurer les contenus sur la page. Il faut planifier les espaces pour chaque fonction. De plus, il doit être aussi beau que possible et s'adapter à différents types de navigateurs (google chrome, firefox etc).

  • Back-end

Le Back-end assure les fonctions basiques de l’interface. Le scripte « index.jsp » consiste à la page d’accueil. Ici, l’utilisateur peut choisir leur niveau d'exercice et les livres correspondants. Une fois le niveau et le livre choisi, il va vers la page d’exercice réalisé par le scripte « exercice.jsp » et chaque exercice contient 5 petites questions à répondre. Pour répondre aux questions, l’utilisateur n’a pas besoin de taper les caractères exacts, mais simplement de cliquer sur le mot. Un clic signifie le choix tandis que deux clics permettent d’annuler le choix. Le bouton « Valide » sert à vérifier la production avec la phrase originale ainsi que les règles et le bouton « Suivant » permet de passer à la question suivante. À la fin, un score sera distribué.
Nous n’arrivons pas à le mettre sur le serveur I3L qui ne fonctionne plus. Par conséquent, des captures de l'interface sont mises ci-dessous pour la visualisation. Nous avons aussi mis une vidéo demo courte en lien suivant : https://youtu.be/g-Lk1-1q1mg

Demo1.png
Demo2.png
Demo3.png
Demo4.png

Difficultés et solutions

Construction du corpus

Le site « Corpus of Teaching Chinese as Second Language » est un site dynamique. C’est à dire que nous n'arrivons pas à obtenir le code source de la page Web, mais uniquement un script « index.js ». Il est donc difficile d’utiliser les outils qui collectent les informations à travers les labels de HTML. Par conséquent, nous avons choisi HtmlUnit et jsoup pour, d’une part, créer un objet client de navigateur qui simule le navigateur afin d’avoir tout le contenu de la page, et d’autre part, manipuler le contenu afin d’extraire ce dont nous avons besoin. Chaque texte est stocké dans un fichier nommé d’après sa source. Nous avons, à la fin, obtenu 1184 fichiers (sur le GitHub, il n’y a que 1000 fichiers en raison de la restriction du GitHub). Pour bien adapter les niveaux de notre public visé, nous avons enlevé de manière manuelle les textes très longs et très difficiles. 390 fichiers composent notre corpus : 221 fichiers pour le niveau élémentaire et 169 fichiers pour le niveau indépendant.

Elaboration des règles

Vu de bon nombre des catégories des mots chinois, proposer les règles 2-catégories, 3-catégories ou plus et lister tous les cas, c’est un travail immense et il demande assez de patience et de très bonnes connaissances. En outre, au fur et à mesure de l'évolution du langage, il y aura des changements sur l’emploi du mot. Par conséquent, les règles ne seront jamais complètes et finies. Nous essayons de développer dans le pratique pour rendre plus complètes.

Site d'interface

L’interface de site du projet nous pose un problème. Comme nous n’avons jamais développé le site en JAVA (uniquement en HTML et PHP), il faut l’apprendre dans un temps limité. Heureusement, les JSP (Java Server Pages) qui permettent de développer le web page consiste principalement aux utilisations de Java et HTML auxquels nous sommes plus familiers.
Nous avons également rencontré des difficultés lors de la création d'un site Web et de la mise en œuvre des fonctions de notre système. Parce que JSP est plutôt un encodage hybride, la partie front-end et la partie back-end de la page Web sont essentiellement implémentées dans le même fichier. Cela a posé quelques problèmes à notre travail de coopération. Parce que nous avons divisé le travail en partie front-end et back-end, et si les codes sont mélangés, cela nous oblige de répéter le travail.

Prise de recul

Evaluation


Corpus de test
Nous créons le corpus de test en choisissant aléatoirement 50 phrases afin de procéder à l'évaluation. Dans les phrases de test, la moitié est correcte et la moitié est fausse pour voir plus clairement la performance de notre système.


Résultat
Nous voyons que le rappel est 0.84, la précision est 0.656 et l'exactitude est 0.7. Le résultat n’est pas satisfaisant. Par rapport à l'analyse des phrases correcte, ce système fonctionne très bien, 84% des phrases sont bien vérifiées. Cependant quant aux fausses phrases , le résultat est faible, il n’y a que 56% des phrases qui sont annotées correctement.

Phrase correcte vérifiée correcte Phrase fausse vérifiée correcte Phrase correcte vérifiée fausse Phrase fausse vérifiée fausse Précision Rappel Exactitude
21 11 4 14 0.656 0.84 0.7


Constatation
Nous constatons globalement qu’il y a 3 raisons pour les erreurs. Même s' il y a des erreurs de tokens ou postags dans le résultat de CoreNLP, nous ne développons pas ici comme une raison.

  • Lorsque la phrase est correcte, d’abord c’est à cause des règles incomplètes, certaines collocations ne se trouvent pas dans les listes, dans ce cas le système va arrêter la boucle et le résultat est faux.
  • En plus, en tant que règles générales, il existe des cas spéciaux qui sont contraire aux règles. par exemple, «一[CD]个[M]苹果[NN]», normalement, M n’est pas possible suivi de CD. cependant pour les expressions du temps ou d’argents comme «两[CD]块[M]五[CD]», c’est une contradiction.
  • En cas de fausses phrases, la cause essentielle des erreurs est que la tolérance des règles est très haute. Par suite la structure flexible du chinois, il n'y a pas trop de restrictions sur la construction au niveau syntaxique. Ainsi il existe un phénomène intéressant, c’est que nous pouvons construire une phrase correcte en utilisant la structure d’une phrase fausse. par exemple, «用小姨开始电脑» est une phrase sans sens, sa structure est «VV, NN, VV, NN». mais nous pouvons écrire aussi une bonne phrase en même structure «教小红说中文». Nous trouvons que cette question concerne l’analyse sémantique, nous pourrons nous améliorer dans le futur.


Bug

Quant aux bugs, nous en avons rencontré de nombreux en cours de réalisation de ce projet, principalement dans deux domaines.

  • Dans le domaine de Crawler le corpus, bien que nous ayons écrit un script capable d'explorer automatiquement les informations du site Web, des erreurs se produisent pendant l'exploration des corpus, entraînant le stockage simultané du contenu de deux textes dans le même fichier. Cela est dû à l'existence du texte avec la même source sur le site du corpus. Notre système génère automatiquement un fichier basé sur la source du texte et le nomme d'après sa source. Bien que nous connaissions le principe de ce bug, nous n'arrivons pas à trouver le moyen de le résoudre. Heureusement, de tels bugs sont rares et n'affectent pas nos fonctions globales.


  • Dans le domaine de vérifier la réponse d’utilisateur, nous rencontrons aussi les bugs. Même si nous avons posé de nombreuses règles, il y aura parfois des cas où la vérification est faute même si la condition de réponse est déjà dans les règles. De plus, bien que la réponse soit la même que la référence, elle est mal jugée par le système. Nous supposons que cela est dû à l'existence d'espaces dans le corpus d'origine, mais dans notre système de poser les questions, les espaces sont automatiquement éliminés, ce qui provoquera un tel bug.

Distance

Concernant la distance entre nos idées et notre travail effectué, 4 points optionnels ne sont pas réalisés car nous n’avons pas de temps pour le faire.

  • Système du compte

Normalement, dans le projet global, il offre 2 types d’utilisation : connecté et visiteur. Il permet à l'utilisateur de se connecter et d’accéder au page d'accueil. Et le nouvel utilisateur peut créer un compte au début.

  • Historie de l’utilisation

Dans chaque compte de l’utilisateur, son histoire est enregistrée, y compris le nombre d’exercices qu’il a réalisés, les erreurs qu’il a faites et les exercices qu’il veut noter.

  • Clavier virtuel

Sauf que l’utilisateur peut choisir les tokens en les cliquant, nous proposons aussi un clavier virtuel permettant de taper directement.

  • Explication de l’erreur

Nous comptons indiquer l’erreur de chaque fausse phrase et donner l’explication de cette catégorie de mot et son emploi.

Amélioration

Nous trouvons que la partie de web crawler est plus complète qu’autre partie.
Dans la partie de système principal, nous proposons de réaliser les fonctions optionnelles non effectuant à cause du temps.
Sur le corpus, c’est mieux de proposer une façon automatique de filtrer les dialogues et de les classifier aux différents niveaux .
Abordons la vérification d’une phrase, sauf les règles basées sur les postags, nous proposons de lier avec l’analyse sémantique. Évidemment, certains noms ne peuvent pas être employés devant certains verbes, mais c’est un problème qui dépasse le champ de l’analyse morphosyntaxique.

Référence et Ressource

Liens


Référence

[浅析对外汉语教材中词性标注的不一致现象——以《中文》(初中版)第一册为例, 姚晓莉, 2020]
[现代汉语“否定语素+X”词语研究, 侯倩, 2019]

Ressource