PythonでWord2Vecを使って類義語抽出

2015-11-12
このエントリーをはてなブックマークに追加

今更のWord2Vec。

分かち書きしたテキストファイルを読み込ませて学習データを作って保存。保存した学習データを読み込んで類義語を出力するところまで。毎回学習してから類義語抽出っていう訳にもいかないから学習データの保存は必要ですよね、っていうサンプル。

Word2Vecはおもしろいし、いろいろ触ってるので今後もブログに書いていこう。このエントリも下書きのまま1年くらい放置されててちゃんとブログ書かねばと反省中。。。

from gensim.models import word2vec

def main():

    data = word2vec.Text8Corpus("/path/to/file")
    model = word2vec.Word2Vec(data, size=250, window=5, min_count=2, workers=4)
    model.save("./teacher.bin")

    model = word2vec.Word2Vec.load("./teacher.bin")
    for _w in model.most_similar(positive=['ジャケット']):
        print(_w)

if __name__ == "__main__":
    main()

elasticsearchでcopy_toを使ってみる

2015-11-01
このエントリーをはてなブックマークに追加

SolrでいうところのCopyField。全文検索で複数フィールドを束ねて検索したい時には便利です。フィールドごとにスコアブーストしたいとなると別の方法を取るしかないかな。

{
    "title": {
        "type": "string",
        "copy_to": "text"
    },
    "description": {
        "type": "string",
        "copy_to": "text"
    },
    "text": {
        "type": "string",
        "index": "analyzed",
        "analyzer": "text_ja"
    }
}

これでtextフィールドにクエリ投げればtitleかdescriptionのどちらかに適合するドキュメントが返ってくる。データ元になるtitleとかdescriptionはindexをfalseにしておけばインデックスサイズも小さくなる。elasticsearch1.7.3で動きました。