用于 2D 词嵌入的词映射

word mapping for 2D word embedding

为了我的硕士论文,我创建了一个 Word2Vec 模型。我想展示这张图片来阐明结果。但是映射如何工作以显示此 2D 中的单词 space?

所有单词都由一个 300 dim 的向量表示。它们如何映射到此 2D 图像上? x 和 y 轴是什么?

代码:

w2v_model.build_vocab(documents)

words = w2v_model.wv.vocab.keys()
vocab_size = len(words)
print("Vocab size", vocab_size)

w2v_model.train(documents, total_examples=len(documents), 

epochs=W2V_EPOCH)
tokenizer = Tokenizer()
tokenizer.fit_on_texts(df_train.text)

vocab_size = len(tokenizer.word_index) + 1
print("Total words", vocab_size)

x_train = pad_sequences(tokenizer.texts_to_sequences(df_train.text), maxlen=SEQUENCE_LENGTH)
x_test = pad_sequences(tokenizer.texts_to_sequences(df_test.text), maxlen=SEQUENCE_LENGTH)

labels = df_train.target.unique().tolist()
labels.append(NEUTRAL)

encoder = LabelEncoder()
encoder.fit(df_train.target.tolist())

y_train = encoder.transform(df_train.target.tolist())
y_test = encoder.transform(df_test.target.tolist())

y_train = y_train.reshape(-1,1)
y_test = y_test.reshape(-1,1)

embedding_matrix = np.zeros((vocab_size, W2V_SIZE))
for word, i in tokenizer.word_index.items():
  if word in w2v_model.wv:
    embedding_matrix[i] = w2v_model.wv[word]
print(embedding_matrix.shape)
embedding_layer = Embedding(vocab_size, W2V_SIZE, weights=[embedding_matrix], input_length=SEQUENCE_LENGTH, trainable=False)

有几种方法。

首先是使用PCA(主成分分析),将第一个成分绘制在x-axis上,第二个成分绘制在y-axis上(并丢弃其他成分)。

您没有说明您使用哪个库来生成词向量,它可能带有自己的 PCA 函数。但是 sklearn 有一个:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.htmlhttps://machinelearningmastery.com/develop-word-embeddings-python-gensim/ 有一些 ready-made 代码显示使用 gensim 制作向量,然后使用该函数绘制它们。)

您可以尝试的另一种方法是绘制词向量的前两个维度。这是合理的,因为词向量中的所有维度都应该具有相同的权重。 IE。采用 300 个维度中的任意两个维度应该会为您提供与任何其他两个维度相同的信息量。

但是使用 PCA 是更正常的可视化方法。