powered by TechFeed
表示モード
ハウツー

銀行明細をChatGPTに渡す前に、ローカルLLMで個人情報を除去する — 2段階フィルタリングで「便利さ」と「プライバシー」を両立する方法

7月16日、How-To Geekが「I use a local LLM to scrub my bank statements before they ever reach ChatGPT」と題した記事を公開した。ChatGPTに家計を分析させたい。しかし銀行明細をそのままアップロードしたくない。この矛盾を解決するワークフローが本記事の核心だ。

7月16日、How-To Geekが「I use a local LLM to scrub my bank statements before they ever reach ChatGPT」と題した記事を公開した。ChatGPTに家計を分析させたい。しかし銀行明細をそのままアップロードしたくない。この矛盾を解決するワークフローが本記事の核心だ。


銀行明細が暴露する情報は想像以上に多い

氏名・口座番号・カード番号といった「わかりやすい個人情報(PII:Personally Identifiable Information)」だけが問題ではない。取引の摘要欄には、かかりつけ医の名前、子どもの学校名、普段の行動圏、不在期間、個人間送金の相手名など、文脈から個人を特定できる情報が大量に含まれている。

こうした情報は従来のパターンマッチング型ツールでは検出が難しい。記事の著者はこの問題を、2段階のローカルフィルタリングで解決した。

なお、GDPRやCCPAなど個人データの取り扱いに関する規制が厳格化するなか、「クラウドAIに渡す前にローカルで匿名化する」という考え方は企業・個人を問わず広がっている。ローカルLLMの推論性能が実用水準に達したことで、このようなプライバシーフィルタリングがコンシューマー向けのミニPCでも現実的になってきた背景がある。

第1フィルター:Presidio でパターン一致するPIIを除去

第1段階では、Microsoftが開発したオープンソースのPII匿名化フレームワーク**Presidio**を使う。Presidioは氏名・電話番号・メールアドレス・住所・クレジットカード番号などを検出し、[PERSON][PHONE_NUMBER]といったプレースホルダーに置換する。

カスタム認識ルールも追加できるため、銀行固有の口座参照番号フォーマットなども対象に含められる。処理はすべてミニPC上のコンテナ内で完結し、データは外部に出ない。

ただし、Presidioには限界がある。設定済みのパターンに一致しないものはスルーされる。地元の歯科医院名やスポーツクラブ名など、個人の場所や生活圏を示唆する固有名詞は、Presidioのルールベース検出では検知されないことが多い。

第2フィルター:ローカルLLMで文脈的なPIIを置換

ここでローカルLLMが登場する。著者はOllamaをミニPC上で動かし、Presidioが取りこぼした情報をLLMに検出・置換させる。

このアプローチのポイントは、単純に情報を消すのではなく、有用なラベルに置き換える点だ。

たとえば歯科医院名を単に[PAYEE]と置換してしまうと、ChatGPTが支出を分析する際に「何に使ったお金か」がわからなくなる。そこでLLMに「歯科医院名→dentist」「子どもの学校名→school」のように、意味を保ちながら個人を特定できない汎用ラベルへの変換を指示する。これにより、ChatGPTは支出パターンを分析できるだけの情報を保ちつつ、身元に結びつく具体情報は渡さずに済む。

ワークフローの自動化には**n8n**(ノーコード/ローコードのワークフロー自動化ツール)を使っており、PDFの銀行明細のアップロードから、Presidioによる第1フィルタリング、ローカルLLMによる第2フィルタリング、出力の確認までを一連のパイプラインとして構成している。

最後は必ず目視確認

2段階のフィルターを通過した後も、著者は必ず自分の目でデータを確認してからChatGPTにアップロードする

ローカルLLMもミスをする可能性があり、「2つのフィルターを通過したから安全」という保証はない。ただし、1か月分の明細を処理する場合、PresidioとローカルLLMがほとんどを処理した後に残る見落としは1〜2箇所程度だという。目視確認のコストは現実的な範囲に収まっている。

構成のまとめ

ステップ ツール 役割
PDFアップロード〜パイプライン制御 n8n(ローカル) 一連のワークフローを自動化・オーケストレート
第1フィルター Presidio(ローカル) 氏名・番号・連絡先など定型PIIを除去
第2フィルター ローカルLLM(Ollama) 文脈依存の識別可能情報を汎用ラベルに置換
最終確認 人間による目視 見落とし箇所の手動修正

「OpenAIはすでに自分の氏名と連絡先を持っている。しかし、私がどこで買い物するかまで知る必要はない」——著者はこう締めくくっている。ChatGPTの便利さを手放さずに、クラウドに渡す情報を最小化するという実用的なトレードオフの取り方として参考になる。

詳細はI use a local LLM to scrub my bank statements before they ever reach ChatGPTを参照していただきたい。