gpt4 book ai didi

python - Keras:嵌入层的加权平均值

转载 作者:行者123 更新时间:2023-11-30 09:44:46 25 4
gpt4 key购买 nike

我目前正在 Keras 中实现一个序列模型,并希望利用两个(或更多)预训练的词嵌入。目前,我的方法是在将两个嵌入矩阵传递给 Keras 之前对其进行平均。但是,我想改为进行加权平均。

当然,我可以将权重优化为超参数的形式,但我想知道如何将其作为模型的一部分来实现,例如通过 softmax 密集层进行加权。理想情况下,我有两个选择,第一个适合合并整个矩阵的权重,第二个在单词级别上有权重用于合并向量。我还没有弄清楚如何正确地做到这一点,并且很乐意提供建议。

最佳答案

为了求平均值,您需要两个嵌入具有相同的输出大小。

您可以简单地将它们堆叠在最后一个维度并将它们传递到密集层:

inputs = Input((length,))

embedding1 = getEmbeddingFor(inputs)
embedding2 = getEmbeddingFor2(inputs)

#stacks into shape (batch, length, embedding_size, 2)
stacked = Lambda(lambda x: K.stack([x[0],x[1]], axis=-1))([embedding1,embedding2])

#weights to (batch, length, embedding_size, 1)
weighted = Dense(1, use_bias=False)(stacked)

#removes the last dimension
weighted = Lambda(lambda x: K.squeeze(x, axis=-1))(weighted)
<小时/>

或者,如果您不介意使用很多权重而不是简单的两个权重,并且大小不同,并且如果您希望权重更加智能,则可以进行非常简单的串联:

weighted = Concatenate()([embedding1, embedding2])   
weighted = Dense(similarToSize)(weighted)

第二种方法可能听起来不像加权,但如果你想一想,两个嵌入对于相同的位置可能不会有相同的含义,并且对两个不同性质的值进行平均可能不会产生伟大的结果。 (但是,当然,神经网络是晦涩难懂的,只有测试才能证明这一说法)

关于python - Keras:嵌入层的加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53971020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com