Views
No views yet
Roblox/roblox-pii-classifier-v2, an upgraded, context-aware PII (Personally Identifiable Information) detection model. Built on the XLM-RoBERTa-Large architecture, v2 is designed to identify attempts to share or solicit personal information across complex, multi-user conversations.t,
and all other participants are mapped to s1, s2, … in order of first
appearance. Turns are joined with </s>:Instruct: In the following chat messages from target speaker t and possibly other speakers s1, s2, etc., detect abuse by speaker t.
Query:
t: {text} </s> s1: {text} </s> t: {text}padding="max_length", truncation=True, and — critically —
truncation_side="left", so that when history overflows the window the
oldest turns are dropped and the latest target message is retained.| Index | Label | Threshold Recommendation | Definition |
|---|---|---|---|
| 0 | privacy_asking_for_pii | 0.60 | Attempts to obtain personal identifying information via direct or implicit methods. |
| 1 | privacy_giving_pii | 0.55 | Sharing PII — including phone numbers, email addresses, government IDs, social media handles, and credentials. |
| 2 | directing_users_off_platform | 0.10 | Attempting to move a user off-platform to external apps, services, or websites. |
| Dataset / Benchmark | Roblox PII v2 | *Roblox PII v1 | *OpenAI Privacy Filter | *GLiNER2 | Qwen3Guard Gen 8B | LlamaGuard v3 1B | LlamaGuard v3 8B | LlamaGuard v4 12B | NemoGuard 8B | *Piiranha NER | Shieldstral |
|---|---|---|---|---|---|---|---|---|---|---|---|
| roblox-pii-safety-for-chat | 88.82% | 64.69% | 58.16% | 54.50% | 66.24% | 27.89% | 56.24% | 54.56% | 56.52% | 58.34% | 57.84% |
| Roblox Internal Evaluation | 90.52% | 63.41% | 20.98% | 28.21% | 15.62% | 8.59% | 12.90% | 21.92% | 14.77% | 20.98% | 31.87 |
| Nemotron-PII | 99.22% | 70.07% | 65.22% | 62.92% | 37.46% | 53.32% | 46.07% | 35.05% | 56.16% | 68.52% | 56.69 |
| PII Masking OpenPII 1.5M | 99.76% | 86.79% | 84.23% | 83.07% | 61.94% | 65.10% | 64.23% | 56.16% | 54.01% | 86.35% | 85.33 |
pip install -r requirements.txtinference.py treats it as one turn
from the target speaker t and adds the required instruction prefix
automatically:1python inference.py --model-path . \
2 --text "add me on Discord, my username is skyfox_4821"t.
Other speaker names may be arbitrary; the formatter anonymizes them to s1,
s2, and so on in order of first appearance.1cat > conversation.json <<'JSON'
2[
3 {"speaker": "alice", "text": "how can I contact you?"},
4 {"speaker": "t", "text": "add me on Discord, my username is skyfox_4821"},
5 {"speaker": "alice", "text": "okay, got it"}
6]
7JSON
8
9python inference.py --model-path . --input-file conversation.json