corpus-scrub 0.1.0: LLM 학습 전 학습 코퍼스에서 PII 및 비밀 정보 탐지 및 비식별화
요약
corpus-scrub 0.1.0은 LLM 학습 데이터 내의 개인정보(PII)와 비밀 정보를 탐지하고 비식별화하는 로컬 우선 CLI 도구입니다. 데이터를 외부로 전송하지 않고 로컬에서 정화하여 데이터 프라이버시와 규제 준수를 돕습니다.
핵심 포인트
- PII(이메일, 전화번호 등) 및 API 키와 같은 비밀 정보 탐지
- 데이터를 외부로 전송하지 않는 로컬 우선(Local-first) 방식
- mask, hash, drop 등 다양한 비식별화(Redaction) 옵션 제공
- Presidio 및 gitleaks 규칙을 활용한 높은 탐지 정확도 지향
- GDPR 및 EU AI Act 등 데이터 규제 대응에 용이
corpus-scrub 0.1.0: 학습 전 코퍼스에서 PII 및 비밀 정보 탐지 및 비식별화
모델은 학습 데이터에 포함된 내용을 암기하고 유출합니다.
corpus-scrub은 학습 전에 이를 정화합니다. PII (이메일, 전화번호, IBAN, 카드, 이름) 및 비밀 정보 (API keys, tokens)를 탐지하고, 어떤 서비스로도 데이터를 전송하지 않고 로컬에서 비식별화(redact)합니다.
문제점
웹에서 스크래핑한 코퍼스에는 개인 정보와 자격 증명이 일상적으로 포함되어 있습니다. 관련 문헌은 이를 명확히 보여줍니다:
- 실사-합성 혼합 데이터에서 프라이버시 위험을 증폭시키는 이미지 합성 모델 (arXiv 2607.13541)
- 파인튜닝 (fine-tuning) 과정에서의 민감 정보 비의도적 암기 (arXiv 2601.17480)
- PII 유출을 위한 유니버설 활성화 주소 (UniLeak) (arXiv 2602.16980)
GDPR과 EU AI Act 제10조는 동의 없는 비정형 개인 데이터를 학습 세트에 사용하는 것을 금지합니다. 저렴한 해결책은 학습 전에 코퍼스를 정화하는 것입니다.
기능
corpus-scrub은 JSONL/TXT/Parquet를 스캔하는 로컬 우선 (local-first) CLI (AGPL-3.0-or-later) 도구이며 다음과 같은 기능을 수행합니다:
- PII: Presidio (PERSON 탐지를 위한 spaCy
en_core_web_lgNER) + 모델에 의존하지 않고 모든 언어에서 작동하는 EMAIL / IBAN / CARD / PHONE용 자체 정규 표현식 (regex). - 비밀 정보 (Secrets): gitleaks (고정 커밋
4c232b5)에서 그대로 가져온 16개의 규칙 세트(ruleset)를 사용하며, 테스트 시 원본gitleaks.toml과 규칙별로 대조하여 검증합니다. - 비식별화 (Redaction):
mask(<TYPE>),hash(truncated sha256) 또는drop방식을 지원합니다. - 리포트: 유형별 개수와 위치를 포함하는 감사용 JSON을 생성합니다.
전용 spaCy _lg 모델을 통해 이름에 대한 다국어 지원(ES/DE/FR)을 제공하며, 명시적인 다국어 폴백 (fallback) 기능과 폴백이 실수로 사용될 경우 실패하는 테스트를 갖추고 있습니다.
작동 방식
# 설치
python -m venv .venv && source .venv/bin/activate
pip install -e .
...
범용 탐지기(이메일/전화번호/IBAN/카드)는 정규 표현식 (regex)을 사용하므로 모델이 필요하지 않으며 모든 언어를 지원합니다. PERSON에 대한 개체명 인식 (NER)은 영어 (EN)의 경우 Presidio를 사용하고, 스페인어 (ES)/독일어 (DE)/프랑스어 (FR)의 경우 spaCy를 직접 사용합니다.
솔직한 한계점
모든 것이 보장되는 것은 아니며, 이에 대해 문서화되어 있습니다:
- AC-1은 EMAIL, PERSON, CREDIT_CARD에 대해 재현율 (recall) >= 0.95를 보장합니다. PHONE 및 IBAN은 MVP 단계에서 보장되지 않습니다: Presidio가 전화번호를 임계값 미만으로 점수화하며, IBAN 인식기가 일부 영어 (EN) 형식에서 실패합니다. 이는 알려진 문제 (KNOWN_ISSUE)이며, 예상치 못한 상황이 아닙니다.
- 다국어 NER은 다운로드된
_lg모델을 요구합니다. 모델이 누락될 경우, 폴백 (fallback)을 통해 조용히 넘어가는 대신 정확도 테스트가 실패합니다.
감사 및 거버넌스
비밀 정보 규칙 세트 (ruleset)는 gitleaks 소스를 기준으로 규칙별 감사를 통과했습니다. 실제 차이점이 발견되어 수정되었습니다: pypi-upload-token 규칙이 실제 토큰의 고정된 base64 접두사 대신 와일드카드 (wildcard)를 사용하여 입증된 오탐 (false positives)을 생성하고 있었습니다. 수정 사항으로 포팅된 각 규칙을 fixture로 임베딩된 gitleaks.toml과 비교하는 테스트를 추가하여, 향후 발생하는 편차를 자동으로 감지할 수 있게 되었습니다.
테스트 커버리지: 82% (모델을 다운로드하지 않는 fast suite; _lg 모델을 사용하는 slow suite).
스택
| 구성 요소 | 용도 |
|---|---|
| Presidio + spaCy | PERSON NER (EN) |
| ... |
테스트해보기
git clone https://github.com/amurlaniakea/corpus-scrub
cd corpus-scrub
python -m venv .venv && source .venv/bin/activate
...
Repo: https://github.com/amurlaniakea/corpus-scrub
라이선스: AGPL-3.0-or-later. 저자: Pedro Sordo Martínez — amurlaniakea@gmail.com
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기