# ============================================================================= # Label Mapping - ai4privacy 1.5m 라벨 -> 내부 학습 라벨 매핑 테이블 # # * 역할: 모델 학습 라벨 = 로깅 스키마 키 = 정책 테이블 키의 단일 소스 # (docs/handoff/2026-07-03-pii-masking-architecture-qna.md [13]) # * 역산 근거: playbooks/privacy_filter/privacy-filter-policy.md (표 1 정형 패턴 / 표 2 마스킹 기준) # * 실측 근거: docs/handoff/2026-07-03-ai4privacy-1p5m-ko-audit.md (v0 초안 + ko 서브셋 감사) # * v0 -> v1 변경: 주소 처리 확정(단일+서브마스킹) / FRN 신설 / USER_ID·ACCOUNT_NUMBER # 드롭 철회 / 여권·운전면허 분리 유지 / regex 전담 항목 분리 # * 2026-07-21: AGE·GENDER 드롭 확정 (표1·표2 무근거 - 정책 역산 원칙 관철, N=17 -> 15) # * 2026-07-21: 표2 문맥 항목 3종 모델 승격 (CARD_EXPIRY·CVC·IPIN - 문맥 검출은 모델 레인 # 본령, 키워드 regex는 이중 레인 병행. N=15 -> 18, 61 -> 73클래스) # ============================================================================= version: v1 date: 2026-07-21 basis: policy: playbooks/privacy_filter/privacy-filter-policy.md audit: docs/handoff/2026-07-03-ai4privacy-1p5m-ko-audit.md # ----------------------------------------------------------------------------- # 1. 모델 학습 라벨 (N=18 -> BIOES 4N+1 = 73클래스) # * data_source: 라벨 표본의 출처 리스트 - ko(1.5m-ko 정제본) / en(1.5m-en 리플레이) / # domain(도메인 부트스트랩 대기 - 헤드는 유사 라벨 행 복사로 init) # * RRN의 1.5m 유래분은 ko 한정 (en TAXNUM은 GENERIC_ID fallback) - domain은 증강 방식 B # * en 분포 실측 (2026-07-13, 163,740행/1,247,393스팬): 상위 19종 집중 - PASSWORD 0, # ACCOUNTNUM 1, USERNAME 20 -> "희소 라벨은 en 담당" 가설 기각, [domain] 재배정 # ----------------------------------------------------------------------------- model_labels: - name: PERSON description: 성명 (성+이름 병합 단일 스팬) policy_ref: "표2 성명 (김*용 - 첫·끝 글자 제외) / 표2 성명(영문) (앞 4자리 노출) - 치환 시 스크립트(한글/영문)로 규칙 분기, full-span 경계 필수" data_source: [ko, en] head_init_base: private_person - name: RRN description: 주민등록번호 policy_ref: "표1 주민번호 / 표2 주민등록번호 (뒤 7자리 마스킹)" data_source: [ko, domain] # domain = 증강 방식 B 신규 생성분 (전략문 §3.3.1) head_init_base: account_number - name: FRN description: 외국인등록번호 (신설 - 1.5m 소스 0건) policy_ref: "표1 외국인등록번호 ([5-8] 시작) / 표2 주민등록번호(외국인등록번호 포함) (뒤 7자리)" data_source: [domain] head_init_from: RRN - name: CARD_NUMBER description: 신용/체크카드 번호 policy_ref: "표1 카드번호 / 표2 카드번호 (7~12번째 자리, PCI-DSS)" data_source: [ko, en, domain] # domain = 증강 방식 B 신규 생성분 (전략문 §3.3.1) head_init_base: account_number - name: ACCOUNT_NUMBER description: 계좌번호 (v0 드롭 철회 - 표2 마스킹 기준 존재) policy_ref: "표1 계좌번호 (전화번호 흡수 위험 - recognizer 우선순위 필요) / 표2 계좌번호 (뒤 5자리)" data_source: [domain] # ko 5·en 1건 실측 - 합성 증강 필수 (은행별 포맷 규칙 생성 용이) head_init_base: account_number - name: SECRET description: 인증 시크릿 (비밀번호·API 키·토큰 통합 - 카드/회원/ISP 구분은 문맥 불가 + 액션 동일) policy_ref: "표2 카드비밀번호·온라인 회원 패스워드·ISP비밀번호 (처리 금지 -> 게이트웨이에서는 LLM 노출 금지 = 전체 마스킹으로 해석)" data_source: [domain] # 1.5m 전무 (ko 4·en 0 실측) - 도메인/합성 증강 전담 head_init_base: secret # base 8종 중 secret 행 정확 복사 (인접 아닌 직계 상속) - name: USER_ID description: 온라인 회원 ID (v0 드롭 철회 - 표2 마스킹 기준 존재) policy_ref: "표2 온라인 회원 ID (앞 2자리 제외)" data_source: [domain] # ko 4·en 20건 실측 - 증강 필수 head_init_base: account_number - name: EMAIL description: 이메일 주소 policy_ref: "표1 이메일 / 표2 이메일주소 (ID 앞 2자리 제외 마스킹)" data_source: [ko, en] head_init_base: private_email - name: PHONE description: 전화번호 (휴대폰/일반전화 통합 - 치환 단계에서 프리픽스로 재분류) policy_ref: "표1 휴대폰번호·전화번호 / 표2 기본 뒤 6자리 공통 - 내부망 채널 한정 휴대폰 뒤 4자리 완화 (치환 시 값 프리픽스로 휴대폰 판별 + 채널 축 분기)" data_source: [ko, en] head_init_base: private_phone - name: PASSPORT description: 여권번호 (분리 유지 - 마스킹 기준 상이 + ko 3,211건) policy_ref: "표1 여권번호 / 표2 여권번호 (뒤 4자리)" data_source: [ko, en] head_init_base: account_number - name: DRIVER_LICENSE description: 운전면허번호 (분리 유지 - 마스킹 기준 상이 + ko 4,092건) policy_ref: "표1 운전면허번호 / 표2 운전면허번호 (중간 6자리)" data_source: [ko, en] head_init_base: account_number - name: GENERIC_ID description: 범용 식별자 (한국 대응물 없는 ID류 - recall-first로 O 대신 유지) policy_ref: "audit §5 (SOCIALNUM 10자리·IDCARDNUM 영숫자)" data_source: [ko, en] head_init_base: account_number - name: ADDRESS description: 주소 (시·도로명·건물번호 통합 스팬 - 치환 단계에서 숫자 서브마스킹) policy_ref: "표2 주소 (지번: 읍/면/동 미만 숫자 / 도로명: 건물번호·상세주소 숫자 마스킹 -> 스팬 내 규칙 치환)" data_source: [ko, en] head_init_base: private_address - name: ZIPCODE description: 우편번호 (분리 유지 - keep 토글 세분성 전제) policy_ref: "handoff [10] ZIPCODE keep 실증" data_source: [ko, en] head_init_base: private_address - name: DATE description: 날짜·시각 (생년월일 미분리 - ko 데이터 DOB 0건 + 과잉 마스킹 준수 인정 조항) policy_ref: "표2 생년월일 (노출 금지 - DATE 전체 마스킹으로 초과 준수)" data_source: [ko, en] head_init_base: private_date - name: CARD_EXPIRY description: 카드유효기한 (표2 문맥 항목 승격 2026-07-21 - 키워드 regex 이중 레인 병행) policy_ref: "표2 카드유효기한 (**/** 전체 마스킹)" data_source: [domain] # 1.5m 원천 0건 - 증강 전담 (PAN 동반 문맥 생성) head_init_base: private_date - name: CVC description: 카드검증코드 (CVC/CVV/CAV 통합 - 표2 문맥 항목 승격 2026-07-21) policy_ref: "표2 카드검증코드 (저장·출력 금지 -> 게이트웨이 전체 마스킹 해석)" data_source: [domain] # 1.5m 원천 0건 - 증강 전담 (단독 생성 금지 - PAN 동반 필수) head_init_base: account_number - name: IPIN description: I-PIN 번호 (표2 문맥 항목 승격 2026-07-21 - 값 규격 pending) policy_ref: "표2 I-PIN (뒤 5자리 - 하이픈 무관 숫자 기준)" data_source: [domain] # 1.5m 원천 0건 - 규격 확정 전 파일럿 수량만 head_init_base: account_number # ----------------------------------------------------------------------------- # 2. 소스 라벨 매핑 (ai4privacy 1.5m -> 내부 라벨) # * "O" = 학습에서 비엔티티 처리 (드롭 리스트 - 정책팀 컨펌 후 확정) # * 조건부 매핑은 locale + value_pattern 안전장치 동반 # ----------------------------------------------------------------------------- source_mapping: # GIVENNAME: PERSON SURNAME: PERSON TITLE: O # 군/양/gun/yang 직역 존칭 88% - 전량 드롭 TAXNUM: label: RRN # condition: locale: ko value_pattern: '^\d{6}-[1-4]\d{6}$' # 실측 3,975/3,975 정합 - 안전장치 fallback: GENERIC_ID # 비정합 값 / 타 로케일(en 리플레이)은 세무 ID -> 범용 ID SOCIALNUM: GENERIC_ID IDCARDNUM: GENERIC_ID DRIVERLICENSENUM: DRIVER_LICENSE PASSPORTNUM: PASSPORT TELEPHONENUM: PHONE EMAIL: EMAIL CREDITCARDNUMBER: CARD_NUMBER ACCOUNTNUM: ACCOUNT_NUMBER CITY: ADDRESS STREET: ADDRESS BUILDINGNUM: ADDRESS ZIPCODE: ZIPCODE DATE: DATE TIME: DATE AGE: O # 2026-07-21 드롭 확정 - 표1·표2 무근거 (quasi-identifier 존치안 폐기) GENDER: O # 〃 SEX: O # 〃 (GENDER 중복 소스) USERNAME: USER_ID PASSWORD: SECRET # ko 4·en 0건 - 시드 미미, 본 표본은 도메인/합성 증강 # 롱테일 (ko <= 40건, 학습 라벨 부적격) - 정책팀 컨펌 대기 드롭 리스트 ORGANISATION: O URL: O AMOUNT: O COUNTRY: O CURRENCY: O BANKNAME: O TIMEZONE: O SALARY: O IPV4: O # 고객 IP는 표2 항목이나 ko 2건 - 1차 regex(표1 IP주소) 전담 JOBTITLE: O HOSPITALNAME: O ALLERGIES: O WEIGHT: O # en 전용 라벨 (ko 0건) - 2026-07-13 en 전수 검증에서 발견, 정책 외 HEIGHT: O # validation 전용 희소 라벨 (ko 1건 + en 1건) - 2026-07-22 refine fail-fast로 발견, 정책 외 # ----------------------------------------------------------------------------- # 3. 병합 규칙 (정제 스크립트 2단계 - 인접 스팬 병합, ko·en 공통) # * 병합은 언어 공통 (en "John Smith"도 단일 스팬이어야 표2 영문 성명 규칙 성립) # * ko 전용은 병합이 아니라 그 다음의 "자연화"(성+명 붙여쓰기 - 전략문 §3.4.2 (1) 2단계) # * 순서 강제 금지: ko 주소는 큰 -> 작, en 주소는 작 -> 큰 역순 - 인접성만 조건 # # * gap_allowed : 두 엔티티 사이의 인식·허용이 가능한 구조 및 패턴 # - whitespace (공백·탭) # - punct (구두점 : `, . - · / ( )` 등 문장 부호) # ----------------------------------------------------------------------------- merge_rules: # person: source_labels: [GIVENNAME, SURNAME] max_gap_chars: 4 gap_allowed: whitespace_or_punct output_label: PERSON address: source_labels: [CITY, STREET, BUILDINGNUM] max_gap_chars: 4 gap_allowed: whitespace_or_punct output_label: ADDRESS # ----------------------------------------------------------------------------- # 4. 1차 regex 전담 항목 (모델 라벨 제외 - 로깅 스키마 키에는 포함) # * 표1 정형 패턴 recognizer가 검출, 치환 정책은 표2 준용 # ----------------------------------------------------------------------------- regex_only: - key: CI policy_ref: "표1 CI (86자+`==` 고정, lookaround 경계 - 검수 보강 2026-07-21) / 표2 CI (앞 7자리 노출)" # SHA-512 base64 동형 과탐 허용 - 정밀도 필요시 ci·연계정보 키워드 가점 - key: IP_ADDRESS policy_ref: "표1 IP주소 (옥텟 0~255 엄격형 - 검수 보강 2026-07-21) / 표2 고객의 IP주소 (앞 3자리 = 첫 옥텟 마스킹 해석, IPv4 한정)" # ----------------------------------------------------------------------------- # 4-1. 1차 regex 병행 (이중 레인) - 모델 라벨이면서 키워드 regex도 병행 # * 2026-07-21 모델 승격 3종: 키워드 regex(고정밀 저recall - 명시 문형) + 모델(무키워드 # 맥락 recall) union - 문맥 의존 검출은 모델 레인의 존재 이유 # * 패턴 엔진 전제: Python re (lookbehind 사용 - RE2/Hyperscan 계열 비호환) # * 치환은 값 캡처그룹만 (키워드 보존 = 추적성) # ----------------------------------------------------------------------------- regex_assist: - key: CARD_EXPIRY patterns: keyword: '(?i)(유효\s*기[간한]|expir\w*|valid\s*thru)\D{0,12}(0[1-9]|1[0-2])\s*[/.\-]\s*((?:20)?\d\d)(?!\d)' pan_adjacent: '(0[1-9]|1[0-2])\s*/\s*\d{2}(?!\d)' # 카드번호 매치 직후 \D{0,20} 윈도우 내에서만 적용 - key: CVC patterns: 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)' # CID·CSC 키워드 기본 제외 (correlation ID 충돌). 정밀도 옵션: PAN co-occurrence 게이트 - key: IPIN patterns: keyword: '(?i)(아이핀|i[-\s]?pin)\s*(?:번호|no\.?)?\D{0,8}(\d{6}[-\s]?\d{7})(?!\d)' # 주민번호 규칙 선행 적용 후 잔여분만 IPIN. 값 규격(13자리 가정) 확인 필요 (pending) # ----------------------------------------------------------------------------- # 5. 스코프 외 - 텍스트 게이트웨이가 다루지 않는 표2 항목 (선언적 기록) # ----------------------------------------------------------------------------- out_of_scope: - key: VIDEO_PERSONAL_INFO policy_ref: "표2 개인영상정보 (검정 목적 외 처리 금지)" reason: "텍스트 엔티티가 아닌 모달리티(이미지·영상) - 멀티모달 입력 경로가 열리면 텍스트 필터를 우회하므로 별도 통제(입력 차단 or 비전 필터) 필요" # ----------------------------------------------------------------------------- # 6. 미결 - 정책팀 컨펌 항목, TBD # ----------------------------------------------------------------------------- pending_confirmation: - "드롭 리스트(O 매핑) 전체 = 비PII 선언 - 특히 ORGANISATION·AMOUNT·SALARY" - "IPIN 값 규격 (13자리 가정) - 제공기관 계약 확인 (CVC 검출 규칙은 2026-07-21 키워드 동반 패턴 채택으로 해소)" - "SECRET 신설 채택 (2026-07-13) - 표2 처리금지류의 '게이트웨이 전체 마스킹' 해석은 정책팀 사후 컨펌 대상"