nspam / README.md
barrydeen's picture
Set README to v2.2 card
0110086 verified
|
Raw
History Blame Contribute Delete
1.42 kB
---
license: mit
language:
- multilingual
tags:
- nostr
- spam-classification
- text-classification
- on-device
library_name: lightgbm
---
# nspam — on-device Nostr reply-spam classifier
Scores bundles of Nostr `kind:1` **reply** notes from a single author as
`real` or `bot`. Designed for mobile clients (Kotlin / Swift / JS).
- **Model type:** LightGBM gradient boosted trees over hashed character + word n-grams and
structural features.
- **Input:** 1–10 recent reply notes (events with `e` tags) from one pubkey.
- **Output:** calibrated probability ∈ [0, 1] that the author is a
reply-spammer.
- **Runtime:** LightGBM4j (JNI) or ONNX Runtime on device.
## Intended use
Client-side filtering/ranking of replies in Nostr apps. Use the score to
deprioritize or hide likely spam replies. Combine with user mutes and follow
graph rather than hard-blocking on a single score.
## Holdout metrics (v2.2)
| metric | value |
|---|---|
| average precision | 0.9666 |
| ROC AUC | 0.9800 |
| precision @ recall 0.9 | 0.9270 |
| per-author accuracy | 0.8780 |
## Limitations
- **Reply-focused.** Trained on reply notes only — not designed for scoring
feed posts or other event kinds.
- **English-heavy training data.** Non-Latin scripts underrepresented.
- **Adversarial drift.** Spammers evolve. Retrain periodically.
- **Cold start.** Accounts with <3 replies have limited signal.
## License
MIT.