目的
ミッキーはとても人気
なのですが、「どれくらい人気なのか」と質問しようものなら、
「人気なものは人気、世界一、人気!!」と強い回答が返ってくることが予想されます。
とはいえ、何も知らないとミッキーの話題に入れず辛い目に合うかもしれません。
従いまして、まずは類似の言葉をword2vecを使って調べてみたいと思います。
word2vecは自然言語の学習モデルの1つのようです。
詳しい説明は、絵で理解するWord2vecの仕組み、が直感的に分かりやすいです。
準備
word2vecを用いるために必要なツールを記載します。
環境
Mac OS sirra 10.13.6
プロセッサ:2.3 GHz Intel Core i5
メモリ:8 GB 2133 MHz LPDDR3
グラフィック:Intel Iris Plus Graphics 640 1536 MB
wgetをinstallする。(macbookの場合はbrewでinstall)
$ brew install wget
word2vecを日本語に対して使うためのツール類をインストール
(※mecabは今回は使いませんでしたが、日本語の言語処理をするならインストールしておいて損はしないと思います。)
# janome、gensim、mecabをインストール
$ pip install janome
$ pip install gensim
$ brew install mecab
$ brew install mecab-ipadic
$ brew install swig
$ pip install mecab-python3
# mecab-ipadic-NEologdをインストール(Web上の新語をデフォルトの辞書に追加したもの)
$ brew install git curl xz
$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ sudo ./bin/install-mecab-ipadic-neologd -n
こちらのページや、こちらのページにて紹介頂いているコードが動けばOKです。
また、wikipediaをword2vecで扱うために、
こちらを参考に学習モデルを作成しても良いのですが時間が掛かるため、
東北大学のページから学習済モデル(20170201.tar.bz2)をダウンロードさせていただきます。
ダウンロード後は下記の通り解凍します。
$ tar xf 20170201.tar.bz2
$ mv entity_vector tohoku_entity_vector
コード
下記を求めるpythonコードを作成しました。
・ミッキーと類似度が近い言葉を取得
・クリスマスシーズンのミッキーと類似の言葉を取得(ミッキー + クリスマス)
・ユニバーサルスタジオ界のミッキーは誰か(ミッキー - ディズニー + ユニバーサルスタジオジャパン)
# -*- coding: utf-8 -*-
from gensim.models import KeyedVectors
import sys, codecs
fout = codecs.open('result.txt', 'w', 'utf-8')
def print_list(inputword):
for item in inputword:
w1=item[0]
w2=item[1]
print(w1, str(w2))
fout.write(w1)
fout.write(',')
fout.write(str(w2))
fout.write('\n')
print("---")
model = KeyedVectors.load_word2vec_format('./tohoku_entity_vector/entity_vector.model.bin', binary=True)
# ミッキーと類似度が近い言葉を取得
similar=model.most_similar(u'ミッキー')
print_list(similar)
# クリスマスシーズンのミッキーと類似の言葉を取得(ミッキー + クリスマス)
similar2=model.most_similar(positive = [u"ミッキー",u"クリスマス"])
print_list(similar2)
# ユニバーサルスタジオ界のミッキーは誰か(ミッキー - ディズニー + ユニバーサルスタジオジャパン)
similar3=model.most_similar(positive = [u"ミッキー",u"ユニバーサルスタジオジャパン"], negative = [u"ディズニー"])
print_list(similar3)
テスト
・ミッキーと類似度が近い言葉を取得
$ python sample.py
ミニー 0.8507789373397827
チャーリー 0.809766948223114
ドナルド 0.8051313161849976
ブッチ 0.7975171804428101
[グーフィー] 0.7875207662582397
ジェリー 0.7815017700195312
ジョニー 0.7738847732543945
カーリー 0.770979642868042
サム 0.7709465026855469
ダニー 0.7695404887199402
->ミニー、ドナルド、グーフィー等のディズニーキャラクターが出ております。
しかし、ジェリー、ジョニー、カーリー、サム、ダニーは何者でしょうか?
チャーリーはチャーリーブラウンでしょうか?
・クリスマスシーズンのミッキーと類似の言葉を取得(ミッキー + クリスマス)
ミニー 0.821307897567749
バレンタイン 0.7653680443763733
[ミッキーマウス] 0.729365348815918
チャーリー 0.708748996257782
メリー 0.7075506448745728
[クリスマス] 0.7061460018157959
イースター 0.7013547420501709
ハロウィーン 0.6952414512634277
ディナー 0.689238429069519
ドリュー 0.686948299407959
->バレンタイン、イースターや、ハロウィーンなど、季節のイベント用語が並んでいます。
是非、顔が新しくなったミッキーのイースターへ行きましょう!
・ユニバーサルスタジオ界のミッキーは誰か(ミッキー - ディズニー + ユニバーサルスタジオジャパン)
したてや 0.663770318031311
[魔鐘] 0.6627211570739746
フミカ 0.6586048603057861
ジョースター卿 0.6537103652954102
[GRACE_(ドラマー)] 0.6518503427505493
クラムジー 0.6359982490539551
トルファルディーノ 0.6356921195983887
紗江 0.6320871710777283
[佐津川愛美] 0.6311378479003906
[Oh!診] 0.6306033730506897
->ミニオンやエルモは出力されませんでした。
ジョースター卿
まとめ
ミッキーの話題のためword2vecを活用しました。
ミニー、ドナルド、グーフィー辺りについての周辺知識を抑え、
クリスマス、バレンタイン、イースターや、ハロウィーンのイベントについても言及するのが良いでしょう。
ユニバの話題になった際は、ジョースター卿について話をすると良いでしょう。
CodingError対策
TypeError: 'method' object is not subscriptable
most_similar(u'ミッキー')をmost_similar(u"ミッキー")に変更して解決
※methodに与える引数を色々模索していたら気づいたら解決していました。
参考
gensim.models.Word2Vec
python3でもっとも簡単に言語解析を使う
15分でできる日本語Word2Vec
絵で理解するWord2vecの仕組み
【Python】Word2Vecの使い方
数値を文字列に変換(str)
[Python]Pythonと日本語表示と文字コード、unicode 、str 、utf-8 、shift-jis
Pythonで日本語を使う
学習済みword2vecモデルを調べてみた
Training Word2Vec Model on English Wikipedia by Gensim
Training a Japanese Wikipedia Word2Vec Model by Gensim and Mecab
白ヤギコーポレーション word2vecの学習済み日本語モデルを公開します
東北大学 日本語 Wikipedia エンティティベクトル
自然言語処理にwikipediaを使う
機械学習のデータセットの重要性
最近流行りのword2vecをLDAと比較してみた
Python3からMeCabを使う
Word2VecをPythonでやってみる