Linuxの日本語入力の歴史は血で描かれている。Linuxには企業に雇用された専任のIMEチームなどない。ごく限られたリソースで細々と紡いできた足跡を辿って築かれている。開発者がその孤独と重荷に耐えきれなくなった時、一人またひとりと斃れていき、悠久の歳月を経て誰かが足跡の後を引き継ぐ。
そうした先人たちの努力のおかげで、今日僕たちはさほど苦労せず日本語入力を行うことができる。かつてフタバスズキリュウが福島県沖で猛威を振るっていた時代を思い出してほしい。あの頃、我々の祖先はまだ海の底でこそこそとソースからビルドしていたのだ。
しかし生物の進歩に際限はない。やっとの思いで陸に上がった我々がやがて空を穿ち宇宙に昇ったように、ひとたび日本語入力を手に入れると次は品質が気になりはじめる。Linuxの日本語入力は最低限の実用には耐えても、小説やエッセイなどの文章創作では明らかに事足りない。少しでも文節が長くなると途端に的外れな変換を行ってしまう。
この問題は簡単には解決できない。IMEの変換エンジンは一朝一夕ではどうにもならないのだ。Linuxの日本語入力のみならずLinuxユーザの物書きもまた、血で文字を書き記していた。強く食いしばった歯に切り裂かれた唇から滲み出る血潮が我々の唯一の糧であり、代償であった。ビル・ゲイツやスティーブ・ジョブズの胸に抱かれることを選ばなかった自由民たちの、支払うべき代償である。
そんなところへ差し込んだ一筋の光が、新時代の寵児たるLLMだ。LLMの推論能力を変換エンジンに応用すれば、より少ない労力でまともな変換性能が手に入るかもしれない。もっとも知名度が高いのはIPAの未踏プロジェクトに採用されたZenzaiと思われる。自己回帰型モデル特有のボトルネックを投機的デコーディングによって解決した点が話題を呼んだ。
自己回帰型モデルではテキストを単一トークンずつ順番に生成する。たとえば「今日は良い天気です」という文を生成する場合、「今日」「は」「良い」「天気」などと各トークンごとに推論を実行しなければならない。実用に値する性能の言語モデルでは、この時の頻繁な推論がボトルネックを生んでしまう。
一方、投機的デコーディングは既存のシステム(つまり、従来の変換エンジン)に下書きを作成させ、本体となる言語モデルに検証を行わせる仕組みを採っている。自己回帰型では逐次的な生成しか行えないのに対して、この手法は言語モデルによる一回の推論で並列的に検証を行える。
今回紹介するKarukanは知名度こそまだ低いものの、異なるアプローチで同じ問題の解決を図っている。KarukanではSudachiDict由来の辞書で変換候補を列挙してから、GPT-2ベースの専用モデル(jinen)がスコアリングを行う。従来の変換エンジンが統計的に行っていた処理を言語モデルに置き換えた構成と言える。すでに完成したトークン列が与えられている状態であれば、一回の推論で全体の妥当性を計算できる。トークンを生成せず評価に限定しているため高速な変換が可能となる。
なによりありがたいのは、Linux環境で動作することだ。 Zenzaiが組み込まれているazookeyはmacOS向けのソフトウェアだし、同様のIMEでLinux上で動作する代物はそう多くない。開発が活発なものに限ると極めて少ない。さっそく同梱のREADMEに則って導入を開始した。本稿における導入手順はArch Linux環境を前提とする。まずは、fcitx5と開発ツールをインストールする。
1sudo pacman -S fcitx5 fcitx5-qt fcitx5-gtk cmake extra-cmake-modules gcc
2
3# Rustツールチェインは最新のstableが必須
4rustup update stable
次にリポジトリをクローンしてリリースビルドを行う。その後、fcitx5アドオンのインストールとシステム辞書のダウンロードを実施する。
1git clone https://github.com/togatoga/karukan.git
2cd karukan
3cargo build --release
4
5# fcitx5アドオンのインストール
6cd karukan-im/fcitx5-addon
7cmake -B build -DCMAKE_INSTALL_PREFIX=/usr
8cmake --build build -j
9sudo cmake --install build
10
11# システム辞書のダウンロード
12mkdir -p ~/.local/share/karukan-im
13cd ~/.local/share/karukan-im
14curl -sLO https://github.com/togatoga/karukan/releases/download/v0.1.0/dict.tgz
15tar xzf dict.tgz && rm -rf dict.tgz
最後に、fcitx5を再起動して設定ツールからKarukanを入力メソッドに追加する。設定ツールの右側からKarukanを見つけて左側に移動させる。Mozcなどの既存の日本語IMEは逆に右側に動かしておく。初回の変換時のみHugging Faceからモデルがダウンロードされるので挙動が重い。二回目以降はキャッシュが働く。
実際に使ってみて、確かに長い文節でも賢く解釈してくれると感じた。「このようになる」といった文が「このように鳴る」などと的外れに変換されることもない。従来のIMEでは助詞が巻き込まれて漢字に変換されるなど、あからさまに文意を無視した処理も目立っていたが、KarukanではローカルLLMの推論がうまく働いているおかげで不可解な変換はほとんど見られない。
もしかすると、Linuxの日本語入力はついに救われたのかもしれない。今後、言語モデルとマシンスペックの性能向上が共に進んでいけば変換精度はますます改善されていくだろう。僕としてもなんとかこれに賭けたい気持ちが強く、私的なこだわりを反映させてまでフォークして使っている。詳細はリポジトリのREADMEの末尾に記したが、抜粋すると概ね以下の通りになる。
まず、末尾「n」を「ん」に変換するようにした。「ふまん」を「humann」ではなく「ふまn」の状態で「不満」に変換できる。次に、Shift+英字でアルファベットモードに入って文字列を確定させた後、自動的にひらがなモードに復帰する形にした。また、Shift+矢印キーによる部分変換を実装した。他にもF6〜F10キーによる直接変換や全角記号の入力、変換ウインドウの非表示化など、要するに一般的なIMEに存在する諸機能を自前で補っている。
正直な話、長年の実績に裏打ちされた機能性を持つ既存のIMEと比べるとまだまだ物足りないところは多い。しかし幸いにしてこれはOSの奥深くに幽閉されたクローズドなソフトウェアでもなければATOKのようなシェアウェアでもなく、まったく自由なOSSであるからにしてその気になれば自力で改良していける。
極めて難解な変換エンジン周りの実装に比べれば、インターフェイス周りの修正など(Claude Opusの力をもってすれば!)きょうび大した問題ではない。このように、Linuxの日本語入力は各々が最適な言語モデル、最適なスコアリング、そして最適なインターフェイスをそれぞれ調達・実装する形で円満な解決に至るのではないかと期待している。