The Direct Answer

For most teams working with short, messy, real-world text in 2026 — support tickets, product reviews, survey responses, social posts — BERTopic is the better default choice. LDA (Latent Dirichlet Allocation) still wins in a narrow set of situations: very large corpora where training speed and memory matter more than topic quality, environments with no GPU or embedding infrastructure, academic settings where reviewers expect a classical baseline, and datasets of long documents with clean vocabulary. A 2023 comparison published in Frontiers that benchmarked LDA, NMF, Top2Vec, and BERTopic on Twitter data found BERTopic produced more coherent, human-interpretable topics on short texts than LDA, which struggled badly with tweets because its bag-of-words assumption discards word order and context. That finding has held up across many practitioner replications since.

Also worth reading: How can product teams effectively use topic modeling for customer feedback to drive development? · How does predictive churn modeling for SaaS work and what signals matter most in 2026? · How do customer signal inbox software workflows improve product and support team efficiency?

The core difference is architectural. LDA represents documents as probability distributions over topics, and topics as probability distributions over words, assuming each document is a mixture of topics generated by sampling words from those distributions. It was designed around 2003 for relatively long, formal documents like journal articles. BERTopic instead embeds documents into dense vectors using transformer models (typically sentence-transformers), clusters those embeddings (usually with HDBSCAN), and then extracts representative keywords per cluster using class-based TF-IDF (c-TF-IDF). Because embeddings capture semantic meaning — 'refund' and 'money back' land close together even though they share no words — BERTopic handles paraphrase, slang, typos, and multilingual text far better than LDA ever can.

That said, 'better' depends on your constraints. BERTopic requires computing embeddings for every document, which costs time and compute on large corpora, and its HDBSCAN clustering can leave a meaningful fraction of documents labeled as outliers (-1) if parameters are tuned poorly. LDA is fast, deterministic-ish given a fixed seed, runs on a laptop CPU for millions of documents via libraries like Gensim, and produces soft topic assignments per document rather than hard cluster labels. If you need document-level topic mixtures rather than discrete clusters, LDA's output format is actually what you want.

How Each Method Actually Works

LDA's generative story goes like this: to write a document, first pick a distribution over K topics, then for each word position pick a topic from that distribution, then pick a word from that topic's distribution over the vocabulary. Training uses variational inference or Gibbs sampling to reverse-engineer the topic-word and document-topic distributions from observed word counts. Everything operates on raw term frequencies after preprocessing: tokenization, stopword removal, stemming or lemmatization, and usually n-gram detection. You must specify K, the number of topics, up front, and the results are notoriously sensitive to that choice, to random seed, and to preprocessing decisions.

BERTopic's pipeline has five stages. First, it converts each document into an embedding using a pretrained transformer — all-MiniLM-L6-v2 is the common default for English, taking roughly 5-20 milliseconds per document on CPU and under 2 milliseconds on GPU. Second, it reduces embedding dimensionality with UMAP, typically down to 5-15 dimensions, which makes clustering both faster and more robust. Third, HDBSCAN groups the reduced vectors into clusters without requiring you to pre-specify the number of topics — it discovers them based on density. Fourth, c-TF-IDF treats all documents in a cluster as one big document and extracts the terms that distinguish it. Fifth, optional representation refinement swaps in MMR, KeyBERT-style keywords, or even LLM-generated labels for each topic.

The practical consequence of these architectures shows up immediately in output quality. LDA topics are lists of words weighted by probability, often mixing unrelated terms when the model is misspecified ('price ship order refund account' might be one topic). BERTopic topics come with representative documents attached, so a human reviewer can judge whether the cluster means anything within seconds. In the Frontiers study comparing the four methods on Twitter posts, BERTopic's topics were consistently rated more interpretable, while LDA frequently produced topics dominated by stopwords artifacts and hashtag noise despite careful preprocessing.

Head-to-Head Comparison Table

