Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

Fedora34でデフォルトIMEがAnthyになるですって!?? 〜OSSかな漢字変換再考〜

え、Anthy・・・!?!?

昨年末、LinuxディストリビューションFedora界隈でこんなディスカッションなるものがあったそうです。。。

fedoraproject.org

中身はタイトルのとおりなのですが、、、

Fedora次期バージョン(=Fedora34)からデフォルトIMEIBus-Anthyになる!!

とのこと。

趣味でかな漢字変換を自作している著者としては、「何事!?」と思われるお話だったのですが、よく考えると「あ〜なるほど」とある程度は納得のできるお話でした。(注:全てに納得したわけではありませんが

というわけで今回は、OSSかな漢字変換について振り返りをしてみようと思います。

本日、話題となるかな漢字変換はこちら。

それでは、行ってみます!

そもそも、Mozc、libkkc、Anthyってなんでしたっけ?

デスクトップLinux・・・を使っている方は実際あまりいないのではないかという疑問もないわけではないですが、、、私自身は毎日のように使用しており、実際にこのブログもopenSUSEで執筆しています。仕事ではなかなか制限があってどうしてもWindowsにならざるを得ないことが多いのですが、仕事でなければ(果たしてこのブログ執筆が仕事か否かという議論はさておき)およそデスクトップLinuxで何でもできてしまいますし、開発環境などはWIndowsよりも構築しやすい(注:個人的主観です!)というのもあり、仕事以外でWindowsを起動することは滅多にありません。

さて、そんなデスクトップLinuxに欠かせないのがかな漢字変換です。
普段デスクトップLinuxをあまり触っていない人でも、Mozcというソフトは聞いたことがあるかもしれませんね。

Mozc

現在最も主流のOSSかな漢字変換です。

github.com

Mozcというソフトは聞いたことがなくても、Google日本語入力なら聞いたことがある人は多いのではないでしょうか。
ようは、Google日本語入力オープンソース、それがMozcです。

開発はGoogle形態素解析器で有名なMecabの開発者、工藤拓氏が中心となって開発されました。
もう十年ほど前のかな漢字変換ソフトとなるのですが、未だにその地位は揺るぎなく、UbuntuDebianopenSUSEなど、有名なLinuxディストリビューションではおよそMozcをデフォルトIMEとして採用しています。

が、その例外が、FedoraCentOS、ようするにRedHat系だったわけです。

libkkc

FedoraCentOSなどは、現在libkkcがデフォルトIMEとして採用されています。
こちらはRedHatの方が主に開発されているようですね。

github.com

アルゴリズムとしては、Trigramというものを採用しており、特徴として辞書データに品詞情報を持っていない(=SKKの辞書なども利用できる)という点などが挙げられます。 その反面というべきか、文節単位で区切ることができないという欠点もあるのですけどね。

細かいアルゴリズム等はこちらのスライド(注:筆者のスライドですが)を参照していただくこととしまして。。。

さて、そんなFedoraが「Anthyへ移行するぜ!」となったわけです。

Anthy

上のMozc、libkkcと比較すると、もっとも歴史が古いOSSかな漢字変換となります。
以前はDebianopenSUSEなどでもデフォルトIMEとなっていた時期があり、それでご存知な方もいらっしゃるかもしれませんね。

ja.osdn.net

オリジナルの開発は、2000年台前半に京大マイコンクラブが開発したものがそれとなります。
ですが、2009年でオリジナルの開発は止まってしまい、以降リリースもされることはありませんでした。
現在はフォークされたものが使われることが多いらしく、実際Fedora34で組み込まれるものも、フォーク版のAnthyであると思われます。

そもそもなぜ今Anthyに!?

理由については上に示したページで、下記のように書かれていますね。

  • libkkcがアクティブに開発されてなく、iBusそのものの開発にも影響が出ている
  • Mozcも候補に考えたが、UIがQtで作られており、他のIMEとは異なった感触がある

他のIMEとは異なった感触って一体なんのことだよ〜!??

(げほんげほん)実際libkkcのGitHubページを見に行くと、最終更新がおよそ2年前となってるようで、確かにアクティブとは言い難いかもしれません。そこでMozcではないのか・・・という点はさておきまして、やはりIBusの開発を念頭に置いていく以上、アクティブに開発可能なかな漢字変換が必要だったのかもしれませんね。その点、Mozcも開発がアクティブかと聞かれると若干怪しい面もありますし。

Anthyの変換性能

Anthyはビタビアルゴリズムを採用しています。(実際は「これ本当にビタビアルゴリズムなのか?」という疑問の声もあるようですが
ソースコードを見てみると、Mozcのアルゴリズムなどと比較して、文節に重きを置いているようにも思います。

オリジナルが2000年代はじめということもあり、辞書データはMozcほどの規模ではなさそうです。(その後フォークされてたものはさておき)
辞書データ体型もMozcほどではないため、単語そのものに情報を付与するのではなく、文節(品詞など)から変換を試みるという印象が強そうですね。
この辺りはWnnアルゴリズムの影響を受けていたりするのかな?とも思います。

実際に変換させてみよう!

私の手元のopenSUSEに、Anthyをインストールしてみました。
比較対象として、Mozcとlibkkcの変換結果も載せてみます。

「にわにはにわにわとりがいる」

Anthy: 「庭に埴輪鶏がいる」
Mozc: 「庭には庭鶏がいる」
libkkc: 「庭には二羽鶏がいる」

はい。まずは定番中の定番ですね。
Mozcはアルゴリズム的にこれが変換できません。理由は、「二羽」が2語、「庭」が1語となり、語数が少ないほうが選ばれやすくなるためです。
Anthyはどちらかというと、助詞の取り扱いに苦労してしまったという具合でしょうか。辞書データに単語単位の情報量が少ないのかもしれません。
libkkcは・・・・・・。(説明後略

「きしゃがきしゃできしゃした」

Anthy: 「記者が記者で帰社した」
Mozc: 「汽車が記者で記者した」
libkkc: 「記者が汽車で帰社した」

おい、Mozc!!!! (注:もちろん学習履歴を削除してから試験しています
案外Anthyってできる子?って思ってしまったのは私のせいでしょうかね。

libkkcは・・・うん君、間違えなくこの辺りは最初から学習済みですね!!

だったら、これならどうかな〜?

「しかがしかのぬいぐるみのことをしかった」

Anthy: 「歯科が歯科のぬいぐるみのことを叱った」
Mozc: 「歯科が歯科のぬいぐるみのことを叱った」
libkkc: 「しかがしかのヌイグルミのことを叱った」

実はこの変換文、libkkcの辞書データを見て、そこから作成してみました(笑)
libkkcの辞書データをみると、「ヌイグルミ / の / こと」という3単語が連なったデータが存在しており、後に「のこと」をつけると「ヌイグルミ」をカタカナで変換してしまうという特性があったりします。
アルゴリズムがTrigramなだけに、データ次第で変換に揺らぎが発生してしまうという一例になります。

というわけで最後のものは、libkkcに対するいたずら問題だったわけです。

さいごにまとめ

いかがでしたでしょうか。

私も今日は久しぶりにAnthyを触ってみたのですが、あ、こいつ案外まだまだ行ける!という気がしました。
もちろん辞書データの体型が古く、それなりのものかもしれませんが、これが作られたのが2000年代はじめであることを考えると、さすがは京大だよなぁ〜という感じがしますね。

結論として、Anthyでもいいんじゃないかな?というのが私の感想です。
(いや個人的にはもっとたくさん言いたいことはあるのですが、それはここではなく別の場所で(汗)