不満カテゴリ辞書データで遊んで見る

2017/2/27に国立情報学研究所(NII)から[不満カテゴリ辞書データ](http://www.nii.ac.jp/dsc/idr/fuman/fuman_dict.html)が公開されました。
このデータを使って遊んで見る記事です。

# 本記事で紹介すること

- 不満カテゴリ辞書データってのが公開されたよ
- カテゴリ分類が割と簡単にできる
- 誰でも利用することができる

注：本記事は、ややステマっぽいです。不満買取センターは私の所属企業ですし、紹介するコードは私が自分で書きました。

# そもそも不満買取センターってなによ？

[不満買取センター](http://fumankaitori.com/)は「みんなからの不満意見をあつめてるよー」っていう会社です。

ユーザーの皆様から不満意見を頂戴して、分析して、情報を必要とする企業に売りに行くっていうサイクルの活動をしています。

NIIから公開されてる[スライドによると](http://www.nii.ac.jp/dsc/idr/userforum/slide/IDR-UF2016_panel_FKC.pdf)、サービス開始から1年10ヶ月で、ユーザー30万人、投稿件数が500万件に達しているとのことです。


# 不満カテゴリ辞書データって何よ？

平たくいうと、「カテゴリごとに単語の重要度スコアを計算したよ」っていうデータです。

以前より、感情分析のためにポジネガの分類辞書が配布されてますが[^1][^2]、ポジネガだけでなく、ひろーいカテゴリに範囲を広げた感じのイメージです。

「ひろーいカテゴリってどれくらいよ？」と思われるかもしれません。全部で125カテゴリあります。

「そもそもここで言うカテゴリって何？」と思われるかもしれません。
不満買取センターのサービスを利用すると、意見を投稿する時に、こんな感じでカテゴリを選べます。

<img width="1005" alt="スクリーンショット 2017-02-27 19.41.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/33533/7d6b0db5-2de8-2064-289e-df20c83531ad.png">

このカテゴリ情報が辞書になっています。
「ぜんぶのカテゴリを見たいよ」って方はデータをダウンロードすると、カテゴリ表が同封されています。


# さっそく遊んで見る

## ダウンロード

[不満カテゴリ辞書データ](http://www.nii.ac.jp/dsc/idr/fuman/fuman_dict.html)は__無料で__、誰でも利用できます。

こんな感じの申請フォームがあるので、入力します。
できるだけ正確に書いてくれると嬉しいです。個人情報うんぬんの点はNIIが管理してるので心配いりません。
正確な情報のおかげで、データ需要の把握ができて、オープンデータの世界につながっていくのです。（中の人からの切なお願いです。。）

![スクリーンショット 2017-02-27 19.47.47.png](https://qiita-image-store.s3.amazonaws.com/0/33533/3a376ff1-1a0a-8b43-bb04-6847deda5b70.png)


ダウンロードすると、ファイルがいくつかと、jsonファイルがあります。これが辞書データです。

3つの辞書ファイルがありますが、個人的なお気に入りは `soa` の辞書です。

wikipedia記事のカテゴリ分類実験をやったのですが、`soa`が一番、優れた性能でした。
実験用のコードは[このリポジトリ](https://github.com/fumankaitori/fuman-category-dictionary-tools)で公開してます。

## カテゴリ分類してみる

カテゴリ分類のための[サンプルコード](https://github.com/fumankaitori/fuman-category-dictionary-tools/blob/master/get_category_score.py)が用意されてます（って、私が書きました）

[Readme](ub.com/fumankaitori/fuman-category-dictionary-tools/blob/master/Readme.md)を読んでセットアップします。

基本的には、

- python3
    - SqliteDict
    - JapaneseTokenizer
- Mecab
- Mecab-ipadic-neologd

がインストールされてれば、動きます。

スクリプトを動かす前に、[辞書ファイルjsonへのパス](https://github.com/fumankaitori/fuman-category-dictionary-tools/search?utf8=%E2%9C%93&q=path_dictionary_json+%3D+%27.%2Fdictionary-data%2Fword_soa.json%27)を書き換えるのを忘れないようにしてください。

```py
    ### 評価したい文
    input_text = '鈴鹿サーキット（すずかサーキット、Suzuka Circuit）は、三重県鈴鹿市にある国際レーシングコースを中心としたレジャー施設。F1日本グランプリや鈴鹿8時間耐久ロードレースなどの開催で知られる。レーシングコースの他に遊園地やホテル等があり、モビリティリゾート（自動車を題材とする行楽地）を形成している。'
```

の部分にカテゴリ分類したいテキストを入力します。

そして、

```
python3 get_category_score.py
```

を実行します。すると、

```py
[('宿泊・観光・レジャー-観光・レジャー施設', 36.34822538122535),
 ('宿泊・観光・レジャー-その他', 33.88718704879284),
 ('アウトドア・スポーツ-バイク・バイク用品', 29.76438646018505),
 ('アウトドア・スポーツ-その他', 20.82155640423298),
 ('宿泊・観光・レジャー-ホテル・宿泊', 20.739999625831842),
 ('政治・行政-地方行政', 20.702945858240128),
 ('アウトドア・スポーツ-スポーツ', 18.132528463029303),
 ('国際・文化-人種・民族', 14.41657168418169),
 ('教育-小学校', 14.202118217945099),
 ('公共・環境-道路・交通', 10.300135619938374)]
```

こんな感じで、「このテキストってこのカテゴリっぽくね？」というカテゴリがスコア順に表示されます。

`鈴鹿サーキット`は、もちろんレジャー施設なので、これは正解です。
2つ目の`その他`は、まぁ、飛ばすとして、3つ目の`アウトドア・スポーツ-バイク・バイク用品`も、もちろんサーキット場なので、正解です。

こんな感じで、テキストを入力すると、テキストが所属しそうな不満カテゴリを返してくれます。

## いろいろ入力してみる

この記事を書いているとき(2017/2/27)のgoogleニュース記事からいろいろテキストをもってきて遊んでみます。

[反トランプ抜きでいい映画選んだ/アカデミー賞総括](http://www.oricon.co.jp/article/128216/)の最初の2段落だけを入力すると、

```py
[('国際・文化-人種・民族', 80.59330022335052),
 ('国際・文化-その他', 66.91204759012908),
 ('趣味・エンタメ-映画・ミュージカル', 65.08742449060082),
 ('国際・文化-文化', 55.989746794104576),
 ('アウトドア・スポーツ-スポーツ', 46.43926617491525),
 ('政治・行政-政治・選挙', 39.7744347602129),
 ('政治・行政-国政', 34.371408531442285),
 ('アウトドア・スポーツ-その他', 27.17190256714821),
 ('教育-大学', 27.165757853537798),
 ('趣味・エンタメ-テレビ番組', 27.006482359021902)]
```

「移民政策」とか「白人至上主義」とか、そのような言葉が効いたのだと思います。
それでも、`趣味・エンタメ-映画・ミュージカル`が3番目に来ています。

次はこの記事[中嶋常幸が松山英樹に賛辞「１位になれる」](http://news.golfdigest.co.jp/news/weeklywr/pga/article/67479/1/)を全文、入れてみましょう。

```py
[('アウトドア・スポーツ-スポーツ', 111.92499909282196),
 ('アウトドア・スポーツ-その他', 57.362937124446034),
 ('国際・文化-人種・民族', 52.00943994894624),
 ('政治・行政-その他', 47.91518418677151),
 ('政治・行政-国政', 39.158917374908924),
 ('教育-中学校', 36.68058429658413),
 ('教育-その他', 36.25627274811268),
 ('政治・行政-地方行政', 34.909653935581446),
 ('趣味・エンタメ-その他', 33.76561558432877),
 ('教育-高等学校', 29.53918544575572)]
```

いいですね！ゴルフの記事なので、`アウトドア・スポーツ-スポーツ`が1位でいい感じです。

さらに最新スマホのニュース[ソニー，4K液晶搭載の「Xperia XZ Premium」など新型スマートフォン4製品を発表](http://www.4gamer.net/games/128/G012871/20170227078/)の冒頭部分を入力すると、

```py
[('デジタル・家電-タブレットPC・スマートフォン', 91.60856820642948),
 ('デジタル・家電-カメラ・デジタルカメラ', 43.60800599306822),
 ('デジタル・家電-パソコン・周辺機器', 34.61087295413017),
 ('アウトドア・スポーツ-バイク・バイク用品', 30.809422375634313),
 ('趣味・エンタメ-ゲーム', 29.859127916395664),
 ('趣味・エンタメ-楽器・音楽機材', 25.068826153874397),
 ('趣味・エンタメ-その他', 22.721104588359594),
 ('趣味・エンタメ-おもちゃ', 19.983879521489143),
 ('ファッション-服（レディース）', 19.582678670063615),
 ('食品・飲料-グミ', 19.50366371870041)]
```

最高ですね！

ブログとかどうでしょうか？生駒ちゃんの最新記事、[新しい乃木坂46](http://blog.nogizaka46.com/rina.ikoma/2017/02/037044.php)を拝借してみます。

```py
[('趣味・エンタメ-ライブ・コンサート・カラオケ', 77.79780424945056),
 ('人間関係-その他', 50.823584761470556),
 ('趣味・エンタメ-その他', 50.03617552854121),
 ('人間関係-離婚', 41.59073447436094),
 ('国際・文化-文化', 40.08722525369376),
 ('教育-幼稚園', 37.05645897984505),
 ('宿泊・観光・レジャー-その他', 32.194379556924105),
 ('人間関係-学校', 31.901012854650617),
 ('宿泊・観光・レジャー-観光・レジャー施設', 28.377326188143343),
 ('教育-保育所', 27.84230292122811)]
```

うーん・・・合ってるちゃ合ってるな。。
そもそも、不満買取センターのカテゴリに`アイドル`とかないので、`趣味・エンタメ-ライブ・コンサート・カラオケ`は正解と言えるでしょう。
`人間関係-その他`もメンバーとの思い出を綴っていることを考えると、正解と言えそうです。

と、いくつか例を紹介しましたが、自画自賛ながらも、「なかなか使えそう」といったところではないでしょうか？

スコアランキングの1位だけを使うと、厳しい感じがあります。
なので、「テキストデータのタグ」みたいな感覚で利用するといいかもしれません。

## その他、応用例

上の例では、辞書をそのまま使って、スコアリングすることをしてみました。
しかし、他にもこんな使い方はできると思います。

- 機械学習モデル（特にカテゴリ分類モデル）の初期重み値
- 転移学習の特徴量重み
- 情報抽出系アルゴリズムに与えるシード

# 単語の重要度って何よ？

ところで・・・「単語の重要度」スコアをまったく説明しないままで来てしまいました。
少しだけ説明します。

これは「カテゴリAにおける単語1の重要度」です。

「それって、単語頻度と何が違うん？」と思われるかもしれません。

各カテゴリの重要度を計算するときに、「カテゴリAでの出現数」と「カテゴリBでの出現数」・・・・を計算している点が異なります。

当然、特定のカテゴリだけに突出して出現している単語があるならば、その単語はカテゴリに固有の単語と考えることができます。

今回は、この計算を不満買取センターの投稿データに計算したのです。

参考までに[私の以前の記事](http://qiita.com/Kensuke-Mitsuzawa/items/48785d502a569a1ff862)もどうぞ。

# まとめ

- 不満カテゴリ辞書を紹介した
- なかなか使えそうな雰囲気ある

# 謝辞

こんな感じでなにか「やってみた系」の記事を書いたら、「不満カテゴリ辞書データを利用したよ」と書いてやってください。

[利用規約ページ](http://www.nii.ac.jp/dsc/idr/fuman/documents/fkc-fuman-dict-policy.html)にコピペ用の文があります。

>
本研究では、国立情報学研究所のダウンロードサービスにより株式会社不満買取センターから提供を受けた「不満カテゴリ辞書データ」を利用した。

最後に、こういったデータを作れるのは、正確にカテゴリを選択して、意見を投稿してくださっている不満買取センターのユーザーさんのおかげです。
こんなとこに書くのも変な感じですが、この場をかりて、感謝の意を。


[^1]: [単語感情極性対応表](http://www.lr.pi.titech.ac.jp/~takamura/pndic_ja.html)
[^2]: [Polar Phrase Dictionary](http://www.tkl.iis.u-tokyo.ac.jp/~kaji/polardic/)

- - -

不満買取センターでは、不満買取センターユーザーの声を元にした調査事業をしています。
マーケティング調査のご用命をお待ちしております。