macOSのキーボードが「卑俗な言葉」を学習する仕組み

Apple macOSのキーボード辞書、卑俗な言葉の扱いを詳細に分析—システム辞書の内部挙動が明らかにのイメージ画像

Apple macOSには、ユーザーが使用する言葉遣いを学習する隠れたデータベースが存在することが、2026年11月4日のHacker Newsの記事で報じられました。具体的には、~/Library/Keyboard/VulgarWordUsage.dbというSQLiteデータベースが、ユーザーがどんなアプリで、どんな相手に、どんな卑俗な言葉を使ったかを記録しているとのことです。これはオートコレクト機能が、例えば「ducking」のような言葉を勝手に「f**king」に修正しないように学習するためだと考えられます。

~/Library/Keyboard/VulgarWordUsage.dbは、アプリや受信者ごとに卑俗な単語の使用状況を記録し、オートコレクトの学習に利用されます。

データベースのスキーマを見ると、vword_usageテーブルにはapp、recipient、vword(卑俗な単語)、usage_count(使用回数)、last_use_timestamp(最終使用日時)といったフィールドが含まれています。これにより、例えば「Messagesで特定の友人に『fuck』を使うが、Mailで上司には使わない」といった文脈に応じた学習が可能になります(Hacker News)。

WWDC 2023で示されたオートコレクト改善と内部関数

Apple macOSのキーボード辞書、卑俗な言葉の扱いを詳細に分析—システム辞書の内部挙動が明らかにのイメージ画像

この機能の存在は、2023年6月のWWDCでCraig Federighi氏がiOS 17のオートコレクト改善について触れた際に「『ducking』という言葉を打ちたいとき、キーボードがそれを学習するようになる」と発言したことと関連があると考えられます(Hacker News)。

macOSの共有ライブラリキャッシュ内の関数名からも、このデータベースがどのように利用されているかが垣間見えます。例えば、TI::VulgarWordUsageDatabaseWrapper::increment_usage_count(word, reading, recipients)やTI::VulgarWordUsageDatabaseWrapper::can_autocorrect(word, app, recipients)といった関数が存在し、単語の使用状況をカウントしたり、特定の文脈でオートコレクトを行うべきかを判断したりしていることが示唆されます。また、_KSUserWordsSynchroniser sharedAcrossLanguagesVulgarWordUsageValueというシンボルからは、この学習データがデバイス間で同期される可能性も見て取れます。

Appleのシステム辞書が持つ言葉の分類

この記事によると、Appleのシステム辞書は、すべての単語を以下の3つのカテゴリと最大11のトピックフラグで分類していることが判明しています。

カテゴリ 説明
vulgar (下品) Oedipus(オイディプス)などが該当
offensive (不快) Tom、Mickなどが該当
sensitive (注意が必要) pee(おしっこ)、poo(うんち)、niggle(心配させる)、underling(下っ端)などが該当

トピックフラグには、sex(性)、drugs(薬物)、religion(宗教)、politics(政治)、violence(暴力)などが含まれるとのことです。驚くべきことに、英語の「sensitive」カテゴリには、唯一現存する政治家として「Trump」が含まれており、ヒトラー、毛沢東、オサマ・ビンラディン、タリバンといった歴史上の人物や組織と並んで分類されているのは、正直、ここまで来たかという感じがします。

一方で、バイデン、オバマ、プーチンといった他の主要な政治家の名前はクリーンな状態です。これはかなり衝撃的なニュースですね(Hacker News)。

これらのフラグは公開APIとしては提供されていませんが、Lexicon.frameworkのプライベートなC関数を介して読み取ることが可能だそうです。記事では、CとSwiftでのコード例も示されており、15言語にわたる全辞書データのダンプもGitHub Gistで公開されています。

エンジニア目線で見ると:プライバシーと学習のバランス、個人プロダクトへの示唆

このAppleのキーボード辞書に関する発見は、エンジニアとしていくつかの点で興味深いと感じます。まず、ユーザーの言葉遣いを学習し、文脈に応じてオートコレクトを調整するというアプローチは、ユーザー体験の向上に直結します。特に、不適切な修正を減らすことは、ストレス軽減に大きく貢献するでしょう。

一方で、appとrecipientごとに使用状況を記録するという粒度は、ユーザーのプライバシーという観点から非常に繊細な情報収集だと感じます。データがローカルに保存され、デバイス間で同期されるとはいえ、Appleがどの程度このデータを集計・利用しているのか、透明性が求められる部分ではないでしょうか。

個人的には、ローカルLLMで同様の文脈学習機能を実装する際の参考にしたいと感じます。ユーザーのプライバシーを保護しつつ、精度の高い入力補助を実現するバランスは、今後のAI開発における重要なテーマだと考えます。

また、Appleが単語を「vulgar」「offensive」「sensitive」といったカテゴリに分類し、特定の政治家名を「sensitive」として扱うのは、興味深いアプローチです。これはAIによるコンテンツフィルタリングやモデレーションシステムを設計する上で、非常に参考になるのではないでしょうか。

どの単語をどのような基準で分類するか、そしてそれをどのようにシステムに組み込むかは、多言語対応や文化的な背景を考慮する上で、非常に複雑な問題です。自分の個人プロダクトに、ユーザーの入力内容をより適切に処理する機能を取り入れる際、このAppleのアプローチを参考に、より細やかなフィルタリングロジックを検討してみたいですね。

さらに、このデータベースへのアクセスに公式APIがないという点は、Appleの意図的な方針だと考えます。直接的にユーザーの入力履歴にアクセスする機能を開発者に提供しないことで、悪用を防ぐ狙いがあるのではないでしょうか。しかし、プライベートAPIを解析してデータダンプを公開する今回のケースは、オープンソースコミュニティの探求心と、それがもたらす情報の透明化という点で非常に意義深いと感じます。