TL;DR
- Bonolith は Linux 向けの LLM 駆動 日本語入力メソッド(IME) です。Rust 製、MIT ライセンス。
- 辞書 + 文法 + ローカル LLM(Qwen2.5-1.5B) のハイブリッド変換で、同音語の選択をローカル完結で賢くします。
- IBus / Fcitx5 両対応。LLM サーバーが無くても辞書だけで動きます。
- 旧称「JaIM」から名称変更しました。今後の開発はすべて Bonolith に集約します。
- リポジトリ 👉 https://github.com/BonoJovi/Bonolith
JaIM から Bonolith へ ―― 名称変更のお知らせ
これまで JaIM (Japanese AI-powered Input Method) として公開していたプロジェクトを、このたび Bonolith に名称変更しました。
- 旧リポジトリ: https://github.com/BonoJovi/JaIM (アーカイブ。Bonolith への案内を掲示)
- 新リポジトリ: https://github.com/BonoJovi/Bonolith
機能・思想はそのまま引き継ぎつつ、コア変換品質の刷新を機にリブランドしています。既存の JaIM ユーザーの方は Bonolith への移行を推奨します。
ちなみに「Bonolith」は完全な造語で、映画『2001年宇宙の旅』の モノリス(monolith) に由来します。静かにそこにあって、知性を一段引き上げる――そんな入力環境を目指す、という願いを込めています。
Bonolith とは
Bonolith は「辞書ベースの確実さ」と「LLM の文脈理解」を組み合わせた日本語 IME です。変換は次の 3 段ハイブリッドパイプラインで行われます。
キー入力 → ローマ字→かな変換 → 辞書分節 (DP)
↓
文法スコアリング → 候補リスト → ユーザ
↓ (バックグラウンド)
LLM リランキング (llama-server HTTP)
↓
候補順位更新(次回操作時に反映)
ポイントは、LLM をブロッキングに使わないことです。辞書 + 文法でまず候補を即時提示し、LLM のリランキングはバックグラウンドで走らせて次の操作時に反映します。これにより、LLM があっても入力のレスポンスを損ねません。そして LLM サーバーが起動していなくても、辞書 + 文法 + ユーザ学習だけで普通に変換できます(古い PC や、LLM を使いたくない人向けに --no-llm インストールも用意)。
技術的な見どころ
1. ローカル LLM による同音語の判別(logprob スコアリング)
「はし」→ 箸 / 橋 / 端、「きしゃ」→ 貴社 / 記者 / 汽車 / 帰社 …… 日本語入力の古典的な難所である同音語の選択を、ローカル LLM で解きます。
実装は、llama-server に GBNF 文法で候補サーフェスを強制生成させ、その per-token logprob の平均 を「文脈における自然さ」のスコアとして読み取る方式です。プロンプト(左文脈)に対して各候補の対数尤度を測ることで、辞書頻度だけでは決められない同音語を文脈で絞り込みます。すべてローカルで完結し、入力テキストが外部に出ることはありません。
2. 「ひらがな固着」対策
素のかな候補(変換せずそのまま)は、LLM から見ると常に"もっともらしい継続"になりがちで、放っておくと「今日」より「きょう」が勝ってしまう――いわゆる ひらがな固着 が起きます。Bonolith では plain-kana 候補の LLM スコアを中立化し、漢字候補が頻度・文脈・ユーザ学習で正当に勝てるようにしています。
3. ユーザ学習が LLM を上書きできる
選択履歴を対数スケールで学習し、繰り返し選んだ表記は LLM の判断を上書きできるように重み付けしています。「あなたがそう書く」という事実を、モデルの一般論より優先できます。
4. 辞書頻度のoverride(埋もれた常用語の救済)
IPADIC の頻度は"入力頻度"を必ずしも反映せず、日常語が稀な同音異字の下に埋もれることがあります(例: 「料理」が「良吏」の下、「鍵」が「鈎」の下)。Bonolith は明確な常用デフォルトだけを PRIORITY_OVERRIDES で群の最上位に引き上げます(文脈依存の 雨/飴・箸/橋 等は強制せず LLM に委ねる、という線引き)。
5. IBus は Pure Rust、Fcitx5 は FFI
-
IBus:
zbusによる D-Bus 直接実装(Pure Rust) - Fcitx5: Rust エンジン(cdylib)+ C++ アドオン(FFI)
両フレームワークでコア変換ロジックを共有しています。
6. 変換品質を"数値で"守る二層評価スイート
地味ですが力を入れたのが評価基盤です。変換品質を回帰テスト化するために、
- hermetic 層: 決定的なモックスコアラーで「辞書 + 品詞」品質を測り CI ゲート化(サーバー不要・再現可能)
- live 層: 実際の llama-server を使い、同音語など意味依存の解決品質を測定
の二層で、フル変換パイプラインを通した top-1 正解率をカテゴリ別にスコアカード化しています。「辞書を直したら何 % 改善したか」を勘ではなく数値で言える状態にしました。実機で見つけた誤変換をそのままテストケースに取り込む導線も用意しています。
インストール(概要)
詳細は README を参照してください 👉 https://github.com/BonoJovi/Bonolith
# ビルド
cargo run --bin generate-dict # IPADIC から組み込み辞書を生成
cargo build --release
# LLM(任意): llama-server + Qwen2.5-1.5B をワンコマンドで用意
./scripts/install-llama-server.sh
あとは IBus / Fcitx5 に入力ソースとして登録するだけです(手順は README に記載)。LLM なしでも動作するので、まず辞書だけで試してから LLM を足す、という導入もできます。
おわりに
Bonolith は「ローカルで完結する、賢い日本語入力」を目指した OSS です。LLM をレスポンスの邪魔にせず、辞書の確実さと両立させる――その設計を楽しんでもらえたら嬉しいです。
- リポジトリ: https://github.com/BonoJovi/Bonolith
- 旧 JaIM からの移行案内も掲示しています: https://github.com/BonoJovi/JaIM
- 開発を応援いただける方は Ko-fi からも 🙏 https://ko-fi.com/bonojovi
フィードバック・Issue・スターお待ちしています!