ReviewScope traque les anomalies dans les avis via embeddings et graphes sur 21 000 textes

Après un déménagement, cet habraïste s'est mis à chercher une boulangerie à partir des avis en ligne et a remarqué des textes suspects — apparemment écrits par une IA ou copiés-collés. Il a donc décidé de créer un outil capable de repérer les anomalies dans les avis : pics d'activité inhabituels, glissements brusques de notation, textes répétitifs, manipulations de la note moyenne. ReviewScope fonctionne en local, stocke les données dans DuckDB et analyse des fichiers CSV et JSON. Le code est en accès libre. • **Quatre niveaux de recherche d'avis similaires** : Exact (correspondances exactes), Fuzzy (proximité lexicale via RapidFuzz), Near (forte similarité lexicale via MinHash/LSH), Semantic (similarité de sens via embeddings) • **Détection de pics** : médiane glissante + MAD (écart absolu médian) à la place de la moyenne et de l'écart-type • **Analyse des glissements de notation** : divergence de Jensen-Shannon pour mesurer l'évolution de la structure des notes de 1 à 5 étoiles

Traité par IA depuis Хабр: Машинное обучение ; édité par Hamidun News
ReviewScope traque les anomalies dans les avis via embeddings et graphes sur 21 000 textes
Source : Хабр: Машинное обучение. Collage: Hamidun News.
Écouter l'article
Fiche synthèse et chiffres clés
ParamètreDonnées
Source primaireХабр: Машинное обучение ↗
Rédacteur en chef
Détection de picsmédiane glissante + MAD (écart absolu médian) à la place de la moyenne et de l'écart-type
Analyse des glissements de notationdivergence de Jensen-Shannon pour mesurer l'évolution de la structure des notes de 1 à 5 étoiles

Après un déménagement, Ziverpup s'est mis, comme d'habitude, à chercher sur les cartes où manger et où aller. Une note supérieure à quatre, on en trouve presque partout, alors il filtre par avis négatifs — et là, le tableau change. Dans une boulangerie, il a repéré un avis étrange : au lieu de raconter une expérience, le texte ressemblait à une réponse toute faite générée par une IA.

Il s'est mis à chercher des cas similaires et en a trouvé plus d'un. Par exemple, un avis sur une échoppe de shawarma commençait par le classique « C'est juste une bombe ! », suivi d'une énumération type : galette, viande, sauce, légumes, taille de la portion, promesse de devenir client régulier.

Un seul exemple ne prouve rien, mais l'idée l'a accroché : créer un outil pour détecter les anomalies dans les avis. Ziverpup avait déjà été confronté à ce problème, quand il était manager : il épluchait les avis négatifs et les reliait parfois à des concurrents. Ce qui l'intéressait davantage, c'étaient les auteurs des avis : une personne ayant rédigé cinq avis sur différents bars semble une source plus utile qu'une autre dont l'historique se limite à un garage de pneus près de Togliatti et une librairie à Voronej.

Mais la logique d'un score de confiance pour les auteurs s'est révélée moins simple : le nombre d'avis en soi ne rend pas quelqu'un compétent. Un changement de ville peut n'être qu'un voyage, et un seul avis détaillé peut en dire plus que cent formules générales.

Architecture et données

Le résultat s'appelle ReviewScope — un outil open source pour analyser les avis, repérer les anomalies et les textes répétitifs, et explorer l'historique des auteurs. GitHub : https://github.com/zinverno/reviewscope, démo : https://reviewscope-demo.streamlit.app/.

L'outil ne récupère pas lui-même les avis depuis Yandex Maps. L'analyse nécessite un export préparé en CSV ou JSON. L'application normalise les données et les stocke dans DuckDB — tout tourne en local, sans serveur dédié. Un avis contient les champs suivants : review_id, place_id, place_name, place_category, reviewer_id, reviewer_name, rating, text, published_at, city, region, country, latitude, longitude. Tous les champs ne sont pas obligatoires. L'interface Streamlit affiche N/A quand une donnée manque.

Le pipeline est le suivant : CSV/JSON → Normalisation → DuckDB → AnalysisEngine → Interface Streamlit. L'AnalysisEngine comprend quatre modules.