FeatureLDABERTopic
Year introduced2003 (Blei, Ng, Jordan)2021 (Grootendorst)
Core techniqueProbabilistic generative model on word countsTransformer embeddings + UMAP + HDBSCAN + c-TF-IDF
Handles synonyms/paraphraseNo — relies on exact token overlapYes — semantic similarity in vector space
Short texts (<50 words)Poor performance; needs special variantsStrong performance out of the box
Number of topicsMust be specified manually (K)Discovered automatically via HDBSCAN
Document-topic outputSoft probabilities across all topicsHard cluster assignment plus outlier label (-1)
Multilingual supportSeparate model per languageOne model covers 50+ languages with multilingual sentence transformers
Typical training speedFast: millions of docs in minutes on CPUSlower: embedding step dominates; GPU recommended past ~100k docs
Hardware requirementsAny laptop CPUCPU works for small sets; GPU helpful at scale
Outlier handlingEvery doc assigned somewhereUnclustered docs flagged as outliers, need reduction strategy
ReproducibilitySeed-controlled, fairly stableSensitive to UMAP/HDBSCAN randomness; set seeds
Interpretability aidsWord lists, pyLDAvisKeyword lists, representative docs, hierarchical and dynamic topic views
Best corpus size10k-10M+ long documents500-500k documents of any length
Maturity of toolingGensim, scikit-learn, MALLET — very stablebertopic library, active development, frequent releases
One row deserves emphasis: outlier handling. In practice, running BERTopic with default HDBSCAN settings on noisy business data often leaves 10-30% of documents unassigned. You mitigate this with min_topic_size tuning, reduce_outliers() methods, or by switching clustering to k-means. LDA never leaves a document unassigned, but that is partly because it forces every document into a topic mixture whether or not any topic fits — a feature that looks like coverage but can be a liability when the data contains genuinely off-topic noise.

Where LDA Still Wins

It would be dishonest to frame this as LDA being obsolete. Three scenarios favor it convincingly. First, scale on commodity hardware: Gensim's online LDA can stream through tens of millions of documents on a single CPU machine with modest RAM, whereas embedding 10 million documents with a sentence transformer takes hours of GPU time or days on CPU. If your corpus is huge and your budget for compute is zero, LDA gets you something usable today. Second, probabilistic document representations: downstream tasks sometimes want a document represented as a mixture over a fixed topic space — for example, tracking how the topic composition of a document collection shifts month over month. LDA's document-topic distributions slot directly into that analysis; BERTopic's hard assignments require extra work to approximate.

Third, regulatory and reproducibility contexts. LDA is fully deterministic given a fixed seed and stable library versions, and its behavior is mathematically transparent enough to explain to auditors. BERTopic inherits the quirks of whatever transformer model you embed with, plus stochastic UMAP and HDBSCAN steps, making byte-for-byte reproduction harder unless you pin everything carefully. Some compliance-sensitive industries still prefer the older method for exactly this reason.

There is also a hybrid pattern worth knowing: run LDA first as a cheap coarse pass to estimate roughly how many natural themes exist in your corpus, then use that number to inform BERTopic's nr_topics parameter or min_topic_size. Teams doing annual research reports often keep both in their toolkit for cross-validation — if LDA and BERTopic independently surface similar themes, confidence in the findings rises substantially.

Practical Steps to Run Both

For LDA in Python, the standard path is Gensim. Preprocess aggressively: lowercase, remove punctuation and stopwords, lemmatize, build bigram/trigram phrases with gensim.models.Phrases, then construct a Dictionary and filter extremes (keep tokens appearing in fewer than ~50% of docs and more than ~3-5 docs). Train LdaModel with passes=10-20, iterations=50-100, alpha='auto'. Evaluate coherence with CoherenceModel using c_v coherence; values above roughly 0.55 indicate usable topics, above 0.65 is good, and sweep K from about 10 to 100 to find the peak. Visualize with pyLDAvis to check for overlapping topic bubbles, which signal redundancy.

For BERTopic, install the bertopic package and start minimal: from bertopic import BERTopic; model = BERTopic(min_topic_size=30); topics, probs = model.fit_transform(docs). Inspect with model.get_topic_info(), examine representative docs per topic with get_representative_docs(), and visualize with visualize_topics() (an interactive Intertopic Distance Map), visualize_hierarchy(), and visualize_barchart(). Tune three things iteratively: the embedding model (switch to a domain-specific or multilingual model if your data warrants it), min_topic_size (lower it for finer topics, raise it to merge fragments), and the representation model (add MaximalMarginalRelevance for diversity or an LLM representer for human-readable labels). Expect a full tuning cycle on a mid-sized dataset (say 20k support tickets) to take half a day to two days including human review of outputs.

A realistic evaluation protocol matters more than people assume. Sample 200-400 documents, have two annotators assign them to the discovered topics blind, and measure agreement. Compare candidate models on topic coherence scores AND human interpretability ratings — published work, including the Nature paper applying BERTopic to software defect root-cause prediction, shows automated metrics only partially correlate with usefulness for downstream tasks. Whichever model you pick, freeze preprocessing and seeds before final reporting so numbers hold up under scrutiny.

