没有一个热矢量输入的负抽样Skip Gram模型

时间:2017-06-12 16:32:15

标签: deep-learning keras word2vec

我有一对电影女巫包含2783个功能。 向量定义为:如果要素在影片中,则为1,否则为0。 示例:

movie 1 = [0,0,1,0,1,0,1 ...] & movie 2 = [1,0,1,1,1,0,1 ...]

每对都有标签1或0。

movie1,movie2=0
movie1,movie4=1
movie2,movie150=0

输入类似于SGNS(Skip gram negative sampling)word2vec模型。 我的目标是找到程序之间的相似性并学习每部电影的嵌入。 我想用keras'来构建一种SGNS实现。但是我的输入并不热,我无法使用嵌入层。我尝试使用Dense图层并将它们与点积合并。我不确定模型架构,但我遇到了错误。

from keras.layers import Dense,Input,LSTM,Reshape
from keras.models import Model,Sequential

    n_of_features = 2783
    n_embed_dims = 20

    # movie1 vectors
    word= Sequential()
    word.add(Dense(n_embed_dims, input_dim=(n_words,)))

    # movie2 vectors
    context = Sequential()
    context.add(Dense(n_embed_dims, input_dim=n_words,))

    model = Sequential()

    model.add(keras.layers.dot([word, context], axes=1))

    model.add(Dense(1, activation='sigmoid'))

    model.compile(optimizer='rmsprop',
                  loss='mean_squared_error')

如果有人知道如何实施它。

1 个答案:

答案 0 :(得分:0)

如果你不喜欢Keras,你可以通过将每部电影变成一个合成的“文档”来模拟这个模型,该文档带有令牌,用于存在的每个特征。然后,在纯PV-DBOW模式中使用'Paragraph Vectors'实现来学习每部电影的矢量。

(在纯PV-DBOW中,学习密集的doc-vectors来预测文档中的每个单词,而不考虑顺序/单词邻接/等。它有点像skip-gram,但是训练对不是“对每个附近的单词说'',但是'doc-token to every-doc words'。)

在gensim中,具有初始化参数dm=0的Doc2Vec类使用纯PV-DBOW模式。