OK
AJAX error!

Les forumsThésaurusTransformation du thésaurus en liste de « synsets »

Transformation du thésaurus en liste de « synsets »

Est-ce que tu prévois une reprise du thésaurus ?

--
Fil extrait de : www.dicollecte.org…
le 16 octobre 2011 à 22:20
Je songe à une refonte du système, mais, pour l'instant, je ne fais guère qu'y songer. J'utiliserai probablement le principe des "synsets" d'OpenThesaurus (avec une adaptation ou deux). Le point épineux, c'est : faut-il lier le thésaurus au dictionnaire ? Si oui, comment ?
le 16 octobre 2011 à 22:37
Je n'ai pas de connaissances dans ce domaine précis. Si tu as quelques infos, je peux essayer de trouver le temps pour les lire. :/

Par lier le thésaurus au dictionnaire, tu veux dire que chaque entrée disposerait de liens avec d'autres entrées synonymes ? Ou tu penses à plus compliqué que cela ?
le 16 octobre 2011 à 22:43
Le principe des synsets est très simple.

Par exemple, voici un synset :
(signification) mot1 | mot2 ... | motN
Chaque synset génère autant d'entrées dans le thésaurus qu'il y a de mots, avec les N-1 autres mots pour synonymes. Ça accélère grandement le développement du thésaurus.
Avec un synset de 10 mots (de même sens), tu crées 10 entrées avec 9 synonymes (ce qui est bien plus efficace que ce dont on dispose maintenant).

Par lier le thésaurus au dictionnaire, tu veux dire que chaque entrée disposerait de liens avec d'autres entrées synonymes ? Ou tu penses à plus compliqué que cela ?


On pourrait concevoir le thésaurus comme une liste d'associations entre les entrées du dictionnaire. Par exemple :
(signification) 120 | 18 | 239 | 12 | 2450
(signification) 120 | 121 | 6 | 332
(signification) 127 | 121 | 6587 | 2932

Chaque numéro n'est que l'identifiant d'une entrée. Évidemment, dans l'interface, c'est le lemme de l'entrée que vous verriez, non son identifiant.
le 16 octobre 2011 à 23:10
Okay, je pensais à ce principe de liste d'associations avec les numéros. Comment va-t-on faire ça ? Devra-t-on tout vérifier au final ? Et actuellement, comment est-ce que ça marche ?
le 17 octobre 2011 à 01:05
Si je fais ce genre de choses (associer les entrées du dictionnaire), il faudra absolument une interface ultra-fluide pour aider les concepteurs, car il n’est pas concevable de procéder avec la recherche actuelle, il faudra un procédé véloce et intuitif, autrement dit du Javascript très bien conçu, fait avec jQuery par exemple. Mais je ne suis pas encore certain de vouloir procéder de la sorte. De toute façon, un système simple de synsets peut être conçu bien avant de vouloir refaire toute l’interface.

Si tu veux savoir s’il faudra vérifier toutes les entrées du thésaurus après réorganisation en synsets, la réponse est probablement oui, mais c’est déjà le cas avec le thésaurus actuel. Une vérification globale ne lui ferait pas de mal. ;)

Actuellement, c’est un truc très rudimentaire en PHP (avec un peu Javascript) que j’ai conçu en deux ou trois jours durant les deux mois de folie où j’ai conçu le système (en 2008). Ça marche très simplement, ça ajoute, édite, ôte ce que l’utilisateur ajoute, édite, ôte, et rien de plus. ;) Le mieux pour se faire une idée, c’est d’essayer.
le 19 octobre 2011 à 16:48
Comme je l'ai déjà dit, je me tiens au courant de l'actualité du projet (je passe tous les jours). Revoir la gestion des synonymes m'intéresse assez. Mais je n'ai malheureusement plus assez de temps pour participer vraiment.
le 19 octobre 2011 à 17:52
J’ai transformé le thésaurus en liste de synsets, puis j’ai appliqué la méthode de genèse décrite plus haut, mais à l’arrache, juste pour voir… ce qui a généré un fichier de 130 Mo ! Après un examen plus minutieux, il va falloir trier et effacer les doublons et les redondances avant d’appliquer cette méthode. Je vais voir si je peux faire ça avec un script…
le 24 octobre 2011 à 16:59
J’ai fait quelques tests sur le thésaurus pour améliorer sa transformation en liste de synsets.
Voir les fichiers : [[ fichiers supprimés ]]

J’ai d’abord « aplati » le thésaurus en mettant en listes ordonnées les synonymes de chaque catégorie (en y ajoutant le mot d’entrée). On constate alors qu’il y a énormément de doublons (fichier thes_fr.dat.synsets.doublons.txt).

Après avoir ôté les doublons, on remarque qu’il y a beaucoup d’entrées que ne sont que des sous-ensembles d’autres entrées (fichier thes_fr.dat.synsets.subsets.txt).
Par exemple :

(Verbe)|baliser|flécher|indiquer|marquer|signaler|signaliser|tracer
(Verbe)|baliser|flécher|indiquer|marquer|signaler|tracer
(Verbe)|baliser|signaler|signaliser



J’ai donc nettoyé ce fichier et effacé tous les sous-ensembles (fichier thes_fr.dat.synsets.subsets-removed.txt). La liste des sous-ensembles ôtés se trouve dans le fichier thes_fr.dat.err.txt. Le signe < indique le sous-ensemble ôté, et # indique l’ensemble supérieur.

À présent, je constate qu’il y a beaucoup d’entrées qui contiennent synonymes quasi-similaires. Exemples :

(?)|discordance|disharmonie|dissonance|dysharmonie|déséquilibre
(?)|discordance|dissonance|inharmonie

(?)|brodequin|chaussure|croquenot|godasse
(?)|brodequin|chaussure|pataugas

(?)|mastication|mordillage|mordillement|mâchonnement
(?)|mastication|mâchage|mâchonnement

(Adverbe)|invinciblement|inéluctablement|irréfutablement|irrépressiblement|irrésistiblement
(Adverbe)|invinciblement|irréductiblement|irréfutablement|irrésistiblement

(?)|cruci-verbiste|mots-croisiste
(?)|cruciverbiste|mots-croisiste|verbicruciste



On constate aussi la présence de mots sous différentes formes fléchies :

