我试图编写一个模型,该模型具有一个嵌入的输入向量(例如E_1),并在第二个嵌入E_2中预测相应的向量。两者都是n维实稠密向量\mathbb{R}^n.
具体而言,一种是跳频字嵌入,另一种是node2vec图嵌入。我有大约30000个培训例子,提供了两者之间的映射。因为它们都是实向量,编写一个简单的MLP来学习其中一个到另一个的非线性转换(实际上我并不关心这里的拟合,因为域是封闭的),这似乎是一项琐碎的任务。
然而,我似乎无法使它正常工作。
在Keras中,像这样的天真的东西应该能起作用:
in = Input(e1_dim)
hidden = Dense(some_value, activation="tanh")(in)
out = Dense(e2_dim)(hidden)我尝试过添加更多的隐藏层,但我认为我的问题在于输入和输出向量在域中(-1,1),所以初始化器、损失函数和激活函数的选择至关重要。
我尝试过将初始化程序设置为RandomUniform,但仍然没有很好的结果。为了弥补损失,我尝试了MAE en cosine_proximity,但这两种方法似乎都产生了可怕的结果。特别是,cosine_proximity似乎没有超过-0.5,这可能是一个迹象。对于将一个嵌入到另一个(本质上是一个高维非线性回归)映射的架构和损失函数的选择,有什么想法吗?
发布于 2019-07-24 15:03:39
你应该考虑到以下几个因素:
some_value是这里的关键。您可能应该选择一个大于e1_dim和e2_dim的值。这可能是一个问题,因为大内存需要高嵌入维数。e2_dim受限于(-1,+1),则可能希望在最后一层(即Dense(e2_dim)之后)设置tanh激活。在此之后,您可能希望用ReLU替换隐藏层的激活,以避免不必要地压缩渐变。cosine_proximity。也许一个更好的选择是使用冯·米塞斯-费舍尔距离,但我认为这并不简单。否则,您可以尝试世界推土机距离。尽管如此,很多嵌入式空间映射都是假设嵌入空间近似同构,然后进行线性变换。您可能想看看相关的双语嵌入映射文献;您可以从Artetxe等人,2016年年的工作开始。我不知道在您的场景中是否在某种程度上满足了上述假设(skipgram \leftrightarrow node2vec),但是您可以使用VF2算法来评估这一点,比如Artetxe等人。做。
https://datascience.stackexchange.com/questions/56307
复制相似问题