Chienomi

Mozcdic-UT (Mozc-UT)が終わった話と、代替品を開発してる話

Live With Linux::topic

2023-01-12にLinux界隈に激震が走ったらしい。 Linux環境(Unix環境を含む)の日本語入力を支えていた、Mozcdic-UTプロジェクトが終了したからだ。

まず、前提として私の立場を明確にしよう。

私は2017年から、従来のMozc-UTに代わる新しい(ライセンス上の懸念のない)Mozc辞書として誕生したMozc-NEologd-UTのFcitxバインディング、fcitx-mozc-neologd-utのAURパッケージをメンテナンスしてきた。 その後新生Mozc-UTが誕生してからはfcitx-mozc-ut-unifiedfcitx-mozc-ut-unified-fullというふたつのパッケージを加え、計3つパッケージをメンテナンスしてきた。 その後、mozcdic-ut自体がfcitx4をサポートしなくなったこと、fcitx5は既にメンテナーがいたことから私はパッケージのメンテナンスから外れた。

このあたりの経緯が分かっていないと本記事の理解は難しいので、AURにあるMozc-UT系パッケージについて(新Mozc-UTパッケージをメンテナンスし始めた頃のもの)と、libkkc UTと日本語入力の話を先に読んで欲しい

Mozcdict-UTはMozcにパッチを当て、大幅に語彙を追加している。

Mozc自体はGoogle日本語入力のOSS版で、基本的にMecabの辞書を用いている。 このMecab辞書とGoogle製の辞書の間にはかなり大きな差異があるため、MozcとGoogle日本語入力の入力効率には大きな差がある。 そして、Mecabはあまり語彙力に優れていないため、日本語入力としては厳しい。特にスラングとかは弱い。

そこでMozcの辞書を強化しようという考えが出るわけだ。 現行でもメンテナンスされているかな漢字変換エンジンとしてはAnthy, kkc, SKKもあるが、語彙力が同等とするとMozcがやはり文節区切りにおいて優れている(この尺度でSKKを測れないが)。 なおかつ、Mozcに語彙力を追加すると、Google日本語入力を上回る快適な入力環境が実現するというのもあった。

こうしたことから現実的に日本語入力をそれなりにする人にとって、Mozcdic-UTを組み込んだMozc、つまりMozc-UTが頼りの綱だったのだが、残念ながらMozc-UTは失われてしまったのだ。

ちなみに、話題になったのは2023-01-12になってからだが、2023-01-11の時点で既にMozcdic-UTはなくなっていた。 私はAURパッケージをメンテナンスしていたが、Mozcdic-UTは非常に神経質で、なおかつPKGBUILDはビルド済みパッケージではないという関係で、更新されると「直ちに」AURパッケージも更新しないと「ビルドできない」というコメントがついてしまう状況だったので、常時チェックできるようにしていたのだ。

Systemd Timerでこんなスクリプトを回していた。

#!/usr/bin/zsh
w3m -dump 'https://osdn.net/users/utuhiro/pf/utuhiro/files/' | grep -o "mozcdic-ut-[0-9a-zA-Z.]*" > ~/.cache/reasonset/aur/mozc-neologd-ut.next

if ! diff -q ~/.cache/reasonset/aur/mozc-neologd-ut ~/.cache/reasonset/aur/mozc-neologd-ut.next
then
  do_notify fcitx-mozc-neologd-up "$(< ~/.cache/reasonset/aur/mozc-neologd-ut.next)"
fi

mv -f ~/.cache/reasonset/aur/mozc-neologd-ut.next ~/.cache/reasonset/aur/mozc-neologd-ut

このため、すぐ気づいた。

「山田ハヤオが悪い」は果たしてどうか

UtuhiroさんはAnthy-UTという、Mozcより前の時代から拡張辞書を作り続けていた。 10年以上に渡るライフワークだ。

素のAnthyでは「日本語入力はなかなか厳しい」という世界だったから、Anthy-UTがLinuxデスクトップを日本人が日常的に使うことを可能にしたと言っても過言ではない。 実際、私がModified Anthy(Anthy-UTとG-HALさんのパッチを当てたもの)からMozcに移ったときは、その変換効率の悪さに失望した。

だから間違いなく偉業であったし、他から関心を持たれないにも関わらず長年に渡りLinuxの日本語入力環境を支えてきたUtuhiroさんの行いは大いに評価されるべきであることは論を待たない。

が、私は「だから安心だ」というのは危険だと前々から思っていた。

