AEGIS Personal PII NER
GPT, Gemini 등 AI 서비스 사용 시 개인정보(PII) 유출을 방지하기 위한 다국어 NER 모델.
ONNX INT8 양자화 모델로, 크롬 확장 프로그램에서 onnxruntime-web으로 브라우저 내 실시간 추론합니다.
Current version:
v2| All versions
Model Details
| Base | bert-base-multilingual-cased (178M params) |
| Task | Token Classification (BIO tagging) |
| Labels | 37 (18 PII types × B/I + O) |
| Format | ONNX INT8 dynamic quantization |
| Languages | Korean, English |
| Version | v2 |
Supported PII Types (18)
GIVENNAME, SURNAME, USERNAME, EMAIL, TELEPHONENUM, DATEOFBIRTH, CREDITCARDNUMBER, IDCARD, STREET, CITY, ZIPCODE, BUILDINGNUM, IP_ADDRESS, PASSWORD, ACCOUNTNUM, DRIVERLICENSENUM, TIME, COMPANY
Benchmark — v2 (Current)
| Metric | Score |
|---|---|
| Entity-level Span F1 | 0.9234 |
| Token-level F1 | 0.9271 |
| English F1 | 0.9119 |
| Korean F1 | 0.9632 |
| False Positive Rate | 0.0033 |
| Latency (avg) | 55.28ms |
Version Comparison
| Version | Span F1 | EN F1 | KO F1 | FPR | Latency |
|---|---|---|---|---|---|
| v2 (current) | 0.9234 | 0.9119 | 0.9632 | 0.0033 | 55.28ms |
| v1 | 0.8788 | 0.9168 | 0.6842 | 0.0533 | 57.79ms |
Usage
Load specific version
from transformers import AutoTokenizer, AutoModelForTokenClassification
# Latest (main branch)
model = AutoModelForTokenClassification.from_pretrained("YATAV-ENT/aegis-personal-pii-ner")
tokenizer = AutoTokenizer.from_pretrained("YATAV-ENT/aegis-personal-pii-ner")
# Pin to specific version
model = AutoModelForTokenClassification.from_pretrained("YATAV-ENT/aegis-personal-pii-ner", revision="v2")
tokenizer = AutoTokenizer.from_pretrained("YATAV-ENT/aegis-personal-pii-ner", revision="v2")
ONNX Runtime (Browser / Node.js)
import { InferenceSession } from "onnxruntime-web";
const session = await InferenceSession.create("onnx/model_quantized.onnx");
Download specific version
from huggingface_hub import hf_hub_download
path = hf_hub_download(
repo_id="YATAV-ENT/aegis-personal-pii-ner",
filename="onnx/model_quantized.onnx",
revision="v1" # any tag or commit hash
)
Release Notes
v2 — 한국어 성능 대폭 개선 + 오탐률 감소
요약
v1 벤치마크 분석 결과를 기반으로, 한국어 F1을 0.68 → 0.96으로 대폭 개선하고 오탐률을 5.33% → 0.33%로 감소시킨 버전. 테스트 데이터의 비현실적 패턴 수정, 학습 데이터 다양화, 후처리 검증 강화를 동시에 진행.
v1 대비 변경사항
1. 테스트셋 수정
- 한국어 이메일 패턴 현실화:
민준.최@naver.com→minjun.choi@naver.com(로마자 username)- 실제 한국 이메일 서비스는 영문 아이디만 허용하므로, 현실적인 패턴으로 수정
- 한국어 테스트 데이터 확대: 200건 → 350건
- IDCARD(주민등록번호), CREDITCARDNUMBER, DRIVERLICENSENUM, USERNAME, COMPANY, BUILDINGNUM, DATEOFBIRTH 등 누락 유형 추가
- 종합 서류 시나리오 (계약서, 배송장 등 복합 PII 문서) 추가
2. 학습 데이터 보강 (Hard Negative + Augmentation)
- BUILDINGNUM Negative 3,000건: "회원 수 1,234명", "Total revenue: $4,567" 등 건물번호가 아닌 3~5자리 숫자 패턴
- 한국어 이메일 Augmentation 2,000건:
shin5349@kakao.com,minjun.kim@naver.com등 현실적 로마자 이메일 - 한국어 복합 PII Augmentation 2,000건: 이름+전화+주소가 함께 등장하는 계약서, 배송장, 이력서 시나리오
3. 후처리 검증(Validator) 강화
- BUILDINGNUM context-aware 필터링: 주변 50자에 "동", "번지", "building", "apt" 등 건물 관련 키워드가 없으면 제거
- Score threshold 필터링: BUILDINGNUM ≥0.90, STREET ≥0.80 등 저신뢰도 예측 차단
- STREET/ACCOUNTNUM validator: 최소 길이(3자) 및 포맷 검증 추가
- Span 경계 보정(correct_spans): EMAIL, IP_ADDRESS, TELEPHONENUM의 불완전한 span을 regex로 보정
4. 벤치마크 시스템 개선
benchmark.py의 FPR 평가에correct_spans적용하여 실제 운영 환경과 동일한 조건으로 측정
성과
| Metric | v1 | v2 | 변화 |
|---|---|---|---|
| Span F1 | 0.8788 | 0.9234 | +5.1%p |
| Korean F1 | 0.6842 | 0.9632 | +27.9%p |
| English F1 | 0.9168 | 0.9119 | -0.5%p |
| EMAIL F1 | 0.7408 | 0.9978 | +25.7%p |
| FPR | 5.33% | 0.33% | -5.0%p |
잔여 과제
- BUILDINGNUM 잔여 오탐 1건:
"Step 4100 of 1747 is now complete"→ BUILDINGNUM("1747", 0.974) - ACCOUNTNUM F1 0.75 — 다양한 한국 계좌번호 패턴 학습 필요
- STREET F1 0.83 — 한국 주소 체계 특화 학습 필요
- COMPANY F1 0.86 — 한국 기업명 데이터 보강 필요 (테스트 샘플 12건으로 적음)
Resources
- Full benchmark reports:
benchmarks/directory - Detailed changelogs:
changelogs/directory
License
Apache 2.0
- Downloads last month
- 266
