What six years of feedback says
The survey pile the quality team could never read end-to-end: every slip scored, stamped with the themes it mentions, and dropped into the tray it belongs to. Change the country above and the stack re-sorts.
Sorted into theme trays
Each tray holds the slips that mention one theme, split into praised (9–10) and criticised (0–6), with its average and its trend. Open a tray to read its slips.
Topic trends · average score by year
Is a theme getting better or quietly rotting? Toggle themes; hover for values. Years with too few slips are bridged, not broken.
Table view (average score by topic and year)
The words that carry the score
Every recurring term, grouped with the scores of the slips it appears in (terms shown in their processed form). Click one to read the slips behind it.
Praised · high average, high agreement
Criticised · recurring and low
Read the pile like the tool did
Every survey slip, with the themes the pipeline stamped on it. Click any slip for its x-ray: each processing step, applied to that exact text.
How it worked
The real system read several thousand survey responses collected since 2013: score, country, date and a free-text comment, typed on shop floors in a dozen languages.
The pipeline
Non-English comments were routed to their own track by language detection; the mining below ran on the English corpus. Click any comment in the Comments view to watch these steps run on that exact text.
Terms that carry the score
The core trick needs no labels and no training: group comments by the terms they share, and look at the statistics of their scores. The average tells you whether a term lives in praise or in complaints; the spread tells you whether people agree.
A low average with a tight spread is a systematic problem, not bad luck. A wide spread is a fight (the same words appear in 0s and 10s), which usually means two different experiences hiding under one term.
Topics without labeled data
- as in productionSeed words, not training setsA handful of anchor words (service, price, precision, part, support…) defined each theme. No one had to label a single comment.
- demo: ported lexiconSemantic similarity does the stretchingEvery term in the corpus was scored against the anchors with WordNet path-similarity and word-vector distance, so “technician”, “hotline” and “callback” all pull toward service without anyone listing them.
- production onlyClusters as a cross-checkComment vectors were also clustered bottom-up (DBSCAN parameter sweeps scored by label entropy, then a k-means pass over the ensemble) to surface recurring situations the seed topics might have missed.
Honest notes
- The spelling was hostileReal comments were typed on shop floors: “relibility”, “servise”, “sparepart” as one word. The production pipeline spell-corrected and re-segmented the whole vocabulary; this demo ships a seeded typo dictionary and fixes the same way.
- What this demo simplifiesThe corpus here is fictional and generated from a fixed seed; topic similarity uses the lexicon the real system learned, rather than live word vectors; the clustering cross-check is described but not re-run.
- What stayed faithfulThe pipeline order, the language gate, the normalisation steps, the n-gram score statistics and their thresholds, and the read-out the quality team got: praised vs criticised terms, by topic, by country, over time.