Privacy Parser: OpenAI 1.5B 개인정보 보호 모델을 역이용한 PII 구조화 추출 라이브러리

Privacy Parser 소개

OpenAI에서는 최근 텍스트에서 개인 식별 정보(PII, Personally Identifiable Information)를 탐지하고 마스킹하는 Privacy Filter 모델을 공개한 바 있습니다. (관련 글: OpenAI Privacy Filter: 텍스트에서 개인정보를 탐지하고 마스킹하는 양방향 토큰 분류 모델) 이 1.5B 파라미터 모델은 텍스트 내의 이름, 이메일, 전화번호, 주소 등의 민감한 정보를 <REDACTED> 토큰으로 대체하는 방어(Defense) 도구로 설계되었습니다. 그러나 모든 방어 도구에는 반대편이 존재합니다. 데이터 유출 사고 조사, 포렌식 분석, 개인정보 감사 등의 작업에서는 마스킹이 아닌 추출이 필요합니다. 로그 파일, 데이터베이스 덤프, 유출된 메일함 등에서 어떤 개인정보가 노출되어 있는지 구조화된 형태로 파악해야 할 때, Privacy Filter의 마스킹 출력은 오히려 필요한 정보를 숨겨버립니다.

Privacy Parser는 OpenAI Privacy Filter와 동일한 1.5B 모델, 동일한 레이블 분류 체계, 동일한 가중치를 사용하면서 출력 방향을 반전시킨 라이브러리입니다. <REDACTED> 대신 무엇이, 어디에, 어떤 유형으로 있는지를 구조화된 스팬(span) 형태로 반환합니다. Privacy Filter가 방어(Defense) 도구라면, Privacy Parser는 감사(Audit) 도구입니다. 같은 모델을 사용하므로 Privacy Filter가 탐지할 수 있는 모든 유형의 PII를 동일한 정확도로 추출할 수 있습니다.

Privacy Parser는 세 가지 백엔드를 제공합니다. 규칙 기반 PIIParser 는 마이크로초 단위의 초고속 처리가 가능하며 F1 1.000을 달성하지만 사전 정의된 패턴에만 작동합니다. ModelPIIParser 는 1.5B 모델만 사용하며 CPU에서 약 500ms, F1 0.733의 성능을 보입니다. HybridPIIParser 는 모델 추론, 스팬 병합, 정규식 백스톱을 결합하여 CPU 기준 약 600ms에 F1 0.929를 달성합니다. 실제 배포 환경에서는 HybridPIIParser 사용이 권장됩니다.

Privacy Parser의 동작 원리와 아키텍처

Privacy Parser의 핵심은 OpenAI Privacy Filter(OPF) 1.5B 모델의 토큰 분류 출력을 역방향으로 활용하는 파이프라인입니다. 모델은 각 토큰에 대해 BIOES(Beginning, Inside, Outside, End, Single) 형식의 로짓(logit)을 출력하고, 비터비(Viterbi) 알고리즘이 최적 시퀀스 레이블을 결정합니다.

입력 텍스트
     ↓
OPF 1.5B 모델 → BIOES 로짓 출력
     ↓
Viterbi 디코딩 (튜닝된 전이 확률)
     ↓
문자 스팬(char spans) 추출
     ↓
스팬 병합 (예: "Quindle" + "Testwick" → "Quindle Testwick")
     ↓
정규식 백스톱 (URL, 비밀번호, 계좌번호 — 모델이 놓친 경우 보완)
     ↓
spans[] 반환

스팬 병합(span-merge) 단계는 모델이 분리된 토큰으로 인식한 복합 엔티티를 하나의 스팬으로 합칩니다. 예를 들어 성과 이름을 별개 토큰으로 처리한 경우, 인접한 동일 유형 스팬을 병합해 완전한 이름을 복원합니다. 정규식 백스톱은 URL, 비밀번호, 계좌번호처럼 모델이 놓치기 쉬운 구조화된 형태의 PII를 추가로 탐지합니다.

Privacy Parser의 PII 레이블 체계

Privacy Parser는 OPF v2 분류 체계를 따르는 8가지 PII 카테고리를 지원합니다.

  • private_person: 개인 이름 (성명)
  • private_email: 이메일 주소
  • private_phone: 전화번호
  • private_address: 물리적 주소
  • private_url: 개인 URL (프로필 링크 등)
  • private_date: 생년월일 등 개인 관련 날짜
  • account_number: 계좌번호, 카드번호 등 금융 식별자
  • secret: 비밀번호, API 키 등 기밀 정보

Privacy Parser 설치 및 사용법

설치는 uv 패키지 매니저를 권장합니다. 첫 실행 시 OPF 1.5B 체크포인트(약 3GB)가 ~/.opf/privacy_filter/ 경로에 자동 다운로드됩니다.

uv venv
uv pip install -e ./privacy-filter
uv pip install -e ./pii_parser

Python API 사용 예시:

from pii_parser.hybrid import HybridPIIParser

parser = HybridPIIParser(device="cpu")
result = parser.parse(
    "Hi Quindle Testwick (quindle.testwick@openai.com / +1-415-555-0102), "
    "account 40702810500001234567, 14 Beautiful Ct, Anytown USA, "
    "password Priv4cy-Filt3r-2026."
)
for s in result.spans:
    print(f"{s.label:18} {s.text}")

출력 결과:

private_person     Quindle Testwick
private_email      quindle.testwick@openai.com
private_phone      +1-415-555-0102
account_number     40702810500001234567
private_address    14 Beautiful Ct, Anytown USA
secret             Priv4cy-Filt3r-2026

CLI 사용:

python -m pii_parser.cli_model "Alice paid 40702810500001234567 on 2026-05-17."

세 가지 백엔드 성능 비교:

백엔드 모델 가중치 처리 속도 F1
PIIParser 없음 (규칙 기반) 마이크로초 1.000
ModelPIIParser OPF 1.5B ~500ms (CPU) 0.733
HybridPIIParser OPF 1.5B ~600ms (CPU) 0.929

벤치마크를 직접 실행하려면 다음 명령을 사용합니다.

python pii_parser/tests/test_hybrid.py
# 결과: Fixture F1: 0.929, Scenarios: 8/8 passed, Latency: ~600ms CPU

라이선스

Privacy Parser 프로젝트는 Apache 2.0 라이선스로 공개되어 있어 개인 및 상업적 목적으로 자유롭게 사용, 수정, 배포할 수 있습니다.

:github: Privacy Parser 프로젝트 GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

1개의 좋아요