オンデバイスNLP:プライバシー、速度、そしてブラウザの限界を超える

オンデバイスNLP:プライバシー、速度、そしてブラウザの限界を超える

Aday
nlp on-device engineering

ユーザーがバーチャルアシスタントに話しかけるとき、最も速い応答への道筋はデバイスを離れないものです。オンデバイスNLPはリモートサーバーへの往復を排除し、体感レイテンシを数百ミリ秒からほぼゼロへと削減します。さらに重要なのは、ユーザーが入力したり発話したりした言葉がローカルで処理されローカルで破棄されるということです。それらは決して送信されず、決してログに記録されず、第三者のデータ保持ポリシーに左右されることもありません。医療、金融、個人の生産性といったセンシティブな領域を扱うアプリケーションにとって、これはあると便利な機能ではなく、基本的な要件です。

ブラウザやモバイルデバイスで推論モデルを動かすことは本質的に難しい課題です。ブラウザのサンドボックスはネイティブスレッドへのアクセスを制限し、GPUコンピュートはWebGLまたはまだ発展途上のWebGPU APIの背後に閉ざされており、メモリのバジェットも限られています。モバイル上では、オペレーティングシステム、バックグラウンドプロセス、サーマルスロットリングと競合することになります。サーバーサイドのNode.jsやPython向けに設計された従来のNLPライブラリは推移的依存関係を抱えており、バンドルサイズがモバイルWebViewが快適に読み込める範囲を超えて膨れ上がります。エンジニアリングの課題は単にモデルを動かすことではなく、ユーザーがその存在を意識しないほど十分に高速で、十分に小さく、十分に安定して動作させることです。

Actor.devのNLPエンジン @noondra/nlp は、これらの制約を最初から念頭に置いて設計されています。これは純粋なTypeScriptパッケージで、ランタイム依存関係は一つだけです(budoux、日本語の単語境界分割用)。ネイティブアドオンもなく、CDNからダウンロードするWASMブロブもなく、Node.js APIサーフェスも存在しません。V8、JavaScriptCore、Hermesのいずれでも同一の動作をします。エンジンはインテント分類、エンティティ抽出、スロットフィリング、ダイアログ状態管理をすべてインプロセスで処理します。モデルの重みはコンパクトなJSON構造としてシリアライズされ、セッション開始時に一度だけメモリに読み込まれます。これにより、ネットワーク状況にかかわらず決定論的な初回応答時間が保証されます。

正直なトレードオフは精度対サイズです。Transformerベースのインテント分類器は分布外の入力においてTF-IDFモデルを上回りますが、50〜200MBの重みをダウンロードしてRAMに保持することが避けられません。多くの会話型アシスタントのユースケースでは、ユーザー入力の分布はアシスタントがカバーするドメインによって制限されています。そのドメインを十分にカバーするよく訓練された軽量モデルは、ユーザーが決して触れることのないトピックに容量を費やす大型汎用モデルを凌駕します。Actor.devのアプローチはまさにこの点を活かしています。NLPプロジェクトはエージェントごとに訓練され、生成されるモデルは小さくドメイン特化型です。そしてドメイン内の入力に対する精度は、はるかに大きなアーキテクチャと比較しても競争力があります。クエリがモデルの信頼度しきい値を下回った場合、ランタイムはLLMフォールバックへと滑らかに移行します。これにより、高速な処理経路を維持しつつ、重要な場面での品質も確保されます。