それは以前の記事で述べた理由でもあるが、Mozcdic-UTはパッケージングする側としては、かなり神経質で不安定なプロジェクトだったのだ。 また、Utuhiroさんがパッケージングされることを嫌がっている感じもあったので、今後長期に渡って続けていく意思や、モチベーションを保てるだけの責任感を持っているわけではないと感じていた。 もちろん、それは決して責められるようなことではない。 けれど、単純な事実として、「Utuhiroさんひとりに頼りきりというのは、かなり危ない橋だ」と感じられたのだ。

今回の件ではUtuhiroさんが、Mozcdic-UTをやめた理由として山田ハヤオさんがMozcdicを批判したことにあるとしている。 それ故に彼を責める向きも少なくないようだ。

もちろん、FUDをばら撒くというのは邪悪な行いであり、それによって重大な損失を起こすことなど容易い話だ。 FUDをばら撒くこと自体が品性に悖る行為であり、当然に褒められたことではなく、それを責めること自体にさしたる違和感はない。

が、それを以て「山田ハヤオがMozc-UTを潰した」とするのはいささか飛躍しすぎていると私は思う。 もうここしばらく、UtuhiroさんはMozc-UTに対するモチベーションを失いかけていたように感じるし、言ってみれば容易く折れる翼だったのだ。 キッカケとなった、つまりその翼を折った張本人は山田ハヤオさんかもしれないが、「既に折れかけていたものを折ったから、その責任はすべて折った者にある」というのは違うのではないかと感じる。

FUDを擁護する気はさらさらないが、この状況自体は起こるべくして起こったことだと思う。

緊急避難的代替物の開発を始めた

Mozcdic-UTが扱いにくいということで、私は一時期forkを考えていたことがある。 カスタマイズしたい部分があるというのもあった。

実際、AURのfcitx5-mozc-utはMozcdic-UTをそのままパッケージングしているわけではなく、独自のものになっている。

それにこの状況になるのは分かりきっていたから、私には準備があった。 少なくとも、そのコードを読んでいて、心の準備も住んでいた一日の長は揺るがない。

果たして、私はMozcdic-UTに代わるMozcdict EXTの開発に着手した。

このソフトウェアはMozcdic-UTとはレイヤーもアプローチも違う。 よりシンプルでコンパクトなソフトウェアだ。

Mozcdict EXTはパッチもなく、単純にシステム辞書の追加語彙を生成する。 Mozcのビルド時に組み込めば語彙拡張ができるし、他のパッチを阻害しない。

生成した辞書をMozcに組み込むと、ライセンス的にはそれはそれは複雑なものになってしまうのだが、本ソフトウェアはただのツールなのでその問題に関知しない。 Mozcに対するアプローチを含んでいないので、ソフトウェア開発自体はMozcへの依存度も低い。

重要なのは、これは緊急避難的なソフトウェアであり、メインストリームとして使われていくことは想定していないということだ。

Linuxデスクトップにおける重要なコンポーネントが使えなくなったというと、私は東風フォントの事件を思い出す。 あのときはkochi-subst、のちのさざなみゴシックが開発された。 さざなみゴシックの品質は、まぁそれはそれはひどいものであったが、少なくとも日本語が表示できないという事態は回避された。 その後、VLゴシックやMPlusフォントが開発され、さざなみゴシックはお役御免となっていく。

Mozcdict EXTはさざなみゴシックのような緊急避難的代替物である。

本当は、開発が安定しており、なおかつ高品質なかな漢字変換エンジン、並びにかな漢字辞書が誕生するのが望ましい。 だが悲しいかな、日本語入力界隈というのは、みんな使うものであるにも関わらず関心を持つ人が本当に少なく、人材がいない。 そのため、仮にプロジェクトが立ち上がったとしても、今度はそれにひたすら依存するだけになる可能性が高く、なかなか難しい。

kkcが大きな辞書を取り扱えないということが分かっている以上、現状ではMozcに頼らざるを得ず、そしてMozcを補完する辞書が必要である。 Mozcdict EXTは来たるべき日までのつなぎとして、その役割を果たす。 また、新たなかな漢字変換エンジンを開発する際に、Mozc辞書を変換するだけで転用できるという意味で、その未来への架け橋としても機能すると思っている。

Mozcdict EXTはMozcdic-UTのコードは基本的に使っていない。 Mozcdic-UTのツールはApache License 2.0になっているので、使うことは可能なのだが、Utuhiroさんが避けたがっているということもあるし、そもそも私はUtuhiroさんとは日本語変換に対する考え方が違うというのもある。 プログラミングの好みも違うので、自分で書いた。

大きな違いとして固有名詞の扱いがある。 Mozcdic-UTでは固有名詞を除外しているが、私は固有名詞の語彙は変換の快適性に大きな影響を与えると思っているので、固有名詞を除外していない。

