Yahoo形態素解析APIで学ぶ、安易な形態素解析採用が危険な理由

2017-09-10 2017-09-13

「形態素解析を取り入れたい」
会社で営業などに突然言われたことがある人もいるんじゃないかと思いますが、7割くらいの確率で、その人は形態素解析を理解していません。

私も同様のことを突然言われ、mecab(オープンソースの形態素解析エンジン)を使って実装したことがありますが、まだその時は形態素解析の危険さを理解していませんでした。あの時反対していれば…。

ということで、今日は実際にYahooの形態素解析APIを利用して、いかに形態素解析をサービスに組み込むことが危険なのかを、上司や営業などに説明するための方法をお伝えします。安易に使うと死にます。

形態素解析の命は辞書である

「焼肉屋さかい」

この文章をYahooAPIの形態素解析にかけると、結果はこうなります。

Surface(形態素の表記):焼肉屋さかい
Reading(形態素の読みがな):やきにくやさかい
Pos(形態素の品詞):名詞

「焼肉屋さかい」を名詞として判断しているようです。東海地区を中心に店舗を広げてきた、焼肉屋さかいをちゃんと把握しているようですね。久しぶりにミスターサカイに会いたくなりました。

では、こちらはどうでしょうか?
「焼肉屋くいどん」

この文章をYahooAPIの形態素解析にかけると、結果はこうなります。

Surface(形態素の表記):焼肉
Reading(形態素の読みがな):やきにく
Pos(形態素の品詞):名詞

Surface(形態素の表記):屋
Reading(形態素の読みがな):や
Pos(形態素の品詞):接尾辞

Surface(形態素の表記):くい
Reading(形態素の読みがな):くい
Pos(形態素の品詞):名詞

Surface(形態素の表記):どん
Reading(形態素の読みがな):どん
Pos(形態素の品詞):接尾辞

なんということでしょう。
「焼肉」と「屋」が分離され、くいどんは「くい」と「どん」に分離されてしまいました。
焼肉屋くいどんは決して小さな店ではありません。20店舗以上もあるチェーン店ですが、Yahooの形態素解析辞書には登録されていないようです。

さて、「さかい」と「くいどん」が違うだけの文章でこういった差が出てきてしまったわけですが、どういった問題が起こると想定出来るでしょうか。

客は自分が一番でわがままなのが当たり前

もしあなたがYahooAPIの形態素解析を使ったサービスを作り、「焼肉屋さかい」と「焼肉屋くいどん」が顧客だった場合、どういったことが起こるでしょうか?

まず最初に考えられるのは、「焼肉屋くいどん」からの苦情です。
「なんで焼肉屋じゃなくて、焼肉と屋で分割されるんだ。くいどんが分割されるのもおかしい」

これに対しての回答は、簡素に言ってしまえば「形態素解析とはそういうものです」としか言いようがありません。焼肉屋が正しいのか、焼肉と屋でばらされるが正しいのか、それは個人の主観になってしまいます。なお、ラーメン屋の場合はラーメン屋で1単語と判断されるため、余計にややこしいです。

そして「焼肉屋さかい」からも別方向の苦情が来るかもしれません。

この形態素解析を、例えばコーポレートサイトのSEO対策に使っていたとします。
焼肉屋さかいは、何としても「焼肉屋」のキーワードで上位を獲得したい。ブログ記事などに「焼肉屋」のキーワードを入れ込む比率を詳細に決めており、その調査のために形態素解析を使っている。しかし、「焼肉屋さかい」で1単語としてカウントされてしまうため、「焼肉屋」の比率がわかりにくい。

「焼肉屋とさかいで分かれるようにしてくれ」と言われるかもしれません。

用途次第ですが、形態素解析と不特定多数は相性が悪い組み合わせです。理由は、顧客というのは、自分が思った通りにならないと満足しないものだからです。不特定多数の求める結果を統一することが出来ない以上、入出力が予測できない形態素解析を安易に使うべきではありません。

mecabなど自前を使えば辞書を更新することは出来るが…

Yahoo形態素解析APIのように外部のサービスを使う場合、形態素解析の辞書を自力で更新することは出来ません。しかし、mecabのように自前でサーバーに入れて使うのであれば、辞書の更新は自由です。「焼肉」と「屋」で分かれてしまわないよう、より高い優先度で「焼肉屋」を定義してあげれば、焼肉屋を1単語とすることが可能です。

しかし、それでも私は形態素解析を安易に利用することはオススメしません。辞書のチューニングには終わりが無いからです。

「安倍晋三」の結果は以下になります。

Surface(形態素の表記):安倍晋三
Reading(形態素の読みがな):あべしんぞう
Pos(形態素の品詞):名詞

流石はわが国の首相、ちゃんと単語登録されています。では、世界的に知名度の高いこの方はどうなるでしょうか。

「ピコ太郎」

Surface(形態素の表記):ピコ
Reading(形態素の読みがな):ぴこ
Pos(形態素の品詞):名詞

Surface(形態素の表記):太郎
Reading(形態素の読みがな):たろう
Pos(形態素の品詞):名詞

残念なことに「ピコ」と「太郎」で分かれてしまいました。「桃太郎」は桃太郎で1単語です、流石ですね。
もちろん「りんご太郎」はりんごと太郎に分かれます。「蟹太郎」はなぜか蟹太郎で1単語ですが…蟹太郎いるのか。

このように、人名など無限に増え続ける情報を辞書登録し続けるのは不可能です。
私の最初のmecabを使った仕事は、AKB48の初期メンバーを全員辞書登録することでしたが、大変面倒でした。延々増えるし更新は更に大変でしょう。

ということで、自前辞書での形態素解析は、保守の手間が膨大過ぎてヤバいことになります。

使うならリスクを覚悟して

営業的な面だけを見て、なんとなく色々な技術を使いたがる方はよくいますが、形態素解析は結構危険な技術です。
顧客の感情的なトラブルを発生させる確率が高く、且つ保守が大変という、踏んだり蹴ったりの技術です。

もちろん、顧客に開放するようなものではなく、自社で利用するのであれば全然問題はありません。むしろ、良い使い方があったら教えて欲しいくらいです。
また、料金を取らないフリーのツールに使うのであれば、リスクは少ないと言えるでしょう。

「形態素解析って言うと、なんか凄い技術使ってるって思われて売りやすくなるんすよ!」みたいな話が来た際には、この記事で書いたように、形態素解析の現実を見せた上で、しっかり断ってください。

無茶な売り方をされた際、苦労するのは私たちエンジニアです。

日本語形態素解析 – Yahoo!デベロッパーネットワーク
https://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html