Word2Vec(類語取得) | python3Xのブログ

python3Xのブログ

ここでは40代、50代の方が日々の生活で役に立つ情報や私の趣味であるプログラム、Excelや科学に関する内容で投稿する予定です。

Wikipediaのテキストから学習したWord2Vecのモデルを以下からダウンロード
https://github.com/Kyubyong/wordvectors
の下の方のjapanes(w)  ->  ja.zipをダウンロード -> dataフォルダ下に配置
 
類義語というよりはカテゴリが似ている語が出力されている
DBpediaやWordNetはベースを人が作成するため、使いたい語が登録されていない場合もある
多くの同義語を取得したい場合はWord2Vecの方が適している
Word2Vecのモデルに含まれない語はベクトルが呼び出せず、KeyErrorになる
自分で例外処理を追加し、空ののリストを返すようしよう
 
word2vec.py
import gensim
model = gensim.models.Word2Vec.load('./data/ja.bin')
 
def get_synonyms(text):
    results = []
    try:
        for word, sim in model.most_similar(text, topn=10):
            results.append({'term': word, 'similarity': sim})
    except:
        pass
    return results

def calc_similarity(text1, text2):
    try:
        sim = model.similarity(text1, text2)
    except:
        pass
    return sim

def analogy(X_Y, x):
    X, Y = X_Y
    results = []
    try:
        for word, sim in model.most_similar(positive=[Y, x], negative=[X], topn=10):
            results.append({'term': word, 'similarity': sim})
    except:
        pass
    return results
 
結果
[
    {
        "term": "イギリス",
        "similarity": 0.7778580188751221
    },
    {
        "term": "カナダ",
        "similarity": 0.7089664936065674
    },
    {
        "term": "オーストラリア",
        "similarity": 0.6960539221763611
    },
    {
        "term": "イギリスアメリカ",
        "similarity": 0.671729564666748
    },
    {
        "term": "アルゼンチン",
        "similarity": 0.6481400728225708
    },
    {
        "term": "メキシコ",
        "similarity": 0.6394719481468201
    },
    {
        "term": "ブラジル",
        "similarity": 0.6384978890419006
    },
    {
        "term": "ドイツ",
        "similarity": 0.6304243206977844
    },
    {
        "term": "フランス",
        "similarity": 0.6301647424697876
    },
    {
        "term": "ニュージーランド",
        "similarity": 0.6216776967048645
    }
]
入力するテキストを『健康』に変更
結果
[
    {
        "term": "衛生",
        "similarity": 0.5829343795776367
    },
    {
        "term": "心身",
        "similarity": 0.5055597424507141
    },
    {
        "term": "福祉",
        "similarity": 0.48429426550865173
    },
    {
        "term": "保健",
        "similarity": 0.4675716161727905
    },
    {
        "term": "介護",
        "similarity": 0.46678638458251953
    },
    {
        "term": "ケア",
        "similarity": 0.4635636508464813
    },
    {
        "term": "環境",
        "similarity": 0.44540971517562866
    },
    {
        "term": "精神",
        "similarity": 0.43922868371009827
    },
    {
        "term": "疾病",
        "similarity": 0.43444526195526123
    },
    {
        "term": "リハビリテーション",
        "similarity": 0.426738977432251
    }
]