(?)|croustillante|croustilleuse|crue|grivoise|leste|triviale|égrillarde
(?)|croustillant|croustilleux|cru|grivois|leste|trivial|égrillard

(?)|bougonne|critiqueuse|geignarde|grincheuse|grognonne|mécontente|ronchonne|rouspéteuse
(?)|bougon|critique|critiqueur|geignard|grincheux|grognon|mécontent|ronchon|rouspéteur



Ensuite, il y a des anomalies. Par exemple :

(?)|cloison|commencement|embryon|fortification|germe| linéament|mur|muraille|muret|murette|paroi|principe|rempart|rillot|rudiment
(?)|cloison|commencement|embryon|fortification|germe| linéament|mur|muraille|muret|murette|paroi|principe|rempart|rudiment|rég




Solutions envisagées :

1. Fusionner les ensembles proches ? Mais quel degré de similitude utiliser ? Si vous connaissez des théories ou des méthodes intéressantes sur les comparaisons d’ensembles, levez la main. :)

2. Transformer chaque mot en son lemme à partir du lexique et refaire la purge des doublons et des sous-ensembles ? Je crains des effets secondaires indésirables.

3. Pour les anomalies, je ne vois pas d’autre solution qu’une purge manuelle, quand le fichier sera factorisé en synsets.

Remarques, questions, suggestions ?
le 26 octobre 2011 à 09:33
Le système arrive-t-il automatiquement à trouver la bonne forme fléchie ?
le 26 octobre 2011 à 12:46
Tu veux dire : peut-on trouver le bon lemme pour chaque forme fléchie ? Probablement, mais il y aura certainement des erreurs lorsque plusieurs cas seront possibles. En fait, il faudrait faire du nettoyage dans les catégories grammaticales de chaque synset pour éviter les confusions. J’ai aussi remarqué la présence de mots absents de notre dictionnaire.
le 26 octobre 2011 à 15:33
Je veux dire que si on se retrouve avec ce cas :

(?)|croustillante|croustilleuse|crue|grivoise|leste|triviale|égrillarde
(?)|croustillant|croustilleux|cru|grivois|leste|trivial|égrillard


On garde uniquement la première ligne (puisqu'on utilise les féminins sur le dictionnaire) et le système trouvera bien les masculins tout seul ?


Et si on se retrouve avec ce cas :

(?)|brodequin|chaussure|croquenot|godasse
(?)|brodequin|chaussure|pataugas


Doit-on faire simplement :

(?)|brodequin|chaussure|croquenot|godasse|pataugas

le 26 octobre 2011 à 17:14
Oui, il faut utiliser les lemmes du dictionnaire si on veut que le thésaurus trouve les formes fléchies équivalentes. Avec des mots au masculin, le thésaurus ne reconnaît même pas les synonymes des lemmes. Il faut totalement revoir tout ça. Je vais donc lemmatiser les synonymes et poursuivre la purge.

Et, oui, je pense que je vais fusionner les entrées présentant un nombre important de synonymes identiques.
le 27 octobre 2011 à 11:27
Tu vas t'occuper de tout ? Tu veux que je fasse un petit quelque chose ?
le 27 octobre 2011 à 12:57
Pour la partie 3 (épuration manuelle), j’aurai besoin de monde.

Pour le reste, il faut savoir programmer. Pour ma part, j’écris en Python, mais n’importe quel langage de haut niveau (Ruby, Perl, etc.) peut servir. En Python, il y a notamment la classe set qui permet de manipuler des ensembles.
le 28 octobre 2011 à 10:21
Je ne peux aider que pour la purge. Il faudra me dire quoi faire. ;-)
le 28 octobre 2011 à 11:20
Bon, je ne suis pas encore arrivé à un résultat totalement satisfaisant, mais je ne sais pas si on peut aller plus loin juste par script.
Je reprends depuis le commencement, afin d’être bien compris.

Le thésaurus est actuellement une liste d’entrées pointant sur une liste de significations différentes, offrant chacune une liste de synonymes. Par exemple :

feu
— (Nom) | lumière | flamme | lanterne | fanal | flambeau | phare | flammes | flambée | flammèche | éblouissement | éclat | étincelle | embrasement | lueur | lumière | clarté | rayon | scintillement | éclair | illumination | fulgurance | luisance | phosphorescence | falot
— (Nom) | passion | ardeur | fanatisme | emballement | délire | exaltation | ferveur | fièvre | frénésie | fureur
— (Nom) | âtre | foyer | cheminée | réchaud | fourneau | chaufferette | brasero | chauffe-plat | tison | brasier | fournaise | chauffage | haut-fourneau
— (Nom) | douleur | brûlure | aigreur | ampoule | cloque | inflammation | irradiation | irritation | insolation | ulcération | rougeur | enfer | souffrance
— (Nom) | destruction | combustion | calcination | incendie | incinération | oxydation | déflagration | flamboiement | ignition | sinistre
— (Nom) | signal | drapeau | balise | déclencheur | déclic | signalement | alarme | alerte
— (Nom) | guerre | combat | bombardement | canonnade | mitraillage | pilonnage | rif | bagarre | tir | salve | coup
— (Adjectif) | disparu | mort | décédé | trépassé | défunt | tué | passé | oublié



Ceci dit, c’est plus la théorie que la pratique, car dans le thésaurus français, la plupart des entrées ne contiennent qu’une seule catégorie listant un ensemble de synonymes, proches ou très éloignés, parfois de significations différentes (avec parfois aussi des erreurs).

Avec cette méthode, le souci, c’est qu’il faut gérer une nombre très important d’entrées et que le thésaurus n’est pas bijectif. Si vous dites que le mot1 est synonyme du mot2 et du mot3, celui-ci est incapable de savoir que le mot2 et le mot3 sont synonymes du mot1. Il faut tout spécifier, ce qui est long et difficile.


BUT
Transformer le thésaurus existant en liste de synsets. Un synset est simplement un ensemble de synonymes. Avec une liste de synsets, il sera possible de créer un thésaurus avec autant d’entrées que de synonymes, sans avoir besoin de réécrire pour chaque mot quel est son synonyme. Le gain de temps pour concevoir le thésaurus est évident, et ça clarifie aussi pas mal le travail à faire.


