Skip to content

Duplicate Detection Threshold Finder

Paste your own items and sweep the similarity cutoff until the pairs it merges stop looking like duplicates.

At a threshold of 0.70
11 of 16 kept

6 pairs are above the threshold, collapsing 16 items into 11 groups — 5 removed as duplicates.

thresholdpairs abovegroups leftremoved
0.950160
0.901151
0.851151
0.803133
0.755124
0.706115
0.65897
0.601088
0.551279
0.501279
0.4514610
0.4018511

Look for the place the 'removed' column jumps. A cliff means a natural break in your data; a smooth ramp means there isn't one, and you are choosing a trade-off rather than finding a truth.

pairsimilarityverdict
line 3: How do I reset my password
line 4: how do i reset the password?
0.778merged
line 10: Cancel my subscription
line 11: How do I cancel my subscription?
0.778merged
line 15: Is there an API rate limit?
line 16: What is the API rate limit
0.717merged
line 8: Where can I download my invoice
line 9: How do I download an invoice
0.655kept apart
line 10: Cancel my subscription
line 12: I want to cancel the subscription
0.655kept apart
line 13: Do you support single sign-on?
line 14: Do you support SSO?
0.625kept apart

The three pairs just above your threshold and the three just below. This is the boundary you are actually setting — if a 'merged' row is not a duplicate, or a 'kept apart' row is, move the slider.

No exact duplicates, and the whole list fitted inside the comparison cap.
What this checked: this compares every pair of lines using character trigram Dice similarity, sweeps the threshold, and clusters with single-linkage union-find so that A~B and B~C puts all three in one group. It flags lines that are already identical after normalising case and whitespace. No embedding model runs here, so this finds near-exact duplicates — reworded, retyped, differently punctuated — and will not find two sentences that mean the same thing in different words. The method transfers to embedding cosine; the number does not. If you are deduplicating with vectors, run this sweep on your own cosine scores instead of trusting the value you find here.
What this assumes: similarity is symmetric, and clustering is single-linkage, which is the aggressive choice: one chain of borderline pairs can merge a large group. That is usually what you want for deduplication and usually what you do not want for topic grouping. Comparison is capped at 300 lines because the work grows with the square of the input.

Everything on this page runs in your browser. Nothing you paste is uploaded, logged, or put in the URL — only the settings above the input are, so a configured tool can be linked to.

There is no default threshold, and anyone who gives you one is guessing

The right cutoff depends on how long your items are, how formulaic the language is, and what a mistake costs in each direction. Short, templated strings — support subject lines, product titles — cluster tightly and need a high cutoff, often above 0.85, because unrelated items already share a lot of surface. Long free text needs a lower one. The sweep table above is the honest way to pick: find where the number removed jumps, then read the boundary pairs and decide with your eyes.

What to do before you dedupe at all

Exact matching is free and catches more than people expect. Normalise case, collapse runs of whitespace, strip punctuation and trailing markers, then hash — that removes the easy half of most corpora in linear time, and it is deterministic, so it never needs a threshold. Only what survives that should reach a similarity comparison.

Then be aware of the asymmetry in the cost of an error. In training data, a missed duplicate inflates a benchmark and a wrongly merged pair quietly deletes a distinct example — the second is worse and much harder to notice later. In a support inbox, merging two different customers' questions is a visible failure and missing a duplicate costs a few seconds. Set the threshold according to which of those you are doing, not according to a number from a blog post.

Duplicate Detection Threshold Finder · Multigrid