我试图将主题向量 (300, 1) 的维数减少到二维空间。这已经通过各种方法(例如 t-SNE 和自动编码器)完成。可以在此处找到将主题向量减少到 2-dim 空间的已发布示例。
为了训练一个测试自动编码器,我从谷歌的词向量模型中提取了前 10k 个词,并尝试对它们进行编码/解码。我的带有 tanh 激活函数的自动编码器(300、100、2)(由于 word2vec 模型的向量元素的性质)似乎可以快速学习向量(损失函数很快变为负数)。
然而,当我根据自动编码器的结果(单词表示的余弦和欧几里德距离)比较最接近的单词时,我注意到它们与原始 w2v 模型提供的相似单词不匹配(输出most_similar)。
基于自动编码表示的最相似词(2-dim,通过余弦距离计算)。结果看起来是随机的,似乎原始距离没有得到保留。
>>> extract_from_embed('car') # extract method for my own embedding
[(football', 0.91979183998553593), (u'\xa9', 0.9515135906035519), (u'Thank', 0.96150527440098321), (u'innings', 0.96893565858480013), (u'thank', 0.9699300787802696), (u'balls', 0.97004978663463826), (u'Admission', 0.97050270191042776), (u'thanked', 0.97098601610349322), (u'Announces', 0.97186348679591361), (u'drills', 0.97214077185079129)]
Word2Vec 基于 300、1 个向量的最相似词
>>> word_vectors.most_similar(positive=['car']) # std gensim method
[(u'vehicle', 0.7821096777915955),
(u'cars', 0.7423831224441528),
(u'SUV', 0.7160963416099548),
(u'truck', 0.6735789775848389),
(u'Car', 0.667760968208313),
...
(u'automobile', 0.5838367938995361)]
当我使用自动编码器时,有没有办法“保留”向量之间的相对距离?我知道来自 2 和 300 暗空间的向量之间的绝对距离不同。但是我可以保留向量之间的相对距离吗?这甚至可能吗?