
텍스트 내 PII 탐지 및 마스킹을 위한 양방향 토큰 분류 모델로, 온프레미스에서 수정(redaction), 평가, 파인튜닝을 위한 CLI를 제공합니다.
OpenAI Privacy Filter는 텍스트 내 개인 식별 정보(PII) 탐지 및 마스킹을 위한 양방향 토큰 분류 모델입니다. 이는 팀이 온프레미스에서 실행할 수 있으면서 빠르고, 문맥을 인식하며, 조정 가능한 모델이 필요한 고처리량 데이터 정제 워크플로를 위해 설계되었습니다.
OpenAI Privacy Filter는 gpt-oss와 유사한 아키텍처를 가진 체크포인트에 도달하기 위해 자기회귀적으로 사전 학습되었으며, 크기는 더 작습니다. 그런 다음 해당 체크포인트를 프라이버시 레이블 분류 체계에 대한 양방향 토큰 분류기로 변환하고, 지도 분류 손실로 사후 학습했습니다. (gpt-oss의 아키텍처 세부 사항은 gpt-oss 모델 카드를 참조하세요.) 이 모델은 토큰 단위로 텍스트를 생성하는 대신, 단일 순방향 패스에서 입력 시퀀스에 레이블을 지정한 다음, 제약된 Viterbi 절차로 일관된 스팬을 디코딩합니다. 각 입력 토큰에 대해 모델은 아래에 설명된 8개의 출력 범주로 구성된 레이블 분류 체계에 대한 확률 분포를 예측합니다.
주요 특징:
이 저장소에는 Privacy Filter 체크포인트를 실행, 평가, 미세 조정하는 데 사용되는 로컬 코드, CLI, 예제 자산이 포함되어 있습니다. 구현을 직접 검토하고 자체 환경에서 모델을 운영하려는 팀을 위한 것입니다.
pip install -e .
이후 직접 실행하거나 python -m opf를 통해 실행할 수 있는 Python 스크립트 opf가 생성됩니다. 이 스크립트는 아래에 설명된 대로 세 가지 방식으로 사용할 수 있습니다.
기본적으로 opf는 OPF_CHECKPOINT 변수가 가리키는 디렉터리 또는 ~/.opf/privacy_filter에서 모델을 찾습니다. ~/.opf/privacy_filter 위치에서 모델을 찾지 못하면 다운로드됩니다.
opf "Alice was born on 1990-01-02."
이 코드는 GPU(기본값)와 CPU 모두에서 실행을 지원합니다. CPU에서 실행하려면 --device cpu 플래그를 사용하세요:
opf --device cpu "Alice was born on 1990-01-02."
기본 체크포인트를 재정의하려면 --checkpoint를 전달하세요:
opf --checkpoint /path/to/checkpoint_dir "Alice was born on 1990-01-02."
편집 모드는 전체 파일을 한 번에 편집하는 것을 지원합니다
opf -f /path/to/file
편집은 파이프를 통해서도 수행할 수 있어 복잡한 원라이너를 지원합니다:
cat /path/to/file | grep -e 'some_pattern' | opf
입력이 제공되지 않으면 opf는 대화형 모드로 시작합니다. 이 모드에서 CLI는 각 입력 예제에 대해 구조화된 JSON 출력을 인쇄하며, 터미널이 지원하는 경우 ANSI 색상 코드 미리보기를 사용합니다. 이러한 옵션은 플래그로 제어할 수 있습니다.
더 많은 플래그와 편집 모드에 대한 정보는 opf redact --help를 참조하세요.
opf eval examples/data/sample_eval_five_examples.jsonl
examples/data/sample_eval_five_examples*.jsonl 아래의 샘플 평가 픽스처는 합성 예제 데이터일 뿐이며 실제 인물이나 실제 민감 기록을 설명하지 않습니다. examples/data/README.md를 참조하세요.
더 많은 플래그와 평가 모드에 대한 정보는 opf eval --help를 참조하세요.
opf train /path/to/train.jsonl --output-dir /path/to/finetuned_checkpoint
더 많은 플래그와 미세 조정 모드에 대한 정보는 opf train --help를 참조하세요.
opf/__main__.py: redact, eval, train 모드를 위한 통합 CLI 진입점.opf/_api.py: 런타임 및 디코딩 스택에 대한 Python 지향 API.opf/_cli/: 명령줄 인수 파싱 및 터미널 렌더링 헬퍼.opf/_core/: 런타임 로딩, 스팬 변환, 공유 디코딩 로직.opf/_eval/: 데이터셋 로딩, 전처리, 메트릭, 평가 러너.opf/_train/: 로컬 미세 조정 인수 파싱 및 학습 러너.opf/_model/: 트랜스포머 구현, 체크포인트 구성, 가중치 로딩.examples/data/: 샘플 평가 파일과 재현 가능한 미세 조정 데모 데이터셋.examples/scripts/finetuning/: 실행 가능한 미세 조정 데모 하네스.FINETUNING.md: 집중적인 미세 조정 워크플로 및 데모 스크립트 가이드.OUTPUT_SCHEMAS.md: JSON 응답 및 내보내기 페이로드 형식.EVAL_AND_OUTPUT_MODES.md: 편집 및 평가를 위한 출력 모드 설명.Privacy Filter는 스팬 디코딩을 갖춘 양방향 토큰 분류 모델입니다. 자기회귀 사전 학습으로 시작하여 단계적으로 학습됩니다. 사전 학습된 언어 모델은 그런 다음 수정되어 밴드 크기 128(자기 자신을 포함한 유효 어텐션 윈도우: 257 토큰)의 양방향 밴디드 어텐션 토큰 분류기로 사후 학습됩니다. 이는 다음을 의미합니다:
아키텍처적으로 이 저장소의 구현은 다음과 같은 pre-norm 트랜스포머 인코더 스타일 스택입니다:
d_model = 640.반복적 자기회귀 접근 방식과 비교할 때, 이 설계는 모든 토큰에 한 번의 패스로 레이블을 지정할 수 있어 처리량을 향상시킵니다. 고전적인 마스크 언어 모델 사전 학습 접근 방식과 비교할 때, 이는 네이티브 마스크 LM 설정이 아닌 자기회귀 모델의 사후 학습 변환입니다.
Privacy Filter는 8개의 프라이버시 스팬 범주를 탐지할 수 있습니다:
account_numberprivate_addressprivate_emailprivate_personprivate_phoneprivate_urlprivate_datesecret토큰 분류를 수행하기 위해, 각 비배경 스팬 범주는 경계 태그가 지정된 토큰 클래스로 확장됩니다: B-<label>, I-<label>, E-<label>, S-<label>, 그리고 배경 클래스 O. 따라서 토큰 수준 출력 클래스의 총 수는 33개입니다: 1개의 배경 클래스 + 8개의 스팬 레이블 * 4개의 경계 태그 = 33개 클래스. 이는 출력 헤드가 각 토큰에 대해 33개의 로짓을 출력한다는 것을 의미합니다. 길이 T의 시퀀스의 경우 출력 형태는 [T, 33]이고, 크기 B의 배치의 경우 형태는 [B, T, 33]입니다.
토큰 레이블 어휘는 배경 레이블 O와 각 프라이버시 범주의 BIOES 태그 변형으로 구성됩니다: account_number, private_address, private_email, private_person, private_phone, private_url, private_date, secret. 즉, 각 범주에 대해 모델은 시작, 내부, 끝, 단일 토큰 스팬에 해당하는 B-, I-, E-, S- 형태를 예측합니다. 추론 시 이러한 토큰별 로짓은 제약된 시퀀스 디코딩을 사용하여 일관된 BIOES 스팬 레이블로 디코딩됩니다.
토큰 분류기가 토큰별 로짓을 생성한 후, 각 토큰에 대해 독립적인 argmax를 취하는 대신 선형 체인 전이 스코어링을 사용하는 제약된 Viterbi 디코더로 레이블을 디코딩합니다. 디코더는 허용된 BIOES 경계 전이를 강제하고 시작, 전이, 끝 항과 함께 배경 지속, 스팬 진입, 스팬 지속, 스팬 종료, 경계 간 핸드오프를 제어하는 6개의 전이 바이어스 파라미터로 완전한 레이블 경로를 스코어링합니다. 이 전역 경로 최적화는 각 토큰 결정이 로컬 로짓뿐만 아니라 시퀀스 수준 구조에 의존하도록 함으로써 스팬 일관성과 경계 안정성을 개선하는 것을 목표로 하며, 특히 로컬 토큰 결정만으로는 조각나거나 일관성 없는 경계를 생성할 수 있는 노이즈가 많거나 혼합 형식의 텍스트에서 유용합니다.
시퀀스 디코딩 파라미터는 배경에 머무르는 것을 억제하면서 스팬 진입과 지속을 장려하여 재현율 향상을 위해 더 넓고 연속적인 마스킹을 생성하거나, 반대로 정밀도 향상을 위해 조정할 수 있습니다. 런타임에 사용자는 이 트레이드오프를 제어하는 파라미터를 조정할 수 있습니다.
개발: OpenAI
자금 지원: OpenAI
공유: OpenAI
모델 유형: 프라이버시 스팬 탐지를 위한 양방향 토큰 분류 모델
언어: 주로 영어; 일부 다국어 견고성 평가 보고됨
라이선스: Apache 2.0
모델 카드: OpenAI Privacy Filter 모델 카드
Privacy Filter는 편집 및 데이터 최소화 보조 도구이며, 익명화, 규정 준수 또는 안전 보장이 아닙니다. 이 도구를 포괄적인 익명화 주장으로 과도하게 의존하면 원하는 프라이버시 목표를 놓칠 위험이 있습니다. Privacy Filter는 전체적인 엔드투엔드 프라이버시 바이 디자인 접근 방식의 여러 계층 중 하나로 사용하는 것이 가장 좋습니다.
이 모델은 학습된 레이블 분류 체계 및 정의와 일치하는 개인 데이터 스팬만 식별합니다. 실제 프라이버시 사용 사례는 다양하고 복잡하며 적절한 레이블 정책과 결정 경계의 정의는 다를 수 있습니다. 따라서 모델 기본값은 캘리브레이션/미세 조정 없이는 조직별 거버넌스 요구 사항을 충족하지 못할 수 있습니다.
Privacy Filter는 런타임에 레이블 정책을 동적으로 구성하는 것을 지원하지 않으며, 대신 정책을 변경하려면 모델의 추가 미세 조정이 필요합니다. 네이티브 레이블 세트와 관련 결정 경계는 모든 사용 사례에 적합하지 않을 수 있습니다. 예를 들어, 모델의 학습 정책은 개인 식별자를 우선시하는 것을 목표로 하며, 설계상 강하게 개인과 연결되지 않은 컨텍스트를 종종 보존합니다. 일부 사용자는 이 선택을 조정하고 싶을 수 있습니다.
비영어 텍스트, 비라틴 문자, 보호 그룹 명명 패턴 또는 모델 학습과 비교하여 분포를 벗어난 도메인에서는 성능이 저하될 수 있습니다.
모든 모델과 마찬가지로 Privacy Filter는 실수를 할 수 있습니다. 예를 들어: 드문 개인 이름, 지역 명명 관습, 이니셜, 경칭이 많은 지칭 또는 도메인별 식별자의 과소 탐지; 로컬 컨텍스트가 모호할 때 공공 기관, 조직, 위치 또는 일반 명사의 과잉 편집; 혼합 형식 텍스트, 긴 문서 또는 구두점과 레이아웃 아티팩트가 많은 텍스트에서 조각나거나 이동된 스팬 경계; 새로운 자격 증명 형식, 프로젝트별 토큰 패턴 또는 주변 구문에 걸쳐 분할된 비밀에 대한 비밀 누락; 그리고 비밀과 유사한 무해한 고엔트로피 문자열, 자리 표시자, 해시, 샘플 자격 증명 또는 합성 예제의 과잉 편집.
이러한 한계는 인구통계학적, 지역적, 도메인 변이와 상호 작용할 수 있습니다. 예를 들어, 학습 데이터에서 과소 대표되거나 지배적인 학습 분포와 다른 관습을 따르는 이름과 식별자는 누락되거나 일관성 없이 경계가 지정될 가능성이 더 높을 수 있습니다.
의료, 법률, 금융, 인사, 교육, 정부 워크플로와 같은 고민감도 설정에서는 추가적인 주의가 필요합니다. 이러한 설정에서는 거짓 음성과 거짓 양성 모두 비용이 많이 들 수 있습니다: 누락된 스팬은 민감한 정보를 노출할 수 있고, 과도한 마스킹은 검토, 감사 또는 다운스트림 의사 결정에 필요한 중요한 컨텍스트를 제거할 수 있습니다.