Semantic Clustering Demystified
Semantic clustering groups text by meaning instead of exact words. Here it runs on 8,504 hotel reviews, including the part where it points at the wrong problem.
Semantic clustering groups pieces of text by what they mean instead of the exact words they use. Feed it thousands of reviews or tickets and it hands back a few piles of similar comments, each with a label. It's a quick way into a large pile of customer text. People also tend to read more into the output than it can support, as the hotel example below shows.
What is semantic clustering?
Semantic clustering turns each piece of text into a list of numbers (a vector) that captures its meaning, then groups the vectors that sit close together. Two reviews that say "the room was filthy" and "housekeeping never cleaned" share almost no words, but a good representation puts them near each other, so they land in the same cluster.
Keyword grouping cannot do that, because it needs the same word to appear in both.
How it works
Represent the text. The simple option is TF-IDF, which weights words by how distinctive they are. The stronger option is a sentence-embedding model (the sentence-transformers family, or an embedding API), which places paraphrases close together even when no word overlaps.
Reduce, if needed. Embeddings have hundreds of dimensions. Methods like UMAP or PCA compress them so the clustering step is faster and less noisy. This step is optional for a few thousand texts.
Group. K-means asks you to pick the number of clusters up front. Hierarchical clustering builds a tree you can cut at any level. HDBSCAN finds clusters of uneven size on its own and leaves outliers unassigned, which suits messy feedback.
Name the clusters. Pull each cluster's most distinctive terms, or have a language model read a sample and write a label. Then read a sample of the comments yourself, because automatic labels are often off.
A worked example: 8,504 hotel reviews
Sample data: public Google reviews of 45 Marriott-family hotels in the Orlando metro, January 2025 to July 2026. We used the 8,504 reviews that carry a star rating.
We ran the plain version on purpose: TF-IDF, k-means, eight clusters. TF-IDF is keyword-based, so this is the lexical baseline many teams try first. Sentence embeddings would group more paraphrases together; they would not fix the limits further down.
The algorithm grouped the reviews mostly by tone. Six of the eight clusters were built on words like "amazing", "great location", "nice clean" and "excellent service". Together they held 59.5% of reviews, and only 2.4% of those reviews were one or two stars. The seventh, smaller cluster centered on the phrase "customer service".
Almost every complaint went into the remaining cluster. It held 3,199 reviews (37.6% of the set) and 1,789 of the 1,967 one- and two-star reviews, 91%. Its top terms were room, hotel, parking, night, desk, which amounts to one pile for every kind of bad stay.
Eight clusters, sorted mostly by tone
8,504 rated public Google reviews of 45 Marriott-family hotels in Orlando. Each cluster is named by its top terms.
Clustering only the bad reviews
The obvious fix is to cluster the 1,967 negative reviews on their own. That produced piles you can work with: parking charges and fees, smells and mold in the bathroom, credit card and refund disputes, the airport shuttle.
Clustering only the 1,967 bad reviews
One- and two-star reviews from the same hotels, clustered again. Each cluster is named by its top terms.
The biggest of them, 444 reviews or 22.6% of the negatives, was built on the words desk, said, told, check, asked: front-desk stories. If you treat cluster size as priority, the front desk goes to the top of the list.
A causal model on the same reviews disagrees. Holding hotel, tier, language, review length and reviewer type fixed, it puts the effect of a front-desk mention on one- to two-star risk at about two points, not statistically significant. A dirty room adds 34 points. Rude or unprofessional staff adds 44.
One likely reason front-desk stories pile up: angry guests tell the whole story, and the story usually passes the desk, where the complaint gets voiced.
Where clustering stops
Each review goes in one cluster
K-means puts each review in exactly one cluster. A quick keyword check on the 1,967 bad reviews found that 33.1% name two or more distinct problems out of five we looked for (cleanliness, front desk, charges, staff attitude, something broken). Inside the front-desk cluster, 22.1% also mention a charge or fee and 23.2% mention something broken. Clustering files each of those reviews under one heading and drops the rest.
A big cluster isn't necessarily a costly one
A cluster tells you how many people said something similar. It says nothing about whether that thing moved the rating, the renewal or the refund. In the hotel data, the largest pile of bad reviews was the front desk, and it had close to no effect.
Clusters change between runs
Change the number of clusters, the random seed or a month of data and the boundaries shift. That is fine for exploring and a problem for anything you want to track week over week.
How clustering compares with star averages, keyword counts, sentiment, a fixed schema and causal estimates on the same file is in six ways to analyze 8,504 hotel reviews.
Clusters follow word choice
The first run sorted largely by adjectives, because in short reviews the adjectives are the most distinctive words. Nothing in the method knows that "great" is a feeling and "parking fee" is a problem.
What to do after clustering
Use clustering to learn the vocabulary of your feedback. Then switch to a fixed set of questions asked of every record. Did this review mention a charge? Was the room clean? Was someone rude? Each answer becomes a field, so one review can carry several of them at once. We call these fields Dimensions.
Once every record has the same fields, you can join them to an outcome (the star rating, a renewal, a cancellation) and test which ones move it. That is the step that put the front desk near zero and dirty rooms (+34 points) and rude staff (+44) at the top. We walk through that test in Causal Inference: How to Move From Correlation to Cause, and compare the same pattern across hotels, gyms and restaurants in Which Complaints Cause Bad Reviews?.
FAQ
What is semantic clustering?
A way of grouping text by meaning. Each text becomes a vector, and texts whose vectors sit close together form a cluster. It finds similar comments even when they use different words.
Which algorithm should I use?
Start with sentence embeddings, reduced with UMAP, then HDBSCAN if you have no idea how many themes to expect, or k-means if you want a fixed number of groups. TF-IDF is fine for a first look and for short, consistent text.
Is semantic clustering the same as topic modeling?
Close cousins. LDA models each document as a mix of topics. BERTopic is closer to clustering: it groups embeddings and gives each document one topic by default. Neither tells you which topic changes an outcome.
We ran LDA on the same hotel reviews and compared it with a fixed set of labels in topic modeling vs LLM classification.
Can clustering tell me what to fix first?
No. At best it tells you which themes are common. To rank them by cost, tag every record with every issue it names and measure each issue's effect on the metric you care about.
Try it on your own feedback
Dimension Labs tags each review, ticket or survey response with Dimensions, then tests which ones move your numbers. Start with one file.