对于我的硕士论文,我创建了一个Word2Vec模型。我想显示此图像以澄清结果。但是,映射如何在此2D空间中显示单词呢?
所有单词均由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)
答案 0 :(得分:1)
有两种方法。
第一种方法是使用PCA(主要成分分析),并在x轴上绘制第一个成分,在y轴上绘制第二个成分(并丢弃其他成分)。
您没有说要使用哪个库来生成单词向量,它可能带有其自己的PCA函数。但是sklearn有一个:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html (https://machinelearningmastery.com/develop-word-embeddings-python-gensim/有一些现成的代码,显示使用gensim制作矢量,然后使用该函数绘制矢量。)
您可以尝试的另一种方法是绘制单词向量的前两个维度。这是合理的,因为单词向量中的所有维度都应具有相等的权重。即选取300个维度中的任何两个,应该可以为您提供与其他两个维度相同的信息量。
但是使用PCA是更常见的可视化方法。