めかぶ?すだち?
この記事はFUN Advent Calendarの11日目の記事です。 adventar.org
昨日はshirasayav5さんでした。 shiranuinui.github.io
自己紹介
Word2Vec*1を使った研究してます
来年度からは東京で働きます
はじめに
最初の予定ではコンビニのホットドッグをオススメしようと思ってましたが飽きてしまったので変えます
ちなみに個人的にはローソンのホットドッグとセブンのホットドッグが好きでパンがしっとりしたものを食べたい時はセブンでウインナーがジューシーなものを食べたいときはローソンにしています。値段はだいたい一緒です
ローソンのチリホットドッグも美味しいです
形態素解析機
本題です
みなさんは形態素解析機というものはご存知でしょうか
Mecabというものが有名だと思います。他にはRuby製のkuromojiも有名だと思います
すごくざっくりいうと単語に対して品詞などを特定するものです
例えば「会社のお金を使い込む」をMecabで形態素解析すると
会社 名詞,一般,*,*,*,*,会社,カイシャ,カイシャ の 助詞,連体化,*,*,*,*,の,ノ,ノ お金 名詞,一般,*,*,*,*,お金,オカネ,オカネ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 使い込む 動詞,自立,*,*,五段・マ行,基本形,使い込む,ツカイコム,ツカイコム
になります
一般的な使い方としては文章を入力としてその文章に含まれる単語の品詞を特定し、名詞や動詞のみにフィルタリングするなどがあります
自然文章を対象とした研究であればかなりお世話になるツールと言えます
今回はSudachiという新しい形態素解析機のご紹介です タスク管理アプリの方ではありません(https://dev.classmethod.jp/tool/sudachi/)
Sudachi
Sudachiとは、WorksApplicationsさんが開発した形態素解析機です
約1ヶ月前くらいにv0.1.0がリリースされました
元Chasenメンテナの高岡さんが開発しています
他の形態素解析ツールとの違いなどのスライド
Mecabやkuromojiと異なる点として省メモリであることなどがありますが、大きな1つの違いとして「正規化」というものがあります
正規化とはなんなのかというと、例えば「シュミレーション」と「シミュレーション」のような表記揺れに対して「シミュレーション」に統一することです
他にも送り仮名の違い、「使いこみ」と「使い込み」のような変換の違いを統一してくれます
この表記揺れというのはかなり複雑な問題で本来同じ意味である2つの単語が異なるものとして処理される可能性があります
例えば、
会社 の お金 を 使い込む 会社 の お金 を 使いこむ
の2つの文章は全く同じ文章であるのに漢字を変換するかしないかで類似度は0.8(4/5)になってしまいます。
本来であれば心温まる手作業で1つ1つ辞書を作り修正しなければいけないところをある程度は楽が出来ます
今回はこの超便利機能の正規化について実験を行いました
実験対象
ゲームレビューサイトmk2のnintendo 3DSのゲームレビュー
このサイトを実験対象にした理由は、ユーザーから投稿されたレビューであるため表記揺れが山ほどあるのでないかと思ったのと「シミュレーションゲーム」というジャンルがあるので「シュミレーション」と「シミュレーション」がめちゃくちゃ出てくるんじゃないかと思ったからです
SNSでも表記揺れは多く出現しがちなので良かったのですが過去の自分のツイートぐらいしかデータがなく過去のツイートを見るのは辛かったので辞めました
ちなみにシュミレーションという単語がレビューに多く含まれていたゲームは「ファイアーエムブレム 覚醒」でした
実験手順
実験手順としては
- ゲームレビューをクローリング
- 取得された文章をMecabとSudachiでそれぞれ形態素解析
- 名詞と動詞、形容詞だけにフィルタリングし*2分かち書き*3
- 分かち書きされた文章をそれぞれgensimのWord2Vecを用いて学習
- 2つの学習結果を比較
で調査を行いました
Mecabでは正規化は行われませんので正規化なしのMecabと正規化ありのSudachiの違いを検証するものです Mecabは9日目の記事のuehara1414さんも使っていましたが拡張辞書として mecab-ipadic-neologdを使っています
未来大生のトレンドを知れるサービス「FUN TREND」を作ってみたuehara1414blog.wordpress.com
結果
いろいろ入力してみましたが面白かったもの、興味深いものを紹介いたします
「忍者」という入力に対して関連していると判断された単語
単語 | 類似度 |
---|---|
固定 | 0.2742036283016205 |
降臨 | 0.2613376975059509 |
乱数 | 0.25779059529304504 |
物語 | 0.254666268825531 |
プリンセスプリキュア | 0.2521257698535919 |
出入り | 0.23701870441436768 |
安心 | 0.23156218230724335 |
こつ | 0.22314965724945068 |
不向き | 0.21753180027008057 |
SC | 0.21550312638282776 |
プリキュアは忍者だったんですねー
- Sudachi
単語 | 類似度 |
---|---|
神器 | 0.2637416124343872 |
付け方 | 0.2479369342327118 |
box | 0.24712923169136047 |
ace | 0.2440178543329239 |
もったい | 0.23105667531490326 |
マリベル | 0.2295345962047577 |
ゼルダの伝説時のオカリナ3d | 0.22730134427547455 |
おっさん | 0.22543908655643463 |
パラレルワールド | 0.22477799654006958 |
ハイスクールd×d | 0.22431424260139465 |
「ロボット」という入力に対して関連していると判断された単語
単語 | 類似度 |
---|---|
十字 | 0.2513594925403595 |
パッド | 0.2503074109554291 |
我慢 | 0.23809082806110382 |
鉱山 | 0.23738226294517517 |
特産 | 0.23582139611244202 |
記号 | 0.2356947809457779 |
金花 | 0.23352289199829102 |
使い | 0.22769372165203094 |
古龍 | 0.22586342692375183 |
バースト | 0.2221870869398117 |
古龍や鉱山、使いという単語を見るとモンハンのような気がします
- Sudachi
単語 | 類似度 |
---|---|
ロボボプラネット | 0.2710425853729248 |
眠り | 0.257391095161438 |
帳消し | 0.24388960003852844 |
既存 | 0.2385057806968689 |
ゲット | 0.23679396510124207 |
応援 | 0.23626789450645447 |
自分自身 | 0.23548564314842224 |
ほう | 0.23243260383605957 |
分かれ道 | 0.2302807867527008 |
事件現場 | 0.22392229735851288 |
こちらはミステリーのような雰囲気が出ていますがもっとも類似度が高い単語として「カービィのロボボプラネット」が出力されています すごい
「馬」という入力に対して関連していると判断された単語
単語 | 類似度 |
---|---|
些細な | 0.25391948223114014 |
1種類 | 0.25197359919548035 |
ジュピターピクロス | 0.24905437231063843 |
買い控え | 0.23560309410095215 |
友情 | 0.2338598519563675 |
ソード | 0.23023049533367157 |
託宣 | 0.22755567729473114 |
ガールズファッション3d☆めざせ!トップスタイリスト | 0.22588399052619934 |
進入 | 0.219329833984375 |
こまめ | 0.219301238656044 |
牝馬ってことなんでしょうか
- Sudachi
単語 | 類似度 |
---|---|
パール | 0.25727373361587524 |
開示 | 0.2508084177970886 |
底上げ | 0.23834645748138428 |
マリア | 0.23764677345752716 |
鷹 | 0.23431171476840973 |
順当 | 0.22846585512161255 |
検事 | 0.22205126285552979 |
不思議 | 0.21848949790000916 |
ダービースタリオン | 0.21799950301647186 |
現状 | 0.21797946095466614 |
まとめ
人間の目で見るとMecabよりもSudachiの方が関連している単語を出力出来ているような気がします
多分、正規化によって本来学習に含まれていなかった単語が正しく学習されたのが良かったのだと信じたいです
パラメタの調整などをもっと頑張ればもっとよい精度が出る可能性はあります
3DSとかだけじゃなくてSwitchやプレステのゲームも混ぜた方が良かったかも
もし余力があれば挑戦しまた記事にしたいと思います
明日は_manohitoさんです お楽しみに
余談
データを集めて形態素するまでよりもWord2Vecのパラメータを調整する方が辛かった
あと心温まる手作業とかも結構しました
最終的なパラメータは size=200, window=6, min_count=3, sg=1です、Skip-gramで学習しました
min_countはこの数字よりも出現頻度が低い単語は無視するオプションですがデフォルトの5とかだとかなり単語が失われてしまいました