仕組み
Zenzaiを利用した非公式プロジェクトです。azooKey公式の製品・デモではありません。
かな漢字変換
ローマ字・ひらがなから変換候補を選ぶページです。Space・↑↓で候補を選び、Enterまたは候補のクリックで確定します。入力は端末内で処理します。
hashiハシ橋・箸・端生成候補箸azooKeyの辞書566,214件と品詞の接続スコアを使用し、Web向けの探索処理で最大8件の辞書候補を作ります。並行してZenz v3.2 smallが1件を生成し、候補に追加します。同じ表記はまとめます。ひらがな・カタカナ・原文も選べます。
azooKey本体の完全移植ではありません。辞書データ・ローマ字対応表・Zenzの重みは上流由来ですが、候補探索は独自の幅を制限したJavaScript実装です。本家のZenzによる辞書候補評価、文節ごとの変換、学習・ユーザー辞書、予測入力、補助n-gramは未搭載です。Zenz候補を先頭に追加する方式で、辞書候補をZenzで採点しているわけではありません。候補の順序・精度は本家と異なります。
入力は240文字、読みは120文字まで。辞書は合計約9 MiBを入力と無関係な順序で先に読み込みます。Zenz非対応の環境でも、辞書の読み込みが成功すれば辞書候補を利用できます。
日英区間推定
ローマ字の日本語と英語を続けて打ち、その区切りを推定して、日本語部分だけを漢字へ変換する実験です。日本語や日英の境界に補助の空白を入れる操作は必要ありません。
konoAPIURL / TeXkonoAPIこの + APIこのAPI英語フレーズ内の空白はそのまま扱います。ただし、空白なしの境界をいつも正しく見つけられるわけではありません。
入力から変換まで
- そのまま残す場所を見つける。まずlexer(文字列を区切る処理)がTeX、URL、コードなどの構文を認識し、変換から保護します。対応する構文の範囲に限られ、あらゆるコードを理解するものではありません。
- 日本語と英語の境界を推定する。1〜4文字の並び、語頭・語尾、語彙、ローマ字としての形や文脈を使う小さなロジスティックモデルが、日本語らしさを計算します。境界モデルとルールで候補を評価し、動的計画法(区切り候補の組合せを比較する方法)で区間を選びます。完成前の入力でも推定を更新します。
- 日本語だけを読む。日本語と推定したローマ字を、azooKey由来の対応表でかなの読みに直します。未完成のローマ字は保留します。
- Zenzモデルで漢字を生成する。Zenz v3.2 smallの同じGGUF重みをwllamaのWebAssemblyで端末内実行します。各段階で最も有力な文字を選ぶgreedy生成です。Workerで実行し、入力画面とは処理を分けています。
- 原文とつなぎ直す。英語と保護領域を元のまま残し、日本語部分の結果を差し込みます。見栄えのための分かち書き空白は追加しません。日本語を英語と誤判定した場合やその逆の場合は、変換も誤ります。
「stateless」は、判定・変換に現在の未確定文だけを使い、確定履歴を次の文の文脈に混ぜない、という意味です。Enterで文を確定します。画面の履歴やロード済みモデルまで存在しないという意味ではありません。日本語IMEで直接入力した漢字は、お使いのIMEの結果です。
Mac版との違いと、まだ苦手なこと
Mac版は辞書候補の探索とZenzaiによる候補評価などを組み合わせます。日英区間推定ページの漢字変換はモデル単体の生成です。かな漢字変換ページとは別の経路で、辞書候補選択やMacの補助n-gram処理を搭載していません。同じ重みでも、漢字の出力・精度は同じではありません。
区間推論はv21です。英語の形や日本語の語尾を扱う条件と、日本語の途中を短い英単語に分割してしまう判定を改善しました。学習済み重みとZenz v3.2 smallは変更していません。未知語や曖昧な境界の誤判定は残り、一部の文では入力途中の判定の揺れが増えています。
Swiftと54,687入力で区間構造が一致したことは「移植が一致する」検証です。一般的な正解率ではありません。過去のv9の評価では、開発用の混在28文は24件、安全確認18文は18件、固定後の新規24文は16件が一致しました。これは現在版の精度測定ではなく、十分な実用精度を示すものでもありません。
1文2,000文字、日本語の読みは連続区間あたり120文字まで。区間判定が1.5秒を超えると停止し、文を編集すると再試行します。長文の処理中も、短文への編集やリセットで復帰できる制御です。遅い端末では短い文でも時間切れになり得ます。漢字生成は数秒以上かかることがあり、古い応答で最新入力を上書きしないようにしています。更新中の薄い結果は直前の文の結果です。
モデルは自動で読み込みます(初回 約71 MiB)。Safariなどでは互換ランタイム(追加 約15 MiB)へ自動切替します。互換版は低速で、起動時間・動作可否は端末のメモリやブラウザに依存します。入力は端末内で処理します。
通信と保存
このアプリのコードは入力文をサーバへ送らず、入力ログや分析ツールも追加していません。判定と生成はブラウザ内です。一方、ページ・プログラム・モデルの取得には配信サーバへの通信があり、配信事業者には通常の接続情報が渡ります。通信全体が匿名になるという保証ではありません。
モデルの分割ファイルをブラウザのCache Storageへ保存し、再訪時にサイズとSHA-256を確認して再利用します。保存に失敗した場合は再取得することがあります。アプリは入力・履歴を永続保存せず、再読み込みで消します。ブラウザ自体のフォーム復元、拡張機能、OSのIMEなどの動作まで制御するものではありません。
ソースを読む・動かす
再現用ソースをダウンロード(JavaScript・HTML・CSS・小型区間モデル・lockfile・テスト・README)。公開リポジトリへのリンクはなく、このアーカイブを提供しています。内部ログ、個人環境のパス、認証情報、node_modules、大きなGGUF/WASMバイナリは含みません。
展開後のREADMEに、npm ci、固定された公式モデルとランタイムの取得、ハッシュ照合、ローカル起動の手順があります。学習の再現やMacの辞書経路の再現ではなく、このWeb配布物を再構成するためのソースです。収録ファイルとSHA-256で内容を照合できます。
ライセンスと出所
サイトの自作変更・派生コードはMITとして公開します。第三者のモデルやライブラリにはそれぞれの条件が適用されます。著作権表示を削除したり、第三者の権利までMITに変更したりするものではありません。
- Webコード、azooKey-Local由来の移植部分:MIT全文。小型区間モデルはforkのLocalModel/train.py内の自作語彙・合成例から生成された別モデルです。生成コードに外部コーパスの取得はなく、forkの変更履歴も確認しています。本配布ではこの自作部分をMITとして扱います。上流のルートライセンスだけから別のモデルの権利を推定してはいません。
- Zenz v3.2 small Q5_K_M:公式配布・固定revisionのモデルカードはApache-2.0。全文。GGUF自体は変更せず、配信のため4分割しています。
- かな漢字辞書と接続スコア:AzooKeyKanaKanjiConverterの固定revision bbef9d2d99a2e9e69ac3f7e2e07b08474de59a81に含まれるazooKey_dictionary_storage。Apache-2.0全文。語彙・スコアは変更せず、ブラウザ配信用にJSONとgzipへ再梱包しています。配布ハッシュ。
- wllama 3.6.1:上流ソース、MIT全文。llama.cppやバンドル部品のMIT・BSD・Apache・Emscripten等の通知も保持しています。
- ローマ字→かな対応表:AzooKeyKanaKanjiConverter由来、MIT全文。
全通知・出典 · 配布物と開発依存の監査記録 · GGUFのサイズ・ハッシュ
ロックされたnpm依存はwllamaとwllama-compat(ともに3.6.1・MIT)の2件で、サイト側のdevDependenciesはありません。ビルド元ライブラリの開発用依存を、サイト配布物の依存とは区別しています。手元の配布物で必要な通知を照合した記録であり、権利全体の保証や法的助言ではありません。