VynFi/vynfi-sar-narratives
VynFi SAR Narratives — AML Labels with Transaction Evidence 156 787 banking transactions paired with 156 714 AML labels and case-level SAR (Suspicious Activity Report) narrative text. Designed as a starting point for SAR NLP research and for end-to-end pipelines that go from raw banking activity → AML labels → human-readable narrative. Generated with DataSynth (banking + narrative modules) · GitHub · Companion paper (SSRN). Provenance note. This dataset was last refreshed… See the full description on the dataset page: https://huggingface.co/datasets/VynFi/vynfi-sar-narratives.
VynFi SAR Narratives — AML Labels with Transaction Evidence
156 787 banking transactions paired with 156 714 AML labels and case-level SAR (Suspicious Activity Report) narrative text. Designed as a starting point for SAR NLP research and for end-to-end pipelines that go from raw banking activity → AML labels → human-readable narrative.
Generated with DataSynth (banking + narrative modules) · GitHub · Companion paper (SSRN).
Provenance note. This dataset was last refreshed under DataSynth v5.0. The v5.6 → v5.9 release line ships fixes centred on the journal-entry / accounting-network generators; the banking + narrative modules producing this dataset were untouched, so the data here is unaffected by those changes and a regeneration is not in scope for the v5.9.0 fleet refresh.
What's included
Quick start
from datasets import load_dataset
txns = load_dataset("VynFi/vynfi-sar-narratives", "transactions", split="train")
labels = load_dataset("VynFi/vynfi-sar-narratives", "labels", split="train")
narratives = load_dataset("VynFi/vynfi-sar-narratives", "narratives", split="train")
# Join chain: narrative → labels → transactions
import pandas as pd
n = narratives.to_pandas()
l = labels.to_pandas()
t = txns.to_pandas()
joined = n.merge(l, on="case_id").merge(t, on="transaction_id")Generation
Limitations
- Narrative text is template-generated, not LLM-written. It follows a fixed structure (subject, activity summary, indicators, recommendation) — useful for evaluating narrative-style models against a known schema, but not a substitute for production-quality case write-ups.
- The evidence chain join (narrative → labels → transactions) requires matching on
case_id. Not every transaction has a case assignment. - The narrative count is low because narratives are produced per suspicious case, and the default suspicious rate is ~0.05 %. For more narratives, regenerate with a higher
fraud_rateorsuspicious_ratein the banking config. - This dataset is a starting point for SAR NLP research, not a finished benchmark.
License
Apache-2.0.
Citation
@misc{ivertowski2026datasynth,
author = {Ivertowski, Michael},
title = {{DataSynth}: Reference Knowledge Graphs for Enterprise
Audit Analytics through Synthetic Data Generation
with Provable Statistical Properties},
year = {2026},
month = {April},
howpublished = {SSRN Working Paper},
url = {https://ssrn.com/abstract=6538639}
}