MÉTHODE

0. Aplatir chaque entrée en liste de synsets.

Avec feu, mentionné plus haut, j’obtiens :

— feu | lumière | flamme | lanterne | fanal | flambeau | phare | flammes | flambée | flammèche | éblouissement | éclat | étincelle | embrasement | lueur | lumière | clarté | rayon | scintillement | éclair | illumination | fulgurance | luisance | phosphorescence | falot
— feu | passion | ardeur | fanatisme | emballement | délire | exaltation | ferveur | fièvre | frénésie | fureur
— feu | âtre | foyer | cheminée | réchaud | fourneau | chaufferette | brasero | chauffe-plat | tison | brasier | fournaise | chauffage | haut-fourneau
— feu | douleur | brûlure | aigreur | ampoule | cloque | inflammation | irradiation | irritation | insolation | ulcération | rougeur | enfer | souffrance
— feu | destruction | combustion | calcination | incendie | incinération | oxydation | déflagration | flamboiement | ignition | sinistre
— feu | signal | drapeau | balise | déclencheur | déclic | signalement | alarme | alerte
— feu | guerre | combat | bombardement | canonnade | mitraillage | pilonnage | rif | bagarre | tir | salve | coup
— feu | disparu | mort | décédé | trépassé | défunt | tué | passé | oublié



Notez que l’entrée est ajoutée à chaque catégorie de sens.

J’ai ôté les catégories grammaticales, car celles-ci sont inutiles et bien imprécises dans le thésaurus actuel.

Dorénavant, quel que soit le nombre de synsets qu’une entrée engendre, ceux-ci sont manipulés indépendamment.

Après aplatissement du thésaurus, on obtient 36266 synsets.


1. Effacement des synsets strictement identiques.
Il reste 29221 synsets.


2. Effacement des sous-ensembles.
Par exemple:
- {'fouace', 'fougasse'}
# {'fouace', 'brioche', 'fougasse', 'miche', 'galette', 'bedaine'}

Le premier ensemble, étant inclus dans le second, est effacé.

Il reste 15293 synsets.


3. Fusion des ensembles proches.
C’est le gros point délicat de l’affaire. Je ne suis même pas sûr que ça présente tellement d’avantages. La fusion des synsets se fait en deux passages :
— premier passage : un synset est fusionné à l’autre si 80 % des synonymes de celui-ci sont présents dans l’autre.
— second passage : fusion si la moitié des synonymes d’un synset sont présents dans l’autre, seulement si le premier synset contient moins de 8 synonymes et que le nombre de synonymes de l’autre synset ne soit pas plus du double du premier.

En modifiant les valeurs de seuil, on peut obtenir des valeurs très différentes.

Il reste 11759 synsets.


4. Lemmatisation des synonymes.
À partir du lexique, tous les synonymes sont transformés en leur lemme (si nécessaire) selon une étude de leur étiquetage grammatical probable.

Ensuite, je recommence ce que j’ai fait plus haut.


5. Effacement des synsets strictement identiques.
Il reste 11711 synsets.

6. Effacement des sous-ensembles.
Il reste 11428 synsets.

7. Fusion des ensembles proches.
Il reste 10538 synsets.

8. Étiquetage grammatical de chaque synset.


RÉSULTAT
Malheureusement, même après tout ça, le nettoyage manuel ne va pas être si simple, même si ça a amélioré l’état global. Le nœud de l’affaire reste la fusion des synsets proches… Si quelqu’un a une meilleure idée…

Voici le thésaurus qui a servi de base de travail, avec chaque étape de sa transformation et les fichiers de contrôle, ainsi que le script qui fait tout le boulot.
[[ fichier supprimé : voir nouvelle version ci-dessous ]]

La commande pour lancer le script :

thes2synsets.py t2s thes_fr.dat


Attention, c’est long. Plus de 20 minutes sur mon vieil Athlon X2 5600+ 4 Go… :D

J’ai écrit ça avec Python 3.2, mais ça devrait probablement fonctionner avec la version 2.7 et les suivantes.


Remarques, idées, questions ?
le 06 novembre 2011 à 09:55
Salut,
Avant-propos : je suis personnellement assez opposé à la notion de synset puisque ça va à l'inverse de ce que j'ai appris sur les synonymes. A savoir que la relation de synonymie n'est pas symétrique (ce que tu appelles bijectif).
Je sais, qu'à la même époque où j'apprenais l'inverse, André Kahlmann a dit dans "Traitement automatique d'un dictionnaire de synonymes" que la symétrisation améliorait globalement le dictionnaire. Mais c'est assez controversé. Je sais aussi que le CRISCO est reparti de cette thèse pour constituer le DES, mais ça lui a posé de nombreux problèmes qu'il a en partie résolue en effectuant une étude sémantique du corpus FRANTEXT pour créer des "cliques" (catégories sémantiques). Néanmoins, il reste beaucoup d'erreurs et d'incohérences qui, 5 ans plus tard, ne sont toujours pas corrigées dans le DES. Entre les hyperonymes, les hyponymes, les synonyme partiels, on arrive à des synsets du genre
conjoint|femme|homme|... et clairement homme n'est pas un synonyme de femme.
Sans compter que si les synsets permettent de générer le thésaurus initial, ils ne permettent pas sa mise à jour, sauf à refaire toutes les corrections manuelles qui ont pu être apportées.

Maintenant revenons au travail que tu as effectué.
A propos de la phase 0, on parlait dans ce fil www.dicollecte.org… de l'ordre bizarre des synonyme dans le thésaurus. Il y a au moins une chose de clair sur cet ordre, c'est que le 1er synonyme servait au classement sémantique (catégorie de signification qui est affiché par Ooo et Libo). C'est quelque chose qui est perdu dès la phase 0 de ton traitement à cause du tri alphabétique.
Par exemple, on retrouve la catégorie (c'est un assez mauvais exemple puisque "fort" n'est pas vraiment catégorisé) :