Quatre couches d'analyse des anomalies

Détection de pics d'activité (burst detection). Une boulangerie reçoit en général un ou deux avis par semaine. Si trente arrivent en une journée, presque tous cinq étoiles, c'est suspect. Mais pour un restaurant qui reçoit déjà cinquante avis par jour, ces mêmes trente avis ne signifient rien. La solution : médiane glissante + MAD (écart absolu médian). Le MAD mesure à quel point les valeurs habituelles s'écartent d'une valeur typique. Une seule journée extrême a peu d'effet sur cette mesure, contrairement à la moyenne et à l'écart-type, qui se déplacent sous l'effet d'une valeur aberrante. Le seuil du z-score modifié est fixé à 3,5, sur une fenêtre historique de 30 jours.

Anomalies de glissement de notation (rating shift). On a repéré un jour avec un nombre d'avis anormalement élevé. Sont-ils tous à cinq étoiles ? Ou au contraire à une étoile ? Pour répondre, l'outil utilise la divergence de Jensen-Shannon, une méthode pour mesurer l'écart entre deux distributions de probabilité. Elle compare la répartition des notes d'une à cinq étoiles sur la période historique et autour de l'événement. L'algorithme détecte aussi bien les pics positifs que négatifs.

Détection de doublons — quatre niveaux de correspondance : Exact (textes normalisés identiques), Fuzzy (proximité lexicale via RapidFuzz), Near (forte similarité lexicale via MinHash/LSH), Semantic (similarité de sens via embeddings). Les trois premiers niveaux semblaient suffisants, mais si l'auteur reformule entièrement une phrase, les méthodes lexicales échouent. Les embeddings ont permis de résoudre ce problème.

Métriques sur les auteurs, scoring des textes et clustering thématique complètent le tableau. L'auteur a ajouté des indicateurs distincts : activité de l'auteur, expérience dans la catégorie, caractère informatif des textes et schémas inhabituels dans son historique.

Les tests ont été menés sur 21 000 avis réels. Certaines hypothèses n'ont pas résisté à la vérification, et un résultat qui semblait convaincant s'est révélé être une erreur de calcul du taux de croissance avec une base de référence nulle. Désormais, dans ces cas-là, l'application affiche le nombre réel d'avis et indique que le taux de croissance n'a pas de sens ici.

Dossier

Questions clés sur cet article

Que sait-on sur Architecture et données ?

Le résultat s'appelle ReviewScope — un outil open source pour analyser les avis, repérer les anomalies et les textes répétitifs, et explorer l'historique des auteurs. GitHub : https://github.com/zinverno/reviewscope, démo : https://reviewscope-demo.streamlit.app/. L'outil ne récupère pas lui-même les avis depuis Yandex Maps. L'analyse nécessite un export préparé en CSV ou JSON. L'application normalise les données et les stocke dans DuckDB — tout tourne en local, sans serveur dédié. Un avis contient les champs suivants : review_id, place_id, place_name, place_category, revie

Que sait-on sur Quatre couches d'analyse des anomalies ?

Détection de pics d'activité (burst detection). Une boulangerie reçoit en général un ou deux avis par semaine. Si trente arrivent en une journée, presque tous cinq étoiles, c'est suspect. Mais pour un restaurant qui reçoit déjà cinquante avis par jour, ces mêmes trente avis ne signifient rien. La solution : médiane glissante + MAD (écart absolu médian). Le MAD mesure à quel point les valeurs habituelles s'écartent d'une valeur typique. Une seule journée extrême a peu d'effet sur cette mesure, contrairement à la moyenne et à l'écart-type, qui se déplacent sous l'effet d'une

ZK
Zhemal Khamidun — CPO d'Alpina Digital, product manager d'AlpinaGPT. Conçoit des produits IA depuis 2019. Hamidun News est un projet personnel devenu un agrégateur en production avec plus de 6 000 lecteurs.
✦ Hands-On AI Engineering · Hamidun Academy

Build & Ship Production AI Agents Without Boilerplate Code

Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.

Start 72h Free Trial →Vibe-Coding Intensive
Qu'en pensez-vous ?
Chargement des commentaires…