ボールを蹴りたいシステムエンジニア

ボール蹴りが大好きなシステムエンジニア、ボールを蹴る時間確保の為に時間がある時には勉強する。

CentOSでpython3からgensimのdoc2vecを使ってみる(カスタマイズ無し)

環境

CentOS6
Python3.5

手順

toriaezu-engineer.hatenablog.com

前回の記事のdoc2vecではデフォルトのdoc2vec,word2vecをカスタマイズするものであり、色々ハマったりWarningログが解決出来なかったのでカスタマイズ無しで使用する方法を調査。
doc2vec利用にあたり依存ライブラリ等のインストールは上記記事参照。

ここにチュートリアルっぽいコードあったのでこれを参考にしてみる。
gensim doc2vec tutorial · GitHub


以下のコードならデフォルトのdoc2vecを修正しなくても動いた。
(よくわかってない)

from gensim import models

sentence = models.doc2vec.LabeledSentence(
    words=[u'犬', u'今日', u'吠えた'], tags=["SENT_0"])
sentence1 = models.doc2vec.LabeledSentence(
    words=[u'猫', u'明日', u'吠えた'], tags=["SENT_1"])
sentence2 = models.doc2vec.LabeledSentence(
    words=[u'今', u'猫', u'魚'], tags=["SENT_2"])
sentence3 = models.doc2vec.LabeledSentence(
    words=[u'魚', u'泳ぐ', u'海'], tags=["SENT_3"])

sentences = [sentence, sentence1, sentence2, sentence3]

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename
    def __iter__(self):
        for uid, line in enumerate(open(filename)):
            yield LabeledSentence(words=line.split(), labels=['SENT_%s' % uid])

model = models.Doc2Vec(alpha=.025, min_alpha=.025, min_count=1)
model.build_vocab(sentences)

for epoch in range(10):
    model.train(sentences)
    model.alpha -= 0.002  # decrease the learning rate`
    model.min_alpha = model.alpha  # fix the learning rate, no decay

model.save("my_model.doc2vec")
model_loaded = models.Doc2Vec.load('my_model.doc2vec')

# ある文書に似ている文書を表示
print ("SENT_0")
print (model.docvecs.most_similar(["SENT_0"]) )
print ("SENT_3")
print (model.docvecs.most_similar(["SENT_3"]) )
print ("SENT_1")
print (model_loaded.docvecs.most_similar(["SENT_1"]) )

# ある単語に類似した単語を取得
print (model.similar_by_word(u"魚"))