TensorGreed commited on
Commit
d1ddca2
·
verified ·
1 Parent(s): 9e9dca2

BrewSLM export 37: sensitive-data span tagger, run #143 (deberta-v3-base, 30 types)

Browse files
Files changed (7) hide show
  1. README.md +155 -0
  2. config.json +165 -0
  3. label_space.json +97 -0
  4. model.safetensors +3 -0
  5. thresholds.json +451 -0
  6. tokenizer.json +0 -0
  7. tokenizer_config.json +23 -0
README.md ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: transformers
3
+ pipeline_tag: token-classification
4
+ base_model: microsoft/deberta-v3-base
5
+ tags:
6
+ - token-classification
7
+ - span-extraction
8
+ - brewslm
9
+ license: mit
10
+ language:
11
+ - en
12
+ ---
13
+
14
+ # Sensitive-data tagger (PCI / GDPR / HIPAA + custom) span tagger
15
+
16
+ A token-classification model that finds spans of text and labels each with a type, fine-tuned from `microsoft/deberta-v3-base`.
17
+ Trained with BrewSLM (project “Sensitive-data tagger (PCI / GDPR / HIPAA + custom)”, run #143).
18
+
19
+ ## Model
20
+
21
+ - **Base model:** `microsoft/deberta-v3-base`
22
+ - **Task:** token classification (BIO tags → character spans)
23
+ - **Window:** 512 tokens (the tokenizer's `model_max_length`); longer texts are read in overlapping windows
24
+
25
+ ## Entity types
26
+
27
+ 30 types: `address`, `api_key`, `bank_account`, `card_expiry`, `credit_card`, `customer_id`, `cvv`, `date_of_birth`, `device_id`, `diagnosis`, `email`, `employee_id`, `health_plan_id`, `iban`, `ip_address`, `licence_number`, `license_plate`, `medical_record_number`, `medication`, `national_id`, `passport`, `person_name`, `phone`, `provider_name`, `routing_number`, `tax_id`, `ticket_id`, `transaction_id`, `username`, `visit_date`.
28
+ Labels are BIO: `O`, then `B-<type>` / `I-<type>` per type.
29
+
30
+ ## Training data
31
+
32
+ - **Training rows:** 1620 (1612 with at least one span)
33
+ - **Validation rows:** 202
34
+ - **Data kinds:** synthetic
35
+ - **Row sources:** `passage_labels:cloud:anthropic:claude-sonnet-5-5` 919; `teacher_llm` 335; `passage_labels:ollama` 223; `passage_labels:cloud:anthropic:claude-haiku-4-5-20251001` 101; `document_labels:ollama` 32; `teacher_llm+regex` 10
36
+ - **Labelled by:** `cloud:anthropic:claude-sonnet-5-5` 1620
37
+ - **Augmentation:** 1616 OCR-noise copies (character noise rate 0.1)
38
+ - **Epochs:** 5
39
+ - **Seed selection:** Picked seed 45 (run #143) of 3 by validation span F1 (tuned thresholds) (higher is better; values: seed 45 0.9467, seed 46 0.9452, seed 47 0.9437); test examples, the answer key and external benchmarks were not used to pick.
40
+
41
+ ## Evaluation
42
+
43
+ Strict span match: a prediction counts only when its type, start and end all equal a reference span.
44
+
45
+ ### Answer key (44 texts)
46
+
47
+ Reference spans written by `cloud:anthropic:claude-sonnet-5-5`.
48
+
49
+ Human review: 11 of 44 rows checked by a person (1 corrected). On the checked rows: precision 0.90 · recall 0.95 · F1 0.92 (11 texts).
50
+
51
+ Overall: precision 0.97 · recall 0.98 · F1 0.97
52
+
53
+ 0 of 24 types have enough reference spans to show a 0.05 F1 difference; the others can only show 0.82 or more (medical_record_number: 1 span, needs 152).
54
+
55
+ | Type | Precision | Recall | F1 | Gold spans |
56
+ |---|---|---|---|---|
57
+ | `address` | 1.00 | 1.00 | 1.00 | 4 |
58
+ | `api_key` | 1.00 | 1.00 | 1.00 | 2 |
59
+ | `bank_account` | 0.62 | 1.00 | 0.77 | 5 |
60
+ | `card_expiry` | 1.00 | 1.00 | 1.00 | 16 |
61
+ | `credit_card` | 1.00 | 0.91 | 0.95 | 23 |
62
+ | `cvv` | 1.00 | 1.00 | 1.00 | 9 |
63
+ | `date_of_birth` | 0.70 | 1.00 | 0.82 | 7 |
64
+ | `diagnosis` | 1.00 | 1.00 | 1.00 | 16 |
65
+ | `email` | 1.00 | 1.00 | 1.00 | 27 |
66
+ | `employee_id` | 1.00 | 1.00 | 1.00 | 3 |
67
+ | `health_plan_id` | 1.00 | 1.00 | 1.00 | 7 |
68
+ | `iban` | 1.00 | 1.00 | 1.00 | 7 |
69
+ | `ip_address` | 1.00 | 1.00 | 1.00 | 6 |
70
+ | `medical_record_number` | 1.00 | 1.00 | 1.00 | 1 |
71
+ | `medication` | 0.86 | 0.90 | 0.88 | 20 |
72
+ | `national_id` | 1.00 | 1.00 | 1.00 | 13 |
73
+ | `passport` | 1.00 | 1.00 | 1.00 | 6 |
74
+ | `person_name` | 1.00 | 1.00 | 1.00 | 37 |
75
+ | `phone` | 1.00 | 1.00 | 1.00 | 25 |
76
+ | `provider_name` | 1.00 | 1.00 | 1.00 | 23 |
77
+ | `routing_number` | 0.00 | 0.00 | 0.00 | 3 |
78
+ | `ticket_id` | 1.00 | 1.00 | 1.00 | 9 |
79
+ | `username` | 1.00 | 1.00 | 1.00 | 1 |
80
+ | `visit_date` | 0.94 | 1.00 | 0.97 | 16 |
81
+
82
+ ### Test examples (44 texts)
83
+
84
+ Overall: precision 0.96 · recall 0.98 · F1 0.97
85
+
86
+ 0 of 24 types have enough reference spans to show a 0.05 F1 difference; the others can only show 1.00 or more (medical_record_number: 1 span, needs 152).
87
+
88
+ | Type | Precision | Recall | F1 | Gold spans |
89
+ |---|---|---|---|---|
90
+ | `address` | 1.00 | 1.00 | 1.00 | 4 |
91
+ | `api_key` | 1.00 | 1.00 | 1.00 | 2 |
92
+ | `bank_account` | 0.62 | 1.00 | 0.77 | 5 |
93
+ | `card_expiry` | 1.00 | 1.00 | 1.00 | 16 |
94
+ | `credit_card` | 0.95 | 0.87 | 0.91 | 23 |
95
+ | `cvv` | 1.00 | 1.00 | 1.00 | 9 |
96
+ | `date_of_birth` | 0.70 | 1.00 | 0.82 | 7 |
97
+ | `diagnosis` | 1.00 | 1.00 | 1.00 | 16 |
98
+ | `email` | 1.00 | 1.00 | 1.00 | 27 |
99
+ | `employee_id` | 1.00 | 1.00 | 1.00 | 3 |
100
+ | `health_plan_id` | 1.00 | 1.00 | 1.00 | 7 |
101
+ | `iban` | 1.00 | 1.00 | 1.00 | 7 |
102
+ | `ip_address` | 1.00 | 1.00 | 1.00 | 6 |
103
+ | `medical_record_number` | 1.00 | 1.00 | 1.00 | 1 |
104
+ | `medication` | 0.86 | 0.90 | 0.88 | 20 |
105
+ | `national_id` | 1.00 | 1.00 | 1.00 | 13 |
106
+ | `passport` | 1.00 | 1.00 | 1.00 | 6 |
107
+ | `person_name` | 1.00 | 1.00 | 1.00 | 37 |
108
+ | `phone` | 1.00 | 1.00 | 1.00 | 25 |
109
+ | `provider_name` | 1.00 | 1.00 | 1.00 | 23 |
110
+ | `routing_number` | 0.00 | 0.00 | 0.00 | 2 |
111
+ | `ticket_id` | 1.00 | 1.00 | 1.00 | 9 |
112
+ | `username` | 1.00 | 1.00 | 1.00 | 1 |
113
+ | `visit_date` | 0.94 | 1.00 | 0.97 | 16 |
114
+
115
+ ## External benchmarks
116
+
117
+ Labelled sets made by someone else, mapped onto this model's types; only the mapped types are scored (a prediction of another type is neither a hit nor a false positive).
118
+
119
+ | Benchmark | Source | Licence | Texts | Types scored | Precision | Recall | F1 |
120
+ |---|---|---|---|---|---|---|---|
121
+ | CoNLL-2003 people (news, human-labelled) | `eriktks/conll2003:test` | other | 400 | person_name | 0.93 | 0.70 | 0.80 |
122
+ | Gretel PII (synthetic, independent) | `gretelai/gretel-pii-masking-en-v1:test` | apache-2.0 | 500 | address, api_key, bank_account, credit_card, date_of_birth, email, employee_id, health_plan_id, ip_address, license_plate, medical_record_number, national_id, person_name, phone | 0.76 | 0.80 | 0.78 |
123
+ | CoNLL-2003 people, large (validation, 2000 rows) | `eriktks/conll2003:validation` | other | 2000 | person_name | 0.93 | 0.74 | 0.83 |
124
+
125
+ ## Usage
126
+
127
+ ```python
128
+ from transformers import pipeline
129
+
130
+ tagger = pipeline("token-classification", model="path/to/model", aggregation_strategy="simple", stride=128)
131
+
132
+ def find_spans(text):
133
+ spans = []
134
+ for ent in tagger(text):
135
+ start, end = ent["start"], ent["end"]
136
+ # The tokenizer can attach the preceding space to a span; trim it.
137
+ while start < end and text[start].isspace():
138
+ start += 1
139
+ spans.append({"type": ent["entity_group"], "start": start, "end": end,
140
+ "text": text[start:end], "score": float(ent["score"])})
141
+ return spans
142
+ ```
143
+
144
+ `stride=128` matters: without it the pipeline cuts a text at the 512-token window and never tags anything after it. With it, long texts are read in overlapping windows.
145
+
146
+ `thresholds.json` holds per-type minimum scores (all 0.0 = keep every predicted span) and a `recall_bias`. To favour precision for a type, drop its spans whose score is under that type's value. BrewSLM's redact endpoint and scored decoder read this file; there the score is the span's mean per-token probability of its type, and `recall_bias` (0–1) is subtracted from each token's `O` probability so borderline tokens are tagged (more recall, less precision).
147
+
148
+ ## Limitations
149
+
150
+ - Scores come from small held-out sets — 44 texts (answer key), 44 texts (test examples) — so expect a few points of noise either way.
151
+ - Types with fewer than 10 reference spans in an evaluation (`address`, `api_key`, `bank_account`, `cvv`, `date_of_birth`, `employee_id`, `health_plan_id`, `iban`, `ip_address`, `medical_record_number`, `passport`, `routing_number`, `ticket_id`, `username`) have unreliable per-type scores.
152
+ - The training data is synthetic or model-labelled, not human-annotated; real documents with other layouts, formats or languages may score lower.
153
+ - It finds what it was trained to find: entity types outside the list above are never tagged.
154
+ - On the Gretel PII benchmark (103 employee_id, 55 license_plate, 17 bank_account reference spans — directional numbers): employee_id precision 0.95 / recall 0.70, license_plate F1 0.69, bank_account precision 0.50 (false positives are mostly routing numbers, device identifiers and timestamps that Gretel leaves unlabelled). Compared with the previous export of this project (run #135), employee_id recall is 0.06 lower and bank_account precision 0.21 lower; employee_id precision is 0.15 higher and license_plate 0.10 higher. Plate false positives are still UK National Insurance numbers, medical record numbers and postcodes.
155
+ - Benchmark hygiene: 32 Gretel gold values (identifiers, plates, street names) had been copied verbatim into earlier training rows by the data-seeding prompts (591 occurrences in 248 rows). They were replaced with invented values of the same shape before this run trained, so its Gretel figures are measured on data the model never saw. The previous export's employee_id figure was overstated by an estimated 0.03–0.15 F1 for that reason.
config.json ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "DebertaV2ForTokenClassification"
4
+ ],
5
+ "attention_probs_dropout_prob": 0.1,
6
+ "bos_token_id": null,
7
+ "dtype": "float32",
8
+ "eos_token_id": null,
9
+ "hidden_act": "gelu",
10
+ "hidden_dropout_prob": 0.1,
11
+ "hidden_size": 768,
12
+ "id2label": {
13
+ "0": "O",
14
+ "1": "B-address",
15
+ "2": "I-address",
16
+ "3": "B-api_key",
17
+ "4": "I-api_key",
18
+ "5": "B-bank_account",
19
+ "6": "I-bank_account",
20
+ "7": "B-card_expiry",
21
+ "8": "I-card_expiry",
22
+ "9": "B-credit_card",
23
+ "10": "I-credit_card",
24
+ "11": "B-customer_id",
25
+ "12": "I-customer_id",
26
+ "13": "B-cvv",
27
+ "14": "I-cvv",
28
+ "15": "B-date_of_birth",
29
+ "16": "I-date_of_birth",
30
+ "17": "B-device_id",
31
+ "18": "I-device_id",
32
+ "19": "B-diagnosis",
33
+ "20": "I-diagnosis",
34
+ "21": "B-email",
35
+ "22": "I-email",
36
+ "23": "B-employee_id",
37
+ "24": "I-employee_id",
38
+ "25": "B-health_plan_id",
39
+ "26": "I-health_plan_id",
40
+ "27": "B-iban",
41
+ "28": "I-iban",
42
+ "29": "B-ip_address",
43
+ "30": "I-ip_address",
44
+ "31": "B-licence_number",
45
+ "32": "I-licence_number",
46
+ "33": "B-license_plate",
47
+ "34": "I-license_plate",
48
+ "35": "B-medical_record_number",
49
+ "36": "I-medical_record_number",
50
+ "37": "B-medication",
51
+ "38": "I-medication",
52
+ "39": "B-national_id",
53
+ "40": "I-national_id",
54
+ "41": "B-passport",
55
+ "42": "I-passport",
56
+ "43": "B-person_name",
57
+ "44": "I-person_name",
58
+ "45": "B-phone",
59
+ "46": "I-phone",
60
+ "47": "B-provider_name",
61
+ "48": "I-provider_name",
62
+ "49": "B-routing_number",
63
+ "50": "I-routing_number",
64
+ "51": "B-tax_id",
65
+ "52": "I-tax_id",
66
+ "53": "B-ticket_id",
67
+ "54": "I-ticket_id",
68
+ "55": "B-transaction_id",
69
+ "56": "I-transaction_id",
70
+ "57": "B-username",
71
+ "58": "I-username",
72
+ "59": "B-visit_date",
73
+ "60": "I-visit_date"
74
+ },
75
+ "initializer_range": 0.02,
76
+ "intermediate_size": 3072,
77
+ "label2id": {
78
+ "B-address": 1,
79
+ "B-api_key": 3,
80
+ "B-bank_account": 5,
81
+ "B-card_expiry": 7,
82
+ "B-credit_card": 9,
83
+ "B-customer_id": 11,
84
+ "B-cvv": 13,
85
+ "B-date_of_birth": 15,
86
+ "B-device_id": 17,
87
+ "B-diagnosis": 19,
88
+ "B-email": 21,
89
+ "B-employee_id": 23,
90
+ "B-health_plan_id": 25,
91
+ "B-iban": 27,
92
+ "B-ip_address": 29,
93
+ "B-licence_number": 31,
94
+ "B-license_plate": 33,
95
+ "B-medical_record_number": 35,
96
+ "B-medication": 37,
97
+ "B-national_id": 39,
98
+ "B-passport": 41,
99
+ "B-person_name": 43,
100
+ "B-phone": 45,
101
+ "B-provider_name": 47,
102
+ "B-routing_number": 49,
103
+ "B-tax_id": 51,
104
+ "B-ticket_id": 53,
105
+ "B-transaction_id": 55,
106
+ "B-username": 57,
107
+ "B-visit_date": 59,
108
+ "I-address": 2,
109
+ "I-api_key": 4,
110
+ "I-bank_account": 6,
111
+ "I-card_expiry": 8,
112
+ "I-credit_card": 10,
113
+ "I-customer_id": 12,
114
+ "I-cvv": 14,
115
+ "I-date_of_birth": 16,
116
+ "I-device_id": 18,
117
+ "I-diagnosis": 20,
118
+ "I-email": 22,
119
+ "I-employee_id": 24,
120
+ "I-health_plan_id": 26,
121
+ "I-iban": 28,
122
+ "I-ip_address": 30,
123
+ "I-licence_number": 32,
124
+ "I-license_plate": 34,
125
+ "I-medical_record_number": 36,
126
+ "I-medication": 38,
127
+ "I-national_id": 40,
128
+ "I-passport": 42,
129
+ "I-person_name": 44,
130
+ "I-phone": 46,
131
+ "I-provider_name": 48,
132
+ "I-routing_number": 50,
133
+ "I-tax_id": 52,
134
+ "I-ticket_id": 54,
135
+ "I-transaction_id": 56,
136
+ "I-username": 58,
137
+ "I-visit_date": 60,
138
+ "O": 0
139
+ },
140
+ "layer_norm_eps": 1e-07,
141
+ "legacy": true,
142
+ "max_position_embeddings": 512,
143
+ "max_relative_positions": -1,
144
+ "model_type": "deberta-v2",
145
+ "norm_rel_ebd": "layer_norm",
146
+ "num_attention_heads": 12,
147
+ "num_hidden_layers": 12,
148
+ "pad_token_id": 0,
149
+ "pooler_dropout": 0,
150
+ "pooler_hidden_act": "gelu",
151
+ "pooler_hidden_size": 768,
152
+ "pos_att_type": [
153
+ "p2c",
154
+ "c2p"
155
+ ],
156
+ "position_biased_input": false,
157
+ "position_buckets": 256,
158
+ "relative_attention": true,
159
+ "share_att_key": true,
160
+ "tie_word_embeddings": true,
161
+ "transformers_version": "5.2.0",
162
+ "type_vocab_size": 0,
163
+ "use_cache": false,
164
+ "vocab_size": 128100
165
+ }
label_space.json ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "labels": [
3
+ "O",
4
+ "B-address",
5
+ "I-address",
6
+ "B-api_key",
7
+ "I-api_key",
8
+ "B-bank_account",
9
+ "I-bank_account",
10
+ "B-card_expiry",
11
+ "I-card_expiry",
12
+ "B-credit_card",
13
+ "I-credit_card",
14
+ "B-customer_id",
15
+ "I-customer_id",
16
+ "B-cvv",
17
+ "I-cvv",
18
+ "B-date_of_birth",
19
+ "I-date_of_birth",
20
+ "B-device_id",
21
+ "I-device_id",
22
+ "B-diagnosis",
23
+ "I-diagnosis",
24
+ "B-email",
25
+ "I-email",
26
+ "B-employee_id",
27
+ "I-employee_id",
28
+ "B-health_plan_id",
29
+ "I-health_plan_id",
30
+ "B-iban",
31
+ "I-iban",
32
+ "B-ip_address",
33
+ "I-ip_address",
34
+ "B-licence_number",
35
+ "I-licence_number",
36
+ "B-license_plate",
37
+ "I-license_plate",
38
+ "B-medical_record_number",
39
+ "I-medical_record_number",
40
+ "B-medication",
41
+ "I-medication",
42
+ "B-national_id",
43
+ "I-national_id",
44
+ "B-passport",
45
+ "I-passport",
46
+ "B-person_name",
47
+ "I-person_name",
48
+ "B-phone",
49
+ "I-phone",
50
+ "B-provider_name",
51
+ "I-provider_name",
52
+ "B-routing_number",
53
+ "I-routing_number",
54
+ "B-tax_id",
55
+ "I-tax_id",
56
+ "B-ticket_id",
57
+ "I-ticket_id",
58
+ "B-transaction_id",
59
+ "I-transaction_id",
60
+ "B-username",
61
+ "I-username",
62
+ "B-visit_date",
63
+ "I-visit_date"
64
+ ],
65
+ "entity_types": [
66
+ "address",
67
+ "api_key",
68
+ "bank_account",
69
+ "card_expiry",
70
+ "credit_card",
71
+ "customer_id",
72
+ "cvv",
73
+ "date_of_birth",
74
+ "device_id",
75
+ "diagnosis",
76
+ "email",
77
+ "employee_id",
78
+ "health_plan_id",
79
+ "iban",
80
+ "ip_address",
81
+ "licence_number",
82
+ "license_plate",
83
+ "medical_record_number",
84
+ "medication",
85
+ "national_id",
86
+ "passport",
87
+ "person_name",
88
+ "phone",
89
+ "provider_name",
90
+ "routing_number",
91
+ "tax_id",
92
+ "ticket_id",
93
+ "transaction_id",
94
+ "username",
95
+ "visit_date"
96
+ ]
97
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fdefab12891f005e8d0ac933ff871764fcd074d74bd1231baabb3866b5bad7a1
3
+ size 735538204
thresholds.json ADDED
@@ -0,0 +1,451 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "version": 1,
3
+ "score": "mean over a span's tokens of P(B-type) + P(I-type)",
4
+ "default_min_score": 0.0,
5
+ "recall_bias": 0.0,
6
+ "per_type": {
7
+ "address": 0.9,
8
+ "api_key": 0.0,
9
+ "bank_account": 0.6,
10
+ "card_expiry": 0.0,
11
+ "credit_card": 0.7,
12
+ "customer_id": 0.7,
13
+ "cvv": 0.6,
14
+ "date_of_birth": 0.8,
15
+ "device_id": 0.9,
16
+ "diagnosis": 0.0,
17
+ "email": 0.0,
18
+ "employee_id": 0.9,
19
+ "health_plan_id": 0.5,
20
+ "iban": 0.9,
21
+ "ip_address": 0.0,
22
+ "licence_number": 0.0,
23
+ "license_plate": 0.0,
24
+ "medical_record_number": 0.8,
25
+ "medication": 0.0,
26
+ "national_id": 0.7,
27
+ "passport": 0.0,
28
+ "person_name": 0.0,
29
+ "phone": 0.7,
30
+ "provider_name": 0.9,
31
+ "routing_number": 0.0,
32
+ "tax_id": 0.0,
33
+ "ticket_id": 0.9,
34
+ "transaction_id": 0.6,
35
+ "username": 0.0,
36
+ "visit_date": 0.9
37
+ },
38
+ "recall_floors": {},
39
+ "tuned": {
40
+ "split": "val",
41
+ "rows": 202,
42
+ "at": "2026-10-17T15:09:36.228497+00:00",
43
+ "micro_f1_before": 0.9288,
44
+ "micro_f1_after": 0.9467,
45
+ "micro_before": {
46
+ "precision": 0.9114,
47
+ "recall": 0.9468,
48
+ "f1": 0.9288
49
+ },
50
+ "micro_after": {
51
+ "precision": 0.9481,
52
+ "recall": 0.9454,
53
+ "f1": 0.9467
54
+ },
55
+ "recall_bias": 0.0,
56
+ "recall_bias_suggestion": null,
57
+ "floors": {},
58
+ "report": {
59
+ "address": {
60
+ "threshold": 0.9,
61
+ "f1_before": 0.8873,
62
+ "f1_after": 0.9065,
63
+ "precision_before": 0.8514,
64
+ "precision_after": 0.8873,
65
+ "recall_before": 0.9265,
66
+ "recall_after": 0.9265,
67
+ "support": 68,
68
+ "predicted": 74,
69
+ "floor": null,
70
+ "floor_status": null
71
+ },
72
+ "api_key": {
73
+ "threshold": 0.0,
74
+ "f1_before": 1.0,
75
+ "f1_after": 1.0,
76
+ "precision_before": 1.0,
77
+ "precision_after": 1.0,
78
+ "recall_before": 1.0,
79
+ "recall_after": 1.0,
80
+ "support": 4,
81
+ "predicted": 4,
82
+ "floor": null,
83
+ "floor_status": null
84
+ },
85
+ "bank_account": {
86
+ "threshold": 0.6,
87
+ "f1_before": 0.8829,
88
+ "f1_after": 0.9333,
89
+ "precision_before": 0.8033,
90
+ "precision_after": 0.8909,
91
+ "recall_before": 0.98,
92
+ "recall_after": 0.98,
93
+ "support": 50,
94
+ "predicted": 61,
95
+ "floor": null,
96
+ "floor_status": null
97
+ },
98
+ "card_expiry": {
99
+ "threshold": 0.0,
100
+ "f1_before": 1.0,
101
+ "f1_after": 1.0,
102
+ "precision_before": 1.0,
103
+ "precision_after": 1.0,
104
+ "recall_before": 1.0,
105
+ "recall_after": 1.0,
106
+ "support": 28,
107
+ "predicted": 28,
108
+ "floor": null,
109
+ "floor_status": null
110
+ },
111
+ "credit_card": {
112
+ "threshold": 0.7,
113
+ "f1_before": 0.9103,
114
+ "f1_after": 0.9342,
115
+ "precision_before": 0.8987,
116
+ "precision_after": 0.9467,
117
+ "recall_before": 0.9221,
118
+ "recall_after": 0.9221,
119
+ "support": 77,
120
+ "predicted": 79,
121
+ "floor": null,
122
+ "floor_status": null
123
+ },
124
+ "customer_id": {
125
+ "threshold": 0.7,
126
+ "f1_before": 0.9434,
127
+ "f1_after": 0.9804,
128
+ "precision_before": 0.8929,
129
+ "precision_after": 0.9615,
130
+ "recall_before": 1.0,
131
+ "recall_after": 1.0,
132
+ "support": 25,
133
+ "predicted": 28,
134
+ "floor": null,
135
+ "floor_status": null
136
+ },
137
+ "cvv": {
138
+ "threshold": 0.6,
139
+ "f1_before": 0.9333,
140
+ "f1_after": 0.9655,
141
+ "precision_before": 0.9333,
142
+ "precision_after": 1.0,
143
+ "recall_before": 0.9333,
144
+ "recall_after": 0.9333,
145
+ "support": 15,
146
+ "predicted": 15,
147
+ "floor": null,
148
+ "floor_status": null
149
+ },
150
+ "date_of_birth": {
151
+ "threshold": 0.8,
152
+ "f1_before": 0.8842,
153
+ "f1_after": 0.9333,
154
+ "precision_before": 0.875,
155
+ "precision_after": 0.9767,
156
+ "recall_before": 0.8936,
157
+ "recall_after": 0.8936,
158
+ "support": 47,
159
+ "predicted": 48,
160
+ "floor": null,
161
+ "floor_status": null
162
+ },
163
+ "device_id": {
164
+ "threshold": 0.9,
165
+ "f1_before": 0.9,
166
+ "f1_after": 0.9474,
167
+ "precision_before": 0.9,
168
+ "precision_after": 1.0,
169
+ "recall_before": 0.9,
170
+ "recall_after": 0.9,
171
+ "support": 10,
172
+ "predicted": 10,
173
+ "floor": null,
174
+ "floor_status": null
175
+ },
176
+ "diagnosis": {
177
+ "threshold": 0.0,
178
+ "f1_before": 0.8667,
179
+ "f1_after": 0.8667,
180
+ "precision_before": 0.8667,
181
+ "precision_after": 0.8667,
182
+ "recall_before": 0.8667,
183
+ "recall_after": 0.8667,
184
+ "support": 30,
185
+ "predicted": 30,
186
+ "floor": null,
187
+ "floor_status": null
188
+ },
189
+ "email": {
190
+ "threshold": 0.0,
191
+ "f1_before": 0.9756,
192
+ "f1_after": 0.9756,
193
+ "precision_before": 0.9756,
194
+ "precision_after": 0.9756,
195
+ "recall_before": 0.9756,
196
+ "recall_after": 0.9756,
197
+ "support": 41,
198
+ "predicted": 41,
199
+ "floor": null,
200
+ "floor_status": null
201
+ },
202
+ "employee_id": {
203
+ "threshold": 0.9,
204
+ "f1_before": 0.9688,
205
+ "f1_after": 0.9947,
206
+ "precision_before": 0.949,
207
+ "precision_after": 1.0,
208
+ "recall_before": 0.9894,
209
+ "recall_after": 0.9894,
210
+ "support": 94,
211
+ "predicted": 98,
212
+ "floor": null,
213
+ "floor_status": null
214
+ },
215
+ "health_plan_id": {
216
+ "threshold": 0.5,
217
+ "f1_before": 0.96,
218
+ "f1_after": 0.9796,
219
+ "precision_before": 0.96,
220
+ "precision_after": 1.0,
221
+ "recall_before": 0.96,
222
+ "recall_after": 0.96,
223
+ "support": 25,
224
+ "predicted": 25,
225
+ "floor": null,
226
+ "floor_status": null
227
+ },
228
+ "iban": {
229
+ "threshold": 0.9,
230
+ "f1_before": 0.9259,
231
+ "f1_after": 0.9434,
232
+ "precision_before": 0.8929,
233
+ "precision_after": 0.9259,
234
+ "recall_before": 0.9615,
235
+ "recall_after": 0.9615,
236
+ "support": 26,
237
+ "predicted": 28,
238
+ "floor": null,
239
+ "floor_status": null
240
+ },
241
+ "ip_address": {
242
+ "threshold": 0.0,
243
+ "f1_before": 1.0,
244
+ "f1_after": 1.0,
245
+ "precision_before": 1.0,
246
+ "precision_after": 1.0,
247
+ "recall_before": 1.0,
248
+ "recall_after": 1.0,
249
+ "support": 5,
250
+ "predicted": 5,
251
+ "floor": null,
252
+ "floor_status": null
253
+ },
254
+ "licence_number": {
255
+ "threshold": 0.0,
256
+ "f1_before": 1.0,
257
+ "f1_after": 1.0,
258
+ "precision_before": 1.0,
259
+ "precision_after": 1.0,
260
+ "recall_before": 1.0,
261
+ "recall_after": 1.0,
262
+ "support": 2,
263
+ "predicted": 2,
264
+ "floor": null,
265
+ "floor_status": null
266
+ },
267
+ "license_plate": {
268
+ "threshold": 0.0,
269
+ "f1_before": 0.9686,
270
+ "f1_after": 0.9686,
271
+ "precision_before": 0.9625,
272
+ "precision_after": 0.9625,
273
+ "recall_before": 0.9747,
274
+ "recall_after": 0.9747,
275
+ "support": 79,
276
+ "predicted": 80,
277
+ "floor": null,
278
+ "floor_status": null
279
+ },
280
+ "medical_record_number": {
281
+ "threshold": 0.8,
282
+ "f1_before": 0.907,
283
+ "f1_after": 0.9398,
284
+ "precision_before": 0.8864,
285
+ "precision_after": 0.9512,
286
+ "recall_before": 0.9286,
287
+ "recall_after": 0.9286,
288
+ "support": 42,
289
+ "predicted": 44,
290
+ "floor": null,
291
+ "floor_status": null
292
+ },
293
+ "medication": {
294
+ "threshold": 0.0,
295
+ "f1_before": 0.8824,
296
+ "f1_after": 0.8824,
297
+ "precision_before": 0.8824,
298
+ "precision_after": 0.8824,
299
+ "recall_before": 0.8824,
300
+ "recall_after": 0.8824,
301
+ "support": 17,
302
+ "predicted": 17,
303
+ "floor": null,
304
+ "floor_status": null
305
+ },
306
+ "national_id": {
307
+ "threshold": 0.7,
308
+ "f1_before": 0.878,
309
+ "f1_after": 0.9474,
310
+ "precision_before": 0.8182,
311
+ "precision_after": 0.9474,
312
+ "recall_before": 0.9474,
313
+ "recall_after": 0.9474,
314
+ "support": 19,
315
+ "predicted": 22,
316
+ "floor": null,
317
+ "floor_status": null
318
+ },
319
+ "passport": {
320
+ "threshold": 0.0,
321
+ "f1_before": 0.9333,
322
+ "f1_after": 0.9333,
323
+ "precision_before": 0.875,
324
+ "precision_after": 0.875,
325
+ "recall_before": 1.0,
326
+ "recall_after": 1.0,
327
+ "support": 7,
328
+ "predicted": 8,
329
+ "floor": null,
330
+ "floor_status": null
331
+ },
332
+ "person_name": {
333
+ "threshold": 0.0,
334
+ "f1_before": 0.9711,
335
+ "f1_after": 0.9711,
336
+ "precision_before": 0.9627,
337
+ "precision_after": 0.9627,
338
+ "recall_before": 0.9797,
339
+ "recall_after": 0.9797,
340
+ "support": 395,
341
+ "predicted": 402,
342
+ "floor": null,
343
+ "floor_status": null
344
+ },
345
+ "phone": {
346
+ "threshold": 0.7,
347
+ "f1_before": 0.8649,
348
+ "f1_after": 0.9057,
349
+ "precision_before": 0.8727,
350
+ "precision_after": 0.96,
351
+ "recall_before": 0.8571,
352
+ "recall_after": 0.8571,
353
+ "support": 56,
354
+ "predicted": 55,
355
+ "floor": null,
356
+ "floor_status": null
357
+ },
358
+ "provider_name": {
359
+ "threshold": 0.9,
360
+ "f1_before": 0.8556,
361
+ "f1_after": 0.8994,
362
+ "precision_before": 0.8191,
363
+ "precision_after": 0.9157,
364
+ "recall_before": 0.8953,
365
+ "recall_after": 0.8837,
366
+ "support": 86,
367
+ "predicted": 94,
368
+ "floor": null,
369
+ "floor_status": null
370
+ },
371
+ "routing_number": {
372
+ "threshold": 0.0,
373
+ "f1_before": 1.0,
374
+ "f1_after": 1.0,
375
+ "precision_before": 1.0,
376
+ "precision_after": 1.0,
377
+ "recall_before": 1.0,
378
+ "recall_after": 1.0,
379
+ "support": 20,
380
+ "predicted": 20,
381
+ "floor": null,
382
+ "floor_status": null
383
+ },
384
+ "tax_id": {
385
+ "threshold": 0.0,
386
+ "f1_before": 0.0,
387
+ "f1_after": 0.0,
388
+ "precision_before": null,
389
+ "precision_after": null,
390
+ "recall_before": null,
391
+ "recall_after": null,
392
+ "support": 0,
393
+ "predicted": 0,
394
+ "floor": null,
395
+ "floor_status": null
396
+ },
397
+ "ticket_id": {
398
+ "threshold": 0.9,
399
+ "f1_before": 0.8706,
400
+ "f1_after": 0.8916,
401
+ "precision_before": 0.925,
402
+ "precision_after": 0.9737,
403
+ "recall_before": 0.8222,
404
+ "recall_after": 0.8222,
405
+ "support": 45,
406
+ "predicted": 40,
407
+ "floor": null,
408
+ "floor_status": null
409
+ },
410
+ "transaction_id": {
411
+ "threshold": 0.6,
412
+ "f1_before": 0.8525,
413
+ "f1_after": 0.8814,
414
+ "precision_before": 0.8125,
415
+ "precision_after": 0.8667,
416
+ "recall_before": 0.8966,
417
+ "recall_after": 0.8966,
418
+ "support": 29,
419
+ "predicted": 32,
420
+ "floor": null,
421
+ "floor_status": null
422
+ },
423
+ "username": {
424
+ "threshold": 0.0,
425
+ "f1_before": 0.963,
426
+ "f1_after": 0.963,
427
+ "precision_before": 0.9286,
428
+ "precision_after": 0.9286,
429
+ "recall_before": 1.0,
430
+ "recall_after": 1.0,
431
+ "support": 13,
432
+ "predicted": 14,
433
+ "floor": null,
434
+ "floor_status": null
435
+ },
436
+ "visit_date": {
437
+ "threshold": 0.9,
438
+ "f1_before": 0.8571,
439
+ "f1_after": 0.8649,
440
+ "precision_before": 0.8049,
441
+ "precision_after": 0.8421,
442
+ "recall_before": 0.9167,
443
+ "recall_after": 0.8889,
444
+ "support": 36,
445
+ "predicted": 41,
446
+ "floor": null,
447
+ "floor_status": null
448
+ }
449
+ }
450
+ }
451
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": true,
3
+ "backend": "tokenizers",
4
+ "bos_token": "[CLS]",
5
+ "cls_token": "[CLS]",
6
+ "do_lower_case": false,
7
+ "eos_token": "[SEP]",
8
+ "extra_special_tokens": [
9
+ "[PAD]",
10
+ "[CLS]",
11
+ "[SEP]"
12
+ ],
13
+ "is_local": false,
14
+ "mask_token": "[MASK]",
15
+ "model_max_length": 512,
16
+ "pad_token": "[PAD]",
17
+ "sep_token": "[SEP]",
18
+ "split_by_punct": false,
19
+ "tokenizer_class": "DebertaV2Tokenizer",
20
+ "unk_id": 3,
21
+ "unk_token": "[UNK]",
22
+ "vocab_type": "spm"
23
+ }