Word2Vec 単語のベクトル化



ソフトウェア

公開日:2021/9/24          

前提知識
python


■Word2Vecとは
Word2Vecとは単語をベクトル化する手法の一つで、単語の関連性の深さを数値化して表現します。これを分散表現、あるいは単語の埋め込みともいいます。こうすることで、例えば次の様に単語同士の関係性を数値計算式の様に表現できます。

「王様」 - 「男」 + 「女」 = 「女王」

■pythonによる実装例
Word2Vecを行うためには、大量の文章を読み込ませ各単語の関係性を学習させる必要があります。今回題材として用いるのは、青空文庫にある太宰治の「走れメロス」です。 あらかじめファイルをダウンロードして、注釈などの不要部分を取り除く必要があります。その方法はこちら。今回は読み込ませるファイルも準備しております。
また、Word2Vecに使用するライブラリはTokenizerとgensimです。

 ・ 読み込みファイル(走れメロス):meros.zip

from janome.tokenizer import Tokenizer
from gensim.models import word2vec

with open('meros.txt', 'r', encoding='ANSI') as file: # 抽出するファイル名を記載
    text = file.read()

t = Tokenizer()
words_list = []

for sentence in text.split('。'):    # 1文ずつ抽出
    token_list = []
    tokens = t.tokenize(sentence)
    for token in tokens:
        if token.part_of_speech.split(',')[0] in ['名詞', '動詞']:    # 名詞か動詞のみを抽出
            token_list.append(token.base_form)
    words_list.append(token_list)

model = word2vec.Word2Vec(words_list,min_count=5,window=5)
similar = model.wv.most_similar(positive=['メロス'], topn=5)    # 「メロス」に関係性の深い単語を5つ抽出
print(similar)

    → [('結婚式', 0.38387778401374817),
        ('帰る', 0.22828556597232819),
        ('れる', 0.21429498493671417),
        ('心', 0.21371948719024658),
        ('おまえ', 0.20446088910102844)]


similar = model.wv.most_similar(positive=['メロス','妹'], negative=['王'],topn=5)
# 「メロス」と「妹」を足して、「王」を引く。
print(similar)

    → [('帰る', 0.2504352629184723),
        ('約束', 0.21765188872814178),
        ('人', 0.2161809206008911),
        ('結婚式', 0.20376107096672058),
        ('思う', 0.19854386150836945)]












サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



ソフトウェア