Accueil / Factory / Algos ML / TF-IDF — factory / algos ML / représentation de texte

PONDÉRATION TF-IDF.

Une façon de transformer un texte en chiffres : chaque mot reçoit un poids d'autant plus fort qu'il est fréquent dans le document et rare dans le reste du corpus. C'est la base historique des moteurs de recherche et de la classification de texte, encore imbattable en rapidité et en transparence.

TexteRecherche documentaireReprésentationVerbatims clientsNiveau : débutant

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceCompte les mots sans comprendre le sens ni les synonymes
InterprétabilitéChaque poids se lit : tel mot, telle fréquence, telle rareté
VitesseDes milliers de documents vectorisés en quelques secondes
Facilité de réglageQuelques options simples, des valeurs par défaut correctes
Tolérance aux données brutesFautes, pluriels et mots vides sont à nettoyer en amont
EN 30 SECONDES

Dans un dossier de réclamations, le mot « le » apparaît partout et ne dit rien. Le mot « remboursement » n'apparaît que dans certaines : c'est lui qui caractérise ces documents.

1. On compte les mots de chaque document

C'est la fréquence du terme (TF, term frequency) : combien de fois « retard » apparaît dans cet avis.

2. On pénalise les mots trop répandus

La fréquence inverse (IDF, inverse document frequency) vaut le logarithme du nombre de documents divisé par le nombre de documents qui contiennent le mot. Un mot présent partout tombe près de zéro.

3. On multiplie, puis on compare

Le poids final est TF × IDF. Chaque document devient un vecteur, et deux documents se ressemblent si leurs vecteurs pointent dans la même direction (similarité cosinus).

LE CAS MÉTIER

recherche interne · service client / qualité
EN ENTRÉE

1 500 avis clients en texte libre

Une à trois phrases par avis, de la livraison au service après-vente. Aucune étiquette n'est nécessaire : TF-IDF travaille sur le texte seul.

EN SORTIE

Un moteur de recherche maison

L'équipe qualité tape « livraison en retard » et obtient les avis les plus proches, triés par score de similarité. Sur le jeu d'exemple, les avis sur les colis arrivés avec deux semaines de retard sortent en tête.

CE QU'ON MESURE

La pertinence des premiers résultats

On vérifie à la main que les 5 ou 10 premiers avis répondent bien à la requête (précision au rang k). Sur le jeu d'exemple, des avis « Livraison rapide » remontent aussi : TF-IDF voit le mot « livraison », pas le sens de la phrase.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Recherche par mots-clés dans des verbatims, des tickets ou des contrats
  • Première représentation du texte pour un classifieur (sentiment, routage de tickets)
  • Besoin d'une méthode rapide, gratuite, auditable, sans GPU
  • Repérer les mots qui caractérisent un groupe de documents

NON

  • Synonymes et paraphrases à rapprocher (« colis » et « paquet ») : préférer des embeddings
  • Négations et sens de la phrase : « pas satisfait » et « satisfait » partagent leurs mots
  • Textes très courts de deux ou trois mots : trop peu de signal, compléter par des règles ou des embeddings
  • Corpus multilingue : un même sujet donne des vecteurs sans rapport d'une langue à l'autre
LES 4 RÉGLAGES QUI COMPTENT

Tout se joue dans la préparation du texte. Noms donnés pour R (text2vec) et Python (scikit-learn).

Mots vides : stopwords / stop_words

Retirer « le », « de », « et ». L'IDF les écrase déjà, mais les retirer allège la matrice. scikit-learn ne fournit une liste qu'en anglais : pour le français, il faut fournir la sienne.

N-grammes : ngram / ngram_range

Compter aussi les paires de mots (« pas satisfait », « service client »). Souvent le meilleur gain, au prix d'un vocabulaire plus gros.

Seuils : prune_vocabulary / min_df, max_df

Ignorer les mots trop rares (fautes de frappe) ou trop fréquents. min_df=2 ou 5 suffit en général.

Amortir les répétitions : sublinear_tf

Remplace la fréquence brute par 1 + log(fréquence). Un mot répété dix fois ne pèse plus dix fois plus. Utile sur les documents longs.

LE CODE MINIMAL

jeu d'exemple : avis_clients.csv ↓
# Recherche dans les avis clients : TF-IDF en R
library(text2vec)

avis <- read.csv("avis_clients.csv")

# Découpage en mots, en minuscules
jetons <- itoken(avis$texte, preprocessor = tolower, tokenizer = word_tokenizer)
vectoriseur <- vocab_vectorizer(create_vocabulary(jetons))
dtm <- create_dtm(jetons, vectoriseur)

# Pondération TF-IDF : fréquent dans l'avis, rare dans le corpus
tfidf <- TfIdf$new(norm = "l2")
matrice <- fit_transform(dtm, tfidf)
cat("Avis x mots :", dim(matrice), "\n")

# Moteur de recherche : les avis les plus proches d'une requête
requete <- itoken("livraison en retard", preprocessor = tolower, tokenizer = word_tokenizer)
q <- transform(create_dtm(requete, vectoriseur), tfidf)
score <- as.numeric(as.matrix(sim2(matrice, q, method = "cosine")))
resultats <- data.frame(score = round(score, 2), avis = avis$texte)
resultats <- resultats[!duplicated(resultats$avis), ]
print(head(resultats[order(-resultats$score), ], 5), row.names = FALSE)

QUESTIONS FRÉQUENTES

Comment se calcule le TF-IDF ?

On multiplie la fréquence du mot dans le document (TF) par le logarithme du nombre total de documents divisé par le nombre de documents qui contiennent le mot (IDF). Les bibliothèques ajoutent des variantes de lissage : scikit-learn utilise par défaut ln((1 + n) / (1 + df)) + 1, puis normalise chaque vecteur.

TF-IDF ou embeddings pour une recherche de documents ?

TF-IDF trouve les documents qui partagent les mots de la requête, vite et de façon explicable. Les embeddings trouvent aussi ceux qui disent la même chose avec d'autres mots. En pratique, beaucoup de moteurs combinent les deux (recherche hybride).

Le TF-IDF est-il encore utile à l'heure des LLM ?

Oui. Il reste la référence rapide pour classer des milliers de textes, filtrer un corpus avant un traitement coûteux ou compléter une recherche par embeddings dans un RAG. Il ne demande ni GPU ni appel à une API.

LES ALGOS VOISINS

à comparer avant de choisir
recherche par le sens

Embeddings

Des vecteurs appris par un réseau de neurones, où « colis » et « paquet » sont proches. Plus pertinents, moins transparents.

Voir la fiche →
le classifieur associé

Naive Bayes

Le partenaire historique de TF-IDF pour classer des textes : spam, sentiment, routage de tickets.

Voir la fiche →
trouver les thèmes

LDA (topic modeling)

Part des mêmes comptages de mots, mais pour regrouper les documents en thèmes sans étiquettes.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →