[Blog] Article « Quand le moteur de recherche apprend de ses échecs »#679
Open
[Blog] Article « Quand le moteur de recherche apprend de ses échecs »#679
Conversation
Retour d'expérience sur la mise en place d'une boucle d'amélioration continue d'un moteur de recherche sémantique via l'introduction de synonymes et la capture des recherches incertaines. - Catégorie : tech - Auteur : bleveque - 3 schémas SVG (pipeline, boucle apprentissage, avant/après) - Thumbnail
github-actions bot
pushed a commit
that referenced
this pull request
Mar 24, 2026
for commit 2b8ca0a
github-actions bot
pushed a commit
that referenced
this pull request
Mar 24, 2026
for commit 2b8ca0a
xavier-rdo
approved these changes
Mar 24, 2026
|
|
||
| L'interface de validation présente à l'administrateur toutes les informations nécessaires pour prendre sa décision rapidement : la requête utilisateur d'origine (ou le cluster de requêtes regroupées), le synonyme suggéré, la définition cible avec sa description, le score de confiance du LLM, et le raisonnement qui a conduit à cette suggestion. L'objectif est de permettre une décision en quelques secondes, sans avoir à aller chercher du contexte ailleurs. | ||
|
|
||
| Trois actions sont possibles. **Valider** : le synonyme est ajouté à la définition, et l'embedding est automatiquement recalculé. **Rejeter** : la suggestion est écartée, avec possibilité d'indiquer un motif — ce qui permettra à terme d'améliorer le filtrage du pipeline. **Réassigner** : le synonyme est pertinent, mais rattaché à la mauvaise définition. L'administrateur peut le rediriger vers la bonne cible sans avoir à ressaisir quoi que ce soit. |
Contributor
There was a problem hiding this comment.
Le terme "embedding" apparait ici pour la première fois sans avoir été défini auparavant : pas sûr qu'un lecteur ignorant tout de ce jargon comprenne de quoi on parle.
L'embedding c'est la représentation vectorielle d'une chaîne de caractères ?
benji07
commented
Mar 31, 2026
Comment on lines
+20
to
+26
| ## Pourquoi la recherche classique ne suffit pas | ||
|
|
||
| La première approche que nous avons envisagée était une recherche full-text classique, telle que celle proposée nativement par PostgreSQL. Ce type de moteur fonctionne par correspondance de mots : il découpe la requête en termes, applique éventuellement un stemming (réduction des mots à leur racine), puis cherche des correspondances dans les textes indexés. | ||
|
|
||
| Le problème est que cette approche repose sur un prérequis implicite : il faut que la requête et le document partagent au moins quelques mots en commun. Or dans notre cas, « faire revenir les oignons » ne contient aucun mot présent dans la définition de **Suer** — « technique consistant à chauffer un aliment dans un corps gras à feu doux, sans coloration ». Le moteur ne peut tout simplement pas faire le lien. | ||
|
|
||
| Même en enrichissant les définitions avec des mots-clés manuels, le problème persiste. Les formulations des utilisateurs sont trop variées et trop imprévisibles pour être anticipées de manière exhaustive. Il nous fallait un moteur capable de comprendre le sens d'une phrase, et non pas seulement les mots qui la composent. |
Member
Author
There was a problem hiding this comment.
Est-ce que ce paragraphe est vraiment utile ? a la base on voulait faire de la recherche sémantique, et le problème était uniquement le manque de contenu dans les définitions (d'où l'ajout d'une notion de synonymes)
benji07
commented
Mar 31, 2026
|
|
||
| Un point essentiel pour la suite : le vecteur de chaque définition est calculé à partir de la concaténation de son nom, de sa description, et de ses **synonymes**. C'est cette dernière composante qui rend le système améliorable. Chaque synonyme ajouté à une définition enrichit son vecteur et le rapproche des formulations courantes des utilisateurs. Le moteur de recherche n'est donc pas figé — il peut progresser au fil du temps. | ||
|
|
||
| Pour un corpus de quelques centaines de définitions, nous avons fait le choix de stocker les vecteurs directement dans notre base PostgreSQL existante plutôt que d'introduire un service dédié. Cela simplifie l'architecture et évite d'ajouter une dépendance supplémentaire. |
Member
Author
There was a problem hiding this comment.
Pas essentiel de mentionner cette partie
benji07
commented
Mar 31, 2026
benji07
commented
Apr 1, 2026
|
|
||
| Le problème auquel nous avons été confrontés est simple à formuler : les utilisateurs ne tapent presque jamais le bon mot. Un cuisinier qui cherche « faire revenir les oignons » s'attend à trouver un résultat. Pourtant, la technique indexée dans le lexique s'appelle **Suer**. De la même manière, « la sauce a des grumeaux » ne retourne rien, alors que les termes **Chinoiser** ou **Passer au tamis** figurent dans le référentiel. | ||
|
|
||
| Ce n'est pas un bug. Il s'agit d'un écart structurel entre le vocabulaire courant des utilisateurs et la terminologie métier du lexique. Les cuisiniers décrivent ce qu'ils voient ou ce qu'ils font, avec leurs propres mots. Le lexique, lui, utilise des termes techniques normalisés. Ce type d'écart se retrouve dans tous les domaines spécialisés — le juridique, le médical, l'industrie — dès qu'un référentiel métier est confronté à des utilisateurs qui n'en maîtrisent pas le vocabulaire. |
Member
Author
There was a problem hiding this comment.
faudrait repasser sur les — ça fait très IA d'en avoir
- Remplacement des tirets cadratins (—) par des alternatives naturelles - Suppression du paragraphe sur l'enrichissement par mots-clés manuels - Suppression de la mention du choix PostgreSQL - Définition du terme "embedding" dès sa première apparition - Ajout du schéma SVG du pipeline nocturne en 6 étapes
benji07
commented
Apr 14, 2026
content/blog/tech/quand-le-moteur-de-recherche-apprend-de-ses-echecs.md
Outdated
Show resolved
Hide resolved
…sique - Suppression de la section « Pourquoi la recherche classique ne suffit pas » pour concentrer l'article sur le processus d'amélioration continue - Renommage du titre de section en « point de départ » pour mieux refléter le rôle de la recherche sémantique dans l'architecture
github-actions bot
pushed a commit
that referenced
this pull request
Apr 14, 2026
for commit ec37901
github-actions bot
pushed a commit
that referenced
this pull request
Apr 14, 2026
for commit ec37901
- Sous-titres ### pour les 6 étapes du pipeline nocturne - Ton plus conversationnel (on, formulations directes, listes à puces) - Découpage des paragraphes longs - Fusion de la section « Enrichissement manuel » dans « Cercle vertueux » - Conclusion recentrée sur les ingrédients pour reproduire l'approche - Correction « LLM » → « modèle d'embedding » pour les embeddings
github-actions bot
pushed a commit
that referenced
this pull request
Apr 14, 2026
for commit bf84460
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Test plan
make serve+ visite du blog)