投稿

8月, 2017の投稿を表示しています

自分のツイートを word2vec で学習させて遊ぶ

イメージ
全ツイートの内容を word2vec に放り込んで遊んだ。 数年前から word2vec はスゴいらしいという話を聞いていたが、なんとなくスルーしていた。 Python の gensim パッケージで手軽に word2vec を使えるようなので、試してみた。 今回使った環境 Windows 10 (64bit) Python 3.6.0 (Anaconda 4.3.0) MeCab 0.996 word2vec は、2014年に Google で開発された自然言語処理の手法。比較的計算量が少ないところが特徴らしい。 ざっくりとした流れ word2vec という名前の由来は、おそらく "word to vector" の略だと思う(出典はない)。単語 (word) からベクトル (vector) を学習する。 word2vec は、大量の文章を渡されると、単語の前後関係から、各単語をよく表すn次元のベクトルを学習する。 一見すると機械的な方法だが、なぜか単語どうしの意味的な関連性まで学習できてしまう(ことがある)らしい。 ベクトルの次元数 n は、自由に設定できる。ネット上のサンプルを見ていると n=100 くらいに設定していることが多かった。 細かい話 学習には2層のニューラルネットワーク (入力層、隠れ層、出力層からなる。ふつう出力層はカウントしないので2層といっている) を使っているらしい。意外と少ない! 学習時の「前後の単語を見る」処理として、 CBOW (Continuous Bag-of-words) と skip-gram の2種類が提案されている。どちらを使うかによって、NNの構造がすこし異なる。 Python の gensim パッケージではどちらも使えるが、今回は性能が良いらしい skip-gram を使うことにする。 参考: Word2vec - Wikipedia 絵で理解するWord2vecの仕組み 【論文シリーズ】CBOWとSkip-gramについて データの準備 さて、word2vec の学習には、大きめの文章データが必要となる。 なにか良さそうなものはないかと考えて、約12万ツイートある  mogesystem の投稿内容を使う