fort|3
(Adverbe Adjectif Nom)|agissant|actif|énergique|efficace|opérant|influent|zélé|alcoolisé|raide|tassé|balèze| costaud|baraqué|grand|puissant|râblé|efficient|souverain|compétent|enivrant|capiteux|entêtant|grisant| épais|dense|gros|solide|consistant|pâteux|gluant|visqueux|grossier|lourd|pesant|ramassé|dru|expérimenté| exercé|éprouvé|chevronné|adroit|émérite|versé|rompu|habile|connaisseur|averti|capable|savant|vigoureux| robuste|herculéen|ferme|résistant|dur|athlétique|trapu|trempé|doué|intelligent|invincible|abri|bastide| enceinte|gras|dodu|bouffi|corpulent|charnu|étoffé|obèse|plantureux|replet|rond|ventru|huileux|poisseux| fertile|fécond|obscène|licencieux|graveleux|graisse|impétueux|ardent|fougueux|déchaîné|violent|vif| volcanique|bouillant|endiablé|prompt|torrentueux|véhément|effréné|infatigable|inlassable|tenace|autorisé| important|prépondérant|sagace|brillant|éveillé|astucieux|malin|ingénieux|perspicace|intense|intensif|tendu| extrême|continu|soutenu|compact|acharné|invulnérable|imbattable|immortel|increvable|redoutable|malabar| adipeux|graisseux|bedonnant|difforme|prégnant|marquant|obsédant|profond|enfoncé|creux|encaissé|bas| caverneux|grave|obscur|pénétrant|abstrait|abstrus|rance|âcre|moisi|vieux|gâté|rustique|salé|relevé| saumâtre|vivant|expressif|animé|organisé|vivace|respirant



dans le synset (thes_fr.dat.0.txt)

abri|abstrait|abstrus|acharné|actif|adipeux|adroit|agissant|alcoolisé|animé|ardent|astucieux|athlétique| autorisé|averti|balèze|baraqué|bas|bastide|bedonnant|bouffi|bouillant|brillant|capable|capiteux|caverneux| charnu|chevronné|compact|compétent|connaisseur|consistant|continu|corpulent|costaud|creux|dense| difforme|dodu|doué|dru|dur|déchaîné|efficace|efficient|effréné|encaissé|enceinte|endiablé|enfoncé| enivrant|entêtant|exercé|expressif|expérimenté|extrême|ferme|fertile|fort|fougueux|fécond|gluant| graisse|graisseux|grand|gras|grave|graveleux|grisant|gros|grossier|gâté|habile|herculéen|huileux| imbattable|immortel|important|impétueux|increvable|infatigable|influent|ingénieux|inlassable|intelligent| intense|intensif|invincible|invulnérable|licencieux|lourd|malabar|malin|marquant|moisi|obscur|obscène| obsédant|obèse|opérant|organisé|perspicace|pesant|plantureux|poisseux|profond|prompt|prégnant| prépondérant|puissant|pâteux|pénétrant|raide|ramassé|rance|redoutable|relevé|replet|respirant|robuste| rompu|rond|rustique|râblé|résistant|sagace|salé|saumâtre|savant|solide|soutenu|souverain|tassé|tenace| tendu|torrentueux|trapu|trempé|ventru|versé|vieux|vif|vigoureux|violent|visqueux|vivace|vivant| volcanique|véhément|zélé|âcre|émérite|énergique|épais|éprouvé|étoffé|éveillé



et dans le thésaurus final (thes_fr.dat.8.pos-tagged) :

(adj)|abri|abstraite|abstruse|acharnée|active|adipeuse|adroite|agissante|alcoolisée|animée|ardente| astucieuse|athlétique|autorisée|avertie|balèze|baraquée|bas|bastide|bedonnante|bouffie|bouillante| brillante|capable|capiteuse|caverneuse|charnue|chevronnée|compacte|compétente|connaisseuse| consistante|continue|corpulente|costaude|creuse|dense|difforme|dodue|douée|drue|dure|déchaînée| efficace|efficiente|effrénée|empâtée|encaissée|enceinte|endiablée|enfoncée|enivrante|entêtante| exercée|expressive|expérimentée|extrême|ferme|fertile|forte|fougueuse|féconde|gluante|graisse| graisseuse|grande|grasse|grave|graveleuse|grisante|grosse|grossière|gâtée|habile|herculéenne|huileuse| imbattable|immortelle|importante|impétueuse|increvable|infatigable|influente|ingénieuse|inlassable| intelligente|intense|intensive|invincible|invulnérable|licencieuse|lourde|malabar|maligne|marquante| moisie|mou|obscure|obscène|obsédante|obèse|opérante|organisée|perspicace|pesante|plantureuse| poisseuse|pressée|profonde|prompte|prégnante|prépondérante|puissante|pâteuse|pénétrante|raide| ramassée|rance|redoutable|relevée|replète|respirer|robuste|rompue|ronde|rustique|râblée|résistante| sagace|salée|saumâtre|savante|serrée|solide|soutenue|souveraine|tassée|tenace|tendue|torrentueuse| trapue|trempée|ventrue|versée|verveuse|vieux|vigoureuse|violente|visqueuse|vivace|vivante|vive| volcanique|véhémente|zélée|âcre|émérite|énergique|épaisse|éprouvée|étoffée|éveillée



Je pense que quand l'utilisateur va voir pour "abri" la catégorie "abstraite" avec comme synonyme "herculéen", il va se dire qu'on est fou :)
A mon avis, la phase 0 ne peut être effectuée qu'une fois que les synonymes des entrées auront été catégorisées.
Je crois que dans le traitement, il ne faudrait pas perdre la notion d'entrée (ici fort) et de signification (qui au départ ont dû être compilées à partir de dictionnaires des synonymes ou de dictionnaires analogiques).
Ça simplifierait le contrôle humain post-traitement et conserverait une cohérence pour l'affichage de Ooo et Libo.
Par ailleurs, je ne sais pas si Python en est capable, mais ce serait plus clair, pour les humains que nous sommes, de trier selon l'ordre du dictionnaire (A = a = à = â ...) plutôt que selon les codes UTF8.

Pour la phase 1, c'est difficile à dire, il n'y a pas de fichier de contrôle.
Comme dans le thésaurus, les synsets sont en ordre alphabétiques, on ne connaît plus ni l'entrée ni le sens.
Donc, on ne sait pas si les doublons en sont vraiment.

