OpenAIが公開している OpenAI Privacy Filter は、テキスト中の個人情報・機密情報らしき箇所を検出し、マスキングするためのモデル/CLIツールです。
GitHubリポジトリには、ローカルでPrivacy Filterを実行・評価・ファインチューニングするためのコード、CLI、サンプルデータが含まれています。
AIアプリケーションやLLM連携システムでは、ログ、問い合わせ内容、社内文書、RAG用ドキュメントなどに個人情報が混ざることがあります。
Privacy Filterは、そうしたデータをモデル投入前・保存前・分析前にサニタイズする用途で使えそうです。
Privacy Filterとは
OpenAI Privacy Filterは、PII、つまり personally identifiable information の検出とマスキングを目的とした 双方向トークン分類モデル です。高スループットなデータサニタイズ用途を想定しており、オンプレミス環境でも動かせることが特徴です。
特徴として、以下が挙げられます。
- Apache 2.0ライセンス
- ローカル環境で実行可能
- CLIから簡単に利用可能
- 評価用コマンドを提供
- 独自データでファインチューニング可能
- 128,000トークンの長文コンテキストに対応
- precision / recall のトレードオフをランタイムで調整可能
モデルは、テキスト生成ではなく、入力トークン列に対してプライバシー関連ラベルを一括で付与する仕組みです。トークンごとの分類結果から、Viterbiデコーダーによって一貫したスパンを復元します。
検出できるカテゴリ
READMEによると、Privacy Filterは以下の8カテゴリのプライバシースパンを検出します。
| ラベル | 内容のイメージ |
|---|---|
account_number |
口座番号、アカウント番号など |
private_address |
個人住所 |
private_email |
メールアドレス |
private_person |
個人名 |
private_phone |
電話番号 |
private_url |
個人に紐づくURL |
private_date |
生年月日などの個人に関係する日付 |
secret |
APIキー、トークン、認証情報など |
単純な正規表現では拾いにくい「文脈上の個人情報」も対象にできる点が、一般的なルールベースのマスキング処理との大きな違いです。
インストール
リポジトリをcloneして、ローカルパッケージとしてインストールします。
git clone https://github.com/openai/privacy-filter.git
cd privacy-filter
pip install -e .
インストール後は、opf コマンド、または python -m opf で実行できます。
まずはワンショットで試す
opf "Alice was born on 1990-01-02."
デフォルトでは、OPF_CHECKPOINT 環境変数で指定されたディレクトリ、または ~/.opf/privacy_filter にあるモデルを探します。
モデルが見つからない場合は、デフォルトの場所にダウンロードされます。
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."
ファイルをまとめてマスキングする
ファイルを対象にする場合は、-f を使います。
opf -f /path/to/file
パイプにも対応しているため、既存のUNIXコマンドと組み合わせられます。
cat /path/to/file | grep -e 'some_pattern' | opf
この使い方は、ログ処理やバッチ処理に組み込みやすそうです。
たとえば、問い合わせログから特定条件の行だけ抽出して、その後に個人情報をマスクする、といったパイプラインを作れます。
cat app.log \
| grep "support_request" \
| opf \
> sanitized_support_requests.log
評価もできる
Privacy Filterには、ラベル付きデータセットを使った評価モードも用意されています。
opf eval examples/data/sample_eval_five_examples.jsonl
サンプルデータは examples/data/ 以下に含まれています。
独自の業務データに対して導入する場合は、まず自社のデータ分布に近い評価データを作り、検出漏れ・過検出を確認するのがよさそうです。
ファインチューニングも可能
独自のラベル付きデータを使ってファインチューニングできます。
opf train /path/to/train.jsonl --output-dir /path/to/finetuned_checkpoint
デフォルトのラベルポリシーが自社の要件に合わない場合、たとえば「住所は必ず伏せたい」「日付は残したい」「社内IDもsecret扱いにしたい」といったケースでは、評価とファインチューニングを組み合わせる必要があります。
Python / Transformersから使う
Hugging Face上のモデルカードでは、transformers の pipeline から使う例も紹介されています。
from transformers import pipeline
classifier = pipeline(
task="token-classification",
model="openai/privacy-filter",
)
result = classifier("My name is Alice Smith")
print(result)
AutoModelForTokenClassification と AutoTokenizer を直接使うこともできます。
import torch
from transformers import AutoModelForTokenClassification, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("openai/privacy-filter")
model = AutoModelForTokenClassification.from_pretrained(
"openai/privacy-filter",
device_map="auto",
)
inputs = tokenizer("My name is Alice Smith", return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model(**inputs)
predicted_token_class_ids = outputs.logits.argmax(dim=-1)
predicted_token_classes = [
model.config.id2label[token_id.item()]
for token_id in predicted_token_class_ids[0]
]
print(predicted_token_classes)
JavaScript / ブラウザ実行の可能性
Hugging Faceのモデルカードでは、@huggingface/transformers を使ったTransformers.jsの例も掲載されています。
import { pipeline } from "@huggingface/transformers";
const classifier = await pipeline(
"token-classification",
"openai/privacy-filter",
{ device: "webgpu", dtype: "q4" },
);
const input = "My name is Harry Potter and my email is harry.potter@hogwarts.edu.";
const output = await classifier(input, { aggregation_strategy: "simple" });
console.dir(output, { depth: null });
サーバー側で処理するだけでなく、ブラウザ上で事前マスキングする構成も検討できそうです。
たとえば、以下のような使い方が考えられます。
- 問い合わせフォーム送信前に個人情報を検出
- 社内AIチャットに送る前にブラウザ側でマスキング
- ローカルファイルをアップロードする前にサニタイズ
- RAG用ドキュメント登録前にPIIを検出
リポジトリ構成
READMEによると、主な構成は以下の通りです。
opf/__main__.py
CLIエントリポイント
opf/_api.py
Python向けAPI
opf/_cli/
CLI引数やターミナル表示まわり
opf/_core/
ランタイム読み込み、スパン変換、デコード処理
opf/_eval/
評価用データ読み込み、前処理、メトリクス、評価ランナー
opf/_train/
ファインチューニング用処理
opf/_model/
Transformer実装、チェックポイント設定、重み読み込み
examples/data/
評価・ファインチューニング用サンプルデータ
examples/scripts/finetuning/
ファインチューニング用デモスクリプト
単なるモデル配布ではなく、CLI、評価、学習、出力スキーマまで含まれているため、検証から運用設計まで進めやすい構成になっています。
使いどころ
個人的には、以下のような場面で特に有用だと感じました。
1. LLMに送る前の入力マスキング
ユーザー入力や問い合わせ本文をLLMに送る前に、メールアドレス、電話番号、氏名、住所などを伏せる用途です。
ユーザー入力
↓
Privacy Filter
↓
マスキング済みテキスト
↓
LLM / RAG / 分析基盤
2. ログのサニタイズ
アプリケーションログやサポートログに個人情報が混入することがあります。
ログ保存前、または分析基盤投入前にPrivacy Filterを挟むことで、不要な個人情報の保存を減らせます。
3. RAG用ドキュメントの前処理
社内文書をベクトルDBに投入する前に、個人名、メールアドレス、電話番号、APIキーなどを検出できます。
4. データセット作成時の匿名化補助
機械学習や分析用のデータセットを作る際に、個人情報の除去・確認の補助として使えます。
ただし、READMEでも注意されている通り、Privacy Filterは匿名化やコンプライアンスを保証するものではありません。
高リスクな用途では、ルールベース検出、DLP、レビュー工程、アクセス制御などと組み合わせるべきです。
注意点
Privacy Filterは便利ですが、万能ではありません。
特に以下の点には注意が必要です。
- 検出対象は定義済みのラベル分類に依存する
- 組織固有のポリシーに合わせるには評価・調整・ファインチューニングが必要
- 英語以外、非ラテン文字、特殊な名前、ドメイン固有IDでは性能が落ちる可能性がある
- APIキーやシークレットの形式が独自の場合、検出漏れが起きる可能性がある
- 医療、法律、金融、人事、教育、政府系など高感度領域では人間のレビューが重要
「これを通せば安全」ではなく、「プライバシー・バイ・デザインの一層」として組み込むのが現実的です。
まとめ
OpenAI Privacy Filterは、テキスト内の個人情報やシークレットを検出・マスキングするための実用的なOSSです。
特に良いと感じた点は以下です。
- CLIですぐ試せる
- ローカル/オンプレで実行できる
- Apache 2.0で商用利用しやすい
- 評価・ファインチューニングの導線がある
- LLMアプリケーションの前処理に組み込みやすい
LLM活用が進むほど、「どのデータをモデルに渡してよいか」「ログやRAG基盤に何を残してよいか」という設計が重要になります。
Privacy Filterは、その前処理レイヤーとしてかなり有力な選択肢になりそうです。
参考
- OpenAI Privacy Filter GitHub Repository
- Hugging Face: openai/privacy-filter