使用自动编码器进行降维时保留相似距离

数据挖掘 word2vec 词嵌入 自动编码器 特纳 嵌入
2022-03-03 17:27:40

我试图将主题向量 (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 暗空间的向量之间的绝对距离不同。但是我可以保留向量之间的相对距离吗?这甚至可能吗?

1个回答

不,在减少任意数据的维度时,不可能保留相对距离。这不是由于自动编码器与例如 PCA 或 T-SNE 相比的特性。这是由于几何。

通过考虑将尺寸从 3 减少到 2,并检查所有四个角点相距 1 个单位的四面体,您可以相对容易地看到这一点。没有可以将四个点相互等距放置的二维形状(除非您考虑非欧几里得空间)。应该清楚的是,这些角顶点附近的相对距离也会受到影响,因此这种特殊的形状展示了降维的一般特性。