-
Notifications
You must be signed in to change notification settings - Fork 0
/
Synonymes.tex
168 lines (128 loc) · 7.66 KB
/
Synonymes.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
\section{La Détection de Relations Sémantiques}
Etant donné que le réseau encode de nombreuses relations sémantiques
différentes qui sont a priori identifiables par les poids attribués, il devrait
être possible dans une certaine mesure d'identifier ces relations ou de mettre
certaines relations en avant. Nous avons de nombreux paramètres qui peuvent être
modifiés pour changer les valeurs données à certaines relations et l'objectif
est de trouver les paramètres qui optimise certaines relations. La relation la
plus évidente à vouloir chercher est la synonymie, qui est une relation
entre deux mots qui ont le même sens (approximativement). Comme suggéré au
début, cette relation est en réalité difficilement définissable, surtout par
rapport aux nuances de sens que peuvent prendre des mots. La relation entre
\lq{content}\rq{} et \lq{joyeux}\rq est certes évidente mais le linguiste motivé
peut toujours justifier une différence de sens entre les deux, quoique légère.
Au lieu de rentrer dans les détails du débat de la synonymie, nous jugeons et
évaluons nos relations de synonymie trouvées par rapport aux ressources
externes, qui encode des relations de synonymie. Il est fort possible que ces
ressources ne contiennent pas toutes les relations de synonymie existantes, mais
ce sont des avis externes et établis qui fournissent un premier moyen de juger
si le réseau sémantique établit bien des relations de synonymie.
\subsection{Détection de synonymes}
L'application est très simple et se base sur le parcours en largeur. Elle fait
un appel à ce parcours pour chercher les k plus
proches voisins d'un mot donné. Ce mot peut être associé à une catégorie
syntaxique ou pas. La catégorie syntaxique du mot cible peut également être
spécifiée, permettant de chercher éventuellement des relations autre que la
synonymie (si les catégories source et cible sont différentes).
La liste des voisins (un maximum de k) est renvoyée, ainsi que le chemin
emprunté pour y arriver et la distance entre le mot source et le mot cible.
\subsubsection{L'Interface}
L'interface est réalisée en utilisant les bibliothèques Tkinter et PMW sous
Python.
\begin{center}
\includegraphics[width=13cm]{relationfinderinterface.png}
\end{center}
\begin{enumerate}
\item{L'utilisateur peut écrire un mot à rechercher ici}
\item{Le choix de catégorie syntaxique du mot source parmi une liste
d'options. L'option ``*" par défaut signifie que le mot recherché peut être
de n'importe quelle catégorie}
\item{Le choix de catégorie des mots cibles. La liste d'options est la même
que pour la catégorie source et peut ne pas correspondre à la catégorie
source.}
\item{Le nombre de voisins à renvoyer. Dans le cas où un mot est relié à
moins de voisins que demandé, le maximum de voisins sera renvoyé.}
\item{Pour lancer une recherche sur le réseau}
\item{Les voisins sont affichés avec leur distance entre parenthèses. Le
chemin est affiché en cliquant sur le signe \lq{+}\rq{}}
\end{enumerate}
\subsubsection{Optimisation}
L'objectif principal est de maximiser le nombre de mots trouvés qui
correspondent à la relation de synonymie. Le fait que les paramètres différents
pour la création et le parcours de la matrice soient des valeurs numériques
permet d'envisager une optimisation automatique de
ces valeurs.
Il s'agit, à partir d'un corpus d'entraînement et un vecteur de paramètres de
regénérer la matrice et évaluer les résultats contre les ressources [REF]XXX
pour trouver les valeurs qui donnent le meilleur score.
La bibliothèque Scipy fournit une méthode \lq{minimize}\rq{} qui sert à
minimiser la valeur retourner d'une fonction à partir d'un vecteur de
paramètres.
\subsubsection{WOLF}
Le corpus WOLF a été réalisé à partir du Princeton WordNet et diverses autres
ressources multilingues. Il a été évalué par rapport au WordNet français.
Dans le corpus WOLF nous n'avons récupéré que les données ayant été validées
manuellement. Pour être sûrs de ne pas avoir de bruit dû à quelques ambiguïtés.
Notre extrait de wolf contient 120 mots ainsi que leurs synonymes dans le
corpus. Chaque mot possède entre 1 et 8 synonymes.
\subsubsection{Crisco}
Le dictionnaire de synonymes Crisco a été réalisé par le laboratoire éponyme
spécialisé dans l’analyse de l’articulation entre syntaxe et sémantique.
Le corpus Crisco est un petit corpus que nous avons réalisé nous-même pour voir
si la source du corpus pouvait modifier grandement ou non le score obtenu lors
de l'évaluation. Nous avons créé ce corpus en entrant les différents mots dans
la base de données Crisco disponible en ligne.
Notre corpus est composé de 78 mots ayant chacun entre 1 et 10 synonymes.
\subsubsection{Métrique}
Le vecteur de paramètres comprend les valeurs associées aux types de relations
(ex: pos2entry, sense2deftext, ...) et d'autres paramètres. La récupération de
ce vecteur est incorporée dans le programme
pour la création de la matrice, qui contient aussi des méthodes pour changer
les valeurs de ces paramètres et pour les réécrire dans les fichiers de
configuration.
L'évaluation selon le corpus se fait en utilisant une métrique que nous
avons nous-même définie pour juger de la qualité des résultats renvoyés par la
recherche. Etant donné que les premiers mots dans la liste sont censés être les
plus proches du mot cible, il est important d'incorporer une notion de
l'emplacement d'un synonyme trouvé dans la liste de résultats.
\subsection{Evaluation}
L'évaluation de RelationFinder s'est faite en deux temps. D'abord grâce à des
données récupérées dans le corpus WOLF puis grâce à des données récuppérées sur
le site de Crisco.
Pour faire cette évaluation nous regardons le mot à traiter puis nous cherchons
ses k plus proches voisins (dans notre évaluation k = 19). Si l'un des
synonymes du corpus est dans les k plus proches voisins. On donne un score à ce
synonyme.
Le score est calculé par rapport à la place du synonymes dans la liste des
voisins. Si le synonyme est 3ème sur les 19 voisins, il aura un score de 19 - 3
=\textgreater 16. Si il est 17ème il aura un score de 19 - 17 =\textgreater 2.
Dans le même temps nous calculons le score maximum qu'il est possible
d'obtenir. C'est-à-dire k - len(syns). Si dans le corpus nous avons 5 synonymes
alors le score maximum sera 19 + 18 + 17 + 16 + 15 =\textgreater 85.
Pour calculer l'exactitude de notre RelationFinder nous finissons donc par
diviser le score de tous nos synonymes trouvés par le score maximum total.
Il faut donc bien noter que k ne doit pas être inférieur au nombre maximal de
Synonymes sinon les résultats peuvent tomber en négatif \dots
\subsubsection{Résultats obtenus}
Lors de l'évalutation nous avons choisi k en fonction du résultat obtenu sur
le Littré avec le corpus WOLF.
Les scores peuvent aller de 0 à 1. 0 signifierait qu'aucun synonyme dans la
liste gold n'a été trouvé par RelationFinder tandis que 1 signifierait que
RelationFinder à trouvé tous les synonymes et qu'ils étaient les premiers mots
en relation avec le mot cible.
\begin{enumerate}
\item {Littré :
\begin{enumerate}
\item WOLF : 0,306
\item Crisco : 0,145
\end{enumerate}
}
\item {Wiktionnaire :
\item WOLF : 0,310
\item Crisco : 0,121
}
\end{enumerate}
Ces scores sont relativement bas mais cela peut s'expliquer par le fait que le
RelationFinder ne trouve pas que des synonymes mais aussi des antonymes,
hyperonymes, etc. Pour améliorer le résultat il suffirait donc d'ajouter
tout mot sémantiquement lié au mot que l'on évalue \dots