見出し画像

Linuxの日本語入力のはなし

このページは
みすてむず いず みすきーしすてむず (3) Advent Calendar 2023
10日目の記事です

みなさんこんにちは。カノンと申します。

この記事では、いつか私が触れておくべきだろうなと思っていた、LinuxのIME事情(特にmozc関連)について、書き連ねていこうと思います。
※この記事の内容は個人の感想に基づく記述が多数含まれています。他者を攻撃する意図はありません。


はじめに LinuxのIMEの種類

まずはLinuxを取り巻くIMEがどうなっているかを簡単に解説します。
Linux上で多言語入力を行う際、"入力メゾット(IM)フレームワーク"上で"入力メゾットエンジン(IME)"を動かして、入力する形になります。これらに幾つか種類がある訳ですね。

入力メゾットフレームワーク(有名所)

  • iBus
    多くのディストリビューションに標準でインストールされている(デスクトップ環境の依存パッケージである場合が多い、という表現が正確かも)フレームワーク

  • fcitx
    ファイティックスと読むらしい。最近良く使われるフレームワーク

  • uim
    Universal Imput Method。日本の人が開発したらしい

入力メゾットエンジン(有名所)

  • Anthy
    多くのディストリビューションに標準でインストールされている(日本語向けローカライズパッケージバンドルに含まれている)IME

  • Mozc
    Google日本語入力のオープンソース版とも言えるIME。その予測変換の性能の良さから利用者が増えている

とまぁ、Linuxで日本語を入力したいユーザーはこれらの中から好きなものを組み合わせて使う訳です。挙げなかったものにlibkkcとかskkとかありますけど、あれ等は使ったことが無いのでパスです…

Mozcと拡張辞書の話1 -Mozcの弱点と克服アプローチ-

次は、先程挙げたIMEの中でも最近利用者が増えているMozcの話をしましょうか。

書いたように、Google日本語入力のオープンソース版というだけあって、予測変換や学習辞書なんかは普段からスマホ等で使い慣れているGoogle日本語入力やGboardのそれに近しい挙動をします。
ただ、Google日本語入力に対して明確に劣る部分が存在していて、"内蔵辞書の語彙が少ない""クラウド予測変換が使えない"という部分です。
前者はおそらくGoogle日本語入力に共通する弱点である可能性が高いですが、Google日本語入力はクラウド予測変換と言ってGoogleが持つ膨大な検索データからのフィードバックを受けることが出来るため、気になるような弱点では無かったのです。

Mozcのこの弱点を克服するために、幾つかのアプローチが取られました。

ユーザー辞書で語彙を補間

これはMozc/Google日本語入力ではないIMEでもよく使われる方法です。ユーザー辞書のデータが公開されている場合もあり、例えば"ニコニコ大百科IME辞書"なんかは有名でしょう

しかし、Mozc/Google日本語入力でこれらユーザー辞書を用いた語彙の補間には弱点があり、"内蔵辞書より優先して変換される"という点です。変換の際に出てくる候補の優先順位が「学習辞書>ユーザー辞書>内蔵辞書」となっているせいですね。これはいわゆる"使い慣れたGoogle日本語入力の変換候補"とは異なる訳なので、あまり使っているユーザーが居ない印象があります。よって次のアプローチが存在している訳ですね。

外部の辞書をパッチで取り込んでビルドする

これはMozcで外部辞書を内蔵辞書として使えるようビルド前に取り込んでやろうというアプローチですね。この記事の便宜上"辞書パッチ"とでも呼びましょうか
先述の通り内蔵辞書の増強を図るものなので、Mozcの変換精度をそのままに語彙が増強されるという画期的(?)な方法でした。
オススメの辞書やビルド方法、パッチなんかを公開する人が出てきたりと賑わいを見せていましたが、ある辞書パッチを開発している人が公開を終了してしまうというニュースを受けて、ユーザー達の間に激震が走ります。

あるLinuxディストリビューターと辞書パッチ開発者の苦悩

さて、ここで一つ昔話をしましょうか

