web-dev-qa-db-ja.com

Keras Embedding LayerからWordベクトルを取得する方法

現在、最初のレイヤーとして埋め込みレイヤーを持つKerasモデルを使用しています。単語間の相互関係と類似性を視覚化するために、語彙のすべての要素の単語とベクトルのマッピングを返す関数が必要です(例: 'love'-[0.21、0.56、...、0.65、0.10] )。

それを行う方法はありますか?

10
dermaschder

埋め込みレイヤーのget_weights()メソッドを使用して、Wordの埋め込みを取得できます(つまり、基本的に埋め込みレイヤーの重みは埋め込みベクトルです)。

# if you have access to the embedding layer explicitly
embeddings = emebdding_layer.get_weights()[0]

# or access the embedding layer through the constructed model 
# first `0` refers to the position of embedding layer in the `model`
embeddings = model.layers[0].get_weights()[0]

# `embeddings` has a shape of (num_vocab, embedding_dim) 

# `Word_to_index` is a mapping (i.e. dict) from words to their index, e.g. `love`: 69
words_embeddings = {w:embeddings[idx] for w, idx in Word_to_index.items()}

# now you can use it like this for example
print(words_embeddings['love'])  # possible output: [0.21, 0.56, ..., 0.65, 0.10]
20
today