なに?
日本語でWord2Vecのもっともシンプルなサンプルです。
ポイントは、テキストファイルとか経由しない、日本語なので分かち書きもする、です。
何度やっても忘却の彼方にいってしまうためインターネットを私有化する自分用のメモです。
けれど、誰かの役に立つかもしれないので……
コード
text = '吾輩は猫である。名前はまだ無い。どこで生れたか頓(とん)と見當がつかぬ。何でも薄暗いじめじめした所でニヤーニヤー泣いて居た事丈は記憶して居る。吾輩はこゝで始めて人間といふものを見た。然(しか)もあとで聞くとそれは書生といふ人間中で一番獰悪(だうあく)な種族であつたさうだ。此書生といふのは時々我々を捕(つかま)へて煮て食ふといふ話である。然し其當時は何といふ考(かんがへ)もなかつたから別段恐しいとも思はなかつた。但(たゞ)彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフハフハした感じが有つた許(ばか)りである。掌の上で少し落ち付いて書生の顔を見たのが所謂(いはゆる)人間といふものゝ見始(みはじめ)であらう。此時妙なものだと思つた感じが今でも殘つて居る。第一毛を以て装飾されべき筈の顔がつるつるして丸で薬罐(やくわん)だ。其後猫にも大分逢つたがこんな片輪には一度も出會(でく)はした事がない。加之(のみならず)顔の眞中が餘りに突起して居る。そうして其穴の中から時々ぷうぷうと烟(けむり)を吹く。どうも咽(む)せぽくて實に弱つた。是が人間の飲む烟草(たばこ)といふものである事は漸く此頃(このごろ)知つた。此書生の掌の裏(うち)でしばらくはよい心持に坐つて居つたが、暫くすると非常な速力で運轉し始めた。書生が動くのか自分丈(だけ)が動くのか分らないが無暗に眼が廻る。胸が惡くなる。到底助からないと思つて居ると、どさりと音がして眼から火が出た。夫迄(それまで)は記憶して居るがあとは何の事やらいくら考へ出さうとしても分らない。'
from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
sentences = text.split("。")
tokenizer = Tokenizer()
word_list = []
for sentence in sentences:
tokens = tokenizer.tokenize(sentence)
temp_word = []
for token in tokens:
if token.part_of_speech.split(",")[0] in ["名詞","動詞"]:
temp_word.append(token.base_form)
word_list.append(temp_word)
import gensim
model = gensim.models.word2vec.Word2Vec(word_list, size=100, min_count=1, window=5, iter=100)
# 単語の足し算、引き算
ret = model.wv.most_similar(
positive = ['吾輩','猫'],
negative = '猫'
)
for item in ret:
print(item[0], item[1])
# 単語の類似度 COS類似度のため -1~1
a = model.wv.similarity('吾輩','猫')
print(a)
少しだけ注意点
事前に pip
で、word2vec
と janome
は入れておいてください。
> pip install word2vec
> pip install janome
1行目の text
をファイルから読み込むようにすればテキストファイルのものも解析できますが、全て一気に読み込むと非常に大変なので、1行ずつ読み込んで処理していくなどするとよいと思います。
Word2Vec(word_list, size=100, min_count=1, window=5, iter=100)
の minc_count
を 1
にしていたり、サンプル用になっています。このあたりは実際はチューニングしてもよいです。