Skip to content

docs: duplicate detection is TF-IDF, not semantic - #2

Merged
BazanJeremy merged 1 commit into
mainfrom
docs/duplicate-detection-is-not-semantic
Sep 19, 2026
Merged

BazanJeremy merged 1 commit into
mainfrom
docs/duplicate-detection-is-not-semantic

Conversation

@BazanJeremy

Copy link
Copy Markdown
Owner

La documentation de ce dépôt annonce une détection sémantique de doublons et un passage au modèle neuronal à portée d'une variable d'environnement. Le code ne tient ni l'un ni l'autre. Cette PR corrige la documentation ; elle ne touche pas au comportement, qui est délibéré.

Le constat, dans le code

  • src/agents/pattern_classifier.py:112 : self._embedder = Embedder(force_tfidf=True) # TF-IDF always (CI-safe).
  • src/core/embedder.py:112-115 : use_neural = not force_tfidf and os.environ.get("USE_NEURAL_EMBEDDINGS", "") == "true" — avec force_tfidf=True, la condition est toujours fausse.
  • C'est la seule construction d'Embedder du dépôt (grep sur tout le code, tests compris). La variable USE_NEURAL_EMBEDDINGS n'a donc aucun effet sur la détection de doublons, qui tourne toujours sur de la similarité lexicale.

Le README le disait déjà, d'ailleurs, dans ses limites connues : « TF-IDF capte la similarité lexicale, pas la sémantique fine ». C'était l'accroche, deux lignes plus haut, qui promettait l'inverse.

Changements

Fichier Avant Après
README.md / README.en.md, accroche « détection sémantique de doublons » « détection de doublons »
Les deux README, résumé d'ADR-002 « sentence-transformers en option : … neural disponible en production » l'Embedder sait le charger, mais le classifieur ne l'utilise pas
Les deux README, limites connues « la montée vers sentence-transformers est documentée » elle demanderait un changement de code, avec la raison exacte
docs/ADR-002 conséquence « Production upgrade path is one config flag » conséquence corrigée + amendement daté
docker-compose.yml « Set to "true" to use sentence-transformers » le drapeau n'a pas d'effet sur le pipeline aujourd'hui

La décision d'ADR-002 n'est pas réécrite : TF-IDF par défaut, pour la reproductibilité et une CI sans réseau, reste le bon choix. Ce qui était faux, c'est la conséquence qui annonçait un basculement à une variable près. L'amendement daté garde la trace de l'écart plutôt que de le faire disparaître.

Vérifié

  • PatternClassifier est le seul appelant qui construit un Embedder : vérifié par grep sur src/ et tests/.
  • Dimensions citées dans l'amendement : TfidfEmbedder._DIM = 512 et NeuralEmbedder.dim → 384, lues dans src/core/embedder.py.

Non fait

  • Aucun test exécuté : la modification est documentaire (plus un commentaire YAML), et les dépendances Python ne sont pas installées sur la machine où la PR a été préparée. La CI du dépôt tranchera.
  • Le vocabulaire « semantic search » reste tel quel dans le tableau des capacités, le schéma ASCII et l'arborescence du README anglais, ainsi que dans les docstrings : il y désigne une recherche de voisins par similarité vectorielle, ce qui est l'usage courant. À changer aussi si tu préfères une terminologie homogène.
  • Passer réellement au modèle neuronal demanderait, en plus du changement de code, de vérifier que ChromaDB encaisse le changement de dimension (512 → 384). Rien de tout cela n'a été tenté ni mesuré.

Contexte

Écart repéré en vérifiant un article du site qui citait ce dépôt. La page d'accueil et l'article ont été corrigés de leur côté (bazanjeremy.github.io#34) ; cette PR ferme le même écart ici.

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant