Skip to content

[Blog] Article « Quand le moteur de recherche apprend de ses échecs »#679

Open
benji07 wants to merge 5 commits intomasterfrom
blog-search-synonymes
Open

[Blog] Article « Quand le moteur de recherche apprend de ses échecs »#679
benji07 wants to merge 5 commits intomasterfrom
blog-search-synonymes

Conversation

@benji07
Copy link
Copy Markdown
Member

@benji07 benji07 commented Mar 24, 2026

Summary

  • Nouvel article technique (catégorie tech) : retour d'expérience sur une boucle d'amélioration continue d'un moteur de recherche sémantique
  • Capture automatique des recherches incertaines et génération de suggestions de synonymes via LLM
  • 3 schémas SVG explicatifs (pipeline de recherche, boucle d'apprentissage, avant/après) + thumbnail

Test plan

  • Vérifier le rendu de l'article en local (make serve + visite du blog)
  • Valider l'affichage des 3 schémas SVG
  • Vérifier que la table des matières est générée correctement
  • Tester les liens internes si applicable

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
@benji07 benji07 self-assigned this Mar 24, 2026
@benji07 benji07 marked this pull request as ready for review March 24, 2026 13:54
github-actions bot pushed a commit that referenced this pull request Mar 24, 2026
github-actions bot pushed a commit that referenced this pull request Mar 24, 2026
Copy link
Copy Markdown
Contributor

@xavier-rdo xavier-rdo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Merci beaucoup Benji ! Il y a un côté un peu froid, mais en termes de pédagogie et de clarté, ça m'a l'air super !


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.
Copy link
Copy Markdown
Contributor

@xavier-rdo xavier-rdo Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 ?

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.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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)


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.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pas essentiel de mentionner cette partie


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.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
github-actions bot pushed a commit that referenced this pull request Apr 1, 2026
github-actions bot pushed a commit that referenced this pull request Apr 1, 2026
github-actions bot pushed a commit that referenced this pull request Apr 1, 2026
@ogizanagi ogizanagi added the wip 🛠 work in progress label Apr 13, 2026
…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
github-actions bot pushed a commit that referenced this pull request Apr 14, 2026
- 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

wip 🛠 work in progress

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants