word2vecとは?
Word2Vecとは、単語をベクトルで表現する手法です。Mikolov らが 2013 年の論文 (Efficient Estimation of Word Representations in Vector Space, ベクトル空間における単語の表現の効率的推定, https://arxiv.org/abs/1301.3781) で発表した一連の手法になります。
単語をベクトル化するメリットとして以下のことが挙げられます。
- ベクトルで表現することにより、単語間の距離や内積が定義され、単語間の「近さ」を定量化可能
- 数値によって表現されていることから、機械学習モデルへの入力として用いることが可能
従来法との違いについては以下のことが挙げられます。
- 単語のベクトル表現をニューラルネットワークの学習を通じて獲得できる
- 「単語埋め込み (word embedding) 」と呼ばれたりもする
word2vecメソッドの使い方
引数名 | 型 | |
sentences | list | トークン化されたテキストのリスト。 ※gensim.utils.simple_preprocess()でトークン化含む前処理が可能。 |
vector_size | int | 単語ベクトルの次元数。大きくなるほど計算コストが増大する。 |
window | int | コンテキストウィンドウのサイズ。中心となる単語前後に対してどのくらい考慮するか決める。 |
min_count | int | 指定した値未満の出現回数の単語を無視する。計算コストの削減やノイズ除去が可能。 |
workers | int | トレーニングに使用するスレッド数。 |
seed | int | 乱数シード。結果の再現性を確保。 |
サンプルコード
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"])
コメント