CoolFace
Modelpublic

querypieai/dlp-tier2-ko-electra-auto-f2

sourceHugging Faceapache-2.0updated 10d agoView on Hugging Face
0likes19downloads
Model Card

한국어 ELECTRA Tier2 DLP 분류기

이 모델은 DLP 파이프라인 2단계에서 사용하는 한국어 시퀀스 분류기입니다. monologg/koelectra-small-v3-discriminator를 기반으로 KO2 hard-negative 병합 데이터셋으로 파인튜닝했습니다.

Tier2의 의미

여기서 "Tier2"는 모델 아키텍처나 버전을 뜻하지 않고, DLP 검출 파이프라인의 두 번째 단계를 뜻한다.

단계역할방식
Tier 11차 후보 탐지보안 규칙, 정규표현식, 키워드/문자열 매칭 등 빠른 규칙 기반 필터
Tier 21차 후보 재검토본 모델과 같은 문맥 분류 모델로 유출 위험 여부를 재판정

이 모델은 Tier 1이 이미 후보로 분류했거나 정책상 추가 검토가 필요한 텍스트를 입력받는 것을 전제로 설계되었다. 일반 문서 전체를 무조건 이 모델로 직접 분류하는 용도가 아니라, 규칙 기반 1차 필터 이후의 정밀 재검토 단계에서 사용한다.

레이블

레이블 ID의미
0benign
1leakage_risk

레이블 이름은 작업 이해를 위한 설명용 메타데이터입니다. 학습과 추론 코드에서는 정수 레이블을 사용합니다.

용도

1차 DLP 필터가 표시했거나 2차 검토로 이관한 텍스트를 재검토할 때 사용합니다. 문장 또는 문단 수준의 위험도 분류를 위한 모델이며, 개체의 문자 범위를 추출하지 않습니다. 실제 운영에서는 청킹, 임계값, 정책 로직과 함께 사용해야 합니다.

입력과 출력

입력

  • —UTF-8 한국어 텍스트 한 개를 입력합니다. 일반적으로 문장 또는 청크 단위입니다.
  • —프롬프트 템플릿은 필요하지 않습니다. 텍스트를 그대로 전달합니다.
  • —긴 문서는 추론 전에 나눠야 합니다. 권장 파이프라인은 192자 청크와 48자 겹침을 사용하고 각 청크를 독립적으로 평가합니다.
  • —각 청크는 truncation=True, padding=True, max_length=256으로 토크나이즈합니다.
  • —작업 지시문, 챗 템플릿, 대화 이력은 함께 입력하지 않습니다.

출력

모델은 입력 청크마다 클래스 logits를 반환합니다.

  • —logits[0]: benign 클래스 점수 (레이블 ID 0)
  • —logits[1]: leakage_risk 클래스 점수 (레이블 ID 1)

softmax를 적용해 클래스 확률을 계산합니다. 권장 양성 클래스 확률은 probabilities[1]입니다. 이 값이 결정 임계값 이상이면 해당 청크를 leakage_risk로, 그보다 낮으면 benign으로 분류합니다.

다중 청크 문서에서는 프로젝트 파이프라인이 청크 점수의 최댓값을 문서 위험 점수로 사용한 뒤 동일한 임계값을 적용합니다. 모델 자체는 여러 청크를 집계하지 않습니다.

모델 로드와 사용

  • —필요 패키지: transformers, torch
  • —토크나이저와 분류 모델은 동일한 저장소 또는 로컬 디렉터리에서 로드합니다.
  • —표준 AutoTokenizer와 AutoModelForSequenceClassification 인터페이스를 사용하며, trust_remote_code나 커스텀 Python 코드가 필요하지 않습니다.
  • —추론 전에 model.eval()을 호출하고, 운영 추론에서는 gradient 계산을 비활성화합니다.
  • —단일 예시 권장 설정은 truncation=True, padding=True, max_length=256입니다.
  • —HF Hub에서 로드할 때는 querypieai/dlp-tier2-ko-electra-auto-f2 저장소 ID를 사용합니다. 오프라인 사용 시 이 모델카드가 포함된 로컬 디렉터리 경로를 사용합니다.

권장 추론 설정

  • —결정 임계값: 양성 클래스 확률 기준 0.30
  • —최대 시퀀스 길이: 256
  • —파이프라인 청크 크기: 192
  • —파이프라인 겹침: 48

임계값은 검증 데이터에서 recall_min=0.9, false_positive_rate_max=0.2 제약이 있는 F2 목표로 선택했습니다. 임계값은 모델 보정 파라미터가 아니라 확률 계산 이후에 적용하는 정책 결정입니다.

학습 설정

  • —기반 모델: monologg/koelectra-small-v3-discriminator
  • —학습 데이터: KO2 hard-negative 병합 데이터셋
  • —데이터 공개 여부: 비공개. 이 저장소에는 학습 데이터가 포함되어 있지 않습니다.
  • —학습/검증/테스트 크기: 25,979 / 3,775 / 3,772 문서
  • —데이터 분할 중 양성(leakage_risk) 비율: 학습 6.94%, 검증 9.99%, 테스트 9.97%
  • —텍스트 중복 제거: NFKC, 공백 정규화, 대소문자 접기 기반 SHA-256
  • —분할 간 정규화 텍스트 및 대화 단위 누수 검사: 모두 0
  • —최적화 trial 수: 12
  • —목표: recall 및 false positive rate 제약이 있는 F2
  • —학습률: 4.191505350515941e-05
  • —배치 크기: 32
  • —에폭: 5
  • —최대 길이: 256
  • —weight decay: 0.01
  • —warmup ratio: 0.0

평가

임계값 0.30에서 테스트 성능:

지표값
Accuracy0.9894
Precision0.9264
Recall0.9707
F10.9481
F20.9615
False positive rate0.0085
False negative rate0.0293

선택된 임계값과 최종 구성에서 검증 성능:

지표값
Accuracy0.9605
Precision0.7209
Recall0.9867
F10.8331
F20.9190
False positive rate0.0424
False negative rate0.0133

검증과 테스트 F1 차이가 큽니다. 운영 차단 기준으로 사용하기 전에 분할별 문체 편차와 그룹 구성을 점검해야 합니다.

추론 예시

python
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch

model_id = "querypieai/dlp-tier2-ko-electra-auto-f2"
threshold = 0.30

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSequenceClassification.from_pretrained(model_id)
model.eval()

text = "여기에 검사할 문장을 입력합니다."
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=256, padding=True)

with torch.no_grad():
    logits = model(**inputs).logits

positive_probability = torch.softmax(logits, dim=-1)[0, 1].item()
prediction = "leakage_risk" if positive_probability >= threshold else "benign"
print({"score": positive_probability, "prediction": prediction})

한계

  • —이 모델은 이진 위험 분류기이며 PII 개체 위치 정보를 반환하지 않습니다.
  • —성능은 프로젝트 KO2 검증/테스트 세트 기준으로 측정되었습니다. 운영 환경에서는 도메인, 문체, 정책에 따라 달라질 수 있습니다.
  • —일반 업무 메시지, 난독화되었거나 일부만 표현된 식별자에서 오탐이 발생할 수 있습니다.
  • —익숙하지 않은 식별자나 변경된 난독화 패턴에서 미탐이 발생할 수 있습니다.
  • —중요한 결정에는 사람 검토 또는 추가 판정 단계를 함께 사용하세요.