また、Mozcdic-UTは表現と読みが同じで品詞が異なる語を除外しているが、連文節変換する上では品詞が異なる語は別の語として扱えないと不便だと思っているので、これもしていない。

現状ではNEologdのみの対応であり、これができていないとかなり痛いので大急ぎでやったが、NEologd以外については暇があるときにおいおいやっていくつもりだ。

パッケージングとAUR

くどいようだが、私はツールのみを開発し、生成物については関知しない。 パッケージングに必要なファイル(例えばSPECファイル)を同梱する予定はなく、そのようなPRを受け入れるつもりもない。

ただし、AURのみは話が別である。 なぜならば、パッケージをビルドしなければ私としてもテストできないので、どのみちPKGBUILDを書く必要がある。 そして、PKGBUILDを書いたなら、それを公開すればみんながハッピーになる。

このため、私は新たにこのMozcdict Extを使ってNEologdを組み込んだfcitx5-mozc-ext-neologdを公開した。 もちろん、このPKGBUILDを参考にパッケージングしてもらっても全く構わない。

Utuhiroさんのツールとの関係

2023-01-13になってからUtuhiroさんが次の声明を出した。

オリジナルデータごとにプロジェクトを分割して、単一のライセンスの辞書を配布できるよう作業しています。 ただし、あなたが生成された辞書をMozcと結合して配布すると、ユーザーが法的問題を主張する可能性があります。 jawiki-latest-all-titles によってコストを修正できないので、変換精度が少し下がります。

このため、私のやつは必要ないかな、とも思ったのだが、検討した結果、有意義であると判断されたのでそのまま公開となった。

有意義だとしたのは次の点だ。

  • 2023-01-13 時点で既に動くものが存在している
  • 2023-01-13 時点で既にAURパッケージが存在している
  • 非常に単純な方法で継続的にビルド・更新可能である
  • GitHub上のオープンなプロジェクトである
  • 日本語及び仮名漢字変換に対するスタンスに違いがある (生成ロジックにも違いがあるし、今後より改善されていく予定だ)
  • 辞書の配布ではなく辞書の生成にフォーカスしている
  • 追加する計画がある辞書はmozcdic-utになかったものが含まれている

日本語入力に関してさらにもう少し

コンピュータの歴史の中で、日本語入力というのは割と「難しいもの」であった。

昔はMS-IMEのとんでもない変換はよくネタにされていたし、ことえりの誤変換は書籍にもなった。 そういう状況の中ではATOKは優れた変換システムだと持て囃されたが、実際のところそこまで快適な変換というわけではなかった。

Google日本語入力登場時は非常に優れた入力効率に驚いたものだが、依然として「欲しい単語が一発で出ない」という使い心地の悪さに悩まされた。 基本的に登場時から変わっていないが、今使ってみると変換精度は褒められたものではないと感じてしまう。

私が「快適な日本語入力だ」と感じたのは、2008年のAnthyである。 おおよそ変換は欲しい単語に変換され、非常に快適であった。 人名など固有名詞が一発で変換できたのは驚いた。

それからMozc-UTになって、多少変換がおかしい、順序が望ましくない、品詞が適切でないといったことはあるが、ユーザー辞書で育てていけばある程度になっていて、「だいたい満足」に至った。 Mozc自体は語彙力が足りず、満足なレベルに仕立てるには労力が大きい。

ことえりは今もなかなか厳しい変換効率だが、MS-IMEは一時期(Windows 10になった頃)、非常に素晴らしい変換効率を見せた。Web変換を有効にすると暗澹たる有様であったが、「Google日本語入力の入力効率はよくない」ということを見せつける出来であった。 しかし、今のMS-IMEはWeb辞書を雑に取り込んでしまったために、まともに入力できないひどい状態となっている。

Atokはどうだろうか。 サブスク制になったAtokは使っていないが、Atok for Androidは使っている。 ハッキリ言って、語彙力がなさすぎて本当に使い物にならない。 大量の辞書をねじ込んで、なんとか多少使えるようになったくらいだ。

日本語入力の理想は現在の文脈と書き手のカルチャーから判断して、ほぼ訂正不要で一発変換ができるようにすることだ。 非常に専門性の強い分野(例えば、ゲーム作品の用語など)をユーザー辞書で補えば良いくらいが理想的。

