Archive for June, 2007
Transcription des règles d’erreurs, de An Gramadóir vers LanguageTool
Transcription des règles
Myriam a
écrit un peu plus de 500 règles d’erreurs pour An Gramadóir. Cette
semaine, nous les avons importées dans LanguageTool. Pour cela nous avons dû
les réécrire en XML. Bien sûr, nous n’avons pas fait ce travail
manuellement. Nous avons écrit un petit programme permettant de transcrire
les règles automatiquement dans le bon formalisme.
Par exemple, la règle de An Gramadóir du type :
<DS>ANYTHING</DS>
<JS>ANYTHING</JS> <NP>ANYTHING</NP>:NOMBRE
a été réécrite en :
<rule>
<pattern mark_from=”2″>
<token
postag=”D .* s” postag_regexp=”yes”/>
<token
postag=”J .* s” postag_regexp=”yes”/>
<token
postag=”N .* p” postag_regexp=”yes”/>
</pattern>
<message>Il y a une erreur
d’accord en nombre</message>
<example type=”correct”>le beau
château</example>
<example type=”correct”>les
beaux châteaux</example>
<example type=”incorrect”>le
beau châteaux</example>
</rule>
Quelques modifications
Nous avons dû par la suite retravailler un peu le … Read more
Réflexions sur le “désambiguïseur”
J’ai commencé à regarder d’un peu plus près le code source de LanguageTool,
le but étant de mieux comprendre le fonctionnement du programme et de voir
comment implanter un désambiguïseur. L’opération s’est révélée un peu
laborieuse étant donné que je suis débutante en Java et qu’il m’a fallu
apprivoiser un peu ce langage…
J’ai essayé de voir comment utiliser l’interface “disambiguator”, récemment
ajoutée à LanguageTool (par Jozef Ličko). Elle permet l’implantation
éventuelle d’un désambiguïseur pour les différentes langues supportées par
le programme. Il nous reste donc à développer ce désambiguïseur pour le
français.
Pour ce qui est de la désambiguïsation en elle-même, nous allons reprendre
les règles écrites par Myriam pour
Gramadoir. Nous avons plusieurs possibilités pour les formaliser. Nous
pourrions les écrire simplement au format texte, ou bien encore conserver
leur formalisme actuel. Nous avons plutôt décidé de les réécrire dans un
fichier au format XML. Ce formalisme a … Read more
Désambiguïsation
Avant de nous lancer dans la conception d’un outil de désambiguïsation,
prenons le temps de faire un petit point sur ce sujet. Nous verrons d’abord
quelles sont les différentes méthodes existantes pour désambiguïser les mots
polycatégoriels (appartenant à plusieurs catégories morpho-syntaxiques).
Nous parlerons ensuite de la méthode choisie par Myriam,
ainsi que des problèmes qu’elle a rencontrés, et pour finir nous ferons des
suggestions pour résoudre certaines difficultés et améliorer la
désambiguïsation.
Méthodes de désambiguïsation
Les désambiguïseurs sont de deux types. Certains sont probabilistes et
d’autres à base de règles. Ils ont tous deux des avantages et des
inconvénients.
1. Méthode statistique
Des probabilités sont calculées à partir d’un apprentissage sur un corpus
étiqueté. Selon le système, les probabilités calculées sont celles de la
contiguïté de 3 tags (ex.: GRAC), de 2 tags (ex.: première version de
LanguageTool), ou celles que tel mot prenne tel tag.
Cette méthode … Read more
Suite du travail sur LanguageTool
Ces derniers jours ont été consacrés en partie à l’étude des possibilités
d’intégration d’un désambiguïseur dans LanguageTool.
Nous avions parlé, dans le précédent billet, de réécrire les règles de
désambiguïsation de An Gramadóir dans le formalisme XML. Il y a bien
sûr beaucoup de manières différentes de représenter les règles en XML.
Voici deux propositions qui reprennent des règles écrites par Myriam
Lechelt. Les deux premières règles sont très proches de la
représentation des règles d’erreurs de LanguageTool. Dans les deux
suivantes, nous avons ajouté un attribut “ambigu” à l’élément token,
pour spécifier quel est le token ambigu, et une balise “disambig” qui
contient le tag à attribuer au token ambigu.
<rulegroup name=”Pronoms personnels objets” id=”Pro_Pers_Obj”>
<rule name=”nous”>
<pattern>
<token
postag=”R Pers”/>
<token
ambig=”yes”>nous</token>
</pattern>
<disambig token=”nous” postag=”R
pers obj 1 p”/>
</rule>
</rulegroup>
<rulegroup … Read more
Chunks et unification
Nous avons pu noter, à travers quelques tests, que les points faibles de
LanguageTool, pour la correction grammaticale du français en particulier,
sont l’absence de désambiguïsation et les règles de détection des
fautes.
Une partie de notre travail va donc consister à réaliser un outil de
désambiguïsation qui nous permettra de réduire le nombre de tags des mots
ambigus (sans toutefois le limiter nécessairement à un tag unique). Nous
pourrons nous aider pour cela des règles de désambiguïsation écrites par Myriam
Lechelt pour Gramadoir.
Pour ce qui est des règles d’erreurs, nous allons utiliser l’approche
proposée par
Myriam, à savoir la segmentation en chunks et l’unification de
structures de traits. Voici une petite explication sur ce qui se cache
derrière ces deux notions.
Qu’est-ce qu’un chunk
?
Un chunk, ou syntagme, est “une unité constituée d’une série de mots tous
contigus les uns aux autres et regroupés autour d’une … Read more
Intérêt des chunks et de l’unification pour la correction grammaticale
L’intérêt le plus évident concerne les accords entre les divers éléments de
la phrase. Il peut s’agir aussi bien d’accords dans un groupe nominal que
d’accords entre le sujet et le verbe par exemple.
Correction “intra-chunk”
Les mots fonctionnels contenus dans un chunk sont dépendants de la tête du
chunk et contraints de s’accorder avec elle. En attribuant des traits
morpho-syntaxiques à tous les éléments d’un syntagme et en utilisant une
méthode d’unification des traits, il est assez facile, au niveau de la
correction grammaticale, de détecter une erreur au sein d’un syntagme.
Tous les éléments d’un chunk doivent avoir leurs traits qui s’unifient
entre eux. Si ça n’est pas le cas, c’est qu’il y a une erreur.
Autrement dit, dans un chunk nominal qui serait du type “DET ADJ N” (ex:
les grandes vacances), le déterminant “DET” et l’adjectif “ADJ”
doivent tous deux s’accorder avec le nom “N” … Read more
Test rapide de LanguageTool (sur le français)
Tests de règles existantes
Nous avons rapidement testé LanguageTool avec quelques règles en français,
écrites par Myriam
Lechelt pour Gramadoir, et adaptées ensuite au formalisme de
LanguageTool.
Conséquences de l'absence de désambiguïsation
Nous avons alors pu remarquer beaucoup de problèmes dans la détection des
erreurs, dus principalement à l'absence de désambiguïsation après le
tagging. En effet, les mots ambigus ont plusieurs tags et lors de
l'application des règles d'erreurs, il suffit qu'un des tags corresponde à
une règle pour que celle-ci soit appliquée, même si un ou plusieurs autres
tags du mot ne correspondent pas à cette règle.
On peut constater cela avec l'exemple suivant, portant sur la confusion
entre sa et ça.
Nous disposons des deux règles suivantes :
- si sa est suivi d'un verbe puis d'un mot quelconque, alors il y
a une erreur et il faut remplacer sa par ça. - si ça est suivi d'un nom
Fonctionnement d’un correcteur grammatical
Avant de décrire la structure de LanguageTool, nous pouvons commencer par
expliquer le fonctionnement des correcteurs grammaticaux de manière
générale.
Le texte à vérifier est d’abord découpé en phrases, puis les phrases en
mots. C’est la tokenisation.
Vient ensuite la phase d’étiquetage morpho-syntaxique
(ou tagging). Chaque mot se voit attribuer une ou plusieurs étiquettes
(tags) contenant des informations telles que la catégorie morpho-syntaxique
(verbe, nom, adjectif, pronom, etc), ainsi que le genre et le nombre (pour
les noms, les adjectifs…), le temps, le mode, la personne, etc… pour les
verbes.
Lors du tagging, les très nombreux mots ambigus reçoivent plusieurs tags.
Une désambiguïsation est
nécessaire pour limiter le nombre d’étiquettes de chaque mot et améliorer
par la suite la détection de fautes de grammaire.
Certains correcteurs utilisent une méthode probabiliste pour désambiguïser
les mots. Ils nécessitent un corpus d’apprentissage sans erreurs et étiqueté
avec les informations morpho-syntaxiques. Ils calculent … Read more