N-grams et identification des auteurs

Galerie

Cette galerie contient 3 photos.

Ces derniers temps, les études dans le domaine de l’authorship attribution ou de la classification des textes ont pris un souffle nouveau par le biais de l’utilisation de n-grams1, ouvrant des perspectives nouvelles pour la création de modèles indépendants de … Continuer la lecture

L’Information retrieval appliquée à la philologie. II. Differential term weighting

Revenons1 ici sur un projet de billet annoncé depuis quelques temps : celui de l’application possible que l’on peut faire à la philologie de traitements provenant du champ de l’Information retrieval. Cette fois-ci, il sera question du Differential term weighting.

Le principe général du Differential term weighting est de remplacer les effectifs lexicométriques bruts par une valeur calculée selon une formule déterminée. La formule choisie peut répondre à différents principes mathématiques et peut varier selon l’objectif recherché. Nous verrons d’abord les formules existantes et les principes mathématiques et objectifs auxquelles elles répondent, puis, dans un deuxième temps, on se penchera sur leur application possible aux analyses lexicométriques des textes anciens.

Les formules classiques

Avant de nous plonger en détail dans les différentes formules et leur principes et objectifs, attardons nous un peu sur les principes généraux qu’elles recouvrent. Au niveau du résultat recherché, tout d’abord, il ne nous faut pas oublier que ces formules ont été conçues sur la base d’une recherche de pertinence dans les recherches d’information, et que leur objectif est donc l’élimination du bruit dans le cadre d’une recherche plein-texte. Cet objectif diffère sensiblement du nôtre et de notre utilisation des effectifs lexicométriques. Au niveau du principe mathématique, il nous faut tout d’abord différencier deux choses : le poids local (L) qui est affecté à un nombre N d’occurrences d’un mot i dans un texte j (c’est-à-dire à la valeur qui figure, dans un tableau d’occurrences lexicométriques dans une des cellules) , et le poids global (G) qui est affecté au mot i dans l’ensemble des textes. Certaines des formules ne font usage que d’un seul de ces types de poids, d’autres utilisent les deux, sous la forme :LijxGi

Les poids locaux

Les trois types de poids locaux (Lij) employés les plus couramment sont ainsi :

  1. La fréquence brute du mot dans le document, soit Lij = Nij.
  2. Une valeur binaire : si Nij ≥ 1, alors Lij = 1, sinon Lij = 0.
  3. Une valeur logarithmique, employée généralement pour réduire les écarts trop importants entre les termes très fréquents et les termes rares, Lij = log(Nij+1).

Les poids globaux

Les poids globaux s’appuient tous sur une ou plusieurs des trois valeurs suivantes :

  1. le nombre d’occurrences du terme i dans le document j (que nous appellerons ici encore Nij).
  2. Le nombre total de documents dans lequel le terme i apparaît (que nous appellerons Di).
  3. Le nombre d’occurrences total du terme i dans l’ensemble des documents (que nous appellerons Ti).

Il faudrait pour être tout à fait complet, ajouter une dernière valeur, celle du nombre total de documents (Ndoc). Il y a, pour les poids globaux, trois méthodes principales :

1. La méthode dite « Normale » :

Cette méthode consiste donc à définir un poids global qui prenne en compte les différences entre mots très fréquents et mots peu fréquents, tout en les amoindrissant.

2. Occurrences totales sur nombre de documents où le terme est présent :

Ti/DiCette formule donne un poids global qui favorise les termes apparaissant très fréquemment dans un nombre très restreint de documents (un terme qui apparaît 100 fois dans un seul document aura un poids global de 100 ; un terme qui apparaît 100 fois dans 100 documents, aura un poids global de 1).

3. Log2(Ndoc/Di)+1Cette méthode donne un poids global qui favorise les termes qui apparaissent dans peu de documents.

La méthode 1 – entropie

