Comment mesurer la similitude entre des textes ? Il faudrait par exemple pouvoir définir des distances entre ces objets. Une manière de procéder est de représenter un texte par un vecteur, puis de définir une « fonction de similarité », ou une distance, permettant de comparer ces vecteurs.
On peut par exemple marquer la présence ou l'absence d'un mot (d'un vocable). Un texte est alors représenté par un vecteur dont les composantes ont pour valeur 0 ou 1. Le nombre n de composantes du vecteur (la dimension de l'espace vectoriel) est le nombre de vocables considérés, soit la taille du vocabulaire. En numérotant chaque vocable de 1 à n, un texte X est alors représenté par un vecteur (xi)i=1…n où xi = 1 si le vocable i apparaît dans le texte, et xi = 0 sinon. Cette représentation vectorielle est en générale utilisée pour calculer la proportion de vocabulaire commun entre les textes. C'est l'indice de Jaccard, que l'on peut définir par :
avec X = (xi)i=1…n et Y = (yi)i=1…n deux textes de n mots.
Prenons deux exemples. Le texte S est : « Le Soleil dit : “Je suis le Soleil.” » Le texte L est le suivant : « “Je suis le Soleil” dit la Lune. » Alors n = 7 et Sim(S, L) = (11 + 11 + 01 + 11 + 01 + 11 + 11) / 7 = 5/7.
Décompte des vocables présents dans l'ensemble des deux textes et classés par ordre alphabétique.
Ce n'est pas la taille qui compte…
Ainsi, l'indice de similarité vaut 1 si exactement le même vocabulaire est utilisé dans les deux textes, et 0 si les deux textes n'ont aucun mot en commun. Cela peut arriver quand on compare deux textes rédigés dans des langues différentes.
On peut raffiner cet indice en remplaçant l'information de présence/absence d'un vocable M par le nombre d'occurrences de M dans le texte. Dans ce cas, chaque composante du vecteur indique le nombre d'occurrences de M. Sur ce type de représentation vectorielle on pourrait utiliser une distance euclidienne classique :
Prise en compte du nombre d'occurrences de chaque vocable.
Sur notre exemple,
Mais en pratique, le nombre d'occurrences absolu est très dépendant de la taille des textes. Plus le texte est long, plus les valeurs des composantes sont grandes. Pour ces raisons, on préfère utiliser comme similarité le cosinus de l'angle θ entre les deux vecteurs :
Comme les composantes des vecteurs sont toujours positives, la mesure de similarité varie entre 0 et 1. Elle vaut 1 quand l'angle entre les vecteurs est 0, c'est-à-dire lorsque les deux vecteurs sont identiques (même nombre d'occurrences pour tous les vocables) ou colinéaires (nombres d'occurrences multiples l'un de l'autre). La similarité vaut 0 quand les deux vecteurs sont orthogonaux, c'est-à-dire lorsqu'ils ne partagent aucun vocable.
Dans notre exemple,
soit environ 0,8.
Pour tenir compte de la taille (en nombre de mots) des textes, on peut aussi remplacer les nombres d'occurrences par la fréquence relative d'apparition de chacun des vocables. On peut alors interpréter une composante du vecteur comme étant la probabilité de rencontrer un vocable donné dans le texte.
Un texte est maintenant représenté par un vecteur (xi)i=1…N où xi = ni / T, ni étant le nombre de fois que le vocable i apparaît dans le texte et T la taille du texte (en nombre de mots). Avec ce type de représentation, on peut utiliser une distance (dite intertextuelle) de type L1 :
Les textes S et L représentés par un vecteur de fréquences.
La distance intertextuelle peut s'interpréter de manière assez naturelle comme un nombre moyen de mots différents pour cent mots, ou encore comme la proportion de vocables qu'il faut « changer » pour passer d'un texte à l'autre. Ainsi, δ(S, L) = (1/2)(4/7) = 2/7, et en changeant deux mots sur sept on peut « passer » d'un texte à l'autre (abstraction faite de l'ordre des mots).
Un peu d'ordre…
Les approches précédentes ne tiennent pas compte de l'ordre des mots. De plus, dans S et L, si le Soleil est le soleil, on peut raisonnablement penser que la lune le suit (du verbe « suivre »). Dans certaines applications, il est indispensable d'éviter de mélanger « suis » (être) de « suis » (suivre), « été » (être) de la saison, ou encore « est » (être) de la direction orientale. Il est donc souvent nécessaire de travailler sur des textes où chaque mot est étiquetés par sa forme canonique (entrée du dictionnaire) et sa catégorie grammaticale.
En pratique, ce type de représentation vectorielle est très utilisé en recherche d'information, par exemple pour retrouver les textes similaires à un texte initial qui sert de requête. Une forme triviale de texte requête peut être une série de quelque mots clés. Un moteur de recherche documentaire, grâce à la représentation vectorielle et à un calcul de similarité, peut classer les documents réponses du plus pertinent (le plus similaire à la série de mots clés) au moins pertinent. Les moteurs de recherche (Google, Yahoo, Bing…) peuvent aussi utiliser ce type de représentations pour comparer les pages web répondant à une requête et supprimer les doublons de la liste des réponses fournie à l'utilisateur.
En littérature, la distance intertextuelle est aussi utilisée pour étudier ce qui rapproche ou éloigne les différents genres (roman, théâtre, français parlé vs écrit, poésie, genre épistolaire…) ou encore pour discuter de la paternité d'une œuvre (Romain Gary vs Émile Ajar, Molière vs Corneille). Avec toutes les polémiques que ces travaux peuvent susciter…