Common Mistakes and How to Avoid Them

The most frequent LDA failure is skipping preprocessing discipline. People feed raw text with stopwords, URLs, and emoji intact, then wonder why topics look like garbage. The second most frequent mistake is choosing K arbitrarily or trusting a single coherence number; coherence curves are often flat between K=20 and K=60, and the 'optimal' value shifts with seed. Third, interpreting LDA topics as ground truth categories rather than statistical regularities — a topic containing 'account login password email' is evidence of co-occurrence, not proof users think of these as one thing.

On the BERTopic side, the classic error is treating default output as final. Defaults produce fragmented topics on most business corpora; you will see near-duplicate clusters split across five topics until you tune min_topic_size and merge manually with merge_topics(). Second, ignoring outliers entirely — if 25% of your tickets land in -1, your dashboards systematically exclude a quarter of customer pain. Third, using a weak or mismatched embedding model: an English-only MiniLM applied to German tickets destroys quality instantly, and a generic web-trained model underperforms on clinical or legal jargon. Fourth, expecting BERTopic to be deterministic across runs without setting random_state in UMAP and fixing the embedding model version; teams have shipped 'changing' dashboards because of this.

A shared mistake across both: evaluating topics by eyeballing ten examples and declaring victory. Topic models fail unevenly — 80% of clusters can be excellent while the remaining 20% silently absorb your most important edge cases. Budget explicit review time proportional to how consequential the output is. And beware of conflating topic count with insight count: forty topics does not mean forty findings, and forcing granularity usually manufactures noise.

When to Act and What It Costs

If you are currently relying on keyword rules or manual tagging to categorize customer feedback, and your volume exceeds roughly 500 items per week, it is time to adopt topic modeling — manual triage stops scaling well before that point, and rule-based tagging typically achieves 60-75% accuracy against human labels while missing novel phrasings entirely. Start with BERTopic on a sample of 5,000-20,000 recent items, review the top 30 topics with your support or product leads, and iterate weekly for a month before wiring outputs into workflows.

Cost-wise, both approaches are open source and free to run yourself. LDA runs comfortably on existing hardware. BERTopic's compute cost is modest: embedding 100k short documents costs pennies to a few dollars on a rented GPU instance or serverless inference endpoint, and local CPU embedding of 10k documents finishes in under an hour. The real investment is human: expect 20-40 hours of analyst time for initial setup, tuning, and validation, then 2-4 hours monthly for maintenance as language drift introduces new phrasings. Commercial platforms that wrap these techniques charge anywhere from $50/user/month for lightweight feedback tools to $1,000+/month for enterprise voice-of-customer suites, so a competent in-house implementation pays back quickly if you have any Python capability on staff.

Timeline expectations: a first working BERTopic model in one day, a defensibly tuned and validated model in one to two weeks, and production integration (scheduled retraining, drift alerts, dashboard feeds) in four to six weeks. Retrain quarterly at minimum; monthly if your product ships fast and terminology changes quickly.

Why This Matters for Customer Signal Work

Teams processing support tickets, reviews, NPS verbatims, and community posts face a specific challenge: customers describe identical problems in wildly different words. 'App crashes when I upload', 'freezes during photo sync', and 'killed my battery trying to backup' share almost no tokens, so LDA scatters them across unrelated topics while BERTopic's embeddings place them together naturally. This is precisely why modern customer-signal tooling has converged on embedding-based clustering as the backbone, with LLM-generated topic labels layered on top — the 'Advanced Topic Modeling with LLMs' line of work from 2024 onward extends BERTopic's representation stage so each cluster arrives with a plain-language summary instead of a bare keyword list.

For a B2B team routing signals between product and support, the operational requirements go beyond raw topic quality: you need consistent topic taxonomies across quarters so trend lines mean something, low-latency classification of new incoming items against established topics, and reliable handling of outliers so nothing falls through cracks. These requirements push toward a hybrid architecture — BERTopic for discovery and periodic taxonomy refresh, then a cheap supervised classifier (fine-tuned on BERTopic-labeled examples) for high-volume daily assignment. Research such as the Nature study pairing BERTopic with multi-output classifiers for defect prediction validates exactly this pattern: unsupervised discovery first, supervised scaling second.

The honest bottom line: learn both, default to BERTopic for interpretation-heavy work on conversational text, keep LDA in reserve for massive-scale or probabilistic-mixture needs, and always validate either one against human judgment before letting it drive decisions. The tools are free; the differentiator is disciplined evaluation.