むかしむかし、あるところに、Linuxという不思議な魔法を使える少年がいました。少年は自分の魔法の力を広めるために、自分流のLinuxの魔法の本を作って、世界中の人に配っていました。
少年は、魔法の本にはいろいろな便利な魔法を入れたいと思っていました。そこで、彼はある日、文字を入力するときに使う魔法の杖に、もっと便利になる魔法の呪文をかけたものを見つけました。
少年はこの呪文がかかった魔法の杖を自分の魔法の本に入れようとしましたが、その魔法の杖はとてもややこしいルールがありました。
そのルールによると、呪文は色んな所からかき集められた権利関係が複雑なものであり、魔法の杖を作った人の許可なく、魔法の本に入れることはできませんでした。少年は困ってしまいました。
少年は友達に相談するために、鳥の羽根で書いた手紙を空に飛ばしました。その手紙は私のところに届きました。私は彼に、魔法の杖を作った人にお願いしてみるか、別の魔法の杖を探すか、あるいは自分で魔法の杖を作るか、というアドバイスをしました。
しかし、少年はどれもできないと言いました。別の魔法の杖を探すのは面倒だと言いました。自分で魔法の杖を作るのは難しいと言いました。彼は魔法の杖のルールが嫌いだと言って、怒ってしまいました。
そのとき、呪文がかかった魔法の杖の作者が、少年の手紙や怒りの言葉を見てしまいました。魔法の杖を作った人は悲しくなりました。彼は自分の魔法の杖を便利に使ってほしかったのです。でも、少年のような人には使ってほしくないと思いました。
そこで、杖の作者は自分の魔法の杖を隠してしまいました。
それから、誰もその魔法の杖を見ることはできませんでした。このニュースは、それまでこの作者の杖を使っていた魔法使い達の間で激震が走りました。一部の魔法使い達は少年を責立てましたが、少年にも、利用者だった魔法使い達にも、そして私にも、どうすることもできませんでした。

Bing Chatの創造的モードにお話を装飾してもらいました。一部改変されています

この昔話における魔法の杖というのがIMEのMozcのことです。昔話風にしてもらう過程でLLMの凄さを体感しました

この"もっと便利になる(色んな所からかき集められたせいで権利関係が複雑な)呪文をかけた魔法の杖"のせいで、少年の"自分流Linuxの魔導書"を便利にするという夢は叶いませんでしたし、少年の手紙の内容のせいで、杖の作者は公開をやめてしまいました。
誰も幸せになっていませんね。悲しい出来事でした。

Mozcの機能的な問題点

この問題を解決する一つの方法として、Mozcのユーザー辞書を内蔵辞書と同格に扱う機能というのが必要なのかもしれないと考えています。

権利的に複雑な辞書データをパッチで取り込んで事前にビルドするのは、マシンパワーも時間も使いますからね。それに再配布がライセンス的な意味で困難になってしまいます。それなら、IMEのバイナリは既存の物を使って、辞書はユーザーが好きなのを選んで、それでいて先述の通り予測変換の性能が普段と変わらないように語彙を強化出来るようなものであったら、端からこんな出来事は起きていなかったかもしれません。

この記事を読んだ貴方は「MozcはオープンソースなんだからForkして欲しい機能をブチ込めばええやん」と思うかもしれませんが、MozcというプロジェクトはGoogleが抱えているクソデカプロジェクトであるため、個人でおいそれと手を出せるような物ではないという側面もありますし、次の見出しで語るように、仮に個人でForkしてメンテナンスを継続できるとしても、それは脆弱なものとなることが考えられます。要するに私には無理だ…

"個人メンテナー"の脆弱さ

さっきの昔話になぞらえると、Linux魔導書を書きたい少年も、呪文がかかった魔法の杖の作者も、個人でそれらをメンテナンスしている訳です。
彼らのメンテナーとしての原動力は、やる気、愛、あと使ってくれるコミュニティへの信頼、の占める部分がかなり大きいと思っています。これらは言い争いとか悪口とか、そういうコミュニティの不穏な動きによって簡単に崩れ去ってしまうのです。
長く続いて欲しい個人プロジェクトには感謝と応援を忘れないようにしたいですね。私もいつかこうやって個人でプロジェクトをメンテナンスするような日が来るかもしれませんね…(不安)

終わりに

今回の記事は、数年前に私の身辺で起こった話について、私が考えていることをツラツラと描くだけの記事になってしまいましたが、如何でしたでしょうか。
複雑なライセンス関係やコミュニティでのトラブルに負けず、彼ら・私達は好きなことを続けていってほしい・いきたいですね、という結論で締めさせていただきます。

未来へ

私には難しいので、誰か高性能かつ拡張性の高いオープンソースな日本語入力システムを開発してください

明日のみすてむず いず みすきーしすてむず (3) Advent Calendar 2023
担当は、ぷろろーぐさんです


参考URL
https://zenn.dev/centra/articles/mozc-ut-ended-its-publication-and-gotagota
https://chienomi.org/articles/linux/202301-mozcdic-ut-mozcdict-ext.html

この記事が気に入ったらサポートをしてみませんか?