Pour la phase 2, ton exemple est un bon contre-exemple !) qui montre qu'il y a déjà eu quelques tentatives de symétrisation/transitivation dans le thésaurus original.
Si fouace|fougasse|galette peuvent être considérés comme synonymes (si un patissier-boulanger passe par là qu'il me pardonne :)), on se demande bien comment brioche', 'miche' et 'bedaine' ont pu arriver là. On imagine bedaine à partir de ventre via brioche mais miche ?
Pour info : fouace peut aussi s'écrire fouasse mais cette dernière orthographe n'apparaît pas dans le thésaurus.

En phase 3, dans le fichier de contrôle, on retrouve fouace :

-- 6037 --
{'crescendo', 'modulé', 'rythmé', 'ascendant', 'augmentant', 'faucille', 'savarin', 'progressif', 'grandissant', 'tarte', 'plaisir', 'pâtisserie', 'poussant', 'bavaroise', 'prospérant', 'brioche', 'croissant', 'régulier', 'gaufre', 'feuilleté', 'galette', 'tempéré', 'chou', 'meringue', 'rinforzando', 'madeleine', 'gâteau', 'graduel', 'adapté'}
+ {'fouace', 'feuilleté', 'savarin', 'brioche', 'plaisir', 'pâtisserie', 'galette', 'bedaine', 'bavaroise', 'tarte', 'croissant', 'gaufre', 'chou', 'meringue', 'madeleine', 'gâteau'} [8673]
= {'crescendo', 'modulé', 'rythmé', 'fouace', 'savarin', 'grandissant', 'tarte', 'plaisir', 'pâtisserie', 'poussant', 'bedaine', 'prospérant', 'galette', 'tempéré', 'gâteau', 'graduel', 'faucille', 'progressif', 'ascendant', 'augmentant', 'brioche', 'bavaroise', 'feuilleté', 'régulier', 'croissant', 'gaufre', 'chou', 'meringue', 'rinforzando', 'madeleine', 'adapté'}



-- 8308 --
{'fouace', 'hypogastre', 'ventre', 'brioche', 'panse', 'abdomen', 'bedaine'}
+ {'fouace', 'brioche', 'fougasse', 'miche', 'galette', 'bedaine'} [14608]
= {'fouace', 'hypogastre', 'fougasse', 'panse', 'abdomen', 'brioche', 'ventre', 'miche', 'galette', 'bedaine'}


Une fois de plus, on se rend compte qu'il faudrait faire du ménage avant d'envisager un traitement automatisé. Les synonymes étonnants de crescendo sont apparu via l'adjectif "croissant" qui a été confondu avec le nom "croissant" (croissant est étiquetté (Adjectif Nom Verbe) dans le thésaurus initial).
Il ne faut pas fusionner des mots de catégories grammaticales différentes.
Mais on découvre un autre synonyme possible de fouasse/fouace : pâtisserie. Tu noteras que ce n'est pas symétrique.
Dans le 2nd cas, on vient ajouter à tort les synonymes de ventre (probablement suite à l'élimination d'un subset de brioche).

En sortie de la phase 3, on note que le synset "fouace|galette|miche|pain" a échappé aux 2 précédentes phases.

Pour la phase 4, je n'ai regardé que le début du fichier
Amérique|Océanie|continent|terre --> Amériques|Océanie|continent|terre
Pourquoi ajouter un 's', je croyais que le lemme de référence était le féminin singulier ?
Ah oui, Amérique apparaît 2 fois dans le lexique, la 1ere apparition étant la forme plurielle.
César|conquérant|empereur|général|imperator --> César|conquérante|empereur|générale|imperator
Le féminin fait bizarre dans ce cas là.

Pour la phase 5 c'est comme pour la phase 1.

En phase 6


- {'oiseau', 'volatile'}
# {'déficiente', 'éphémère', 'dégradable', 'mince', 'changeante', 'précaire', 'aléatoire', 'capricieuse', 'fine', 'filiforme', 'élancée', 'maigre', 'mièvre', 'menue', 'impuissante', 'chancelante', 'périssable', 'caractérielle', 'fatiguée', 'désarmée', 'gringalet', 'inconstante', 'volatile', 'passagère', 'flottante', 'hasardeuse', 'fuyante', 'sèche', 'errante', 'incertaine', 'sensible', 'fugitive', 'volatilisable', 'fluctuante', 'fluette', 'vulnérable', 'frêle', 'évaporable', 'variable', 'mouvante', 'chétive', 'freluquet', 'gracile', 'attaquable', 'oiseau', 'fragile', 'corruptible', 'faible', 'criquet', 'instable', 'fugace', 'grêle', 'altérable', 'délicate'}


Mélange sémantique. Il faudrait peut-être ne fusionner les synsets que s'il ont plus de 5 ou 6 éléments identiques, ça "garantirait" une proximité de sens.
Au moins si la catégorisation a bien été faite préalablement au traitement.
C'est valable aussi pour la phase 2

En phase 7, au début du fichier de contrôle on trouve :


-- 18 --
{'promptement', 'hâtivement', 'continûment', 'tôt', 'bientôt', 'rapidement', 'quelquefois', 'aussitôt', 'soudainement', 'avant', 'brusquement', 'vite', 'immédiatement', 'prochainement', 'subitement', 'sitôt', 'précipitamment', 'sur-le-champ', 'occasionnellement', 'après-midi', 'sans tarder', 'auparavant', 'emblée', 'prématurément', 'soudain', 'tantôt', 'incessamment', 'parfois', 'lentement', 'instantanément', 'inopinément', 'récemment'}
+ {'promptement', 'hâtivement', 'sur-le-champ', 'soudainement', 'brusquement', 'incessamment', 'instantanément', 'subitement', 'aussitôt', 'soudain', 'précipitamment', 'dès', 'sitôt', 'vite'} [2433]
= {'promptement', 'hâtivement', 'continûment', 'tôt', 'bientôt', 'rapidement', 'quelquefois', 'aussitôt', 'sur-le-champ', 'brusquement', 'vite', 'immédiatement', 'prochainement', 'incessamment', 'subitement', 'sitôt', 'précipitamment', 'dès', 'soudainement', 'après-midi', 'prématurément', 'sans tarder', 'auparavant', 'emblée', 'occasionnellement', 'soudain', 'inopinément', 'tantôt', 'avant', 'parfois', 'lentement', 'instantanément', 'récemment'}


Ça me fait me demander comment ont été fusionnés les subsets dans les phases précédentes. En effet dans le thésaurus initial "promptement" n'a qu'une signification qui est "brusquement". De l'importance de conserver l'entrée et la signification initiales.

En phase 8, on se retrouve avec des synsets fourre-tout, où des participes passés sont donnés pour des noms par exemple (j'ai encore fait une recherche sur fouace :)) :


(nom)|adapté|ascendante|augmenter|bavaroise|bedaine|biscuit|brioche|chou|crescendo|croissant|céramique|faucille|feuilleté|fouace|galette|gaufre|graduel|grandissant|gâteau|madeleine|meringue|miche|modulé|plaisir|pousser|progressive|prospérer|pâtisserie|rinforzando|rythmé|régulière|savarin|tarte|tempéré



Donc pour résumer mes idées, il faudrait :
- commencer par catégoriser à peu près correctement les synonymes (lancer un appel aux contributeurs, voire sur les sites de Ooo et Libo).
Pendant les traitements, il faudrait :
- conserver l'entrée (le mot-vedette),
- conserver la signification,
- conserver l'étiquetage grammatical du mot-vedette (pour les suppressions/fusions des synsets),
- ne fusionner des synsets que si leur signification sont elles-mêmes synonymes, ça résout le problème qu'il ne reste qu'un mot-vedette après la fusion.
- Phase 3 - 1er passage : fusionner si le nombre de synonymes identiques est supérieur à 50/60/70 % du nombre de synonymes du plus grand des 2 synsets, et si ce nombre est supérieur à un seuil (5 ou 6). Cela en plus des critères de signification et d'étiquette grammaticale.
- Ne pas essayer d'enchaîner toutes les phases/passage : Vérifier les fichiers de contrôles et faire les corrections éventuelles avant de lancer la phase suivante.

Tu peux te reporter à :
www.crisco.unicaen.fr…
corela.edel.univ-poitiers.fr…
ainsi qu'aux divers travaux de Jean-Luc Manguin à propos du DES.

Du fait de mon domaine d'activité (temp-réel embarqué dans l'aéronautique) je ne pratique pas les langages de haut niveau.
Je ne peux donc malheureusement pas t'apporter mon aide de ce côté là.

Bon courage.
le 12 novembre 2011 à 13:15
Bonjour Patrick,

D’abord, merci vivement pour ce commentaire constructif.

Je n’ai malheureusement pas le temps de me pencher sur la question en ce moment, car beaucoup de choses ont décidé de survenir en même temps la semaine dernière et je suis très occupé pour les deux ou trois semaines à venir.

patrick_g :
A savoir que la relation de synonymie n'est pas symétrique (ce que tu appelles bijectif).


Je suis entièrement d’accord avec ça. Mais j’avais simplifié l’explication de ce que je comptais faire des synsets.
En fait, ce que je prévois de faire, une fois le thésaurus réduit en synsets, c’est de permettre de signaler quels éléments de l’ensemble ne seront pas employés pour générer une entrée. Je pensais utiliser le signe * pour ce faire.

Par exemple :

conjoint|partenaire|compagnon|femme*|homme*


générera une entrée pour les trois premiers synonymes mais ne fera rien pour les deux derniers.

Autrement dit, je ne comptais pas faire un thésaurus totalement symétrique.


Il y a au moins une chose de clair sur cet ordre, c'est que le 1er synonyme servait au classement sémantique (catégorie de signification qui est affiché par Ooo et Libo). C'est quelque chose qui est perdu dès la phase 0 de ton traitement à cause du tri alphabétique.


Oui, j’en suis conscient. Mon dessein était bien de vérifier à quel point le thésaurus actuel est symétrique, et ce qu’on pourrait factoriser. La raison de cette suppression d’information, c’est que je ne suis pas convaincu qu’elle soit toujours pertinente, correcte ou utile. En fait, ça dépend vraiment des cas. Le thésaurus actuel est un mélange de choses bien faites et d’un vaste chaos, et il n’est pas facile d’avoir une idée nette de la bonne route à suivre pour établir une nouvelle base solide.

Je pense que quand l'utilisateur va voir pour "abri" la catégorie "abstraite" avec comme synonyme "herculéen", il va se dire qu'on est fou :)