現実にそこに到達できないのは様々な要因がある。

  • 言葉の変化が早い。辞書を作っている間に日本語が変化してしまい、リアルに使う言葉を反映するのがとても難しい
  • 膨大な語彙が存在するため、単純に辞書を作る労力が大きい
  • 辞書を持っているところは相当大変な思いをして作っているので、そうそう外部に提供できない。また他の形で利用できるようなフォーマットでもない
  • 日本語学的側面と言語学的側面の二分野にまたがっている上に、それを変換エンジンにするにはプログラミングに関する広汎な知識も必要で専門性の問題がある
  • 文脈判断や形態素解析など、日本語の言語学的研究はあまり人気がない (特に計算機科学者に)

おもちゃ程度なら作れなくもないが、とてもforkするなんてことはできないレベルなのだ。 Google日本語入力は他のかな漢字変換エンジンに関わっていた人がやっており、Google日本語入力自体開発力不足に悩まされている。 社会の根幹を担っているプロダクトが、実は個人がほとんどボランティアでやっている……なんてことも珍しくはない世の中だが、Google日本語入力ですらなかなかか細い体制であり、それに代わる人材もなかなかいない。

文脈判断など、AI技術を活かせる要素もあるが、AI技術に頼るとプリミティブなところでどうがんばっても変換できないという事態が起きかねないのが難しい。 評価が高く安定感のあるDeepLでも時々大事故を起こすのだ。

DeeplでMozcのライセンスを翻訳した結果

WindowsやMacのユーザーは他人事と思っているかもしれないが、コンピュータの世界における日本およぞ日本語の地位は継続的に低下傾向にあり、日本語変換に関するアプローチは迷走を続けている。 今は概ね満足しているユーザーも、やがて「まともに使い物にならない」というレベルまで悪化してしまう日が来る可能性は普通にあるのだ。

Linuxにおいてはどうか。

Mozcは性質上失われにくいプロジェクトではあるが、かといって安定したプロジェクトでもない。 このあたりは、MS-IMEやことえりと似た問題である。 「日本語入力ができない」となれば開発元にとっても損失が大きいため、失われにくいが、かといって優れたものを生み出す動機にも乏しく、逆にいっそキーロガーのようなプログラムにしてしまう動機はある。 Googleの場合はオープンソースとしてそれを広く利用してもらう動機にも乏しく、Linuxの状況はより厳しい。

むしろ一番安定しているのはDebianでメンテナンスされているAnthyで、Anthyが「Linuxの日本語入力最後の砦」となる可能性すらある。 kkcは分節区切りもそこそこ厳しく、大きな辞書を扱えないため将来はきつい。

現状もっとも期待できるのは、Sudachiベースの新しい変換エンジンの開発だろうか。 Mozcは辞書部分に際立った優位性を持っていない(基本的にはMecabの辞書から生成できる)ため、形態素解析器を下地にすれば可能性はだいぶ見えてくる。

ただ、全体的に日本語入力はかなりの苦境であり、Linuxではなおさらなのだ。 「日本語が入力できる」という状況自体、決して安泰ではない。

OSS活動のあり方

FUDをばら撒く者は大体どこにでもいるものだ。 どうするべきかは誰もが知っているだろう。 「あなたが左の頬を叩かれたら、相手の右の頬をグーでいきなさい」

いや、それは冗談だが。

OSS活動をする上で、どうでもいい雑音は無視すれば良いのだが、悪影響がある場合は徹底的に戦わなくてはいけない。

そういうものであるから、OSS活動というのは、非常にエネルギーが必要だ。 これは、「なくてはいけない」とか「あるべきだ」とかではない。 それだけエネルギーを注ぎ続けないと潰されてしまうから、「そうせざるをえない」のである。 継続的にOSS活動やメンテナンスをしていない人にはなかなか想像もつかないだろうが、「見返りのないことに人生のかなりの部分を捧げて、にも関わらず罵詈雑言を浴びたりする」というものだから、本当にエネルギーを必要とされる。

エネルギーが足りなくなれば続けられなくなる。 OSSに対してはそういう、非常に苦しい中を必死でがんばっている繊細なものだという認識を持って接したほうが良い。 少なくとも、OSSに大して心無い言葉を投げかけたり、FUDをばら撒いたりする人は人間としてどうなのかと私は思う。

私だってそうだ。 このChienomiは、結構な費用と、時間を注いで書いている。 それは、こうして書き残すことが人のためになると信じているからだが、もしChienomiをやめれば私はとても大きな自由が手に入る。 続けるのは決して楽なことではない。 応援コメントや、いいねがあればもうちょっとモチベーションも上がるが、基本的には現状アクセス数くらいを支えにやっているもので、こうして記事にまとめて情報を発信していることを「当たり前だ」と思われるとしんどい。

YouTubeも同様だ。というより、かかる時間や費用で言うとYouTubeのほうがしんどい。 そういう色々な持ち出しがある状態で、さらにmozcdict-extを作ったわけなので、あまり色々求められてもね、となってしまう。

