Des graphes… aux mots, ep4

L’avant dernière partie de mon talk de Que Du Web 2017 à Deauville.

Ici, on explore un algorithme issu de la théorie des graphes, qui permet de faire de l’extraction automatique de mots clés, ainsi que des résumés automatiques d’articles.


(Voir la vue d’ensemble de la présentation avec tous les épisodes)

Les slides correspondants :

Le transcript (résumé et simplifié)

Jusqu’ici on a vu le parallèle entre site et graphe.
Entre les ponts de Königsberg et un graphe.
Mais ce sont des cas un peu trop évidents, on peut faire plus, et je vais vous parler de Textrank.
Alors attention, malgré apparences ou les points de similitude que vous pourriez y trouver ou imaginer, ce n’est pas, ça n’a rien à voir avec le concept des metamots.

Voici le début du texte de Wikipédia sur « SEO ».
. . .
Et je vous assure, que j’y vois un graphe.
Alors vous allez sans doute me demander:

Où est Charlie ?
Non, ce n’est pas la bonne question.
Celle là est trop facile, puisque Charlie était à Deauville pour #QueDuWeb bien sur !
(petit clin d’oeil à @LydiaArzour)

Vous voulez voir le graphe? Voilà comment ça marche (j’ai simplifié, j’espère que les puristes me pardonneront).
Dans ce texte, vous voyez que j’ai mis en évidence quelques mots (en principe, on prendrait en compte tous les mots) et les mots eux même vont être les nœuds de notre graphe.
ensuite, ce qu’on fait, c’est qu’on va prendre chaque phrase une à une, et on va relier les mots qui apparaissent dans la même phrase.
Par exemple ici, « moteur », « recherche » et « site web » qui apparaissent dans la même phrase.
On crée nos nœuds, et on les relie.
On prend la phrase suivante, « contenu » est un nouveau mot. On ajoute ce mot, on le relie.
On continue avec la phrase suivante, en donnant plus de poids aux relations qu’on retrouve de nouveau (gras sur le graphe) etc.
Donc ici, on vient de transformer le texte en graphe.
On peut, sur cette base, lancer…

…un petit calcul de type PageRank, et on peut associer un poids à chaque mot en fonction de ses liens avec les autres.
Alors bien sur, ici j’ai simplifié à outrance avec juste quelques mots, mais voici le « vrai » graphe résultant:

C’est bien joli, mais qu’est-ce qu’on peut bien faire de ça ???

On peut, par exemple, regarder les termes les plus importants.
Et ce ne sont PAS les termes les plus fréquents, les plus répétés, ça n’a rien à voir avec du TF.IDF par exemple, ce sont plutôt les termes les plus « connectés » aux autres.
On a encodé beaucoup plus d’information que dans un modèle de type « bag of words ».
Au passage, on peut deviner un certain parti pris dans l’article, puisqu’il manque un terme essentiel dans ces mots « importants ».
Oui, les liens.

Mais en fait, le graphe lui même ici, nous importe assez peu, puisque ce n’est qu’une étape intermédiaire pour permettre de calculer le poids de chaque terme.
Pour bien faire, on peut ensuite recoller les mots qui se retrouvent toujours ensemble, et on obtient donc une liste de mots, classés par importance.
On a extrait, sans apprentissage, sans corpus de référence, sans à priori sur la langue, sans rien d’autre que le texte, les mots clés les plus importants.

Avec une petite variante, ou les nœuds sont les phrases plutôt que les mots, on peut faire une cuisine similaire sur le texte, et en extraire les phrases les plus significatives.
On obtient un résumé automatique d’un article.
Le genre de chose qui peut être utile, plutôt que prendre les premières lignes d’un texte, pour réduire le contenu dupliqué sur un site…

Voilà, maintenant, si vous voulez quelque chose de plus actionnable, de plus concret, faites comme @Julien_Gadanho , la bonne recherche Google, de type
github textrank
et vous allez trouver plusieurs librairies et exemples, dans votre langage de prédilection 🙂

Y’apuka, à la semaine prochaine pour la conclusion !