Trip-Report Classification Methodology
Every community experience report on this site carries a tag — positive, neutral, or cautionary — summarising the author's own verdict on their experience. This page documents exactly how that tag is computed: the signals, the weights, the thresholds, and the measured accuracy. The system is deterministic and runs entirely locally; every tag can be reproduced and explained from the report text. (For the effect-profile scores, see the Effect Profile Scoring Methodology.)
Signals
Each Erowid report is scored on a continuous scale from −1 (unambiguous harm story) to +1 (unambiguously valued experience) by combining five signals. The tables below are rendered live from the exact constants the scorer uses, so this page always matches the code.
Erowid's human reviewers attach topic categories to ~99% of reports, including outcome categories. A report tagged Health Problems or Train Wrecks & Trip Disasters was judged by a person to describe harm; that judgement outweighs any single keyword. The first strong negative tag contributes −0.45 and each additional one −0.15; positive tags contribute the weights listed below.
Authors put verdicts in titles (“Never Again”, “Best Night of My Life”). A strong-negative title pattern contributes −0.40, a strong-positive +0.35, and mild vocabulary ±0.08 per hit, capped at ±0.16.
The final fifth of the report (at least 400 and at most 2,500 characters) is scored separately, because the author's summing-up lives there. Strong vocabulary counts double; the net count is scaled by 0.09 per hit. This is the signal that catches reports which open warmly and end badly — Erowid exp #79150 opens “I loved life” and ends with “a massive snowball of mental issues”, and a classifier reading only the opening calls that positive.
The whole text is scanned with the same lexicon, and the net count is divided by the report's length in thousands of words — so a long report does not accumulate spurious hits, and a short furious one is not diluted.
Unambiguous emergency markers — hospitalisation, ambulance, seizures, overdose, psychiatric admission — contribute −0.12 each wherever they appear, unless negated (“didn't need the hospital” does not count). A report containing an un-negated harm event can never be tagged positive.
Negation handling
Every lexicon hit is checked against the 40 characters before it. “No regrets” does not count as regret, “never felt better” is recognised as a positive idiom, and “avoided the emergency room” is not a harm event. This voiding applies to all four lexicons and the event detector alike.
Editorial topic weights
Erowid lists a report's substances and then its topics, and the two share one numeric namespace (Heroin and Health Problems are both 27), so ids are read from the topic side only. Only verdict categories are mapped. Subject categories — Addiction & Habituation, Hospital, Loss of Magic — say what a report is about, not how it ended, and carry no weight; Post Trip Problems counts as mild.
| Erowid category | id | Contribution |
|---|---|---|
| Bad Trips | 6 | −0.45 first / −0.15 each further |
| Train Wrecks & Trip Disasters | 7 | −0.45 first / −0.15 each further |
| Health Problems | 27 | −0.45 first / −0.15 each further |
| Overdose | 29 | −0.45 first / −0.15 each further |
| Difficult Experiences | 5 | −0.18 |
| Post Trip Problems | 8 | −0.18 |
| Glowing Experiences | 4 | +0.45 |
| Mystical Experiences | 9 | +0.20 |
| Health Benefits | 32 | +0.20 |
From score to label
The signal sum is clamped to [−1, +1] and mapped to the three display labels with deliberately asymmetric thresholds:
cautionary ≤ -0.15
< neutral < +0.22 ≤ positive
The cautionary boundary sits closer to zero than the positive one because the two mistakes are not symmetrical on a harm-reduction site: a harm story mislabelled “positive” misleads in the dangerous direction, while a good story mislabelled “neutral” merely undersells. Two further guards enforce the same asymmetry: a report with a strong negative editorial tag, or an un-negated harm event, is never labelled positive regardless of its score; and if such a tag is present and the text does not actively push back, the label stays cautionary.
Alongside the label, each report stores its raw score, a confidence grade (high / medium / low — driven by the score's magnitude and whether an editorial tag agrees), and a mixed flag set when a report carries substantial evidence in both directions — a genuinely great night followed by a hospital visit is mixed, not an average.
What each source can support
Measured accuracy
Before the re-tagged corpus shipped, a stratified sample of 54 Erowid reports (six from every old → new label transition, so the sample is deliberately hard) was independently labelled by two blinded raters reading the full text, with a third rater breaking ties. Against that reference:
| Old classifier | This system, 10 August 2026 | |
|---|---|---|
| Agreement with human raters | 22/54 (41%) 95% interval 29–54% |
39/54 (72%) 95% interval 59–82% |
| Harm stories labelled “positive” | 4 of 16 95% interval 10–50% |
0 of 16 95% interval 0–19% |
The sample deliberately over-weights the hard cases: it draws equally from every old-to-new label transition, including the classes where the two systems disagree, so corpus-wide accuracy is higher than the sampled figure. The raters themselves agreed with each other on 49 of 54 reports (91%), which bounds what any classifier can score on this reference. The remaining disagreements are dominated by genuinely contested reports — authors who valued an experience that Erowid’s reviewers filed under a harm category; this system sides with the reviewer in those cases, by design. The intervals are 95% Wilson intervals: with 54 reports, and 16 harm stories, each figure could plausibly sit anywhere in its range.
These figures describe the scorer as it stood on 10 August 2026. It has changed since: Erowid topic numbers are read only from the topic side of each tag list, subject tags such as Hospital or Addiction & Habituation no longer count as a verdict, and Bluelight and Reddit reports are scored from the full text rather than a short excerpt. They have not been re-measured: only the totals of the rating exercise were kept, not each report’s rating, so repeating it needs new blinded ratings.
Percentages from reports
Effect bars, dose-tier tables, combinations, forms and redosing on the substance, stats and report pages are shares of reports (the comparisons between dose tiers are covered below): “40% of reports mention nausea”. A share from a handful of reports is not a measurement, so every such percentage carries a 95% interval (a Wilson score interval): the shaded band on a bar, the whisker on a chart, or the small range after the number. It gives where the share could plausibly be with other reports of the same kind. 12 of 20 reports is 60% (39–78%); 600 of 1,000 is 60% (57–63%).
No bar is drawn from fewer than 20 reports. The page gives the count instead (“3 of 7”) and says why. The pie charts of gender and of single doses against redoses follow the same rule. The number was chosen from the reports themselves: for the 24 substances with 200 or more single-substance Erowid reports, random samples of n reports were drawn, a page was built from each exactly as the site builds one, and it was compared with the page built from all of that substance's reports.
| Reports | Order of effects (median rank correlation with the full page) | Bars more than 20 points off |
|---|---|---|
| 10 | 0.737 | 6.7% |
| 15 | 0.797 | 3.2% |
| 20 | 0.834 | 1.6% |
| 30 | 0.879 | 0.4% |
20 is the smallest sample that puts the effects in roughly the right order (a correlation of at least 0.8) with fewer than 1 bar in 50 badly off. The same samples checked the interval: the full pool's share fell inside the small sample's 95% interval 94–98% of the time. The interval measures sampling alone. It does not turn a keyword mention into a first-hand experience, and it cannot correct for reports that are not a random sample of everyone who took the substance.
Anxiety on sedative, opioid and similar pages
The anxiety bar counts reports whose text uses words such as anxiety, panic, scared or paranoid, leaving out mentions that say it did not happen or that it eased. On most pages that comes close to the anxiety writers felt. On pages for drugs people take for anxiety, or that ease it, it does not: there the word mostly names the condition the drug was taken for, or the anxiety it took away, and a keyword count cannot tell those from anxiety the writer felt. On several of these pages anxiety stood first among the adverse effects.
So on the 15 pages below the anxiety row is left out everywhere it appeared: the adverse effects, the effect-frequency lists, the dose-tier views, the effect tags and the anxiety part of the effect profile. The pages themselves carry no note about it; this section is the explanation. The list comes from a check, made in October 2026, of the keyword count against a reading of the same single-substance Erowid reports by a language model running on the site owner's computer. A page is listed where the keyword flagged anxiety at least one and a half times as often as the model read anxiety the writer felt, and the gap was too large to be chance (lorazepam, just short of that test's cut-off, is listed with the other benzodiazepines). On pages such as LSD, MDMA and cocaine the two agreed closely. The model's own figures are not shown on this site, and the list changes only if the check is made again.
- Alprazolam
- Clonazepam
- Codeine
- Diazepam
- Etizolam
- Gabapentin
- Heroin
- Kava
- Kratom
- Lorazepam
- Paroxetine
- Phenibut
- Pregabalin
- Quetiapine
- Triazolam
Every benzodiazepine page leaves the row out as well, 71 pages in all. In reports about a benzodiazepine the word almost always names the anxiety it was taken for, or the anxiety it eased. The check above found that on all six benzodiazepines with enough reports to test, and the rule carries it to the whole class, most of which have too few reports to check one by one. Flumazenil, which reverses benzodiazepines, keeps the row, and so does every page not covered here.
Leaving the row out does not mean these drugs never cause anxiety: people do report it with them, and stopping a benzodiazepine can bring rebound anxiety.
Changes between dose tiers
Two views on the stats page compare dose tiers: the Change column in Risk Escalation and the arrows in Dose–Effect Mapping. Each compares an effect's share in the lowest and the highest tier that count it, and gives the gap in percentage points with a 95% interval for the difference (Newcombe's method, built from the two tiers' Wilson intervals). A rise or a fall is shown only when that interval excludes zero; otherwise the page says no clear change (~ among the arrows). The same 10-point gap can go either way: 10% against 20% of 40 reports a tier is +10 points (−6 to +26), no clear change; from 200 reports a tier it is +10 points (+3 to +17), a rise. Overlapping intervals are not the test: two shares can differ clearly while their own bars' intervals overlap a little. These views used to call any relative gap over 10–15% a change and print it as a relative change: 5% of 39 reports against 20% of 49 read as “+300%”. That one is a rise, of 15 points (95% interval +0.5 to +29), but most of the changes they called could have been chance. At 95%, about 1 in 20 effects that do not change with dose will still be shown as a change by chance.
Risk Escalation's per-tier average is the mean share of the effects counted in that tier, not a share of reports. Its range is the interval the average would have if those effects were always reported together, the worst case, so it is deliberately wide. A tier with more reports also counts rarer effects (an effect is counted in a tier from 2 mentions), which pulls its average down, so the averages of two tiers are not a like-for-like comparison. The effect rows are.
Reports counted
The homepage counts 46,540 trip reports: distinct reports that at least one of the site's report pipelines files under a substance with a page here, each counted once however many substances it names. A report counts whether it is shown as a card or sits behind a figure, such as the Erowid effect bars, the Common Combinations section or the Bluelight report counts.
| Source | Counted | Held but not filed under a page | Repeat copies |
|---|---|---|---|
| Erowid | 36,463 | 6,274 | 502 |
| Bluelight | 8,768 | 2,481 | 0 |
| 1,169 | 1,474 | 33 | |
| Dose.wiki | 140 | 25 | 0 |
A report is not filed when no substance in it is recognised, when the substance it names has no page, or when its pipeline sets it aside (the dose.wiki pipeline, for one, skips most combination reports and keeps one copy of an experience published twice). A repeat copy is the same report held twice in one source (a re-fetched Erowid page, a Reddit post in two files); it counts once. Also not counted: 845 Reddit posts under 500 characters. Reddit is filed by subreddit and flair, so a question, a photo caption or a growing tip posted in a substance's subreddit is filed under that substance, and a check of randomly chosen short posts found few that describe an experience. Erowid and Bluelight entries were submitted as trip reports and count at any length.
The same report posted to two different sites still counts once per site: matching copies across sites is not done yet. The homepage used to show 57,905, the number of rows in the five source files, which counted every repeat copy, every report no page uses and every Reddit post.
Known limitations
The scorer reads English only, cannot detect sarcasm, and can be misled by long quoted passages describing someone else's experience. On Bluelight and Reddit the scorer uses no editorial tags — Reddit has none, and the tags some Bluelight threads carry are removed before scoring — so the label rests on the author's words alone, the configuration in which the scorer is weakest. A verdict stated only in the opening lines can be outweighed by how the report ends, and words naming a condition the drug was taken for (“anxiety”, “depression”) count toward cautionary. Reports with little affect vocabulary in either direction default to neutral at low confidence; neutral is the honest answer when the text does not argue.