C’est clair, mais ceci n’est vraiment qu’un test. Rassure-toi, je n’avais aucune intention de fournir un thésaurus aussi bordélique.

A mon avis, la phase 0 ne peut être effectuée qu'une fois que les synonymes des entrées auront été catégorisées.
Je crois que dans le traitement, il ne faudrait pas perdre la notion d'entrée (ici fort) et de signification (qui au départ ont dû être compilées à partir de dictionnaires des synonymes ou de dictionnaires analogiques).


Je ferai aussi le test en conservant la signification. C’est prévu dès que j’ai du temps à y consacrer.
L’autre souci, c’est qu’il y a dans le thésaurus des entrées sans rapport avec cette signification censément importante.

Par ailleurs, je ne sais pas si Python en est capable, mais ce serait plus clair, pour les humains que nous sommes, de trier selon l'ordre du dictionnaire (A = a = à = â ...) plutôt que selon les codes UTF8.


Je peux effectivement faire ça, comme je le fais pour le tri du dictionnaire.

Pour la phase 1, c'est difficile à dire, il n'y a pas de fichier de contrôle.
Comme dans le thésaurus, les synsets sont en ordre alphabétiques, on ne connaît plus ni l'entrée ni le sens.
Donc, on ne sait pas si les doublons en sont vraiment.


Un diff entre le fichier 0 et 1 me paraît assez instructif. Mais, oui, on perd des informations (de qualité douteuse, àmha) dès l’opération 0, car j’ai voulu manipuler des ensembles.

Il ne faut pas fusionner des mots de catégories grammaticales différentes.


Les catégories grammaticales du thésaurus actuel, c’est très souvent n’importe quoi. J’ai trouvé que c’était plus cohérent de tout réétiqueter à partir du lexique. Comme c’est basé sur une probabilité, oui, tu trouveras des erreurs, mais probablement moins que dans le thésaurus actuel.