が、OSS活動を続けていくにはそういうところ大事で、「しんどくならなくて、続けていけるようなスタンスを確保する」なのだ。 嫌になって投げ出してしまうより、なかなか更新できなくてもちゃんとメンテナンスされているほうが人のためになるわけで、「人に何か言われてもあまり気にしない」「要望をもらってもマイペース」「ソフトウェアの方向性は自分で決める」など、あまり物事を気にしない神経の太さというか、おおらかさが必要だ。

OSS活動するときは、あまり気にせずマイペースに。 無理なく続けられるように。

OSS活動にはメンヘラ女子に接するくらい優しくしましょう。

まぁそう言ってもFUDとかは食らうものなので、なによりマイペースに無理なくやるのが大事。

2023-01-23 追記

FUD

この記事はある程度共有頂いているのだが、反応の中で気になるのが、「FUDという言葉の語義を分かってないのでは?」ということである。 なので、ちょっと解説しておこう。

FUDはネットスラングの類ではなく、日常語1の類であり、IBMに勤めていたGene Amdhal が1970年にIBMを離れ、アムダール社を設立した後にその日常語を明確に定義した。

この説明では、IBMがライバル製品ではなくうち(IBM)の製品を利用すべき理由として、ライバル製品に関する悪い噂(すぐ壊れるとか、ライセンス上の問題があるとか、コピー品だとか、あの会社の経営状況はよくないとか)を流すことで顧客を取り込もうとするIBMセールスマンの手法である、ということであった。

この状態だと完全な日常語で汎用性がないが、当時のアメリカのコンピュータ業界では非常に「あるあるだった」ため、瞬く間に広がった。 その用法からすると、適用された語義はある製品を指してその未来が暗い2と言うことを指す。 もちろん、それを当事者に対して指摘したりすることを指すのではなく、吹き込んだり、喧伝したりといったことで不安を煽ることを言う。

ネット上で現在も非常によく見かけるFUDとしては「Btrfsはすぐ壊れる不安定なファイルシステムだ(からExt4を使え)」というのがある。語源と全く同じ図式であることが理解できるだろうか。

翻って今回は、「Mozc-UTはライセンス的な問題がある(から使わない方が良い)」という話で、なおかつtweet3という形で広く世に喧伝しているので、全くのFUDなのである。 というか、FUDの非常に典型的なケースだと言える。

また、FUDと言うことを罵倒かなにかだと思っている人がいそうなのだが、せいぜい批判から揶揄くらいのものだ。 FUDという言葉を使わないなら、「根拠のない批判をしている」くらいになる。 FUDという言葉と同程度のニュアンスを持つ言葉としては「ポジショントーク」くらいだろうか。 「あれはポジショントークだ」というのと、「あれはFUDだ」というのはだいたい同じような感じだ。意味的にもちょっと似てる。

ちなみに、この語を世に広く知らしめたのはJargon Fileであるが、その後ESRが[^esris]個人的な感情を爆発させて攻撃する場にFUDという単語の項目を使ってしまったため、現在は元の形では残っていない。

作者はメンヘラなのか?

「作者」を指すものがUtuhiro氏であるならば、「それは知らない」。 私であるならば、「いや、別に」。

いや、これは「壊れそうになっているものをわざわざ壊そうとするな」という意味であって、「OSS活動をしている人間はメンヘラだ」という意味ではないのだ。

そして別にそれは「私に優しくしろ」と言っているわけではない、というよりも、FUDをもらって人に使われなくなることは、特に私のOSS活動に影響を及ぼすようなことではない。 私が公開しているソフトウェアは前提として「私が使うために作ったものをおすそ分けしている」なので、人に使われなくても困らないのだ。

もちろん、公開するための作業はそれなりに発生しているから、私を罵倒したら、更新が遅くなったり、新しいツールが公開されなかったりするだけだ。 だから、影響は小さい。

ちなみに、この記事に対しても、Mozcdict-extプロジェクトに対してもそれなりに罵倒したり批判したりする声が届いてはいるが、嫌な気持ちになるだけで、内容的には「まず文を読め」と思うことが大半なので活動に影響を及ぼすということはない。

Chienomiに対するリアクションがポジティブなものか、ネガティブなものかというのはモチベーションには大きな影響を及ぼすが、そもそもChienomiはStatsで出したように月間30000PVとかあるサイトなので、そうそうやめない。

どちらかというと、Chienomiは月間15000円程度の支出と、月間50時間程度の作業時間というコストに耐えきれなくなってやめる可能性のほうがずっと高い。