gensim.models.word2vecメソッドの使い方

word2vecとは?

Word2Vecとは、単語をベクトルで表現する手法です。Mikolov らが 2013 年の論文 (Efficient Estimation of Word Representations in Vector Space, ベクトル空間における単語の表現の効率的推定, https://arxiv.org/abs/1301.3781) で発表した一連の手法になります。

単語をベクトル化するメリットとして以下のことが挙げられます。

  • ベクトルで表現することにより、単語間の距離や内積が定義され、単語間の「近さ」を定量化可能
  • 数値によって表現されていることから、機械学習モデルへの入力として用いることが可能

従来法との違いについては以下のことが挙げられます。

  • 単語のベクトル表現をニューラルネットワークの学習を通じて獲得できる
  • 「単語埋め込み (word embedding) 」と呼ばれたりもする

word2vecメソッドの使い方

引数名
sentenceslistトークン化されたテキストのリスト。
※gensim.utils.simple_preprocess()でトークン化含む前処理が可能。
vector_sizeint単語ベクトルの次元数。大きくなるほど計算コストが増大する。
windowintコンテキストウィンドウのサイズ。中心となる単語前後に対してどのくらい考慮するか決める。
min_countint指定した値未満の出現回数の単語を無視する。計算コストの削減やノイズ除去が可能。
workersintトレーニングに使用するスレッド数。
seedint乱数シード。結果の再現性を確保。

サンプルコード

from gensim.utils import simple_preprocess
from gensim.models import Word2Vec

# サンプルテキストデータ
sample_texts = ["This is a sample sentence for Word2Vec training.",
                "Another example sentence for training the Word2Vec model.",
                "Word2Vec is a method to create word embeddings."]

# テキストデータの前処理
processed_texts = [simple_preprocess(text) for text in sample_texts]

# Word2Vecモデルのトレーニング
vectors = Word2Vec(processed_texts, vector_size=60, window=3, seed=1, workers=4, min_count=2)

# トレーニングされたモデルの表示
print(vectors)

# 結果
Word2Vec<vocab=6, vector_size=60, alpha=0.025>

合わせて覚えておくとよいコード

ベクトル化された単語の一覧をリストで取得

トレーニングされたWord2Vecモデルのwv属性(KeyedVectorsインスタンス)の「index_to_key」プロパティで取得可能です。事前に「gensim.models.word2vec.Word2Vec」クラスを「gensim.models.keyedvectors.KeyedVectors」クラスに変換する必要があります。以下では、リスト型にキャストをしていますが、キャストしなくてもリスト型で返されるようです。

from gensim.utils import simple_preprocess
from gensim.models import Word2Vec

# サンプルテキストデータ
sample_texts = [
    "This is a sample sentence for Word2Vec training.",
    "Another example sentence for training the Word2Vec model.",
    "Word2Vec is a method to create word embeddings."
]

# テキストデータの前処理
processed_texts = [simple_preprocess(text) for text in sample_texts]

# Word2Vecモデルのトレーニング
model = Word2Vec(processed_texts, vector_size=60, window=3, seed=1, workers=4, min_count=1)

print(model)
print(type(model))
print(type(model.wv))

# ベクトル化された単語の一覧を取得
word_list = list(model.wv.index_to_key)

# 結果を表示
print("ベクトル化された単語の一覧:")
print(word_list)

# 結果
['word', 'vec', 'training', 'for', 'sentence', 'is', 'embeddings', 'create', 'to', 'method', 'model', 'the', 'example', 'another', 'sample', 'this']

特定の単語のベクトル値を確認

トレーニングされたWord2Vecモデルのwv属性(KeyedVectorsインスタンス)を使用します。

from gensim.utils import simple_preprocess
from gensim.models import Word2Vec

# サンプルテキストデータ
sample_texts = [
    "This is a sample sentence for Word2Vec training.",
    "Another example sentence for training the Word2Vec model.",
    "Word2Vec is a method to create word embeddings."
]

# テキストデータの前処理
processed_texts = [simple_preprocess(text) for text in sample_texts]

# Word2Vecモデルのトレーニング
model = Word2Vec(processed_texts, vector_size=60, window=3, seed=1, workers=4, min_count=1)

# 特定の単語のベクトルを取得
print(type(model.wv["word"]))
print(model.wv["word"])

参照

[1]https://radimrehurek.com/gensim/models/word2vec.html

コメント

タイトルとURLをコピーしました