Pour la phase 4, je n'ai regardé que le début du fichier
Amérique|Océanie|continent|terre --> Amériques|Océanie|continent|terre
Pourquoi ajouter un 's', je croyais que le lemme de référence était le féminin singulier ?
Ah oui, Amérique apparaît 2 fois dans le lexique, la 1ere apparition étant la forme plurielle.
César|conquérant|empereur|général|imperator --> César|conquérante|empereur|générale|imperator
Le féminin fait bizarre dans ce cas là.


Il est clair qu’un nettoyage manuel est indispensable.
Mon idée, c’était avant tout de voir si en factorisant les ensembles proches, ça n’irait pas plus vite pour tout remettre d’équerre.

En phase 6
Mélange sémantique. Il faudrait peut-être ne fusionner les synsets que s'il ont plus de 5 ou 6 éléments identiques, ça "garantirait" une proximité de sens.


Oui, il va falloir faire pas mal de tests. Les premiers ont donné des résultats étonnants.

- commencer par catégoriser à peu près correctement les synonymes (lancer un appel aux contributeurs, voire sur les sites de Ooo et Libo).


Trop de boulot, àmha. C’est pour ça que ça fait des années que ça n’avance pas.

Pendant les traitements, il faudrait :
- conserver l'entrée (le mot-vedette),
- conserver la signification,


Ce sera testé.

- conserver l'étiquetage grammatical du mot-vedette (pour les suppressions/fusions des synsets),


S’il s’agit juste de se servir de ça pour les opérations, pourquoi pas, mais au final, je pense que je vais réinitialiser l’étiquetage grammatical.

- ne fusionner des synsets que si leur signification sont elles-mêmes synonymes, ça résout le problème qu'il ne reste qu'un mot-vedette après la fusion.
- Phase 3 - 1er passage : fusionner si le nombre de synonymes identiques est supérieur à 50/60/70 % du nombre de synonymes du plus grand des 2 synsets, et si ce nombre est supérieur à un seuil (5 ou 6). Cela en plus des critères de signification et d'étiquette grammaticale.


Sans le critère de signification, un seuil de fusion à 50 % crée des ensembles gigantesques de tout et de n’importe quoi. Mais ton idée est à essayer.

- Ne pas essayer d'enchaîner toutes les phases/passage : Vérifier les fichiers de contrôles et faire les corrections éventuelles avant de lancer la phase suivante.


C’est surtout la fusion des ensembles proches qui est délicate. Quant au contrôle à chaque étape, là encore, la question de la main d’œuvre va se poser. Mais une fois que tout sera prêt, on verra quand même s’il est possible d’attirer du monde juste pour une fois. Mais il faudra d’abord avoir bien testé ce qui est possible.

Du fait de mon domaine d'activité (temp-réel embarqué dans l'aéronautique) je ne pratique pas les langages de haut niveau.
Je ne peux donc malheureusement pas t'apporter mon aide de ce côté là.


Ce retour est déjà très bien. Merci. :)
le 12 novembre 2011 à 14:56
Un point que je n’ai pas encore précisé : si on parvient à transformer le thésaurus en liste de synsets, c’est sur cette base de synsets que le travail se fera par la suite. Le thésaurus sera généré sur cette liste régulièrement, comme le sont les dictionnaires orthographiques. J’ai déjà commencé à revoir l’interface du site.
le 12 novembre 2011 à 15:03
Un message juste pour dire que je n’ai pas laissé tomber l’affaire. Je m’y remets jeudi ou vendredi. :)
le 26 novembre 2011 à 20:05
J’ai modifié le script.
À présent, je ne perds aucune information.

La fusion des synsets avec contrôle de l’étiquetage grammatical fonctionne correctement.

En revanche, le champ signification est un critère trop restrictif s’il doit être strictement identique. Il va falloir que je mette en place une recherche de synonymes.

Par exemple, si la fusion ne peut s’appliquer qu’avec un champ signification identique, il reste :

(adj) | abaissante |avilissante | blessante | corruptrice | destructrice | dégradante | honteuse | humiliante | mortifiante | pervertisseuse | vexante | écrasante
(adj) | abaissante | avilissante | blessante | dégradante | honteuse | humiliante | mortifiante | vexante | vexatoire | écrasante
(adj) | abaissante | avilissante | blessante | dégradante | honteuse | humiliante | mortifiante | vexante | écrasante

le 07 décembre 2011 à 19:18
Bonne nouvelle !
Comment as-tu résolu le cas des mots ayant un étiquetage grammatical multiple - par exemple croissant qui est étiqueté (Adjectif Nom Verbe) - ?

Pour la signification, c'est difficile à dire à partir de ton exemple car on ne connaît ni les mots vedettes ni la signification d'origine.
Ce n'est peut-être pas une fusion qu'il faut faire dans ce cas mais un nettoyage. Le premier synset est le seul à contenir :
corruptrice, destructrice et pervertisseuse
ce qui laisse supposer qu'il devrait avoir une signification à part et qu'une partie des synonymes qu'il contient est probablement incorrecte.
Il ne faudrait pas trier la signification d'origine ou, au choix, il faudrait la repérer (avec une * par exemple) dans la liste. On se rendrait mieux compte de ce qui se passe.
Si tu mets en place une recherche des synonymes pour la signification, avec l'état actuel du thésaurus ne risque-t-on pas de créer encore plus d'erreurs ? Par exemple pèlerine est un synonyme d'automobile dans le thésaurus.

Un petit zip comme la fois précédente serait le bienvenu. Si je trouve un peu de temps, je vais peut-être bien me mettre au python finalement :)
le 08 décembre 2011 à 05:51

patrick_g :
Comment as-tu résolu le cas des mots ayant un étiquetage grammatical multiple - par exemple croissant qui est étiqueté (Adjectif Nom Verbe) - ?


Les tags multiples sont tellement peu fiables que je préfère faire une analyse à partir du lexique. Il y a un fichier de contrôle pour la modifications des étiquettes.

Pour les étiquettes grammaticales, je préfère tout recalculer, mais tu peux conserver les étiquettes non ambiguës du thésaurus en modifiant le paramètre doReset de la commande setPOS. Mets-le à False.

Pour la signification, c'est difficile à dire à partir de ton exemple car on ne connaît ni les mots vedettes ni la signification d'origine.


La signification (m pour meaning) et l’entrée (e) sont à présent indiquées en fin de ligne.