Dans un article désormais un petit peu ancien, Susan T. Dumais décrit une autre méthode dont, selon elle, les résultats sont de loin supérieurs à ceux des autres2. Elle se fonde sur un calcul d’entropie ou de bruit. Mathématiquement, elle se présente ainsi :

entropyCette valeur d’entropie prend en compte la fréquence du terme dans le document concerné par rapport à la fréquence totale du terme, et la rapporte au nombre de documents total. En gros, plus le terme apparaît fréquemment dans un petit nombre de documents, plus la valeur d’entropie sera grande (elle sera supérieure pour un terme apparaissant 10 fois dans un seul document que pour un terme apparaissant en tout dix fois, mais une fois par document).

Intérêt et application de ces méthodes

L’objectif principal de ces méthodes est de fournir des documents pertinents lors d’une recherche d’information. Si elles sont extrêmement intéressantes dans leurs principes, leur utilité dans leur application à la philologie reste en partie à démontrer. On peut toutefois en retenir le principe et l’adapter à ses besoins.

Travaillant récemment, à l’aide d’analyses factorielles et de classification ascendantes hiérarchique, sur un corpus de courts textes (des vidas de troubadours contenues dans le ms. A) avec des propriétés très particulières, j’ai eu recours à une forme très basique de differential term weighting, mais celle-ci m’a été extrêmement utile et m’a permis d’exploiter le corpus sans me retrouver face à des résultats totalement biaisés. Les propriétés particulières de ce corpus étaient :

1. De se composer d’un ensemble de très courts textes, avec une moyenne de 164 mots, et une médiane de 147, qui pouvaient se répartir de ce point de vue en deux groupes principaux : entre 20 et 100 mots, et entre 100 et 300, mais malgré tout avec quelques individus aberrants pouvant dépasser 400 mots, voire atteindre 676. Comme une image vaut parfois mieux que de longs discours, voici la boîte à moustaches :Boîte à moustaches des vidas de A

2. D’utiliser un vocabulaire restreint, assez répétitif, avec un nombre délimité de formules types, et d’être donc en grande partie très homogènes du point de vue de leur lexique, provenant en outre du même manuscrit.

Ces deux éléments faisaient que l’analyse factorielle ne donnait pas grand chose, tandis que la classification ascendante hiérarchique me triait les textes uniquement d’après leur nombre de mots… Or, ce n’était pas ça qui m’intéressait, pas plus que la vérification de l’homogénéité globale de leur vocabulaire (que je connaissais déjà pour les avoir un peu pratiqués), mais bien au contraire les quelques éléments d’hétérogénéité pouvant renvoyer à des branches différentes de la tradition, à des auteurs différents, à des datations ou localisations différentes, etc. Pour pouvoir arriver à des résultats exploitables, j’ai fait usage d’une forme de poids local très rudimentaire, mais dans ce cas précis tout à fait salvatrice, en divisant le nombre d’occurrences du mot dans le document (Nij) par le nombre total de mots du document (Tj), ce qui revient à utiliser un taux :

Nij/TjÀ l’aide de ce poids local, j’ai obtenu des résultats beaucoup plus pertinents, dans lesquels j’ai déjà pu distinguer des rapprochements liés à des groupes de manuscrits, à des datations/localisations, et à des auteurs présumés. Il ne me reste plus désormais qu’à les analyser en détail !

  1. Après une période prolongée sans billet due à une période un peu chargée (colloques) de mon côté. []
  2. Dumais (Susan T.), « Improving the retrieval of information from external sources », Behavior Research Methods, Instruments, & Computers, 23 (1991), p. 229-236. []

Jean-Baptiste Camps

