形態素解析に使う辞書は何が適切なのか?


久々にMeCabを使おうと思ったんですが、そういえば辞書の違いによる結果の違いはどれくらいあるんだろう?と思い立って検証してみることにしました。

MeCabで一般的に使われる辞書は ・IPA辞書unidicNAIST辞書 の3つです。

解析結果は入力する文章の傾向によってかなり左右されることが過去わかっているので、いくつか文体の異なるテキストを用意して解析させてみました。

1)新聞記事 まず、辞書を作成するために多くの新聞記事が利用されています。よって、新聞記事に近い文体の文章は、どの辞書でもかなり近い結果になります。

2)エンタメ誌記事 ほぼ同じですが、「教科書的でない語」の分解に若干差が見られます。 例:IPA辞書・NAIST辞書「修羅場」unidic「修羅/場」

3)専門誌記事(食品) 一部の語に差が見られます。 例:IPA辞書・NAIST辞書「小麦粉」unidic「小麦/粉」… IPA辞書・NAIST辞書「乳製品」unidic「乳/製品」 数詞の扱いにも若干差があります。 例:IPA辞書「2011年」unidic・NAIST辞書「2/0/1/1/年」

4)専門誌記事(女性向け商品) 複数の連続するカナの名詞を1語と見なすか否かに差があります。 例:IPA辞書・unidic「ヒロイン/メイク/シリーズ」NAIST辞書「ヒロインメイクシリーズ」 … IPA辞書・NAIST辞書「アイラッシュカーラー」unidic「アイラッシュ/カーラー」 また該当記事にURLが含まれていたのですが、特にドメイン部分の認識は差があります。 例:IPA辞書「http/:///ameblo/./jp//」unidic・NAIST辞書「http/://///ameblo/./j/p//」

5)ブログ記事 主に顔文字の扱いが異なります。 例:IPA辞書「(≧∇≦)」unidic・NAIST辞書「(/≧∇≦)」… IPA辞書・unidic「(^。^;)」NAIST辞書「(/^/。/^/;/)」

6)企業IR系文書 unidicに分割多めな傾向があります。 例:IPA辞書・NAIST辞書「株式会社」「オンライン」「NTT」unidic「株式/会社」「オン/ライン」「N/T/T」

7)お役所文書(省庁通達) 辞書作成の際に使用されているのかもしれませんが、あまり差がありません。名詞にはほぼ違いが見られませんが、一部いわゆる活用形の分割が異なるようです。 例:IPA辞書・NAIST辞書「主たる」「において」unidic「主/たる」「に/おい/て」

8)英文(若干フォーマルな文書) いじわるではありますが、日本の伝統芸能について書かれた英文(日本語のローマ字表記が混ざったもの)を分解させてみました。 圧倒的にIPA辞書の精度が高いようです。NAIST辞書は「is」「as」などの短い語を1文字づつに分解する傾向にあるようです。unidic辞書は所々英単語を抽出していますが、抽出される語とされない語の違いが、結果からはよくわかりません。

こうして見てみると、「分解する」という点ではunidicの性能が高いことが分かります。今回の検証ではあまり見られませんでしたが、標記ゆれの許容も幅が広いようですし。 もともと形態素解析エンジンの役割はそれぞれのエンジンの目的・意図に従って「分解する」ことであって、使われる際にどちらが都合が良いかという観点ではないわけです。

しかし、形態素解析を「サクっと走らせてそのまま使いたい」という用途の場合、(特に名詞の場合に)ある語を「別々の語」として認識するか「ひとつの語」として認識するか、ということは、分解後の利用に影響を与えることになります。

今回検証してみた限りでは、IPA辞書がわりと汎用的に「そのまま使う」のに向いているような結果でした。解析させる文章の傾向によっても変わると思うので、どの辞書が適しているか、想定文章をそれぞれ解析させてみて決めるのが良いのではないかと思います。

最新記事

すべて表示

小ネタです。 SQLiteを使っていて "no such table" とエラーが出た場合、 DBファイル名の指定が空になっている、という凡ミスを起こしていないかを確認してみましょう。 ・・・ そういう凡ミスをしてしばし悩んだので… ファイル名の指定が空になっている場合、一時的なインメモリDBとして保存されます(※1)。 つまりDB接続を切断すると中身は消えます。 なので接続

最近、 Goで書かれたアプリケーションサーバが起動しない! ->原因: .env ファイルが欠けていた というドタバタがありました。 結局Goと関係ないですが、この時、 「あまりGoに慣れてないのでGoの問題かと…」「DockerまだよくわかってなくてDockerの問題かと…」 というような声があったのて、あえてGoで検証してみようと思ったわけです。 さて、Goでサーバサイドのシステムを作

弊社ではかなり前からGitLab(CE)を自社環境で運用しているのですが、ふと気付くと、バージョンがだいぶ先に行ってしまっていました。 とくに最近のバージョンでは Auto DevOps なども使えるようになっていたりするので、さすがにそろそろキャッチアップしたいと考えたわけです。 現行の環境は次の通りです: GitLab 9.1.2 sameersbn/gitlab 使用 MySQL 5.6