OpenAI Privacy Filterは、テキスト内の個人識別情報(PII)の検出とマスキングを行うための双方向トークン分類モデルです。オンプレミスで実行でき、高速で、コンテキストを考慮し、チューニング可能なモデルを必要とするチーム向けの、高スループットなデータサニタイズワークフローを対象としています。
OpenAI Privacy Filterは、自己回帰的に事前学習され、gpt-ossに似たアーキテクチャを持つものの、より小さいサイズのチェックポイントに到達します。その後、そのチェックポイントをプライバシーラベル分類体系上の双方向トークン分類器に変換し、教師あり分類損失で事後学習しました。(gpt-ossのアーキテクチャの詳細については、gpt-ossモデルカードを参照してください。)このモデルは、トークンごとにテキストを生成するのではなく、単一のフォワードパスで入力シーケンスにラベルを付け、制約付きViterbi手続きによって一貫性のあるスパンをデコードします。各入力トークンについて、モデルは以下に説明する8つの出力カテゴリからなるラベル分類体系上の確率分布を予測します。
ハイライト:
このリポジトリには、Privacy Filterチェックポイントを実行、評価、ファインチューニングするために使用されるローカルコード、CLI、およびサンプルアセットが含まれています。実装を直接検査し、自身の環境でモデルを運用したいチームを対象としています。
リポジトリのリソース: License および Security Policy。
pip install -e .
この後、直接実行するか python -m opf 経由で実行できるPythonスクリプト opf が利用可能になります。このスクリプトは、以下に説明する3つの異なる方法で使用できます。
デフォルトでは、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 以下のサンプルevalフィクスチャは合成例データのみであり、実在の人物や実際の機密記録を記述したものではありません。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/: transformer実装、チェックポイント設定、および重みの読み込み。examples/data/: サンプルevalファイルと再現可能なファインチューニングデモデータセット。examples/scripts/finetuning/: 実行可能なファインチューニングデモハーネス。FINETUNING.md: ファインチューニングワークフローとデモスクリプトのガイドに焦点を当てた文書。OUTPUT_SCHEMAS.md: JSONレスポンスとエクスポートペイロードの形式。EVAL_AND_OUTPUT_MODES.md: 秘匿化と評価のための出力モードの説明。Privacy Filterは、スパンデコーディングを備えた双方向トークン分類モデルです。自己回帰的事前学習から始まる段階的なトレーニングが行われます。事前学習された言語モデルはその後、バンドサイズ128(実効アテンションウィンドウ: 自身を含めて257トークン)の双方向バンド付きアテンショントークン分類器として変更され、事後学習されます。これはつまり:
アーキテクチャ的には、このリポジトリの実装は、以下を備えたpre-norm transformerエンコーダスタイルのスタックです:
d_model = 640。反復的な自己回帰アプローチと比較して、この設計ではすべてのトークンに1回のパスでラベルを付けることができ、スループットが向上します。古典的なマスク言語モデル事前学習アプローチと比較して、これはネイティブなマスク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。言い換えれば、各カテゴリについて、モデルはbegin、inside、end、およびsingle-tokenスパンに対応する B-、I-、E-、および S- 形式を予測します。推論時には、これらのトークンごとのロジットが、制約付きシーケンスデコーディングを使用して一貫性のあるBIOESスパンラベルにデコードされます。
トークン分類器がトークンごとのロジットを生成した後、各トークンに対して独立にargmaxを取るのではなく、線形チェーン遷移スコアリングを使用した制約付きViterbiデコーダでラベルをデコードします。デコーダは、許可されたBIOES境界遷移を強制し、開始、遷移、終了の項、および背景の持続、スパンへの進入、スパンの継続、スパンの閉鎖、境界から境界への引き継ぎを制御する6つの遷移バイアスパラメータを用いて、完全なラベルパスをスコアリングします。この大域的なパス最適化は、各トークンの決定を局所的なロジットだけでなくシーケンスレベルの構造に依存させることで、スパンの一貫性と境界の安定性を向上させることを意図しており、特に局所的なトークン決定だけでは断片的または一貫性のない境界を生み出す可能性があるノイズの多い、または混在形式のテキストにおいて有効です。
シーケンスデコーディングのパラメータは、背景にとどまることを抑制しつつスパンへの進入と継続を促すように設定でき、再現率を向上させるために広く連続的なマスキングを生み出すか、またはその逆で精度を向上させることができます。実行時に、ユーザーはこのトレードオフを制御するパラメータを調整できます。
開発元: OpenAI
資金提供: OpenAI
共有元: OpenAI
モデルタイプ: プライバシースパン検出のための双方向トークン分類モデル
言語: 主に英語。選択された多言語ロバスト性評価が報告されています
ライセンス: Apache 2.0
モデルカード: OpenAI Privacy Filter Model Card
Privacy Filterは秘匿化とデータ最小化の補助ツールであり、匿名化、コンプライアンス、または安全性の保証ではありません。このツールを包括的な匿名化の主張として過度に依存すると、望ましいプライバシー目標を達成できないリスクがあります。Privacy Filterは、ホリスティックなエンドツーエンドのプライバシーバイデザインアプローチにおける複数の層の1つとして使用するのが最適です。
このモデルは、トレーニングされたラベル分類体系と定義に一致する個人データスパンのみを識別します。実際のプライバシーユースケースは多様で複雑であり、適切なラベルポリシーと決定境界の定義は異なる場合があります。したがって、モデルのデフォルトは、キャリブレーション/ファインチューニングなしでは組織固有のガバナンス要件を満たさない可能性があります。
Privacy Filterは、実行時にラベルポリシーを動的に設定することをサポートしていません。代わりに、ポリシーを変更するにはモデルのさらなるファインチューニングが必要です。ネイティブのラベルセットと関連する決定境界は、すべてのユースケースに適しているとは限りません。例えば、モデルのトレーニングポリシーは個人識別子を優先することを目的としており、設計上、強く個人に紐づかないコンテキストをしばしば保持します。一部のユーザーはこの選択を調整したいと考えるかもしれません。
英語以外のテキスト、非ラテン文字、保護グループの命名パターン、またはモデルのトレーニングと比較して分布外のドメインでは、性能が低下する可能性があります。
すべてのモデルと同様に、Privacy Filterは誤りを犯す可能性があります。例えば: 珍しい個人名、地域の命名慣習、イニシャル、敬称の多い参照、またはドメイン固有の識別子の検出漏れ。局所的なコンテキストが曖昧な場合の、公的機関、組織、場所、または一般名詞の過剰な秘匿化。混在形式のテキスト、長い文書、または句読点やレイアウトのアーティファクトが多いテキストにおける、断片的またはずれたスパン境界。新しい資格情報形式、プロジェクト固有のトークンパターン、または周囲の構文にまたがって分割されたシークレットの検出漏れ。そして、シークレットに似た無害な高エントロピー文字列、プレースホルダー、ハッシュ、サンプル資格情報、または合成例の過剰な秘匿化。
これらの制限は、人口統計学的、地域的、およびドメインの変動と相互作用する可能性があります。例えば、トレーニングデータで過小に表現されている名前や識別子、または支配的なトレーニング分布とは異なる慣習に従うものは、検出漏れになったり、一貫性のない境界になったりする可能性が高くなります。
医療、法律、金融、人事、教育、政府のワークフローなど、高い機密性が求められる設定では、追加の注意が必要です。これらの設定では、偽陰性と偽陽性の両方がコストを伴う可能性があります: 検出漏れのスパンは機密情報を露出させる可能性があり、過剰なマスキングはレビュー、監査、または下流の意思決定に必要な重要なコンテキストを除去する可能性があります。