無料のブラウザー版で日本語の文書から個人情報を検出できるようにするには、デスクトップアプリの日本語の検出モデルをブラウザーのタブに収める必要がありました。元のモデルは約1.1GBあります。これを転送量約167MBまで小さくした方法と、そのために出力がどこまで変わったかを説明します。
欧州の言語用のモデルは、日本語を読めなかった
ブラウザー版の最初の検出モデルは、多言語のBERTモデルをもとにしたもので、104言語分の語彙を持っていました。当時提供していたのはラテン文字の言語だけだったため、2026年8月に使わない文字の語彙を削りました。重みには手を付けず、語彙の表から使わない行を消しただけです。ファイルは178.5MBから139.6MBになりました。
当時の対象言語の77件の文書で比べると、テキストの区切り方にも、検出した2,219件にも違いは0件で、出力はまったく同じでした。ただ、この結果が成り立つのは、削った文字を使わない言語に限られます。削った語彙には、ひらがな、カタカナ、約1万3,000字の漢字が入っていました。このモデルに日本語の文を入れると、ほとんどの文字が未知の記号になり、氏名も会社名も見つかりません。
2つの方法を比べた
日本語に対応する方法は2つありました。
1つは、多言語のモデルに漢字とかなの語彙を戻す方法です。ファイルの増加は約11.5MBで済み、モデルも1つのままです。ただ、この増加分は日本語を使わない利用者も含め、全員がダウンロードすることになります。また、このモデルが固有名詞の検出のために追加で学習したデータには日本語が入っていません。中国語と共通する漢字を手がかりに読んでいるだけで、かなの語彙はほとんど学習されていません。当社の評価用文書では、日本語専用のモデルより誤検出が多くなりました。
もう1つは、デスクトップアプリの日本語のモデルを小さくして、ブラウザー用の別のモデルにする方法です。転送量は大きくなりますが、ダウンロードするのは日本語を検出する利用者だけです。誤検出も少なかったため、2026年10月にこちらを採用しました。
1.1GBを約167MBにした2つの手順
1つ目は語彙を削る手順で、欧州の言語用のモデルと同じ方法です。漢字、かな、ラテン文字、記号を残し、250,002語を139,805語にしました。ラテン文字を残したのは、ローマ字の氏名や英語の社名を読むためです。「㎡」「㈱」「㊞」のような記号の文字と、ギリシャ文字も残しました。医療の文書には「γ-GTP」のような表記が出てくるからです。評価用文書のすべてのページで、テキストの区切り方は元のモデルと同じでした。この手順では出力は変わりません。
2つ目は、32ビットの重みを8ビットにする手順です。モデルの本体は8ビットにしても約87MBあり、語彙をどれだけ削っても100MBを下回りません。8ビット化は出力をわずかに変えます。元のモデルと比べると、モデルが読む単位ごとのラベルの判定が一致した割合は98.06%でした。検出結果で見ると、デスクトップアプリの処理にこの8ビットのモデルを入れたときの検出率の低下は、評価用文書で1ポイント未満でした。
ブラウザーで動かす実行環境でも、結果はわずかに変わります。ブラウザー用のONNX RuntimeとNode.js用のものでは、判定の1.8%が食い違い、検出率は最大で0.5ポイント上下しました。そのため、日本語のモデルの出力は、デスクトップアプリと完全には一致しません。評価用文書で比べたブラウザー版の検出率は、デスクトップアプリとの差がおおむね1ポイント以内です。
8ビット化には、気づきにくい影響がもう1つありました。このモデルは処理の途中の値をまとめて8ビットに丸めます。そのため、長いページを区切って複数の区切りを一緒に処理すると、同じ区切りでも、一緒に処理したほかの区切りによって結果が変わることがあります。実際、1つだけで処理したときに、組織名かどうかの判定が入れ替わる例がありました。ブラウザー版では、ページを一定の長さで少しずつ重ねて区切り、8つずつ同じ詰め方で処理して、デスクトップアプリと条件をそろえています。
文字の位置にも手を入れました。ブラウザーで使っているライブラリは、モデルが読んだ単位が元の文のどこにあたるかを返さないため、1文字ずつ組み立て直しています。評価用のページで比べると、デスクトップアプリと位置が食い違った箇所はありませんでした。
2つのモデルをブラウザーに置く
日本語のモデルは、欧州の言語用のモデルとは別の場所に保存します。片方を更新しても、もう片方をダウンロードし直すことはありません。ブラウザーに保存したモデルを整理する処理も、両方のモデルを残すようにしています。最初は片方だけを残す作りで、起動するたびに日本語のモデルを消してしまうところでした。
検出の言語を切り替えると、使うモデルも切り替わります。2つを同時に読み込むとメモリを二重に使うため、使うのは常に1つです。2回目からはブラウザーに保存したものを読み込むので、どちらのモデルもネットワークを通るのは最初の1回だけです。英語で起動したブラウザー版は、日本語のモデルを1バイトも取りに行きません。
モデルの語彙や重みを自分たちで削れるのは、検出エンジンを自社で開発しているからです。日本語の検出の規則も、デスクトップアプリのものをブラウザー版に移植しています。
よくある質問
ブラウザー版の日本語の検出は、デスクトップアプリと同じ結果になりますか?
完全には同じになりません。重みを8ビットにしたことと、ブラウザーの実行環境の違いで、結果がわずかに変わります。評価用文書での検出率の差は、おおむね1ポイント以内です。
日本語以外の言語で使うときも、日本語のモデルをダウンロードしますか?
しません。日本語のモデルを読み込むのは、検出の言語を日本語にしたときだけです。最初の読み込みは約167MBで、その後はブラウザーに保存したものを使います。
語彙を削ると、精度は下がりますか?
モデルが使わない文字の語彙を削るだけなら、下がりません。重みはそのままで、テキストの区切り方も変わらないためです。精度に影響したのは、語彙ではなく重みの8ビット化のほうでした。
ブラウザー版でも、文書はサーバーに送られませんか?
送られません。検出はブラウザーの中で行います。ただし、起動を伝える匿名の通知とエラーの報告は送るため、ブラウザー版をオフラインとは呼んでいません。