Token Classification
Transformers
Safetensors
Korean
English
openai_privacy_filter
ner
pii
privacy
pii-masking
korean
english
finance
customer-service
security
infrastructure
bioes
viterbi
mixture-of-experts
Instructions to use BCCard/MoAI-Privacy-Filter with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use BCCard/MoAI-Privacy-Filter with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="BCCard/MoAI-Privacy-Filter")# Load model directly from transformers import AutoTokenizer, AutoModelForTokenClassification tokenizer = AutoTokenizer.from_pretrained("BCCard/MoAI-Privacy-Filter") model = AutoModelForTokenClassification.from_pretrained("BCCard/MoAI-Privacy-Filter", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Upload MoAI-Privacy-Filter v3 final-bf16
Browse files- README.md +192 -163
- config.json +208 -120
- figures/evaluation-test-1-1.png +2 -2
- figures/evaluation-train-1-1.png +2 -2
- label-taxonomy.yaml +107 -108
- model.safetensors +2 -2
README.md
CHANGED
|
@@ -13,63 +13,86 @@ tags:
|
|
| 13 |
- privacy
|
| 14 |
- pii-masking
|
| 15 |
- korean
|
|
|
|
| 16 |
- finance
|
|
|
|
|
|
|
|
|
|
| 17 |
- bioes
|
| 18 |
- viterbi
|
| 19 |
- mixture-of-experts
|
| 20 |
datasets:
|
| 21 |
-
- BCCard/
|
| 22 |
metrics:
|
| 23 |
-
- f1
|
| 24 |
- precision
|
| 25 |
- recall
|
|
|
|
| 26 |
---
|
| 27 |
|
| 28 |
-
#
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
|
| 50 |
-
|
|
| 51 |
-
|
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
|
| 58 |
-
|
|
| 59 |
-
| `
|
| 60 |
-
| `
|
| 61 |
-
| `
|
| 62 |
-
| `
|
| 63 |
-
| `
|
| 64 |
-
| `
|
| 65 |
-
| `
|
| 66 |
-
| `
|
| 67 |
-
| `
|
| 68 |
-
| `
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 73 |
|
| 74 |
```python
|
| 75 |
import torch
|
|
@@ -80,21 +103,26 @@ tokenizer = AutoTokenizer.from_pretrained(model_id)
|
|
| 80 |
model = AutoModelForTokenClassification.from_pretrained(model_id)
|
| 81 |
model.eval()
|
| 82 |
|
| 83 |
-
text = "๊ณ ๊ฐ ๋ชจ์์ด๋(
|
| 84 |
-
|
| 85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
|
| 87 |
with torch.no_grad():
|
| 88 |
-
logits = model(**
|
| 89 |
|
| 90 |
-
#
|
| 91 |
-
print(tuple(logits.shape))
|
| 92 |
```
|
| 93 |
|
| 94 |
-
|
| 95 |
|
| 96 |
```text
|
| 97 |
-
(1, 30, 73)
|
| 98 |
[
|
| 99 |
{'start': 3, 'end': 6, 'label': 'PERSON'},
|
| 100 |
{'start': 8, 'end': 22, 'label': 'RRN'},
|
|
@@ -102,135 +130,136 @@ Raw logits shape and decoded spans:
|
|
| 102 |
]
|
| 103 |
```
|
| 104 |
|
| 105 |
-
|
| 106 |
|
| 107 |
```text
|
| 108 |
๊ณ ๊ฐ [PERSON]๋([RRN])๊ป์ [PHONE]๋ก ์ฐ๋ฝ ์์ฒญํ์
จ์ต๋๋ค.
|
| 109 |
```
|
| 110 |
|
| 111 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 112 |
|
| 113 |
-
|
|
|
|
|
|
|
| 114 |
|
| 115 |
-
## 1.4. Training Data
|
| 116 |
| Dataset | Role | Size |
|
| 117 |
-
|---
|
| 118 |
-
|
|
| 119 |
-
|
|
|
|
|
| 120 |
|
| 121 |
-
|
| 122 |
-
* Hard-example design baked into v2: surface-similar non-PII decoys (FP suppression), label-confusion pairs in one sentence (RRNโFRN, DRIVER_LICENSEโGENERIC_ID), weak-context true PII (FN suppression), long-span address boundary variants
|
| 123 |
-
* All values are synthetic; validity-pattern collisions with real identifiers are removed at generation time (e.g. card numbers are forced to fail Luhn)
|
| 124 |
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
| Method | Full fine-tuning (1.4B params โ experts and router included) |
|
| 129 |
-
| Head | 33-class base head โ 73-class head, initialized by copying base rows via taxonomy mapping |
|
| 130 |
-
| Loss | Token-level cross-entropy |
|
| 131 |
-
| Batch | effective 16 (per-device ร world ร accum), fixed across hardware layouts |
|
| 132 |
-
| LR / scheduler | 1e-4 / linear decay, warmup 3% |
|
| 133 |
-
| Optimizer | AdamW (fused), weight decay 0.0, max_grad_norm 1.0 |
|
| 134 |
-
| Epochs | 5 โ best checkpoint by validation span micro-F1, decoded with the same constrained Viterbi as deployment |
|
| 135 |
-
| Precision | FP32 master weights + BF16 autocast; MoE router/experts explicitly kept FP32 during compute |
|
| 136 |
-
| Hardware | 1ร NVIDIA H100 (~5h) |
|
| 137 |
|
| 138 |
<div align="center">
|
| 139 |
-
<img src="figures/
|
| 140 |
</div>
|
| 141 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
<div align="center">
|
| 143 |
-
<img src="figures/evaluation-
|
| 144 |
</div>
|
| 145 |
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
| 165 |
-
|
| 166 |
-
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
*
|
| 172 |
-
*
|
| 173 |
-
*
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
**
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
| ko strict micro F1 | 0.9441 | -1.21%p |
|
| 184 |
-
| ko macro F1 | 0.9416 | -1.53%p |
|
| 185 |
-
| en strict micro F1 | 0.9065 | -6.24%p |
|
| 186 |
-
| en macro F1 | 0.9017 | -6.14%p |
|
| 187 |
-
| **masking coverage** | **0.9964** | -0.16%p |
|
| 188 |
-
| **ko masking coverage** | **0.9956** | -0.31%p |
|
| 189 |
-
| **en masking coverage** | **0.9984** | +0.18%p |
|
| 190 |
-
|
| 191 |
-
* **Masking coverage stays โฅ0.9956 on the adversarial set** โ only 0.44% (ko) / 0.16% (en) of gold PII characters are uncovered; most strict-F1 losses are boundary or label-name errors, not leaks
|
| 192 |
-
* **English ADDRESS holds on hard boundary variants**: strict recall **0.983** on long-span address forms (state suffixes, unit/floor tails) that are heavily represented in this set
|
| 193 |
-
* **Weak-context person names are the main remaining leak channel**: ko `PERSON` strict recall 0.875 with 82 full-span misses (see Limitations)
|
| 194 |
-
* Label-swap errors (e.g. en `ACCOUNT_NUMBER` predicted as `GENERIC_ID`/`CARD_NUMBER`) keep **coverage 1.0** โ the value is still masked; only the label name is wrong
|
| 195 |
-
|
| 196 |
-
## 2.3. Reading the numbers
|
| 197 |
-
Strict exact-match span-F1 on an adversarial test is a deliberately harsh score: a one-character boundary miss or a swapped label counts as a full error. For diagnosing character-level exposure, masking coverage is the direct diagnostic metric: **0.44% (ko) / 0.16% (en) of gold PII characters uncovered**, concentrated in weak-context person names.
|
| 198 |
-
|
| 199 |
-
<br>
|
| 200 |
-
|
| 201 |
-
## 2.4. Limitations
|
| 202 |
-
* **One layer of defense** โ inherits the base model's positioning: not an anonymization or compliance guarantee. Deploy behind a regex backstop for fully structured identifiers (RRN patterns, card numbers, phones) and combine with policy-level controls.
|
| 203 |
-
* **Weak-context person names** โ Korean names without honorifics/particles or list-form values are the main miss channel (ko `PERSON` recall 0.875 on the adversarial set). Consider a recall-leaning Viterbi operating point in high-sensitivity deployments.
|
| 204 |
-
* **Alphanumeric ID confusion** โ `USER_ID`/`SECRET`/`GENERIC_ID`/`ACCOUNT_NUMBER` share surface forms; without cue words the label may swap (masking still applies โ coverage stays ~1.0).
|
| 205 |
-
* **Synthetic-only training & evaluation** โ no real customer text was used or evaluated. Real-world robustness (typos, slang, OCR noise) is unvalidated; shadow-mode rollout is recommended before enforcement.
|
| 206 |
-
* **Fixed label policy** โ the 18-label taxonomy is baked in at fine-tuning time; changing masking policy granularity requires re-fine-tuning (runtime keep/mask toggles must operate on these labels).
|
| 207 |
-
* **Context window** โ banded attention limits each token's context to ยฑ128 tokens; trained sequence regime is โค768 tokens (chunk longer documents).
|
| 208 |
-
|
| 209 |
-
<br>
|
| 210 |
-
|
| 211 |
-
# 3. Future Work
|
| 212 |
-
* **v3 data enhancements** - weak-context person-name hard positives, more diverse cue words for alphanumeric IDs, and privacy-safe failure collection from shadow-mode operation
|
| 213 |
-
* **Operating point** - recall-leaning Viterbi transition biases tuned on validation or a dedicated calibration set without Golden Set feedback
|
| 214 |
-
* **Serving** - target-hardware latency, throughput and memory benchmarks for the separately published INT8 weight-only ONNX artifact
|
| 215 |
-
|
| 216 |
-
<br>
|
| 217 |
-
|
| 218 |
-
# 4. Meta Info
|
| 219 |
-
## 4.1. Citation
|
| 220 |
```bibtex
|
| 221 |
-
@misc{
|
| 222 |
-
title = {MoAI-Privacy-Filter:
|
| 223 |
-
author = {BC Card
|
| 224 |
year = {2026},
|
| 225 |
howpublished = {https://huggingface.co/BCCard/MoAI-Privacy-Filter},
|
| 226 |
-
note = {Full fine-tune of openai/privacy-filter
|
| 227 |
}
|
| 228 |
```
|
| 229 |
|
| 230 |
-
|
| 231 |
-
|
| 232 |
-
* **
|
| 233 |
-
* **Training dataset**: [`BCCard/
|
| 234 |
-
* **
|
|
|
|
|
|
|
| 235 |
|
| 236 |
-
|
|
|
|
| 13 |
- privacy
|
| 14 |
- pii-masking
|
| 15 |
- korean
|
| 16 |
+
- english
|
| 17 |
- finance
|
| 18 |
+
- customer-service
|
| 19 |
+
- security
|
| 20 |
+
- infrastructure
|
| 21 |
- bioes
|
| 22 |
- viterbi
|
| 23 |
- mixture-of-experts
|
| 24 |
datasets:
|
| 25 |
+
- BCCard/privacy-filter-openpii-masking
|
| 26 |
metrics:
|
|
|
|
| 27 |
- precision
|
| 28 |
- recall
|
| 29 |
+
- f1
|
| 30 |
---
|
| 31 |
|
| 32 |
+
# MoAI-Privacy-Filter
|
| 33 |
+
`MoAI-Privacy-Filter` is a Korean and English privacy-related entity detection model built by full fine-tuning [`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter). It recognizes 29 entity types and emits 117 BIOES token classes. The training data emphasizes financial services and customer-service/VOC text while also covering identity, security, and infrastructure scenarios.
|
| 34 |
+
|
| 35 |
+
The model detects entity spans but does not decide how they should be masked or retained. Applications can apply their own handling policy to each predicted label. This distinction is especially important for `PORT` and `ORGANIZATION`, which are non-PII disambiguation labels included in the output taxonomy.
|
| 36 |
+
|
| 37 |
+
On held-out validation, strict micro F1 is **0.9824 for ko** and **0.9708 for en**. On an independently generated Golden Set, strict micro F1 is **0.9732 for ko** and **0.9650 for en**.
|
| 38 |
+
|
| 39 |
+
## 1. Model Summary
|
| 40 |
+
|
| 41 |
+
| Item | Value |
|
| 42 |
+
|---|---|
|
| 43 |
+
| Model version | v3 |
|
| 44 |
+
| Training dataset | [`BCCard/privacy-filter-openpii-masking`](https://huggingface.co/datasets/BCCard/privacy-filter-openpii-masking) v1 |
|
| 45 |
+
| Base model | [`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter) |
|
| 46 |
+
| Architecture | Approximately 1.4B-parameter MoE, 8 layers, hidden size 640, 128 local experts, top-4 expert routing |
|
| 47 |
+
| Task | Token classification with BIOES span boundaries |
|
| 48 |
+
| Languages | Korean and English |
|
| 49 |
+
| Primary domains | Financial services, customer service/VOC, identity, security, and infrastructure |
|
| 50 |
+
| Entity labels | 29 |
|
| 51 |
+
| Output classes | 117 - `O` plus four BIOES classes for each entity label |
|
| 52 |
+
| Training sequence limit | 1024 tokens before special tokens |
|
| 53 |
+
| Artifact format | BF16 safetensors with 8 attention `sinks` tensors retained in FP32 |
|
| 54 |
+
| Tested software | Transformers 5.13.1 and PyTorch 2.13.0 |
|
| 55 |
+
| License | Apache 2.0 |
|
| 56 |
+
|
| 57 |
+
The model version and dataset version use independent version numbers. This model is v3 and was trained on dataset v1.
|
| 58 |
+
|
| 59 |
+
## 2. Label Taxonomy
|
| 60 |
+
|
| 61 |
+
| Label | Definition |
|
| 62 |
+
|---|---|
|
| 63 |
+
| `PERSON` | Full personal name as one span. |
|
| 64 |
+
| `RRN` | Korean resident registration number. |
|
| 65 |
+
| `FRN` | Korean foreign resident registration number. |
|
| 66 |
+
| `SSN` | Social-security-number family inherited from ai4privacy `SOCIALNUM`; not limited to the US 9-digit form. |
|
| 67 |
+
| `GENERIC_ID` | Identity-card or tax identifier that cannot be assigned to a more specific country-level label. |
|
| 68 |
+
| `CARD_NUMBER` | Credit or debit card PAN. |
|
| 69 |
+
| `ACCOUNT_NUMBER` | Bank account number. |
|
| 70 |
+
| `SECRET` | Password, API key, access token, or similar authentication secret. |
|
| 71 |
+
| `USER_ID` | Online account or member identifier. |
|
| 72 |
+
| `EMAIL` | Email address, including intentionally obfuscated forms represented in the training data. |
|
| 73 |
+
| `PHONE` | Mobile or landline telephone number, including intentionally verbalized forms represented in the training data. |
|
| 74 |
+
| `PASSPORT` | Passport number. |
|
| 75 |
+
| `DRIVER_LICENSE` | Driver's license number. |
|
| 76 |
+
| `ADDRESS` | City, street, and building components represented as one address span. |
|
| 77 |
+
| `ZIPCODE` | Postal code kept separate from `ADDRESS`. |
|
| 78 |
+
| `DATE` | Date or time. Timezone-only strings are not included in this label. |
|
| 79 |
+
| `CARD_EXPIRY` | Payment-card expiration date. |
|
| 80 |
+
| `CVC` | Card verification code. |
|
| 81 |
+
| `IPIN` | Korean I-PIN identifier. |
|
| 82 |
+
| `TRANSACTION_APPROVAL_ID` | Payment authorization or transaction approval identifier. |
|
| 83 |
+
| `BUSINESS_ID` | Business registration number or merchant identifier. |
|
| 84 |
+
| `VIRTUAL_CARD_NUMBER` | Alternate or virtual card number. |
|
| 85 |
+
| `CI` | Korean identity-linkage information value. |
|
| 86 |
+
| `IPADDRESS` | IPv4 network address. |
|
| 87 |
+
| `MACADDRESS` | 48-bit MAC address. |
|
| 88 |
+
| `IMEI` | Mobile-equipment identifier. |
|
| 89 |
+
| `PORT` | Network service port from 0 to 65535; a non-PII disambiguation label. |
|
| 90 |
+
| `ORGANIZATION` | Company, bank, hospital, or other organization name; a non-PII disambiguation label. |
|
| 91 |
+
| `URL` | Full web URL, including path, query, and fragment when present. |
|
| 92 |
+
|
| 93 |
+
Each entity label has `B-`, `I-`, `E-`, and `S-` boundary classes. Together with `O`, the model therefore has `4 x 29 + 1 = 117` output classes. `O` means that the model predicts no taxonomy entity at that token; it does not guarantee that the surrounding text is non-sensitive.
|
| 94 |
+
|
| 95 |
+
## 3. Usage
|
| 96 |
|
| 97 |
```python
|
| 98 |
import torch
|
|
|
|
| 103 |
model = AutoModelForTokenClassification.from_pretrained(model_id)
|
| 104 |
model.eval()
|
| 105 |
|
| 106 |
+
text = "๊ณ ๊ฐ ๋ชจ์์ด๋(900101-1234569)๊ป์ 010-0000-0000๋ก ์ฐ๋ฝ ์์ฒญํ์
จ์ต๋๋ค."
|
| 107 |
+
encoded = tokenizer(
|
| 108 |
+
text,
|
| 109 |
+
return_offsets_mapping=True,
|
| 110 |
+
add_special_tokens=False,
|
| 111 |
+
truncation=True,
|
| 112 |
+
max_length=1024,
|
| 113 |
+
return_tensors="pt",
|
| 114 |
+
)
|
| 115 |
+
offsets = encoded.pop("offset_mapping")[0].tolist()
|
| 116 |
|
| 117 |
with torch.no_grad():
|
| 118 |
+
logits = model(**encoded).logits.float()
|
| 119 |
|
| 120 |
+
print(tuple(logits.shape)) # (1, sequence_length, 117)
|
|
|
|
| 121 |
```
|
| 122 |
|
| 123 |
+
Apply constrained BIOES Viterbi decoding to `logits[0]`, then map the decoded token spans to the original text with `offsets`. Character-span records can then be represented in the following form.
|
| 124 |
|
| 125 |
```text
|
|
|
|
| 126 |
[
|
| 127 |
{'start': 3, 'end': 6, 'label': 'PERSON'},
|
| 128 |
{'start': 8, 'end': 22, 'label': 'RRN'},
|
|
|
|
| 130 |
]
|
| 131 |
```
|
| 132 |
|
| 133 |
+
Character offsets use Python's half-open interval `[start, end)`. A downstream application could render those spans as follows, but this replacement behavior is not part of the model.
|
| 134 |
|
| 135 |
```text
|
| 136 |
๊ณ ๊ฐ [PERSON]๋([RRN])๊ป์ [PHONE]๋ก ์ฐ๋ฝ ์์ฒญํ์
จ์ต๋๋ค.
|
| 137 |
```
|
| 138 |
|
| 139 |
+
### 3.1. Decoding
|
| 140 |
+
|
| 141 |
+
The reported metrics use constrained Viterbi decoding over the BIOES transition grammar, followed by whitespace boundary refinement. Independent per-token argmax can emit invalid BIOES sequences and is not the reported decoding path.
|
| 142 |
+
|
| 143 |
+
The bundled `viterbi_calibration.json` contains six transition biases. The default operating point sets all biases to zero, so BIOES transition constraints remain active without an additional precision-recall adjustment. Convert logits to FP32 before decoding.
|
| 144 |
+
|
| 145 |
+
Use a decoder that implements this BIOES constraint contract. The upstream [`openai/privacy-filter`](https://github.com/openai/privacy-filter) project provides the reference implementation and decoding behavior on which this model is based.
|
| 146 |
+
|
| 147 |
+
For batches, use right padding and pass only `input_ids` and `attention_mask` to the model. Keep `offset_mapping` outside the model for character-span reconstruction. Inputs longer than 1024 tokens were not represented in the training regime and should be chunked with enough overlap for the target use case.
|
| 148 |
|
| 149 |
+
## 4. Training
|
| 150 |
+
|
| 151 |
+
### 4.1. Data
|
| 152 |
|
|
|
|
| 153 |
| Dataset | Role | Size |
|
| 154 |
+
|---|---|---:|
|
| 155 |
+
| [`BCCard/privacy-filter-openpii-masking`](https://huggingface.co/datasets/BCCard/privacy-filter-openpii-masking) v1 | Training | 57,851 rows |
|
| 156 |
+
| [`BCCard/privacy-filter-openpii-masking`](https://huggingface.co/datasets/BCCard/privacy-filter-openpii-masking) v1 | Validation and checkpoint selection | 14,524 rows |
|
| 157 |
+
| Independent non-public Golden Set | Final evaluation only | 4,000 rows - ko 2,920 and en 1,080 |
|
| 158 |
|
| 159 |
+
The Golden Set was not used for training, checkpoint selection, or calibration. The training and validation data contain all 29 labels in both languages. English represents 25.74% of train and 26.03% of validation.
|
|
|
|
|
|
|
| 160 |
|
| 161 |
+
The dataset combines relabeled rows from [`ai4privacy/pii-masking-openpii-1.5m`](https://huggingface.co/datasets/ai4privacy/pii-masking-openpii-1.5m) with Korean perturbation, English replay, and statically authored synthesis rows. Synthesis covers positive, confusion, hard-negative, weak-cue, long-context, and multi-label scenarios. The dataset is designed as synthetic training data and contains no operational customer records.
|
| 162 |
+
|
| 163 |
+
### 4.2. Procedure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 164 |
|
| 165 |
<div align="center">
|
| 166 |
+
<img src="figures/model-training-1-1.png" alt="Training loss, learning rate, and gradient norm by training step">
|
| 167 |
</div>
|
| 168 |
|
| 169 |
+
| Item | Value |
|
| 170 |
+
|---|---|
|
| 171 |
+
| Method | Full fine-tuning of all parameters, including experts and router |
|
| 172 |
+
| Classification head | 33 base classes expanded to 117 classes through taxonomy-aware initialization |
|
| 173 |
+
| Loss | Token-level cross-entropy |
|
| 174 |
+
| Sequence length | Maximum 1024 tokens before special tokens |
|
| 175 |
+
| Batch | Per-device 16, effective 16 on one GPU |
|
| 176 |
+
| Learning rate | 1e-4 with linear decay |
|
| 177 |
+
| Warmup | 543 steps, approximately 3% of 18,080 total steps |
|
| 178 |
+
| Optimizer | Fused AdamW, weight decay 0.0, maximum gradient norm 1.0 |
|
| 179 |
+
| Epochs | 5, with the best checkpoint selected by validation strict micro F1 |
|
| 180 |
+
| Precision | FP32 master parameters with BF16 autocast; MoE router and expert compute protected in FP32 |
|
| 181 |
+
| Seed | 42 for training and data sampling |
|
| 182 |
+
| Hardware | 1 NVIDIA H100 80 GB GPU |
|
| 183 |
+
|
| 184 |
+
The selected FP32 checkpoint was exported as a deployment artifact in BF16. Artifact validation found 132 BF16 tensors and 8 FP32 attention `sinks` tensors.
|
| 185 |
+
|
| 186 |
+
### 4.3. Included Files
|
| 187 |
+
|
| 188 |
+
| File | Purpose |
|
| 189 |
+
|---|---|
|
| 190 |
+
| `model.safetensors` | BF16 deployment weights with FP32 attention `sinks`. |
|
| 191 |
+
| `config.json` | Architecture and 117-class label mapping. |
|
| 192 |
+
| `tokenizer.json` and `tokenizer_config.json` | Tokenizer files associated with the base model. |
|
| 193 |
+
| `label-taxonomy.yaml` | Label definitions and source-to-target mapping used for training. |
|
| 194 |
+
| `viterbi_calibration.json` | Constrained-decoding operating-point biases. |
|
| 195 |
+
|
| 196 |
+
## 5. Evaluation
|
| 197 |
+
|
| 198 |
+
### 5.1. Setup
|
| 199 |
+
|
| 200 |
+
The validation split was used for checkpoint selection and experiment comparison. Final generalization was measured on a separately generated Golden Set containing weak-context entities, surface-similar decoys, label-confusion pairs, and boundary variants.
|
| 201 |
+
|
| 202 |
+
The headline metrics are language-slice strict micro Precision, Recall, and F1. A predicted entity is correct only when both its label and complete span boundary match the reference. Golden evaluation uses constrained Viterbi decoding and whitespace boundary refinement.
|
| 203 |
+
|
| 204 |
+
### 5.2. Results
|
| 205 |
+
|
| 206 |
<div align="center">
|
| 207 |
+
<img src="figures/model-evaluation-1-1.png" alt="Validation precision, recall, micro F1, and macro F1 by training step">
|
| 208 |
</div>
|
| 209 |
|
| 210 |
+
| Language | Validation P | Validation R | Validation F1 | Golden P | Golden R | Golden F1 | F1 Difference |
|
| 211 |
+
|---|---:|---:|---:|---:|---:|---:|---:|
|
| 212 |
+
| ko | 0.9829 | 0.9819 | 0.9824 | 0.9735 | 0.9729 | 0.9732 | -0.92%p |
|
| 213 |
+
| en | 0.9708 | 0.9708 | 0.9708 | 0.9652 | 0.9649 | 0.9650 | -0.58%p |
|
| 214 |
+
|
| 215 |
+
`F1 Difference` is Golden F1 minus Validation F1. The smaller Golden scores indicate a limited generalization decrease of 0.92 percentage points for Korean and 0.58 percentage points for English.
|
| 216 |
+
|
| 217 |
+
### 5.3. Error Characteristics
|
| 218 |
+
|
| 219 |
+
The aggregate results do not mean that every label performs equally. Error analysis of the English Golden slice shows the most visible weaknesses in `ACCOUNT_NUMBER`, `ZIPCODE`, `PORT`, and `ORGANIZATION`. Frequent confusion directions include `PORT` versus `ZIPCODE`, `ACCOUNT_NUMBER` versus `BUSINESS_ID` or `IPIN`, and `ORGANIZATION` versus `PERSON`.
|
| 220 |
+
|
| 221 |
+
These patterns are consistent with labels that share numeric shapes or require contextual role information. Downstream systems should evaluate per-label behavior on their own traffic, especially when label identity changes the handling action.
|
| 222 |
+
|
| 223 |
+
## 6. Intended Use
|
| 224 |
+
|
| 225 |
+
Suitable uses include:
|
| 226 |
+
|
| 227 |
+
* Detecting privacy-related entities before Korean or English text is sent to an LLM or another downstream service.
|
| 228 |
+
* Supporting offline privacy review of customer-service text, documents, email, and logs.
|
| 229 |
+
* Producing typed entity spans for an application-specific masking, routing, retention, or review policy.
|
| 230 |
+
|
| 231 |
+
The model is not a complete anonymization system, a legal-compliance guarantee, or a substitute for domain-specific review. It should not be used as the sole control for high-impact decisions. Applications remain responsible for deciding whether each detected label is masked, transformed, retained, or escalated.
|
| 232 |
+
|
| 233 |
+
## 7. Limitations
|
| 234 |
+
|
| 235 |
+
* **Synthetic evaluation** - Training, validation, and Golden data are synthetic. Performance on real customer text, OCR noise, slang, novel obfuscation, and unseen document structures has not been established.
|
| 236 |
+
* **Label-specific variation** - High aggregate F1 can hide weaker labels and confusion pairs. `ACCOUNT_NUMBER`, `ZIPCODE`, `PORT`, and `ORGANIZATION` require particular attention based on the current Golden analysis.
|
| 237 |
+
* **Non-PII labels** - `PORT` and `ORGANIZATION` are deliberately predicted even though they are not PII. Consumers must not assume that every non-`O` label requires the same action.
|
| 238 |
+
* **Context and boundary sensitivity** - Weak contextual evidence, shared numeric formats, and long entity boundaries can produce missed entities, boundary errors, or label swaps.
|
| 239 |
+
* **Long inputs** - The base architecture supports a larger context, but training examples were limited to 1024 tokens and the observed dataset maximum was 801 tokens. Longer inputs require separate validation and should normally be chunked.
|
| 240 |
+
* **Registry-backed identifiers** - Synthetic account, telephone, passport, user, and social-security values cannot be exhaustively checked against private issuance registries. Any coincidental match with a real value is unintended.
|
| 241 |
+
* **Language and domain scope** - Evaluation covers Korean and English with emphasis on financial, customer-service/VOC, identity, security, and infrastructure contexts. Other languages and domains are unsupported.
|
| 242 |
+
|
| 243 |
+
## 8. License, Attribution, and Citation
|
| 244 |
+
|
| 245 |
+
The model is released under the Apache 2.0 license. Its training dataset is released under CC BY 4.0 and is derived from `ai4privacy/pii-masking-openpii-1.5m`; follow the dataset card for its attribution requirements.
|
| 246 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 247 |
```bibtex
|
| 248 |
+
@misc{bccard2026moaiprivacyfilterv3,
|
| 249 |
+
title = {MoAI-Privacy-Filter v3: Korean and English Privacy-Related Entity Detection},
|
| 250 |
+
author = {BC Card},
|
| 251 |
year = {2026},
|
| 252 |
howpublished = {https://huggingface.co/BCCard/MoAI-Privacy-Filter},
|
| 253 |
+
note = {Full fine-tune of openai/privacy-filter on BCCard/privacy-filter-openpii-masking v1}
|
| 254 |
}
|
| 255 |
```
|
| 256 |
|
| 257 |
+
Related resources:
|
| 258 |
+
|
| 259 |
+
* **Base model**: [`openai/privacy-filter`](https://huggingface.co/openai/privacy-filter).
|
| 260 |
+
* **Training dataset**: [`BCCard/privacy-filter-openpii-masking`](https://huggingface.co/datasets/BCCard/privacy-filter-openpii-masking).
|
| 261 |
+
* **Upstream dataset**: [`ai4privacy/pii-masking-openpii-1.5m`](https://huggingface.co/datasets/ai4privacy/pii-masking-openpii-1.5m).
|
| 262 |
+
|
| 263 |
+
## 9. Disclaimer
|
| 264 |
|
| 265 |
+
This model is provided as is, without warranties of accuracy, completeness, non-infringement, or fitness for a particular purpose. Users are responsible for testing the model in their own environment and ensuring that its use complies with applicable laws, regulations, contractual obligations, and organizational policies.
|
config.json
CHANGED
|
@@ -26,144 +26,232 @@
|
|
| 26 |
"10": "I-FRN",
|
| 27 |
"11": "E-FRN",
|
| 28 |
"12": "S-FRN",
|
| 29 |
-
"13": "B-
|
| 30 |
-
"14": "I-
|
| 31 |
-
"15": "E-
|
| 32 |
-
"16": "S-
|
| 33 |
-
"17": "B-
|
| 34 |
-
"18": "I-
|
| 35 |
-
"19": "E-
|
| 36 |
-
"20": "S-
|
| 37 |
-
"21": "B-
|
| 38 |
-
"22": "I-
|
| 39 |
-
"23": "E-
|
| 40 |
-
"24": "S-
|
| 41 |
-
"25": "B-
|
| 42 |
-
"26": "I-
|
| 43 |
-
"27": "E-
|
| 44 |
-
"28": "S-
|
| 45 |
-
"29": "B-
|
| 46 |
-
"30": "I-
|
| 47 |
-
"31": "E-
|
| 48 |
-
"32": "S-
|
| 49 |
-
"33": "B-
|
| 50 |
-
"34": "I-
|
| 51 |
-
"35": "E-
|
| 52 |
-
"36": "S-
|
| 53 |
-
"37": "B-
|
| 54 |
-
"38": "I-
|
| 55 |
-
"39": "E-
|
| 56 |
-
"40": "S-
|
| 57 |
-
"41": "B-
|
| 58 |
-
"42": "I-
|
| 59 |
-
"43": "E-
|
| 60 |
-
"44": "S-
|
| 61 |
-
"45": "B-
|
| 62 |
-
"46": "I-
|
| 63 |
-
"47": "E-
|
| 64 |
-
"48": "S-
|
| 65 |
-
"49": "B-
|
| 66 |
-
"50": "I-
|
| 67 |
-
"51": "E-
|
| 68 |
-
"52": "S-
|
| 69 |
-
"53": "B-
|
| 70 |
-
"54": "I-
|
| 71 |
-
"55": "E-
|
| 72 |
-
"56": "S-
|
| 73 |
-
"57": "B-
|
| 74 |
-
"58": "I-
|
| 75 |
-
"59": "E-
|
| 76 |
-
"60": "S-
|
| 77 |
-
"61": "B-
|
| 78 |
-
"62": "I-
|
| 79 |
-
"63": "E-
|
| 80 |
-
"64": "S-
|
| 81 |
-
"65": "B-
|
| 82 |
-
"66": "I-
|
| 83 |
-
"67": "E-
|
| 84 |
-
"68": "S-
|
| 85 |
-
"69": "B-
|
| 86 |
-
"70": "I-
|
| 87 |
-
"71": "E-
|
| 88 |
-
"72": "S-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
},
|
| 90 |
"initial_context_length": 4096,
|
| 91 |
"initializer_range": 0.02,
|
| 92 |
"intermediate_size": 640,
|
| 93 |
"label2id": {
|
| 94 |
-
"B-ACCOUNT_NUMBER":
|
| 95 |
-
"B-ADDRESS":
|
| 96 |
-
"B-
|
| 97 |
-
"B-
|
| 98 |
-
"B-
|
| 99 |
-
"B-
|
| 100 |
-
"B-
|
| 101 |
-
"B-
|
|
|
|
|
|
|
| 102 |
"B-FRN": 9,
|
| 103 |
-
"B-GENERIC_ID":
|
| 104 |
-
"B-
|
| 105 |
-
"B-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 106 |
"B-PERSON": 1,
|
| 107 |
-
"B-PHONE":
|
|
|
|
| 108 |
"B-RRN": 5,
|
| 109 |
-
"B-SECRET":
|
| 110 |
-
"B-
|
| 111 |
-
"B-
|
| 112 |
-
"
|
| 113 |
-
"
|
| 114 |
-
"
|
| 115 |
-
"
|
| 116 |
-
"E-
|
| 117 |
-
"E-
|
| 118 |
-
"E-
|
| 119 |
-
"E-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
"E-FRN": 11,
|
| 121 |
-
"E-GENERIC_ID":
|
| 122 |
-
"E-
|
| 123 |
-
"E-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 124 |
"E-PERSON": 3,
|
| 125 |
-
"E-PHONE":
|
|
|
|
| 126 |
"E-RRN": 7,
|
| 127 |
-
"E-SECRET":
|
| 128 |
-
"E-
|
| 129 |
-
"E-
|
| 130 |
-
"
|
| 131 |
-
"
|
| 132 |
-
"
|
| 133 |
-
"
|
| 134 |
-
"I-
|
| 135 |
-
"I-
|
| 136 |
-
"I-
|
| 137 |
-
"I-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 138 |
"I-FRN": 10,
|
| 139 |
-
"I-GENERIC_ID":
|
| 140 |
-
"I-
|
| 141 |
-
"I-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 142 |
"I-PERSON": 2,
|
| 143 |
-
"I-PHONE":
|
|
|
|
| 144 |
"I-RRN": 6,
|
| 145 |
-
"I-SECRET":
|
| 146 |
-
"I-
|
| 147 |
-
"I-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
"O": 0,
|
| 149 |
-
"S-ACCOUNT_NUMBER":
|
| 150 |
-
"S-ADDRESS":
|
| 151 |
-
"S-
|
| 152 |
-
"S-
|
| 153 |
-
"S-
|
| 154 |
-
"S-
|
| 155 |
-
"S-
|
| 156 |
-
"S-
|
|
|
|
|
|
|
| 157 |
"S-FRN": 12,
|
| 158 |
-
"S-GENERIC_ID":
|
| 159 |
-
"S-
|
| 160 |
-
"S-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 161 |
"S-PERSON": 4,
|
| 162 |
-
"S-PHONE":
|
|
|
|
| 163 |
"S-RRN": 8,
|
| 164 |
-
"S-SECRET":
|
| 165 |
-
"S-
|
| 166 |
-
"S-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 167 |
},
|
| 168 |
"max_position_embeddings": 131072,
|
| 169 |
"model_type": "openai_privacy_filter",
|
|
|
|
| 26 |
"10": "I-FRN",
|
| 27 |
"11": "E-FRN",
|
| 28 |
"12": "S-FRN",
|
| 29 |
+
"13": "B-SSN",
|
| 30 |
+
"14": "I-SSN",
|
| 31 |
+
"15": "E-SSN",
|
| 32 |
+
"16": "S-SSN",
|
| 33 |
+
"17": "B-GENERIC_ID",
|
| 34 |
+
"18": "I-GENERIC_ID",
|
| 35 |
+
"19": "E-GENERIC_ID",
|
| 36 |
+
"20": "S-GENERIC_ID",
|
| 37 |
+
"21": "B-CARD_NUMBER",
|
| 38 |
+
"22": "I-CARD_NUMBER",
|
| 39 |
+
"23": "E-CARD_NUMBER",
|
| 40 |
+
"24": "S-CARD_NUMBER",
|
| 41 |
+
"25": "B-ACCOUNT_NUMBER",
|
| 42 |
+
"26": "I-ACCOUNT_NUMBER",
|
| 43 |
+
"27": "E-ACCOUNT_NUMBER",
|
| 44 |
+
"28": "S-ACCOUNT_NUMBER",
|
| 45 |
+
"29": "B-SECRET",
|
| 46 |
+
"30": "I-SECRET",
|
| 47 |
+
"31": "E-SECRET",
|
| 48 |
+
"32": "S-SECRET",
|
| 49 |
+
"33": "B-USER_ID",
|
| 50 |
+
"34": "I-USER_ID",
|
| 51 |
+
"35": "E-USER_ID",
|
| 52 |
+
"36": "S-USER_ID",
|
| 53 |
+
"37": "B-EMAIL",
|
| 54 |
+
"38": "I-EMAIL",
|
| 55 |
+
"39": "E-EMAIL",
|
| 56 |
+
"40": "S-EMAIL",
|
| 57 |
+
"41": "B-PHONE",
|
| 58 |
+
"42": "I-PHONE",
|
| 59 |
+
"43": "E-PHONE",
|
| 60 |
+
"44": "S-PHONE",
|
| 61 |
+
"45": "B-PASSPORT",
|
| 62 |
+
"46": "I-PASSPORT",
|
| 63 |
+
"47": "E-PASSPORT",
|
| 64 |
+
"48": "S-PASSPORT",
|
| 65 |
+
"49": "B-DRIVER_LICENSE",
|
| 66 |
+
"50": "I-DRIVER_LICENSE",
|
| 67 |
+
"51": "E-DRIVER_LICENSE",
|
| 68 |
+
"52": "S-DRIVER_LICENSE",
|
| 69 |
+
"53": "B-ADDRESS",
|
| 70 |
+
"54": "I-ADDRESS",
|
| 71 |
+
"55": "E-ADDRESS",
|
| 72 |
+
"56": "S-ADDRESS",
|
| 73 |
+
"57": "B-ZIPCODE",
|
| 74 |
+
"58": "I-ZIPCODE",
|
| 75 |
+
"59": "E-ZIPCODE",
|
| 76 |
+
"60": "S-ZIPCODE",
|
| 77 |
+
"61": "B-DATE",
|
| 78 |
+
"62": "I-DATE",
|
| 79 |
+
"63": "E-DATE",
|
| 80 |
+
"64": "S-DATE",
|
| 81 |
+
"65": "B-CARD_EXPIRY",
|
| 82 |
+
"66": "I-CARD_EXPIRY",
|
| 83 |
+
"67": "E-CARD_EXPIRY",
|
| 84 |
+
"68": "S-CARD_EXPIRY",
|
| 85 |
+
"69": "B-CVC",
|
| 86 |
+
"70": "I-CVC",
|
| 87 |
+
"71": "E-CVC",
|
| 88 |
+
"72": "S-CVC",
|
| 89 |
+
"73": "B-IPIN",
|
| 90 |
+
"74": "I-IPIN",
|
| 91 |
+
"75": "E-IPIN",
|
| 92 |
+
"76": "S-IPIN",
|
| 93 |
+
"77": "B-TRANSACTION_APPROVAL_ID",
|
| 94 |
+
"78": "I-TRANSACTION_APPROVAL_ID",
|
| 95 |
+
"79": "E-TRANSACTION_APPROVAL_ID",
|
| 96 |
+
"80": "S-TRANSACTION_APPROVAL_ID",
|
| 97 |
+
"81": "B-BUSINESS_ID",
|
| 98 |
+
"82": "I-BUSINESS_ID",
|
| 99 |
+
"83": "E-BUSINESS_ID",
|
| 100 |
+
"84": "S-BUSINESS_ID",
|
| 101 |
+
"85": "B-VIRTUAL_CARD_NUMBER",
|
| 102 |
+
"86": "I-VIRTUAL_CARD_NUMBER",
|
| 103 |
+
"87": "E-VIRTUAL_CARD_NUMBER",
|
| 104 |
+
"88": "S-VIRTUAL_CARD_NUMBER",
|
| 105 |
+
"89": "B-CI",
|
| 106 |
+
"90": "I-CI",
|
| 107 |
+
"91": "E-CI",
|
| 108 |
+
"92": "S-CI",
|
| 109 |
+
"93": "B-IPADDRESS",
|
| 110 |
+
"94": "I-IPADDRESS",
|
| 111 |
+
"95": "E-IPADDRESS",
|
| 112 |
+
"96": "S-IPADDRESS",
|
| 113 |
+
"97": "B-MACADDRESS",
|
| 114 |
+
"98": "I-MACADDRESS",
|
| 115 |
+
"99": "E-MACADDRESS",
|
| 116 |
+
"100": "S-MACADDRESS",
|
| 117 |
+
"101": "B-IMEI",
|
| 118 |
+
"102": "I-IMEI",
|
| 119 |
+
"103": "E-IMEI",
|
| 120 |
+
"104": "S-IMEI",
|
| 121 |
+
"105": "B-PORT",
|
| 122 |
+
"106": "I-PORT",
|
| 123 |
+
"107": "E-PORT",
|
| 124 |
+
"108": "S-PORT",
|
| 125 |
+
"109": "B-ORGANIZATION",
|
| 126 |
+
"110": "I-ORGANIZATION",
|
| 127 |
+
"111": "E-ORGANIZATION",
|
| 128 |
+
"112": "S-ORGANIZATION",
|
| 129 |
+
"113": "B-URL",
|
| 130 |
+
"114": "I-URL",
|
| 131 |
+
"115": "E-URL",
|
| 132 |
+
"116": "S-URL"
|
| 133 |
},
|
| 134 |
"initial_context_length": 4096,
|
| 135 |
"initializer_range": 0.02,
|
| 136 |
"intermediate_size": 640,
|
| 137 |
"label2id": {
|
| 138 |
+
"B-ACCOUNT_NUMBER": 25,
|
| 139 |
+
"B-ADDRESS": 53,
|
| 140 |
+
"B-BUSINESS_ID": 81,
|
| 141 |
+
"B-CARD_EXPIRY": 65,
|
| 142 |
+
"B-CARD_NUMBER": 21,
|
| 143 |
+
"B-CI": 89,
|
| 144 |
+
"B-CVC": 69,
|
| 145 |
+
"B-DATE": 61,
|
| 146 |
+
"B-DRIVER_LICENSE": 49,
|
| 147 |
+
"B-EMAIL": 37,
|
| 148 |
"B-FRN": 9,
|
| 149 |
+
"B-GENERIC_ID": 17,
|
| 150 |
+
"B-IMEI": 101,
|
| 151 |
+
"B-IPADDRESS": 93,
|
| 152 |
+
"B-IPIN": 73,
|
| 153 |
+
"B-MACADDRESS": 97,
|
| 154 |
+
"B-ORGANIZATION": 109,
|
| 155 |
+
"B-PASSPORT": 45,
|
| 156 |
"B-PERSON": 1,
|
| 157 |
+
"B-PHONE": 41,
|
| 158 |
+
"B-PORT": 105,
|
| 159 |
"B-RRN": 5,
|
| 160 |
+
"B-SECRET": 29,
|
| 161 |
+
"B-SSN": 13,
|
| 162 |
+
"B-TRANSACTION_APPROVAL_ID": 77,
|
| 163 |
+
"B-URL": 113,
|
| 164 |
+
"B-USER_ID": 33,
|
| 165 |
+
"B-VIRTUAL_CARD_NUMBER": 85,
|
| 166 |
+
"B-ZIPCODE": 57,
|
| 167 |
+
"E-ACCOUNT_NUMBER": 27,
|
| 168 |
+
"E-ADDRESS": 55,
|
| 169 |
+
"E-BUSINESS_ID": 83,
|
| 170 |
+
"E-CARD_EXPIRY": 67,
|
| 171 |
+
"E-CARD_NUMBER": 23,
|
| 172 |
+
"E-CI": 91,
|
| 173 |
+
"E-CVC": 71,
|
| 174 |
+
"E-DATE": 63,
|
| 175 |
+
"E-DRIVER_LICENSE": 51,
|
| 176 |
+
"E-EMAIL": 39,
|
| 177 |
"E-FRN": 11,
|
| 178 |
+
"E-GENERIC_ID": 19,
|
| 179 |
+
"E-IMEI": 103,
|
| 180 |
+
"E-IPADDRESS": 95,
|
| 181 |
+
"E-IPIN": 75,
|
| 182 |
+
"E-MACADDRESS": 99,
|
| 183 |
+
"E-ORGANIZATION": 111,
|
| 184 |
+
"E-PASSPORT": 47,
|
| 185 |
"E-PERSON": 3,
|
| 186 |
+
"E-PHONE": 43,
|
| 187 |
+
"E-PORT": 107,
|
| 188 |
"E-RRN": 7,
|
| 189 |
+
"E-SECRET": 31,
|
| 190 |
+
"E-SSN": 15,
|
| 191 |
+
"E-TRANSACTION_APPROVAL_ID": 79,
|
| 192 |
+
"E-URL": 115,
|
| 193 |
+
"E-USER_ID": 35,
|
| 194 |
+
"E-VIRTUAL_CARD_NUMBER": 87,
|
| 195 |
+
"E-ZIPCODE": 59,
|
| 196 |
+
"I-ACCOUNT_NUMBER": 26,
|
| 197 |
+
"I-ADDRESS": 54,
|
| 198 |
+
"I-BUSINESS_ID": 82,
|
| 199 |
+
"I-CARD_EXPIRY": 66,
|
| 200 |
+
"I-CARD_NUMBER": 22,
|
| 201 |
+
"I-CI": 90,
|
| 202 |
+
"I-CVC": 70,
|
| 203 |
+
"I-DATE": 62,
|
| 204 |
+
"I-DRIVER_LICENSE": 50,
|
| 205 |
+
"I-EMAIL": 38,
|
| 206 |
"I-FRN": 10,
|
| 207 |
+
"I-GENERIC_ID": 18,
|
| 208 |
+
"I-IMEI": 102,
|
| 209 |
+
"I-IPADDRESS": 94,
|
| 210 |
+
"I-IPIN": 74,
|
| 211 |
+
"I-MACADDRESS": 98,
|
| 212 |
+
"I-ORGANIZATION": 110,
|
| 213 |
+
"I-PASSPORT": 46,
|
| 214 |
"I-PERSON": 2,
|
| 215 |
+
"I-PHONE": 42,
|
| 216 |
+
"I-PORT": 106,
|
| 217 |
"I-RRN": 6,
|
| 218 |
+
"I-SECRET": 30,
|
| 219 |
+
"I-SSN": 14,
|
| 220 |
+
"I-TRANSACTION_APPROVAL_ID": 78,
|
| 221 |
+
"I-URL": 114,
|
| 222 |
+
"I-USER_ID": 34,
|
| 223 |
+
"I-VIRTUAL_CARD_NUMBER": 86,
|
| 224 |
+
"I-ZIPCODE": 58,
|
| 225 |
"O": 0,
|
| 226 |
+
"S-ACCOUNT_NUMBER": 28,
|
| 227 |
+
"S-ADDRESS": 56,
|
| 228 |
+
"S-BUSINESS_ID": 84,
|
| 229 |
+
"S-CARD_EXPIRY": 68,
|
| 230 |
+
"S-CARD_NUMBER": 24,
|
| 231 |
+
"S-CI": 92,
|
| 232 |
+
"S-CVC": 72,
|
| 233 |
+
"S-DATE": 64,
|
| 234 |
+
"S-DRIVER_LICENSE": 52,
|
| 235 |
+
"S-EMAIL": 40,
|
| 236 |
"S-FRN": 12,
|
| 237 |
+
"S-GENERIC_ID": 20,
|
| 238 |
+
"S-IMEI": 104,
|
| 239 |
+
"S-IPADDRESS": 96,
|
| 240 |
+
"S-IPIN": 76,
|
| 241 |
+
"S-MACADDRESS": 100,
|
| 242 |
+
"S-ORGANIZATION": 112,
|
| 243 |
+
"S-PASSPORT": 48,
|
| 244 |
"S-PERSON": 4,
|
| 245 |
+
"S-PHONE": 44,
|
| 246 |
+
"S-PORT": 108,
|
| 247 |
"S-RRN": 8,
|
| 248 |
+
"S-SECRET": 32,
|
| 249 |
+
"S-SSN": 16,
|
| 250 |
+
"S-TRANSACTION_APPROVAL_ID": 80,
|
| 251 |
+
"S-URL": 116,
|
| 252 |
+
"S-USER_ID": 36,
|
| 253 |
+
"S-VIRTUAL_CARD_NUMBER": 88,
|
| 254 |
+
"S-ZIPCODE": 60
|
| 255 |
},
|
| 256 |
"max_position_embeddings": 131072,
|
| 257 |
"model_type": "openai_privacy_filter",
|
figures/evaluation-test-1-1.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
figures/evaluation-train-1-1.png
CHANGED
|
Git LFS Details
|
|
Git LFS Details
|
label-taxonomy.yaml
CHANGED
|
@@ -2,126 +2,176 @@
|
|
| 2 |
# Label Mapping - ai4privacy 1.5m ๋ผ๋ฒจ -> ๋ด๋ถ ํ์ต ๋ผ๋ฒจ ๋งคํ ํ
์ด๋ธ
|
| 3 |
#
|
| 4 |
# * ์ญํ : ๋ชจ๋ธ ํ์ต ๋ผ๋ฒจ = ๋ก๊น
์คํค๋ง ํค = ์ ์ฑ
ํ
์ด๋ธ ํค์ ๋จ์ผ ์์ค
|
| 5 |
-
# (docs/
|
| 6 |
# * ์ญ์ฐ ๊ทผ๊ฑฐ: playbooks/privacy_filter/privacy-filter-policy.md (ํ 1 ์ ํ ํจํด / ํ 2 ๋ง์คํน ๊ธฐ์ค)
|
| 7 |
-
# * ์ค์ธก ๊ทผ๊ฑฐ: docs/
|
| 8 |
-
# *
|
| 9 |
-
# ๋๋กญ ์ฒ ํ / ์ฌ๊ถยท์ด์ ๋ฉดํ ๋ถ๋ฆฌ ์ ์ง / regex ์ ๋ด ํญ๋ชฉ ๋ถ๋ฆฌ
|
| 10 |
-
# * 2026-07-21: AGEยทGENDER ๋๋กญ ํ์ (ํ1ยทํ2 ๋ฌด๊ทผ๊ฑฐ - ์ ์ฑ
์ญ์ฐ ์์น ๊ด์ฒ , N=17 -> 15)
|
| 11 |
-
# * 2026-07-21: ํ2 ๋ฌธ๋งฅ ํญ๋ชฉ 3์ข
๋ชจ๋ธ ์น๊ฒฉ (CARD_EXPIRYยทCVCยทIPIN - ๋ฌธ๋งฅ ๊ฒ์ถ์ ๋ชจ๋ธ ๋ ์ธ
|
| 12 |
-
# ๋ณธ๋ น, ํค์๋ regex๋ ์ด์ค ๋ ์ธ ๋ณํ. N=15 -> 18, 61 -> 73ํด๋์ค)
|
| 13 |
# =============================================================================
|
| 14 |
|
| 15 |
version: v1
|
| 16 |
-
date: 2026-
|
| 17 |
basis:
|
| 18 |
policy: playbooks/privacy_filter/privacy-filter-policy.md
|
| 19 |
-
audit: docs/
|
| 20 |
|
| 21 |
# -----------------------------------------------------------------------------
|
| 22 |
-
# 1. ๋ชจ๋ธ ํ์ต ๋ผ๋ฒจ (N=
|
| 23 |
# * data_source: ๋ผ๋ฒจ ํ๋ณธ์ ์ถ์ฒ ๋ฆฌ์คํธ - ko(1.5m-ko ์ ์ ๋ณธ) / en(1.5m-en ๋ฆฌํ๋ ์ด) /
|
| 24 |
-
#
|
| 25 |
-
# * RRN์ 1.5m ์ ๋๋ถ์ ko ํ์ (en TAXNUM์ GENERIC_ID fallback) -
|
| 26 |
-
# *
|
| 27 |
-
# ACCOUNTNUM 1, USERNAME 20 -> "ํฌ์ ๋ผ๋ฒจ์ en ๋ด๋น" ๊ฐ์ค ๊ธฐ๊ฐ, [domain] ์ฌ๋ฐฐ์
|
| 28 |
# -----------------------------------------------------------------------------
|
| 29 |
model_labels:
|
| 30 |
- name: PERSON
|
| 31 |
description: ์ฑ๋ช
(์ฑ+์ด๋ฆ ๋ณํฉ ๋จ์ผ ์คํฌ)
|
| 32 |
policy_ref: "ํ2 ์ฑ๋ช
(๊น*์ฉ - ์ฒซยท๋ ๊ธ์ ์ ์ธ) / ํ2 ์ฑ๋ช
(์๋ฌธ) (์ 4์๋ฆฌ ๋
ธ์ถ) - ์นํ ์ ์คํฌ๋ฆฝํธ(ํ๊ธ/์๋ฌธ)๋ก ๊ท์น ๋ถ๊ธฐ, full-span ๊ฒฝ๊ณ ํ์"
|
| 33 |
-
data_source: [ko, en]
|
| 34 |
head_init_base: private_person
|
| 35 |
- name: RRN
|
| 36 |
description: ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ
|
| 37 |
policy_ref: "ํ1 ์ฃผ๋ฏผ๋ฒํธ / ํ2 ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ (๋ค 7์๋ฆฌ ๋ง์คํน)"
|
| 38 |
-
data_source: [ko,
|
| 39 |
head_init_base: account_number
|
| 40 |
- name: FRN
|
| 41 |
description: ์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ (์ ์ค - 1.5m ์์ค 0๊ฑด)
|
| 42 |
policy_ref: "ํ1 ์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ ([5-8] ์์) / ํ2 ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ(์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ ํฌํจ) (๋ค 7์๋ฆฌ)"
|
| 43 |
-
data_source: [
|
| 44 |
head_init_from: RRN
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
- name: CARD_NUMBER
|
| 46 |
description: ์ ์ฉ/์ฒดํฌ์นด๋ ๋ฒํธ
|
| 47 |
policy_ref: "ํ1 ์นด๋๋ฒํธ / ํ2 ์นด๋๋ฒํธ (7~12๋ฒ์งธ ์๋ฆฌ, PCI-DSS)"
|
| 48 |
-
data_source: [ko, en,
|
| 49 |
head_init_base: account_number
|
| 50 |
- name: ACCOUNT_NUMBER
|
| 51 |
-
description: ๊ณ์ข๋ฒํธ
|
| 52 |
policy_ref: "ํ1 ๊ณ์ข๋ฒํธ (์ ํ๋ฒํธ ํก์ ์ํ - recognizer ์ฐ์ ์์ ํ์) / ํ2 ๊ณ์ข๋ฒํธ (๋ค 5์๋ฆฌ)"
|
| 53 |
-
data_source: [
|
| 54 |
head_init_base: account_number
|
| 55 |
- name: SECRET
|
| 56 |
description: ์ธ์ฆ ์ํฌ๋ฆฟ (๋น๋ฐ๋ฒํธยทAPI ํคยทํ ํฐ ํตํฉ - ์นด๋/ํ์/ISP ๊ตฌ๋ถ์ ๋ฌธ๋งฅ ๋ถ๊ฐ + ์ก์
๋์ผ)
|
| 57 |
policy_ref: "ํ2 ์นด๋๋น๋ฐ๋ฒํธยท์จ๋ผ์ธ ํ์ ํจ์ค์๋ยทISP๋น๋ฐ๋ฒํธ (์ฒ๋ฆฌ ๊ธ์ง -> ๊ฒ์ดํธ์จ์ด์์๋ LLM ๋
ธ์ถ ๊ธ์ง = ์ ์ฒด ๋ง์คํน์ผ๋ก ํด์)"
|
| 58 |
-
data_source: [
|
| 59 |
head_init_base: secret # base 8์ข
์ค secret ํ ์ ํ ๋ณต์ฌ (์ธ์ ์๋ ์ง๊ณ ์์)
|
| 60 |
- name: USER_ID
|
| 61 |
-
description: ์จ๋ผ์ธ ํ์ ID
|
| 62 |
policy_ref: "ํ2 ์จ๋ผ์ธ ํ์ ID (์ 2์๋ฆฌ ์ ์ธ)"
|
| 63 |
-
data_source: [
|
| 64 |
head_init_base: account_number
|
| 65 |
- name: EMAIL
|
| 66 |
description: ์ด๋ฉ์ผ ์ฃผ์
|
| 67 |
policy_ref: "ํ1 ์ด๋ฉ์ผ / ํ2 ์ด๋ฉ์ผ์ฃผ์ (ID ์ 2์๋ฆฌ ์ ์ธ ๋ง์คํน)"
|
| 68 |
-
data_source: [ko, en]
|
| 69 |
head_init_base: private_email
|
| 70 |
- name: PHONE
|
| 71 |
description: ์ ํ๋ฒํธ (ํด๋ํฐ/์ผ๋ฐ์ ํ ํตํฉ - ์นํ ๋จ๊ณ์์ ํ๋ฆฌํฝ์ค๋ก ์ฌ๋ถ๋ฅ)
|
| 72 |
policy_ref: "ํ1 ํด๋ํฐ๋ฒํธยท์ ํ๋ฒํธ / ํ2 ๊ธฐ๋ณธ ๋ค 6์๋ฆฌ ๊ณตํต - ๋ด๋ถ๋ง ์ฑ๋ ํ์ ํด๋ํฐ
|
| 73 |
๋ค 4์๋ฆฌ ์ํ (์นํ ์ ๊ฐ ํ๋ฆฌํฝ์ค๋ก ํด๋ํฐ ํ๋ณ + ์ฑ๋ ์ถ ๋ถ๊ธฐ)"
|
| 74 |
-
data_source: [ko, en]
|
| 75 |
head_init_base: private_phone
|
| 76 |
- name: PASSPORT
|
| 77 |
description: ์ฌ๊ถ๋ฒํธ (๋ถ๋ฆฌ ์ ์ง - ๋ง์คํน ๊ธฐ์ค ์์ด + ko 3,211๊ฑด)
|
| 78 |
policy_ref: "ํ1 ์ฌ๊ถ๋ฒํธ / ํ2 ์ฌ๊ถ๋ฒํธ (๋ค 4์๋ฆฌ)"
|
| 79 |
-
data_source: [ko, en]
|
| 80 |
head_init_base: account_number
|
| 81 |
- name: DRIVER_LICENSE
|
| 82 |
description: ์ด์ ๋ฉดํ๋ฒํธ (๋ถ๋ฆฌ ์ ์ง - ๋ง์คํน ๊ธฐ์ค ์์ด + ko 4,092๊ฑด)
|
| 83 |
policy_ref: "ํ1 ์ด์ ๋ฉดํ๋ฒํธ / ํ2 ์ด์ ๋ฉดํ๋ฒํธ (์ค๊ฐ 6์๋ฆฌ)"
|
| 84 |
-
data_source: [ko, en]
|
| 85 |
-
head_init_base: account_number
|
| 86 |
-
- name: GENERIC_ID
|
| 87 |
-
description: ๋ฒ์ฉ ์๋ณ์ (ํ๊ตญ ๋์๋ฌผ ์๋ ID๋ฅ - recall-first๋ก O ๋์ ์ ์ง)
|
| 88 |
-
policy_ref: "audit ยง5 (SOCIALNUM 10์๋ฆฌยทIDCARDNUM ์์ซ์)"
|
| 89 |
-
data_source: [ko, en]
|
| 90 |
head_init_base: account_number
|
| 91 |
- name: ADDRESS
|
| 92 |
description: ์ฃผ์ (์ยท๋๋ก๋ช
ยท๊ฑด๋ฌผ๋ฒํธ ํตํฉ ์คํฌ - ์นํ ๋จ๊ณ์์ ์ซ์ ์๋ธ๋ง์คํน)
|
| 93 |
policy_ref: "ํ2 ์ฃผ์ (์ง๋ฒ: ์/๋ฉด/๋ ๋ฏธ๋ง ์ซ์ / ๋๋ก๋ช
: ๊ฑด๋ฌผ๋ฒํธยท์์ธ์ฃผ์ ์ซ์ ๋ง์คํน -> ์คํฌ ๋ด ๊ท์น ์นํ)"
|
| 94 |
-
data_source: [ko, en]
|
| 95 |
head_init_base: private_address
|
| 96 |
- name: ZIPCODE
|
| 97 |
-
description: ์ฐํธ๋ฒํธ (๋ถ๋ฆฌ
|
| 98 |
-
policy_ref: "
|
| 99 |
-
data_source: [ko, en]
|
| 100 |
head_init_base: private_address
|
| 101 |
- name: DATE
|
| 102 |
description: ๋ ์งยท์๊ฐ (์๋
์์ผ ๋ฏธ๋ถ๋ฆฌ - ko ๋ฐ์ดํฐ DOB 0๊ฑด + ๊ณผ์ ๋ง์คํน ์ค์ ์ธ์ ์กฐํญ)
|
| 103 |
policy_ref: "ํ2 ์๋
์์ผ (๋
ธ์ถ ๊ธ์ง - DATE ์ ์ฒด ๋ง์คํน์ผ๋ก ์ด๊ณผ ์ค์)"
|
| 104 |
-
data_source: [ko, en]
|
| 105 |
head_init_base: private_date
|
| 106 |
- name: CARD_EXPIRY
|
| 107 |
-
description: ์นด๋์ ํจ๊ธฐํ
|
| 108 |
policy_ref: "ํ2 ์นด๋์ ํจ๊ธฐํ (**/** ์ ์ฒด ๋ง์คํน)"
|
| 109 |
-
data_source: [
|
| 110 |
head_init_base: private_date
|
| 111 |
- name: CVC
|
| 112 |
description: ์นด๋๊ฒ์ฆ์ฝ๋ (CVC/CVV/CAV ํตํฉ - ํ2 ๋ฌธ๋งฅ ํญ๋ชฉ ์น๊ฒฉ 2026-07-21)
|
| 113 |
policy_ref: "ํ2 ์นด๋๊ฒ์ฆ์ฝ๋ (์ ์ฅยท์ถ๋ ฅ ๊ธ์ง -> ๊ฒ์ดํธ์จ์ด ์ ์ฒด ๋ง์คํน ํด์)"
|
| 114 |
-
data_source: [
|
| 115 |
head_init_base: account_number
|
| 116 |
- name: IPIN
|
| 117 |
description: I-PIN ๋ฒํธ (ํ2 ๋ฌธ๋งฅ ํญ๋ชฉ ์น๊ฒฉ 2026-07-21 - ๊ฐ ๊ท๊ฒฉ pending)
|
| 118 |
policy_ref: "ํ2 I-PIN (๋ค 5์๋ฆฌ - ํ์ดํ ๋ฌด๊ด ์ซ์ ๊ธฐ์ค)"
|
| 119 |
-
data_source: [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
head_init_base: account_number
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
# -----------------------------------------------------------------------------
|
| 123 |
# 2. ์์ค ๋ผ๋ฒจ ๋งคํ (ai4privacy 1.5m -> ๋ด๋ถ ๋ผ๋ฒจ)
|
| 124 |
-
# * "O" = ํ์ต์์ ๋น์ํฐํฐ ์ฒ๋ฆฌ
|
| 125 |
# * ์กฐ๊ฑด๋ถ ๋งคํ์ locale + value_pattern ์์ ์ฅ์น ๋๋ฐ
|
| 126 |
# -----------------------------------------------------------------------------
|
| 127 |
source_mapping: # <source_mapping>
|
|
@@ -132,9 +182,9 @@ source_mapping: # <source_mapping>
|
|
| 132 |
label: RRN # <conditional_mapping>
|
| 133 |
condition:
|
| 134 |
locale: ko
|
| 135 |
-
value_pattern: '^\d{6}-[1-4]\d{6}$'
|
| 136 |
fallback: GENERIC_ID # ๋น์ ํฉ ๊ฐ / ํ ๋ก์ผ์ผ(en ๋ฆฌํ๋ ์ด)์ ์ธ๋ฌด ID -> ๋ฒ์ฉ ID
|
| 137 |
-
SOCIALNUM:
|
| 138 |
IDCARDNUM: GENERIC_ID
|
| 139 |
DRIVERLICENSENUM: DRIVER_LICENSE
|
| 140 |
PASSPORTNUM: PASSPORT
|
|
@@ -148,31 +198,30 @@ source_mapping: # <source_mapping>
|
|
| 148 |
ZIPCODE: ZIPCODE
|
| 149 |
DATE: DATE
|
| 150 |
TIME: DATE
|
| 151 |
-
|
| 152 |
-
GENDER: O # ใ
|
| 153 |
-
SEX: O # ใ (GENDER ์ค๋ณต ์์ค)
|
| 154 |
USERNAME: USER_ID
|
| 155 |
-
PASSWORD: SECRET
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
URL:
|
| 159 |
AMOUNT: O
|
| 160 |
COUNTRY: O
|
| 161 |
CURRENCY: O
|
| 162 |
-
BANKNAME:
|
| 163 |
-
TIMEZONE: O
|
| 164 |
SALARY: O
|
| 165 |
-
|
|
|
|
|
|
|
| 166 |
JOBTITLE: O
|
| 167 |
-
HOSPITALNAME:
|
| 168 |
ALLERGIES: O
|
| 169 |
-
WEIGHT: O
|
| 170 |
-
HEIGHT: O
|
| 171 |
|
| 172 |
# -----------------------------------------------------------------------------
|
| 173 |
# 3. ๋ณํฉ ๊ท์น (์ ์ ์คํฌ๋ฆฝํธ 2๋จ๊ณ - ์ธ์ ์คํฌ ๋ณํฉ, koยทen ๊ณตํต)
|
| 174 |
# * ๋ณํฉ์ ์ธ์ด ๊ณตํต (en "John Smith"๋ ๋จ์ผ ์คํฌ์ด์ด์ผ ํ2 ์๋ฌธ ์ฑ๋ช
๊ท์น ์ฑ๋ฆฝ)
|
| 175 |
-
# * ko ์ ์ฉ์ ๋ณํฉ์ด ์๋๋ผ ๊ทธ ๋ค์์ "์์ฐํ"(์ฑ+๋ช
๋ถ์ฌ์ฐ๊ธฐ - ์ ๋ต๋ฌธ ยง3.4.
|
| 176 |
# * ์์ ๊ฐ์ ๊ธ์ง: ko ์ฃผ์๋ ํฐ -> ์, en ์ฃผ์๋ ์ -> ํฐ ์ญ์ - ์ธ์ ์ฑ๋ง ์กฐ๊ฑด
|
| 177 |
#
|
| 178 |
# * gap_allowed : ๋ ์ํฐํฐ ์ฌ์ด์ ์ธ์ยทํ์ฉ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ ๋ฐ ํจํด
|
|
@@ -190,53 +239,3 @@ merge_rules: # <merge_rules>
|
|
| 190 |
max_gap_chars: 4
|
| 191 |
gap_allowed: whitespace_or_punct
|
| 192 |
output_label: ADDRESS
|
| 193 |
-
|
| 194 |
-
# -----------------------------------------------------------------------------
|
| 195 |
-
# 4. 1์ฐจ regex ์ ๋ด ํญ๋ชฉ (๋ชจ๋ธ ๋ผ๋ฒจ ์ ์ธ - ๋ก๊น
์คํค๋ง ํค์๋ ํฌํจ)
|
| 196 |
-
# * ํ1 ์ ํ ํจํด recognizer๊ฐ ๊ฒ์ถ, ์นํ ์ ์ฑ
์ ํ2 ์ค์ฉ
|
| 197 |
-
# -----------------------------------------------------------------------------
|
| 198 |
-
regex_only:
|
| 199 |
-
- key: CI
|
| 200 |
-
policy_ref: "ํ1 CI (86์+`==` ๊ณ ์ , lookaround ๊ฒฝ๊ณ - ๊ฒ์ ๋ณด๊ฐ 2026-07-21) / ํ2 CI (์ 7์๋ฆฌ ๋
ธ์ถ)"
|
| 201 |
-
# SHA-512 base64 ๋ํ ๊ณผํ ํ์ฉ - ์ ๋ฐ๋ ํ์์ ciยท์ฐ๊ณ์ ๋ณด ํค์๋ ๊ฐ์
|
| 202 |
-
- key: IP_ADDRESS
|
| 203 |
-
policy_ref: "ํ1 IP์ฃผ์ (์ฅํ
0~255 ์๊ฒฉํ - ๊ฒ์ ๋ณด๊ฐ 2026-07-21) / ํ2 ๊ณ ๊ฐ์ IP์ฃผ์ (์ 3์๋ฆฌ = ์ฒซ ์ฅํ
๋ง์คํน ํด์, IPv4 ํ์ )"
|
| 204 |
-
|
| 205 |
-
# -----------------------------------------------------------------------------
|
| 206 |
-
# 4-1. 1์ฐจ regex ๋ณํ (์ด์ค ๋ ์ธ) - ๋ชจ๋ธ ๋ผ๋ฒจ์ด๋ฉด์ ํค์๋ regex๋ ๋ณํ
|
| 207 |
-
# * 2026-07-21 ๋ชจ๋ธ ์น๊ฒฉ 3์ข
: ํค์๋ regex(๊ณ ์ ๋ฐ ์ recall - ๋ช
์ ๋ฌธํ) + ๋ชจ๋ธ(๋ฌดํค์๋
|
| 208 |
-
# ๋งฅ๋ฝ recall) union - ๋ฌธ๋งฅ ์์กด ๊ฒ์ถ์ ๋ชจ๋ธ ๋ ์ธ์ ์กด์ฌ ์ด์
|
| 209 |
-
# * ํจํด ์์ง ์ ์ : Python re (lookbehind ์ฌ์ฉ - RE2/Hyperscan ๊ณ์ด ๋นํธํ)
|
| 210 |
-
# * ์นํ์ ๊ฐ ์บก์ฒ๊ทธ๋ฃน๋ง (ํค์๋ ๋ณด์กด = ์ถ์ ์ฑ)
|
| 211 |
-
# -----------------------------------------------------------------------------
|
| 212 |
-
regex_assist:
|
| 213 |
-
- key: CARD_EXPIRY
|
| 214 |
-
patterns:
|
| 215 |
-
keyword: '(?i)(์ ํจ\s*๊ธฐ[๊ฐํ]|expir\w*|valid\s*thru)\D{0,12}(0[1-9]|1[0-2])\s*[/.\-]\s*((?:20)?\d\d)(?!\d)'
|
| 216 |
-
pan_adjacent: '(0[1-9]|1[0-2])\s*/\s*\d{2}(?!\d)' # ์นด๋๋ฒํธ ๋งค์น ์งํ \D{0,20} ์๋์ฐ ๋ด์์๋ง ์ ์ฉ
|
| 217 |
-
- key: CVC
|
| 218 |
-
patterns:
|
| 219 |
-
keyword: '(?i)(\b(?:cv[vc]2?|security\s*code)\b|์นด๋\s*๊ฒ์ฆ\s*(?:๋ฒํธ|์ฝ๋|๊ฐ)?|๋ณด์\s*์ฝ๋)\W{0,6}(?!(?:19|20)\d\d(?!\d))(\d{3,4})(?!\d)'
|
| 220 |
-
# CIDยทCSC ํค์๋ ๊ธฐ๋ณธ ์ ์ธ (correlation ID ์ถฉ๋). ์ ๋ฐ๋ ์ต์
: PAN co-occurrence ๊ฒ์ดํธ
|
| 221 |
-
- key: IPIN
|
| 222 |
-
patterns:
|
| 223 |
-
keyword: '(?i)(์์ดํ|i[-\s]?pin)\s*(?:๋ฒํธ|no\.?)?\D{0,8}(\d{6}[-\s]?\d{7})(?!\d)'
|
| 224 |
-
# ์ฃผ๋ฏผ๋ฒํธ ๊ท์น ์ ํ ์ ์ฉ ํ ์์ฌ๋ถ๋ง IPIN. ๊ฐ ๊ท๊ฒฉ(13์๋ฆฌ ๊ฐ์ ) ํ์ธ ํ์ (pending)
|
| 225 |
-
|
| 226 |
-
# -----------------------------------------------------------------------------
|
| 227 |
-
# 5. ์ค์ฝํ ์ธ - ํ
์คํธ ๊ฒ์ดํธ์จ์ด๊ฐ ๋ค๋ฃจ์ง ์๋ ํ2 ํญ๋ชฉ (์ ์ธ์ ๊ธฐ๋ก)
|
| 228 |
-
# -----------------------------------------------------------------------------
|
| 229 |
-
out_of_scope:
|
| 230 |
-
- key: VIDEO_PERSONAL_INFO
|
| 231 |
-
policy_ref: "ํ2 ๊ฐ์ธ์์์ ๋ณด (๊ฒ์ ๋ชฉ์ ์ธ ์ฒ๋ฆฌ ๊ธ์ง)"
|
| 232 |
-
reason: "ํ
์คํธ ์ํฐํฐ๊ฐ ์๋ ๋ชจ๋ฌ๋ฆฌํฐ(์ด๋ฏธ์งยท์์) - ๋ฉํฐ๋ชจ๋ฌ ์
๋ ฅ ๊ฒฝ๋ก๊ฐ ์ด๋ฆฌ๋ฉด
|
| 233 |
-
ํ
์คํธ ํํฐ๋ฅผ ์ฐํํ๋ฏ๋ก ๋ณ๋ ํต์ (์
๋ ฅ ์ฐจ๋จ or ๋น์ ํํฐ) ํ์"
|
| 234 |
-
|
| 235 |
-
# -----------------------------------------------------------------------------
|
| 236 |
-
# 6. ๋ฏธ๊ฒฐ - ์ ์ฑ
ํ ์ปจํ ํญ๋ชฉ, TBD
|
| 237 |
-
# -----------------------------------------------------------------------------
|
| 238 |
-
pending_confirmation:
|
| 239 |
-
- "๋๋กญ ๋ฆฌ์คํธ(O ๋งคํ) ์ ์ฒด = ๋นPII ์ ์ธ - ํนํ ORGANISATIONยทAMOUNTยทSALARY"
|
| 240 |
-
- "IPIN ๊ฐ ๊ท๊ฒฉ (13์๋ฆฌ ๊ฐ์ ) - ์ ๊ณต๊ธฐ๊ด ๊ณ์ฝ ํ์ธ (CVC ๊ฒ์ถ ๊ท์น์ 2026-07-21 ํค์๋ ๋๋ฐ ํจํด ์ฑํ์ผ๋ก ํด์)"
|
| 241 |
-
- "SECRET ์ ์ค ์ฑํ (2026-07-13) - ํ2 ์ฒ๋ฆฌ๊ธ์ง๋ฅ์ '๊ฒ์ดํธ์จ์ด ์ ์ฒด ๋ง์คํน' ํด์์
|
| 242 |
-
์ ์ฑ
ํ ์ฌํ ์ปจํ ๋์"
|
|
|
|
| 2 |
# Label Mapping - ai4privacy 1.5m ๋ผ๋ฒจ -> ๋ด๋ถ ํ์ต ๋ผ๋ฒจ ๋งคํ ํ
์ด๋ธ
|
| 3 |
#
|
| 4 |
# * ์ญํ : ๋ชจ๋ธ ํ์ต ๋ผ๋ฒจ = ๋ก๊น
์คํค๋ง ํค = ์ ์ฑ
ํ
์ด๋ธ ํค์ ๋จ์ผ ์์ค
|
| 5 |
+
# (docs/analysis/2026-07-03-pii-masking-architecture-qna.md [13])
|
| 6 |
# * ์ญ์ฐ ๊ทผ๊ฑฐ: playbooks/privacy_filter/privacy-filter-policy.md (ํ 1 ์ ํ ํจํด / ํ 2 ๋ง์คํน ๊ธฐ์ค)
|
| 7 |
+
# * ์ค์ธก ๊ทผ๊ฑฐ: docs/analysis/2026-07-03-ai4privacy-1p5m-ko-audit.md
|
| 8 |
+
# * v1 ์ ๊ท ๊ธฐ์ค์ : ๊ณผ๊ฑฐ ๋ฐ์ดํฐ์
๋ฒ์ ์ ์น๊ณํ์ง ์๊ณ 29๊ฐ ๋ชจ๋ธ ๋ผ๋ฒจ๋ก ์๋ก ์์ฑ
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
# =============================================================================
|
| 10 |
|
| 11 |
version: v1
|
| 12 |
+
date: 2026-09-02
|
| 13 |
basis:
|
| 14 |
policy: playbooks/privacy_filter/privacy-filter-policy.md
|
| 15 |
+
audit: docs/analysis/2026-07-03-ai4privacy-1p5m-ko-audit.md
|
| 16 |
|
| 17 |
# -----------------------------------------------------------------------------
|
| 18 |
+
# 1. ๋ชจ๋ธ ํ์ต ๋ผ๋ฒจ (N=29 -> BIOES 4N+1 = 117ํด๋์ค)
|
| 19 |
# * data_source: ๋ผ๋ฒจ ํ๋ณธ์ ์ถ์ฒ ๋ฆฌ์คํธ - ko(1.5m-ko ์ ์ ๋ณธ) / en(1.5m-en ๋ฆฌํ๋ ์ด) /
|
| 20 |
+
# synthesis(ํฉ์ฑ ๋ถํธ์คํธ๋ฉ ๋๊ธฐ - ํค๋๋ ์ ์ฌ ๋ผ๋ฒจ ํ ๋ณต์ฌ๋ก init)
|
| 21 |
+
# * RRN์ 1.5m ์ ๋๋ถ์ ko ํ์ (en TAXNUM์ GENERIC_ID fallback) - synthesis๋ ์ฆ๊ฐ ๋ฐฉ์ B
|
| 22 |
+
# * ํฌ์ ๋ผ๋ฒจ์ koยทen `synthesis`๋ก ๋ณด๊ฐํ๋ฉฐ 29์ข
๋ชจ๋ ์ ์ธ์ด ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ชฉํ๋ก ํจ
|
|
|
|
| 23 |
# -----------------------------------------------------------------------------
|
| 24 |
model_labels:
|
| 25 |
- name: PERSON
|
| 26 |
description: ์ฑ๋ช
(์ฑ+์ด๋ฆ ๋ณํฉ ๋จ์ผ ์คํฌ)
|
| 27 |
policy_ref: "ํ2 ์ฑ๋ช
(๊น*์ฉ - ์ฒซยท๋ ๊ธ์ ์ ์ธ) / ํ2 ์ฑ๋ช
(์๋ฌธ) (์ 4์๋ฆฌ ๋
ธ์ถ) - ์นํ ์ ์คํฌ๋ฆฝํธ(ํ๊ธ/์๋ฌธ)๋ก ๊ท์น ๋ถ๊ธฐ, full-span ๊ฒฝ๊ณ ํ์"
|
| 28 |
+
data_source: [ko, en, synthesis]
|
| 29 |
head_init_base: private_person
|
| 30 |
- name: RRN
|
| 31 |
description: ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ
|
| 32 |
policy_ref: "ํ1 ์ฃผ๋ฏผ๋ฒํธ / ํ2 ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ (๋ค 7์๋ฆฌ ๋ง์คํน)"
|
| 33 |
+
data_source: [ko, synthesis] # synthesis = ์ฆ๊ฐ ๋ฐฉ์ B ์ ๊ท ์์ฑ๋ถ (์ ๋ต๋ฌธ ยง3.3.1)
|
| 34 |
head_init_base: account_number
|
| 35 |
- name: FRN
|
| 36 |
description: ์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ (์ ์ค - 1.5m ์์ค 0๊ฑด)
|
| 37 |
policy_ref: "ํ1 ์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ ([5-8] ์์) / ํ2 ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ(์ธ๊ตญ์ธ๋ฑ๋ก๋ฒํธ ํฌํจ) (๋ค 7์๋ฆฌ)"
|
| 38 |
+
data_source: [synthesis]
|
| 39 |
head_init_from: RRN
|
| 40 |
+
- name: SSN
|
| 41 |
+
description: ์ฌํ๋ณด์ฅ๋ฒํธ ๊ณ์ด (ai4privacy koยทen SOCIALNUM - ๋ฏธ๊ตญ 9์๋ฆฌ๋ก ํ์ ํ์ง ์๊ณ ์์ฒ ํ์ ๋ณด์กด)
|
| 42 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1 - koยทen SOCIALNUM ์ง์ ๋งคํ, ์ ์ฒด ๋ง์คํน"
|
| 43 |
+
data_source: [ko, en, synthesis]
|
| 44 |
+
head_init_base: account_number
|
| 45 |
+
- name: GENERIC_ID
|
| 46 |
+
description: ํน์ ๊ตญ๊ฐ๋ณ ์ธ๋ถ taxonomy๋ก ํ์ ํ์ง ๋ชปํ ์ ๋ถ์ฆ ๋ฒํธ์ ์ธ๋ฌด ์๋ณ๋ฒํธ๋ฅผ ์์ฉํ๋ ๋ฒ์ฉ ์๋ณ์
|
| 47 |
+
policy_ref: "audit ยง5 - koยทen IDCARDNUM ๋ฐ en TAXNUM fallback"
|
| 48 |
+
data_source: [ko, en, synthesis]
|
| 49 |
+
head_init_base: account_number
|
| 50 |
- name: CARD_NUMBER
|
| 51 |
description: ์ ์ฉ/์ฒดํฌ์นด๋ ๋ฒํธ
|
| 52 |
policy_ref: "ํ1 ์นด๋๋ฒํธ / ํ2 ์นด๋๋ฒํธ (7~12๋ฒ์งธ ์๋ฆฌ, PCI-DSS)"
|
| 53 |
+
data_source: [ko, en, synthesis] # synthesis = ์ฆ๊ฐ ๋ฐฉ์ B ์ ๊ท ์์ฑ๋ถ (์ ๋ต๋ฌธ ยง3.3.1)
|
| 54 |
head_init_base: account_number
|
| 55 |
- name: ACCOUNT_NUMBER
|
| 56 |
+
description: ๊ณ์ข๋ฒํธ
|
| 57 |
policy_ref: "ํ1 ๊ณ์ข๋ฒํธ (์ ํ๋ฒํธ ํก์ ์ํ - recognizer ์ฐ์ ์์ ํ์) / ํ2 ๊ณ์ข๋ฒํธ (๋ค 5์๋ฆฌ)"
|
| 58 |
+
data_source: [ko, en, synthesis] # ko 5ยทen 1๊ฑด ์ค์ธก - ํฉ์ฑ ์ฆ๊ฐ ํ์ (์ํ๋ณ ํฌ๋งท ๊ท์น ์์ฑ ์ฉ์ด)
|
| 59 |
head_init_base: account_number
|
| 60 |
- name: SECRET
|
| 61 |
description: ์ธ์ฆ ์ํฌ๋ฆฟ (๋น๋ฐ๋ฒํธยทAPI ํคยทํ ํฐ ํตํฉ - ์นด๋/ํ์/ISP ๊ตฌ๋ถ์ ๋ฌธ๋งฅ ๋ถ๊ฐ + ์ก์
๋์ผ)
|
| 62 |
policy_ref: "ํ2 ์นด๋๋น๋ฐ๋ฒํธยท์จ๋ผ์ธ ํ์ ํจ์ค์๋ยทISP๋น๋ฐ๋ฒํธ (์ฒ๋ฆฌ ๊ธ์ง -> ๊ฒ์ดํธ์จ์ด์์๋ LLM ๋
ธ์ถ ๊ธ์ง = ์ ์ฒด ๋ง์คํน์ผ๋ก ํด์)"
|
| 63 |
+
data_source: [ko, synthesis] # PASSWORD ko 5๊ฑด ์ค์ธก + ํฉ์ฑ ์ฆ๊ฐ
|
| 64 |
head_init_base: secret # base 8์ข
์ค secret ํ ์ ํ ๋ณต์ฌ (์ธ์ ์๋ ์ง๊ณ ์์)
|
| 65 |
- name: USER_ID
|
| 66 |
+
description: ์จ๋ผ์ธ ํ์ ID
|
| 67 |
policy_ref: "ํ2 ์จ๋ผ์ธ ํ์ ID (์ 2์๋ฆฌ ์ ์ธ)"
|
| 68 |
+
data_source: [ko, en, synthesis] # ko 4ยทen 20๊ฑด ์ค์ธก - ์ฆ๊ฐ ํ์
|
| 69 |
head_init_base: account_number
|
| 70 |
- name: EMAIL
|
| 71 |
description: ์ด๋ฉ์ผ ์ฃผ์
|
| 72 |
policy_ref: "ํ1 ์ด๋ฉ์ผ / ํ2 ์ด๋ฉ์ผ์ฃผ์ (ID ์ 2์๋ฆฌ ์ ์ธ ๋ง์คํน)"
|
| 73 |
+
data_source: [ko, en, synthesis]
|
| 74 |
head_init_base: private_email
|
| 75 |
- name: PHONE
|
| 76 |
description: ์ ํ๋ฒํธ (ํด๋ํฐ/์ผ๋ฐ์ ํ ํตํฉ - ์นํ ๋จ๊ณ์์ ํ๋ฆฌํฝ์ค๋ก ์ฌ๋ถ๋ฅ)
|
| 77 |
policy_ref: "ํ1 ํด๋ํฐ๋ฒํธยท์ ํ๋ฒํธ / ํ2 ๊ธฐ๋ณธ ๋ค 6์๋ฆฌ ๊ณตํต - ๋ด๋ถ๋ง ์ฑ๋ ํ์ ํด๋ํฐ
|
| 78 |
๋ค 4์๋ฆฌ ์ํ (์นํ ์ ๊ฐ ํ๋ฆฌํฝ์ค๋ก ํด๋ํฐ ํ๋ณ + ์ฑ๋ ์ถ ๋ถ๊ธฐ)"
|
| 79 |
+
data_source: [ko, en, synthesis]
|
| 80 |
head_init_base: private_phone
|
| 81 |
- name: PASSPORT
|
| 82 |
description: ์ฌ๊ถ๋ฒํธ (๋ถ๋ฆฌ ์ ์ง - ๋ง์คํน ๊ธฐ์ค ์์ด + ko 3,211๊ฑด)
|
| 83 |
policy_ref: "ํ1 ์ฌ๊ถ๋ฒํธ / ํ2 ์ฌ๊ถ๋ฒํธ (๋ค 4์๋ฆฌ)"
|
| 84 |
+
data_source: [ko, en, synthesis]
|
| 85 |
head_init_base: account_number
|
| 86 |
- name: DRIVER_LICENSE
|
| 87 |
description: ์ด์ ๋ฉดํ๋ฒํธ (๋ถ๋ฆฌ ์ ์ง - ๋ง์คํน ๊ธฐ์ค ์์ด + ko 4,092๊ฑด)
|
| 88 |
policy_ref: "ํ1 ์ด์ ๋ฉดํ๋ฒํธ / ํ2 ์ด์ ๋ฉดํ๋ฒํธ (์ค๊ฐ 6์๋ฆฌ)"
|
| 89 |
+
data_source: [ko, en, synthesis]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
head_init_base: account_number
|
| 91 |
- name: ADDRESS
|
| 92 |
description: ์ฃผ์ (์ยท๋๋ก๋ช
ยท๊ฑด๋ฌผ๋ฒํธ ํตํฉ ์คํฌ - ์นํ ๋จ๊ณ์์ ์ซ์ ์๋ธ๋ง์คํน)
|
| 93 |
policy_ref: "ํ2 ์ฃผ์ (์ง๋ฒ: ์/๋ฉด/๋ ๋ฏธ๋ง ์ซ์ / ๋๋ก๋ช
: ๊ฑด๋ฌผ๋ฒํธยท์์ธ์ฃผ์ ์ซ์ ๋ง์คํน -> ์คํฌ ๋ด ๊ท์น ์นํ)"
|
| 94 |
+
data_source: [ko, en, synthesis]
|
| 95 |
head_init_base: private_address
|
| 96 |
- name: ZIPCODE
|
| 97 |
+
description: ์ฐํธ๋ฒํธ (ADDRESS์ ๋ถ๋ฆฌ๋ ๋
๋ฆฝ ์คํฌ)
|
| 98 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1"
|
| 99 |
+
data_source: [ko, en, synthesis]
|
| 100 |
head_init_base: private_address
|
| 101 |
- name: DATE
|
| 102 |
description: ๋ ์งยท์๊ฐ (์๋
์์ผ ๋ฏธ๋ถ๋ฆฌ - ko ๋ฐ์ดํฐ DOB 0๊ฑด + ๊ณผ์ ๋ง์คํน ์ค์ ์ธ์ ์กฐํญ)
|
| 103 |
policy_ref: "ํ2 ์๋
์์ผ (๋
ธ์ถ ๊ธ์ง - DATE ์ ์ฒด ๋ง์คํน์ผ๋ก ์ด๊ณผ ์ค์)"
|
| 104 |
+
data_source: [ko, en, synthesis]
|
| 105 |
head_init_base: private_date
|
| 106 |
- name: CARD_EXPIRY
|
| 107 |
+
description: ์นด๋์ ํจ๊ธฐํ
|
| 108 |
policy_ref: "ํ2 ์นด๋์ ํจ๊ธฐํ (**/** ์ ์ฒด ๋ง์คํน)"
|
| 109 |
+
data_source: [synthesis] # 1.5m ์์ฒ 0๊ฑด - ์ฆ๊ฐ ์ ๋ด (PAN ๋๋ฐ ๋ฌธ๋งฅ ์์ฑ)
|
| 110 |
head_init_base: private_date
|
| 111 |
- name: CVC
|
| 112 |
description: ์นด๋๊ฒ์ฆ์ฝ๋ (CVC/CVV/CAV ํตํฉ - ํ2 ๋ฌธ๋งฅ ํญ๋ชฉ ์น๊ฒฉ 2026-07-21)
|
| 113 |
policy_ref: "ํ2 ์นด๋๊ฒ์ฆ์ฝ๋ (์ ์ฅยท์ถ๋ ฅ ๊ธ์ง -> ๊ฒ์ดํธ์จ์ด ์ ์ฒด ๋ง์คํน ํด์)"
|
| 114 |
+
data_source: [synthesis] # 1.5m ์์ฒ 0๊ฑด - ์ฆ๊ฐ ์ ๋ด (๋จ๋
์์ฑ ๊ธ์ง - PAN ๋๋ฐ ํ์)
|
| 115 |
head_init_base: account_number
|
| 116 |
- name: IPIN
|
| 117 |
description: I-PIN ๋ฒํธ (ํ2 ๋ฌธ๋งฅ ํญ๋ชฉ ์น๊ฒฉ 2026-07-21 - ๊ฐ ๊ท๊ฒฉ pending)
|
| 118 |
policy_ref: "ํ2 I-PIN (๋ค 5์๋ฆฌ - ํ์ดํ ๋ฌด๊ด ์ซ์ ๊ธฐ์ค)"
|
| 119 |
+
data_source: [synthesis] # 1.5m ์์ฒ 0๊ฑด - ๊ท๊ฒฉ ํ์ ์ ํ์ผ๋ฟ ์๋๋ง
|
| 120 |
+
head_init_base: account_number
|
| 121 |
+
- name: TRANSACTION_APPROVAL_ID
|
| 122 |
+
description: ์นด๋ ๊ฒฐ์ ๊ฑฐ๋ ์น์ธ๋ฒํธ (์น์ธ๋ฒํธยท๊ฒฐ์ ์น์ธ๋ฒํธ ๋ฌธ๋งฅ์ 8์๋ฆฌ ์๋ณ์)
|
| 123 |
+
policy_ref: "data-preprocessing-supplementation ยง1 ๊ธ์ต ๋ฐ VOC/CS ์์ญ (๋ง์คํน ๊ธฐ์ค ์ ์ฑ
ํ
์ด๋ธ ๋ฐ์ ํ์)"
|
| 124 |
+
data_source: [synthesis]
|
| 125 |
+
head_init_base: account_number
|
| 126 |
+
- name: BUSINESS_ID
|
| 127 |
+
description: ์ฌ์
์๋ฒํธยท๊ฐ๋งน์ ๋ฒํธ ํตํฉ ์๋ณ์ (์ฌ์
์๋ฒํธ 10์๋ฆฌยท๊ฐ๋งน์ ๋ฒํธ 9์๋ฆฌ)
|
| 128 |
+
policy_ref: "data-preprocessing-supplementation ยง1 ๊ธ์ต ๋ฐ VOC/CS ์์ญ (๋ง์คํน ๊ธฐ์ค ์ ์ฑ
ํ
์ด๋ธ ๋ฐ์ ํ์)"
|
| 129 |
+
data_source: [synthesis]
|
| 130 |
head_init_base: account_number
|
| 131 |
+
- name: VIRTUAL_CARD_NUMBER
|
| 132 |
+
description: ๋์ฒด์นด๋๋ฒํธยท๊ฐ์์นด๋๋ฒํธ (๋์ฒด์นด๋๋ฒํธ ๋ฌธ๋งฅ์ 11์๋ฆฌ ์๋ณ์)
|
| 133 |
+
policy_ref: "data-preprocessing-supplementation ยง1 ๊ธ์ต ๋ฐ VOC/CS ์์ญ (๋ง์คํน ๊ธฐ์ค ์ ์ฑ
ํ
์ด๋ธ ๋ฐ์ ํ์)"
|
| 134 |
+
data_source: [synthesis]
|
| 135 |
+
head_init_base: account_number
|
| 136 |
+
- name: CI
|
| 137 |
+
description: ์ฐ๊ณ์ ๋ณด (Connecting Information, 86์ base64 ๋ณธ๋ฌธ + == ํจ๋ฉ)
|
| 138 |
+
policy_ref: "ํ1 CI (86์+`==` ๊ณ ์ , lookaround ๊ฒฝ๊ณ) / ํ2 CI (์ 7์๋ฆฌ ๋
ธ์ถ)"
|
| 139 |
+
data_source: [synthesis]
|
| 140 |
+
head_init_base: account_number
|
| 141 |
+
- name: IPADDRESS
|
| 142 |
+
description: IPv4 ๋คํธ์ํฌ ์ฃผ์
|
| 143 |
+
policy_ref: "ํ1 IP์ฃผ์ / ํ2 ๊ณ ๊ฐ IP์ฃผ์ - ์ ์ฒด ๋ง์คํน"
|
| 144 |
+
data_source: [ko, en, synthesis]
|
| 145 |
+
head_init_base: private_url
|
| 146 |
+
- name: MACADDRESS
|
| 147 |
+
description: ๋คํธ์ํฌ ์ธํฐํ์ด์ค์ 48๋นํธ MAC ์ฃผ์
|
| 148 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1 - ์ ์ฒด ๋ง์คํน"
|
| 149 |
+
data_source: [synthesis]
|
| 150 |
+
head_init_base: account_number
|
| 151 |
+
- name: IMEI
|
| 152 |
+
description: ์ด๋ํต์ ๋จ๋ง์ 15์๋ฆฌ ๊ตญ์ ๋จ๋ง๊ธฐ ์๋ณ๋ฒํธ
|
| 153 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1 - ์ ์ฒด ๋ง์คํน"
|
| 154 |
+
data_source: [synthesis]
|
| 155 |
+
head_init_base: account_number
|
| 156 |
+
- name: PORT
|
| 157 |
+
description: ๋คํธ์ํฌ ์๋น์ค ํฌํธ ๋ฒํธ (0~65535) - ๊ณผํ ์ต์ ์ฉ ๋นPII ๋ผ๋ฒจ
|
| 158 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1"
|
| 159 |
+
data_source: [synthesis]
|
| 160 |
+
head_init_base: private_url
|
| 161 |
+
- name: ORGANIZATION
|
| 162 |
+
description: ํ์ฌยท์ํยท๋ณ์ ๋ฑ ์กฐ์ง๋ช
- PERSONยทADDRESS ๊ณผํ ์ต์ ์ฉ ๋นPII ๋ผ๋ฒจ
|
| 163 |
+
policy_ref: "data-preprocessing-strategy ยง2.1.1 ๋ฐ ยง3.2"
|
| 164 |
+
data_source: [ko, en, synthesis]
|
| 165 |
+
head_init_base: private_person
|
| 166 |
+
- name: URL
|
| 167 |
+
description: ์น URL - ๊ฒฝ๋กยท์ฟผ๋ฆฌยทํ ํฐ์ ํฌํจํ ์ ์ฒด URL์ ๋จ์ผ ์คํฌ์ผ๋ก ๊ฒ์ถ
|
| 168 |
+
policy_ref: "data-preprocessing-strategy ยง3.2 ๋ฐ ยง3.3.1"
|
| 169 |
+
data_source: [ko, en, synthesis]
|
| 170 |
+
head_init_base: private_url
|
| 171 |
|
| 172 |
# -----------------------------------------------------------------------------
|
| 173 |
# 2. ์์ค ๋ผ๋ฒจ ๋งคํ (ai4privacy 1.5m -> ๋ด๋ถ ๋ผ๋ฒจ)
|
| 174 |
+
# * "O" = ํ์ต์์ ๋น์ํฐํฐ๋ก ์ฒ๋ฆฌํ๊ณ privacy_mask์์ ์ ๊ฑฐ
|
| 175 |
# * ์กฐ๊ฑด๋ถ ๋งคํ์ locale + value_pattern ์์ ์ฅ์น ๋๋ฐ
|
| 176 |
# -----------------------------------------------------------------------------
|
| 177 |
source_mapping: # <source_mapping>
|
|
|
|
| 182 |
label: RRN # <conditional_mapping>
|
| 183 |
condition:
|
| 184 |
locale: ko
|
| 185 |
+
value_pattern: '^\d{6}-[1-4]\d{6}$'
|
| 186 |
fallback: GENERIC_ID # ๋น์ ํฉ ๊ฐ / ํ ๋ก์ผ์ผ(en ๋ฆฌํ๋ ์ด)์ ์ธ๋ฌด ID -> ๋ฒ์ฉ ID
|
| 187 |
+
SOCIALNUM: SSN
|
| 188 |
IDCARDNUM: GENERIC_ID
|
| 189 |
DRIVERLICENSENUM: DRIVER_LICENSE
|
| 190 |
PASSPORTNUM: PASSPORT
|
|
|
|
| 198 |
ZIPCODE: ZIPCODE
|
| 199 |
DATE: DATE
|
| 200 |
TIME: DATE
|
| 201 |
+
TIMEZONE: O
|
|
|
|
|
|
|
| 202 |
USERNAME: USER_ID
|
| 203 |
+
PASSWORD: SECRET
|
| 204 |
+
ORGANISATION: ORGANIZATION
|
| 205 |
+
IPV4: IPADDRESS
|
| 206 |
+
URL: URL
|
| 207 |
AMOUNT: O
|
| 208 |
COUNTRY: O
|
| 209 |
CURRENCY: O
|
| 210 |
+
BANKNAME: ORGANIZATION
|
|
|
|
| 211 |
SALARY: O
|
| 212 |
+
AGE: O
|
| 213 |
+
GENDER: O
|
| 214 |
+
SEX: O
|
| 215 |
JOBTITLE: O
|
| 216 |
+
HOSPITALNAME: ORGANIZATION
|
| 217 |
ALLERGIES: O
|
| 218 |
+
WEIGHT: O
|
| 219 |
+
HEIGHT: O
|
| 220 |
|
| 221 |
# -----------------------------------------------------------------------------
|
| 222 |
# 3. ๋ณํฉ ๊ท์น (์ ์ ์คํฌ๋ฆฝํธ 2๋จ๊ณ - ์ธ์ ์คํฌ ๋ณํฉ, koยทen ๊ณตํต)
|
| 223 |
# * ๋ณํฉ์ ์ธ์ด ๊ณตํต (en "John Smith"๋ ๋จ์ผ ์คํฌ์ด์ด์ผ ํ2 ์๋ฌธ ์ฑ๋ช
๊ท์น ์ฑ๋ฆฝ)
|
| 224 |
+
# * ko ์ ์ฉ์ ๋ณํฉ์ด ์๋๋ผ ๊ทธ ๋ค์์ "์์ฐํ"(์ฑ+๋ช
๋ถ์ฌ์ฐ๊ธฐ - ์ ๋ต๋ฌธ ยง3.4.1 2๋จ๊ณ)
|
| 225 |
# * ์์ ๊ฐ์ ๊ธ์ง: ko ์ฃผ์๋ ํฐ -> ์, en ์ฃผ์๋ ์ -> ํฐ ์ญ์ - ์ธ์ ์ฑ๋ง ์กฐ๊ฑด
|
| 226 |
#
|
| 227 |
# * gap_allowed : ๋ ์ํฐํฐ ์ฌ์ด์ ์ธ์ยทํ์ฉ์ด ๊ฐ๋ฅํ ๊ตฌ์กฐ ๋ฐ ํจํด
|
|
|
|
| 239 |
max_gap_chars: 4
|
| 240 |
gap_allowed: whitespace_or_punct
|
| 241 |
output_label: ADDRESS
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model.safetensors
CHANGED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:685b29cf27a95edd56a36b391941b26ee3979be68ce9d57ea5856bb7644bf18b
|
| 3 |
+
size 2799097186
|