chairulridjal/arcspan-cyber-ner
Arcspan Cybersecurity NER Dataset A multi-source cybersecurity named entity recognition dataset in OPF (OpenAI Privacy Filter) JSONL format, covering 5 entity classes across threat intelligence reports, CVE descriptions, MITRE ATT&CK entries, APT reports, and more. Built as the training and evaluation corpus for the Arcspan project — fine-tuning OpenAI's sparse MoE Privacy Filter for cybersecurity IOC extraction. Dataset Summary Split File Records Spans… See the full description on the dataset page: https://huggingface.co/datasets/chairulridjal/arcspan-cyber-ner.
Arcspan Cybersecurity NER Dataset
A multi-source cybersecurity named entity recognition dataset in OPF (OpenAI Privacy Filter) JSONL format, covering 5 entity classes across threat intelligence reports, CVE descriptions, MITRE ATT&CK entries, APT reports, and more.
Built as the training and evaluation corpus for the Arcspan project — fine-tuning OpenAI's sparse MoE Privacy Filter for cybersecurity IOC extraction.
Dataset Summary
Label Space
5-class cybersecurity NER schema:
Data Format
All files are JSONL in OPF (OpenAI Privacy Filter) format. Each line is a JSON object:
{
"text": "APT29 deployed Cobalt Strike via CVE-2021-44228 against Exchange servers.",
"spans": {
"Organization: APT29": [[0, 5]],
"Malware: Cobalt Strike": [[16, 28]],
"Vulnerability: CVE-2021-44228": [[33, 47]],
"System: Exchange": [[56, 64]]
},
"info": {
"id": "apt_reports_00042",
"source": "apt_reports"
}
}Span key format: "Label: surface_text" → [[start_char, end_char], ...]
Offsets are character-level, zero-indexed, half-open [start, end).
Training Data Sources (R9)
The R9 training set aggregates 22 sources, deduplicated and leakage-cleaned:
Leakage Audit (R9)
Zero overlap between training data and all held-out evaluation sets:
Internal duplicates: 0 exact, 0 prefix-80.
Benchmark Evaluation Results
Evaluated using the Arcspan R8 checkpoint with strict exact-match scoring (seqeval-style):
APTNER (Independent benchmark — APT report style)
CyNER Test
Usage
Loading with Hugging Face datasets
from datasets import load_dataset
ds = load_dataset("chairulridjal/arcspan-cyber-ner")
# Splits: r9_train, r9_valid, aptner_test, cyner_test, securebert2_test, enriched_testLoading manually
import json
with open("r9_5class_train.jsonl") as f:
examples = [json.loads(line) for line in f]
# Access spans
for ex in examples[:3]:
print(ex["text"][:80])
for key, offsets in ex["spans"].items():
label, surface = key.split(": ", 1)
for start, end in offsets:
print(f" [{label}] {ex['text'][start:end]!r} @ {start}:{end}")Using with OpenAI Privacy Filter / Arcspan
# Evaluate directly with opf
opf eval r9_5class_train.jsonl \
--checkpoint chairulridjal/arcspan \
--device cpuRelated Resources
- Model: chairulridjal/arcspan — Fine-tuned cybersecurity NER model
- Base model: openai/privacy-filter — OpenAI's sparse MoE Privacy Filter
- Source datasets: CyNER, APTNER, DNRTI, CyberNER, MITRE ATT&CK, NVD, ExploitDB
License
Apache 2.0. Note that individual source datasets may carry their own licenses — see the original dataset repositories for details. LLM-annotated portions were generated from publicly available text.
