目的
日常を生きていると、常に「何かをしなければ」と思ってしまいがちです。
しかしながら、「何かをすること」が必ずしも本当に重要な事に繋がっていない事もしばしばあります。
この場合は「何もしない」をすることが実は自分を客観的に見直せるきっかけになることを、
くまのプーさんは教えてくれています。
なのですが、
結構「何もしないをする」の抽象度が高く、自分なりに都合よく解釈しがちなのも事実だと思います。
従いまして、客観的に上記の意味を捉えるため、機械学習(Doc2vec)を用いて類似表現を探したいと思います。
準備
1.Doc2vecをインストールする。
下記を参照してインストールします。
2.Doc2vecの学習済みモデルを取得する。
下記サイト""よりダウンロードさせて頂きます。
日本語WIKIPEDIAで学習したDOC2VECモデル
dbow300d
解凍
$ tar zxvf jawiki.doc2vec.dbow300d.tar.bz2
3.機械学習用コード作成
下記3step.で処理します。コードは後述。
step1.学習モデルのロード(Doc2vec.load)
step2.入力テキストの構文解析(Mecab.tagger)
step3.テキストから類似表現取得(docvecs.most_similar)
コード
# -*- coding: utf-8 -*-
from gensim.models.doc2vec import Doc2Vec
import MeCab
import numpy as np
def tokenize(text):
wakati = MeCab.Tagger("-O wakati")
wakati.parse("")
return wakati.parse(text).strip().split()
model = Doc2Vec.load("jawiki.doc2vec.dbow300d.model")
text="何もしないをしよう"
out=model.docvecs.most_similar([model.infer_vector(tokenize(text))])
print( out );
text="自分を変えるものは、自分で作るものだ。"
out=model.docvecs.most_similar([model.infer_vector(tokenize(text))])
print( out );
text="君が100まで生きるなら、 僕は君より1日少なく生きたいよ。 だって、君がいない人生なんて、 無いのと同じだからね。"
out=model.docvecs.most_similar([model.infer_vector(tokenize(text))])
print( out );
テスト
[('虜', 0.6765191555023193),
('岡田淮一', 0.6655471324920654),
('レイノルド・シルキー', 0.6532681584358215),
('ミラノ・フプツェイ', 0.6495197415351868),
('フォレスト・ガンダー', 0.6368730068206787),
('タックス・ヘブン', 0.6367721557617188),
('バルタサー・ハブマイヤー', 0.6332018971443176),
('ボルトネック', 0.6331052780151367),
('官弊社', 0.6319104433059692),
('上諏訪市', 0.6254733800888062)]
→虜なんですね!
[('オオツヤヒサシサイカブト', 0.6657865643501282),
('虜', 0.6558833122253418),
('オキサリルジヒドラジド', 0.6334289312362671),
('足型', 0.6331846714019775),
('マックロ', 0.6315746307373047),
('的 (曖昧さ回避)', 0.625438392162323),
('バルタサー・ハブマイヤー', 0.6228896975517273),
('レイノルド・シルキー', 0.6207892894744873),
('フォレスト・ガンダー', 0.6185415387153625),
('上諏訪市', 0.6169095039367676)]
→「オオツヤヒサシサイカブト」はカブトムシですね。
「君が100まで生きるなら、 僕は君より1日少なく生きたいよ。 だって、君がいない人生なんて、 無いのと同じだからね。」
[('ミラノ・フプツェイ', 0.678257167339325),
('桑田圭祐', 0.6598429679870605),
('レイノルド・シルキー', 0.6597413420677185),
('岡田淮一', 0.650931179523468),
('楠正成', 0.6494807004928589),
('上諏訪市', 0.6473155617713928),
('ボトムネック', 0.646905779838562),
('聴きたかったダンスミュージック、リキッドルームに', 0.6437188386917114),
('碓井峠', 0.6405103206634521),
('クリスタルカイザー', 0.638593852519989)
→やはり、桑田佳祐ですね!
TSUNAMIが聴きたくなってきました。
参考文献にも記載がある通り、何もないよりはよいですが、
doc2vecを使いこなすのであれば、学習モデルをもう少しドメイン寄りのものにした方が良さそうです。
CodingError対策
ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'
ネットで調べたらnumpyと他ライブラリの順序関係が影響しているらしく、numpyを再インストールしたら解決。
$ sudo pip uninstall numpy
$ pip install numpy
Successfully installed numpy-1.16.2
参考
くまのプーさん(ディズニー)-wikipedia
Doc2Vecを使用するまでの環境構築手順
日本語WIKIPEDIAで学習したDOC2VECモデル