J’ai repris ces derniers jours un vieux moteur de recherche que j’ai développé pour me faire les dents et mieux comprendre le fonctionnement de Google. En lisant le code source, j’ai fait un “back to basics” en considérant ce qu’il y’a de plus caractéristique d’un moteur de recherche: le score de pertinence d’un document par rapport à une expression donnée.
Ahhhh! diriez vous ! C’est ce que j’ai pensé également. De nos jours, on est concentré sur plein d’autres leviers techniques ou linking au point ou l’on a oublié de prendre le temps d’analyser les contenus et de les apprécier en fonction de ce qu’ils apportent vraiment à votre site. J’ai décidé donc, de vous exposer la manière dont fonctionne la fameuse formule du TF-IDF et la manière dont vous pourriez l’utiliser pour calculer vos scores de pertinence intrinsèque.
Remarque 1:
Il y’a bien évidement d’autres méthodes de calcul de proximité sémantique. J’ai par exemple, également détaillé le fonctionnement du calcul de similarité selon le principe du cosinus de Salton. Je vous invite également à lire cet article qui est complémentaire à celui que vous êtes en train de parcourir :).
Remarque 2:
Avant qu’on me tombe dessus en me disant que j’ai un metro de retard, je précise quand même qu’à l’heure actuelle les moteurs de recherche utilisent plusieurs centaines de critères pour classer leurs résultats. Considérer que ce critère seul suffit à expliquer les algorithmes de ranking est purement utopique. Cela étant dit, je trouve ça très intéressant de comprendre les bases. Ca sera pour vous au mieux une découverte au pire une piqûre de rappel. Dans les 2 cas, c’est bon à prendre
TF pour “terme frequency” et IDF pour “inverse document frequency”
Ces metrics representent les ancetre de la recherche sémantique. Elles servent de base de travail pour tout moteur de recherche. Elles permettent de classer les documents selon leur pertinence par rapport à un mot clé donné ou groupe de mots clés.
Le score de TF-IDF = TF * IDF
TF: terme frequency
Comme sont nom l’indique, cet indicateur permet de calculer la fréquence d’un mot ou expression dans un document. Concrètement, il mesure le nombre de fois qu’un mot ou une expression est présente sur une page web. Plus le chiffre est important, plus le document est pertinent.
Comment calculer le TF (terme frequency) ?
La formule est simple:
TF = Nombre de fois que le mot apparaît dans un document / nombre de mots dans le document
Vous avez vu? rien de plus facile
IDF: inverse terme frequecy
l’idf quant à lui introduit une notion de qualité du mot. calcule quand à lui l’importance d’un mot au sein d’un document. Le concept de l’idf est le suivant: un mot ou une expression qui apparaît rarement dans une collection d’autres documents similaires ayant un maximum de mots/expressions en commun, obtient (donc notre mot de départ)une grande valeur !
OK, OK! si votre réaction est cette de notre ami Jacky, relax, je vais l’expliquer différemment
En d’autres termes, l’idf calcule le score de rareté ou le scoop. si le mot “toto”, est fortement présent dans un document, mais si on prend 50 autres documents similaires, ce mot là est rare, alors,le mot toto devient important au sein du (ou des) document(s) en question (le contenant). C’est plus clair à présent?
Comment calculer l’IDF
Vous allez voir, là encore, la formule est très simple et se traduit par:
idf = LOG(nombre de documents / nombre de documents contenant le terme)
C’est plus clair hein? bon pour en être sûr, je vous donne un exercice ! oui oui, comme à l’école !
Exemple concret de calcul du score TF-IDF
Tf = 20/1000 = 0.002Idf = log (250/150) = 0.22Tf-idf score = 0.002*0.22 = 0.044
Tf = 15/1000 = 0.015Idf = log (100/20) = 0.69Tf-idf score = 0.015*0.69 = 0.01

Merci pour cette article Hafid!
La semantique est un vaste sujet mais comme comme tu as dit “back to basics” est une bonne methodologie pour commencer.
Btw Erratum: Goolge
Allo Hafid et merci pour l’article. Je pense avoir vu une petite erreur cependant :
Supposons donc que nous avons 150 pages sur 200 qui incluent le mot “écriture”
La formule pour le calcul du Idf de “écriture” ne serait pas plutôt : Idf = log (200/150).
Autre point : que représente log? car je ne comprends pas comment tu trouves ce résultat : 0.22 pour le Idf de “écriture”
Merci pour tes réponses;-)
Hello Nicolas, merci pour ton commentaire. ton premier point est exacte, ou me suis je gouré dans l’article? pour le 0.22, il provient de la formule idf=log(200/150) => log étant l’échelle logarithmique
C’est une joke l’erreur dans le titre, engendrant un mauvais référencement “Goolge” ?
Que je ne dise pas de bêtise… Google ne peut pas calculer l’idf à cause du flux constant d’informations. Il se calcul sur la base de la collection complète, soit le Web.
L’objectif de l’idf étant de fournir le poids d’un terme par rapport à l’ensemble du corpus. C’est à dire que plus un terme est utilisé sur toutes les pages, moins il est important. Ce calcul est gourmand et je ne vois pas quel matos permet de le faire sur un ensemble aussi conséquent que le Web. Et c’est sans compter sur les problématiques d’évolution du vocabulaire, du flux rapide et constant d’ajout de contenu (rien que les forum c’est gâteau…)
En soit ton article est intéressant mais il est hors sujet pour les moteurs de recherche sur le Web. Regarde plutôt la sémantique (qui n’a rien à voir mais peut utiliser TF-IDF (et autres)) et les critère côté social.
tu as surement raison. la collection n’est jamais complète puisque le web est constamment en mouvement. Le flux d’information est incessant… Google utilise des algorithmes de machin learning qui permettent d’extrapoler et d’apprendre selon les usages qui sont fait des données qu’il affiche. Je pense que ce score (ou un score similaire) est utilisé par tous les moteurs de recherche (j’ai lu un article récemment d’un ingénieur de bing qui parle du Tf-IDF…), mais qu’il ne suffit pas à renvoyer des résultats pertinents. Tu parle des signaux sociaux et autres, mais ce n’est l’objectif de cet article. (lis bien le disclamer ;))