Diplômé de l'École nationale des chartes et docteur en études médiévales de l'Université Paris-Sorbonne (la Chanson d'Otinel…, dir. Dominique Boutet ), Jean-Baptiste Camps est responsable pédagogique du master «Humanités numériques» à l'École nationale des chartes (PSL). [CV et liste des publications, voir : http://paris-sorbonne.academia.edu/JeanBaptisteCamps]

More Posts - Website

Follow Me:
LinkedIn

L’Information retrieval appliquée à la philologie. I. Approximate string matching

Le domaine de l’Information retrieval, profondément lié dans son histoire à l’informatique, connaît sans cesse des développements très importants, au cœur de l’activité du Web, de la documentation, des moteurs de recherche. On peut comprendre la tentation d’exploiter certains des acquis de cette science pour l’appliquer aux domaines qui nous intéressent, ou, pour reprendre une métaphore dans la tonalité générale de notre carnet, de boire à cette coupe qui ne se tarit jamais. Toutefois, une telle démarche ne peut aller sans une réflexion préalable.

Il ne faut pas en effet oublier que ces outils ont été créés non pas pour faciliter le travail des philologues, pour opérer des traitements scientifiques sur des corpus de textes, mais bien dans une optique de recherche d’information et de pertinence qui diffère sensiblement de la nôtre. Ce billet se veut le premier d’une série cherchant, sans exhaustivité, à passer en revue certains des outils les plus fréquents dans le domaine de l’Information retrieval et de voir en quoi ils peuvent nous être utiles, s’ils sont applicables ou adaptables à nos sciences. À cette fin, nous commencerons par un des éléments les plus « classiques », l’Approximate string matching, dont nous connaissons tous empiriquement le principe, ne serait-ce que par notre utilisation des moteurs de recherche…

Exemple sur Google

Exemple sur Google...

1. Algorithmes et calculs de distance

La Distance de Levenshtein

La mesure de distance décrite en 1965 par le mathématicien soviétique Vladimir Levenshtein1 consiste en la somme des suppressions, remplacements ou insertions qu’il faudrait effectuer pour passer d’une chaîne de caractères à une autre. De cette façon, pour passer de

Philologe à Philologie

la distance est de 1 (une insertion) ou env. 11%. Et entre :

Philologie et Philosophie

la distance est de 3 (deux remplacements et une insertion) ou 30%. La distance de Levenshtein a été implémentée par les informaticiens Robert Wagner et Michael Fischer2  (on parle alors d’algorithme de Wagner-Fischer).

La distance de Damerau–Levenshtein

La distance dite de Damerau–Levenshtein, du nom du chercheur d’IBM Frederick J. Damerau, quant à elle, se distingue de la distance de Levenshtein en ce qu’elle inclue, outre les suppressions, remplacements ou insertions, un quatrième type d’opération, à savoir l’interversion de caractères adjacents. Ainsi, la distance  entre

Philoloige et Philologie

est de 2 selon la mesure de Levenshtein, et seulement de 1 selon la mesure de Damerau-Levenshtein.

Autres mesures de distance

Si ces deux mesures de distance entre chaînes de caractères sont celles que l’on rencontre le plus fréquemment, il en existe d’autres. On citera ainsi pour mémoire la Distance de Hamming, qui ne fonctionne qu’avec des chaînes du même nombre de caractères et consiste en la somme de caractères différents à la même position. D’après cette mesure, la distance entre

Histoire et Histeire

est de 1, tandis qu’entre

Histoire et Hstoires

elle est de 7. Il faut dire que cette mesure de distance, qui correspond assez peu au fautes de frappe habituelles, est peu utilisée en tant que telle dans le domaine de la recherche d’information.

2. Mise en œuvre

Des modules Perl existant permettent de mettre en œuvre ces calculs. Nous parlerons ici brièvement des deux principaux, Text::WagnerFischer et String::Approx (je déconseille d’utiliser Text::Levenshtein qui a apparemment des problèmes avec utf8 et,  chez moi  en tout cas, donne des résultats faux…).

Text::WagnerFischer sert à la comparaison entre deux chaînes de caractères et permet d’obtenir le résultat de  la mesure de distance, ainsi :

#!/usr/bin/perl
use Text::WagnerFischer qw(distance);
print distance("bonjour","bonsoir") ;

donne comme résultat 2 (deux substitutions en l’occurrence). Mais ce module permet également d’aller un peu plus loin en configurant séparément (mais dans cet ordre) le coût d’une correspondance, d’une suppression/insertion, et d’une substitution. Ainsi, pour reprendre l’exemple précédent :

print distance([0,1,1],"bonjour","bonsoir") ;
print distance([-1,2,3],"bonjour","bonsoir");

Si le résultat de la première commande donnera toujours 2 (deux substitutions dont le coût est 1), la seconde donnera cinq correspondances et deux substitutions, soit -1*5 + 3 *2, c’est-à-dire 1 (ce n’est qu’un exemple).

Le module String::Approx, quant à lui, permet, de façon relativement simple, non plus de simplement comparer des chaînes de caractères (i.e. établir la distance qui les sépare), mais de relever directement les chaînes qui correspondent à une autre pour une distance préétablie (par défaut 10%). Ainsi, dans le script suivant :

use String::Approx 'amatch';
@mots = qw("bonjous", "bonjours", "bonsoir", "adieu");
@resultat1 = amatch("bonjour", @mots);
@resultat2 = amatch("bonjour",["25%"], @mots);

la liste @resultat1 comprendra les mots “bonjous”, “bonjours” et la liste @resultat2 les mots “bonjous”, “bonjours”, “bonsoir” (la distance spécifiée étant de 25%).

3. Exemple d’application

Pour prendre un exemple un peu plus intéressant, j’ai testé ce module sur un corpus de textes occitans médiévaux. J’y ai recherché le terme cansos avec la distance par défaut de 10%. Dans ma liste de résultats se trouvent les termes suivants :

cansonetas, 1
cansos, 5
cansson, 5
canssons, 5
canssos, 7
chansos, 2

Ce résultat est intéressant, car ne s’y trouvent en effet que des graphies différentes de cansos, (excepté cansonetas, ce qui nous apprend par la même occasion que amatch est programmé pour s’arrêter dès qu’il trouve une correspondance, en l’occurrence canson[etas], ce qui peut-être particulièrement gênant si l’on veut traiter des monosyllabes). Toutefois, toutes les formes de cansos ne figurent pas dans cette liste : il y manque notamment chansson, chanssons et chanssos. On peut tenter d’augmenter la distance, en la fixant par exemple à 20%, mais dans ce cas, on obtient également tout une série de termes qui on peu de choses à voir avec nos chansons, en vrac canorgues, Cartosa, enansset, fermanssa, percassava3

Pour conclure, on pourra noter que, si ces modules peuvent en effet donner des résultats intéressants, il manque, pour correspondre tout à fait à nos besoins, la possibilité de configurer indépendamment des coûts permettant de différencier certaines substitutions bénignes (comme la simple variation graphique entre i et y ou l’alternance c/ch par exemple) de celles qui ne le sont pas. Pour ce faire, a priori, il faudra plutôt recourir à une grammaire d’expressions régulières.

  1. Vladimir I. Levenshtein, « Binary codes capable of correcting deletions, insertions, and reversals », dans Soviet Physics Doklady, 10 (1966), p. 707-710. []
  2. Robert A.Wagner et Michael J.Fischer, « The string- to-string correction problem », dans Journal of the ACM, 21(1974), p. 168–173. []
  3. Les précédentes versions de String::Approx contenaient une commande aregex() qui aurait permis de contourner en partie ces difficultés par l’emploi d’expressions régulières, mais celle-ci n’existe hélas plus dans la dernière version. []

Jean-Baptiste Camps

Diplômé de l'École nationale des chartes et docteur en études médiévales de l'Université Paris-Sorbonne (la Chanson d'Otinel…, dir. Dominique Boutet ), Jean-Baptiste Camps est responsable pédagogique du master «Humanités numériques» à l'École nationale des chartes (PSL). [CV et liste des publications, voir : http://paris-sorbonne.academia.edu/JeanBaptisteCamps]

More Posts - Website

Follow Me:
LinkedIn