処理手順としては1.テキストデータに対し単語の正規化や記号など文章に関係ないものの削除などの処理を行う2.分かち書きを行い文章を単語で区切る3.分かち書きしたテキストデータをgensimのword2vecで学習を行い、モデルを作成するといった感じになります。テキストデータに関しては青空文庫にある夏目漱石の小説「吾輩は猫である」を使用。実装は下記の記事を参考にさせて頂きました。https://qiita.com/makaishi2/items/63b7986f6da93dc55eddテキストデータから文章に関係ない記号の削除などデータの整形に関しては利用するテキストデータによって異なるので省略してjanomeとWord2Vecを使っている部分を説明していきます。text.split(u"。word_list.append(temp_word)janomeを使った分かち書きはjanome.tokenizerのTokenizerクラスをインポートしてそのクラスのtokenizeメソッドを使うことで利用できます。tokenizeメソッドは引数に分かち書きしたい文字列を受け取って、その文字列に含まれる単語とその単語の原型や品詞や読みなどの情報をもつTokenオブジェクトのリストを返します。上記のコードだとtoken.part_of_speechというのはその単語の品詞の表しており、token.base_formというのはその単語の原型を表します。size=100,min_count=5,window=5,iter=100)学習とモデルの作成は簡単でgensim.modelsのword2vecをインポートしてWord2Vecメソッドを使うだけでできます。各引数は次のようになっています。機械学習の繰り返し回数できたモデルを使って単語の類似度を計算したり、単語同士の演算を行うことができます。0.3064701557159424上にあるものほど猫という単語と属性などが近く類似度が高いとされたものになります。横の数値はコサイン距離で-1~1の範囲で表され、1に近いものは類似度が高く、-1に近いものは類似度が低いものとなっています。動物という単語が猫と類似度(関連)が高いのは納得できるし、学習に使ったテキストである「吾輩は猫である」が猫の視点で語られている物語であることを考えれば吾輩や己という単語が猫と類似するものというのもまぁわからなくはないかなといった感じです。わからないものもありますがこの小説における猫とは何かというのはなんとなく表せているように思います。単語同士の演算は次のように行います。引数のpositiveに加算したい単語を、引数のnegativeに減算したい単語を指定することで単語の演算ができます。0.24620375037193298となり、よくわからないものとなってしまいました。最初はTwitterからデータを取得して、それを使って何かしようと思ったのですがTwitterのデータは前処理が大変そうだったので断念しました。機会があればもう一度挑戦してみたいと思います。最後にWord2Vecに興味を持つきっかけとなった記事を載せておきます。http://www.randpy.tokyo/entry/python_word2vecこちらの記事はTwitterから集めたデータを用いて「マジ卍」とはどういう意味か調べさせています。・http://ainow.ai/2017/10/31/124408/こちらの記事では発言小町という掲示板から恋愛、結婚、離婚というカテゴリの投稿データを集めて学習させ、奥さんにあって彼女にないものは何かということを単語ベクトルを用いて計算させています。編集トップへ戻る閉じる。