Si tu mets en place une recherche des synonymes pour la signification, avec l'état actuel du thésaurus ne risque-t-on pas de créer encore plus d'erreurs ? Par exemple pèlerine est un synonyme d'automobile dans le thésaurus.


La vérification de la synonymie des significations est un contrôle supplémentaire qui permet d’éviter la fusion de certains synsets.

Le contrôle est le suivant :
si
la signification de l’ensemble 1 fait partie des synonymes de l’ensemble 2
ou si
la signification de l’ensemble 2 fait partie des synonymes de l’ensemble 1
alors
la fusion est possible
(si les autres conditions sont respectées : un certain pourcentage de synonymes communs)

Ça ralentit pas mal les tests.

Un petit zip comme la fois précédente serait le bienvenu. Si je trouve un peu de temps, je vais peut-être bien me mettre au python finalement :)


Voilà : www.dicollecte.org…

La commande est la même :

thes2synsets.py t2s thes_fr.dat


Je n’ai pas eu le temps de faire beaucoup de tests, mais voilà où ça en est. :)
le 09 décembre 2011 à 12:38
Bonjour,

Nouveau message 5 ans plus tard. Merci énormément pour votre travail.

Je souhaite exploiter le thésaurus dans un moteur d'analyse sémantique afin d'automatiser en partie une "simplification" d'un corpus de texte avant analyse (pour faire simple, dans un article de presse d'un corpus, les mots les moins fréquents sont remplacés par un script python par leur synonymes plus courants pour que le nombre global de formes soit plus réduit)

Au vu du site on voit bien que malgré le succès du changement de paradigme en faveur des "synsets" la partie synonymes est bien moins supportée que le dictionnaire principal. Qu'en est-il dans les faits ? Votre sentiment sur son exploitabilité ?
J'ai parcouru la base et elle me semble assez bien conçue, je vais me pencher sur le script python, on ne sait jamais, si je peux contribuer j'en serais ravi.

En ce qui concerne le site lui même j'ai un peu joué et j'ai deux trois questions :
-Lors d'une recherche dans le thésaurus les boutons d'édition n'apparaissent pas. Du coup le seul moyen de modifier l'entrée "sang" (qui n'était pas subdivisée en synsets et j'ai eu envie de le faire pour voir comment ça se goupillait) que j'ai trouvé, a été d'aller sur la page de la documentation de l'entrée "feu" puis dans l'url d'entrer l'id du mot "sang" (trouvé rapidement cependant ^^)...
-Pour cette entrée "sang" l'unique synset était nommée "blood" je trouve curieux d'utiliser faute d'un synonyme "principal" une traduction en anglais. (dans mes modifs j'ai mis "fluide vital" mais il aurait fallu un seul mot... hémoglobine peut être)
le 13 avril 2016 à 17:20
Bonjour,

vchalmel :
Au vu du site on voit bien que malgré le succès du changement de paradigme en faveur des "synsets" la partie synonymes est bien moins supportée que le dictionnaire principal. Qu'en est-il dans les faits ? Votre sentiment sur son exploitabilité ?


Le dictionnaire des synonymes n’est pas notre œuvre. Nous l’avons simplement récupéré, nettoyé et quelques personnes se sont penchées dessus. Mais au final c’est surtout l’œuvre de son auteur initial qui est décédé, m’a-t-on dit.
Constatant que la forme actuelle n’était pas idéale pour son amélioration, j’ai travaillé à la question des synsets, mais je n’ai jamais eu le temps d’aller au bout de ce travail, qui est fourni tel quel et est inusité.

Les synsets sont un projets expérimental inabouti et à l’abandon. Grammalecte m’a trop occupé.

Pour l’exploitabilité du thésaurus, je n’ai pas d’avis. Il n’est pas si mal (ça dépend des entrées), mais il est très perfectible, c’est sûr. Son plus gros défaut, c’est que sur 99% des entrées, il n’y a qu’un seul ensemble où tout est en vrac, alors qu’il faudrait décomposer les entrées. C’est pour ça que j’avais commencé à travailler sur la conception de synsets indépendants.


-Lors d'une recherche dans le thésaurus les boutons d'édition n'apparaissent pas.


Je ne comprends pas.
Pour “sang”, il suffit de chercher “sang” dans Thesaurus, de cliquer dessus, puis cliquer sur le bouton “Verrouiller et éditer”.


-Pour cette entrée "sang" l'unique synset était nommée "blood" je trouve curieux d'utiliser faute d'un synonyme "principal" une traduction en anglais. (dans mes modifs j'ai mis "fluide vital" mais il aurait fallu un seul mot... hémoglobine peut être)


Comme on ne sait pas trop comment a été conçu ce dictionnaire des synonymes, on ne sait pas pourquoi les choses sont telles qu’elles sont. D’après ce qui m’a été dit, une personne a collecté un lot de synonymes d’un ensemble de contributeurs (chez OpenOffice.org) lors d’une période de temps limitée. Il a compilé tout ça et ça a donné ce qu’on trouve ici. Je sais toutefois, pour avoir analysé l’ensemble, qu’il est certain qu’il y a eu aussi un bon nombre d’opérations scriptées pour obtenir ce résultat, car j’y ai trouvé des erreurs et des anomalies qu’un humain n’aurait pas commises (en gros, des répétitions absurdes sur certaines entrées sans rapport avec le contexte, erreurs répétées identiquement en plusieurs endroits).
le 13 avril 2016 à 17:43

Je ne comprends pas.
Pour “sang”, il suffit de chercher “sang” dans Thesaurus, de cliquer dessus, puis cliquer sur le bouton “Verrouiller et éditer”.



Oui j'imagine bien, comme présenté dans la documentation pour "feu". Mais quand j'ai voulu essayer je n'ai vu aucune zone cliquable sur la page des résultats (avec Chrome)... J'ai pu avoir un moment d'absence je regarderais demain, là je suis sur mon téléphone

edit : je confirme aujourd'hui avec firefox, impossible de cliquer sur les résultat de recherche du thésaurus pour ensuite obtenir les fonctionnalités d'édition...
le 13 avril 2016 à 20:02
Corrigé.
le 14 avril 2016 à 12:54

Notification par e-mail    1