2020年10月19日月曜日

漢字のよみがな辞書 yomi-dict / homonym-ja を作った

最近、形態素解析器に読み推定をさせて遊んでいました。 しかし遅い! 熟語や成語のよみがなを調べるだけならパターンマッチングのほうが良いのではと思い、 O(1) で検索できる漢字のよみがな辞書 yomi-dict を作ってみました。

Mecab と比較したベンチマーク結果はこちら。 形態素 N-gram コーパス から抽出した、ひらがな + 漢字の頻出成語 (ex: 走る, 赤い などの原形品詞) を対象とし、11,730 件を読み推定させています。 Mecab より早いことは自明なので、オーダーだけ見れば良いです。

ライブラリ速度精度
yomi-dict20.967ms99.92%
Mecab (IPADic)148,606ms99.94%


だいたい 7,000 倍くらい違うけど、思ったよりは Mecab も早いんだなと思いました。 形態素解析器の中で最速と言われるだけのことはあります。 yomi-dict の読みミスは単純に登録されているかどうかです。 登録されてなくても仕方ないかな、というものしかありません。 Mecab は読み登録されていない成語をすべて正しく読めていましたが、多少の推定ミスがありました。 「ず」と「づ」を間違えたり、変な間違いを結構してます。

上記の結果は IPADic で読み推定させており、ずるいと感じる人もいるかも知れません。 もちろん mecab-ipadic-NEologd などを利用してもいいと思います。 ただ上記の結果で重要だと思うのは、頻出成語の推定ならパターンマッチングでほぼ完璧に処理でき、多少のエラー処理で対処できるということだと思います。 このほんのわずかな手間と比較して、mecab-ipadic-NEologd はメモリ使用量が大きすぎる (1.2GB) のですよね。 一方の yomi-dict は 14MB しかメモリを消費しません。

ところで語句の読みではなく、読みに対応する語句を取得したい場合もあると思います。 IME があれば困ることは少ないと考えられるので、homonym-ja (同音異義語の辞書) も作ってみました。 こちらも O(1) で検索できる省メモリな辞書になっています。 「ぶっちゃけ同音異義語ってどれくらいあるんよ?」という疑問を持って作ってみましたが、想像以上に多かった。Web版 もあります。



追記: ついでに spelling-variants-ja (表記ゆれの辞書) も作ってみました (Web版)。

0 件のコメント: