我有成對的電影女巫包含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模型。 我的目標是找到程序之間的相似性並學習每部電影的嵌入。 我想創建一種'kens'的SGNS實現。然而,我的輸入不是一個熱門,我不能使用嵌入層。我試圖使用濃密圖層並將它們與點積合併。我不確定模型架構,我有錯誤。
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')
如果有人有一個想法如何實現它。
嗨@gojomo 感謝您的回答。我不希望模型學習在特徵之間但在項目向量之間跳過克對。 什麼是doc2vec輸入?這是兩個電影功能的序列,標籤是1還是0? – user3351370
如果你的目標是要學習每個電影矢量,並且(如果一切正常)爲了反映這些矢量的相似性以反映電影的相似性,那麼我描述的設置 - 文檔(gensim中的'TaggedDocument'類)對於每部電影,每個包含每個功能標記的文檔(PV-DBOW模式)都可能工作。在這種情況下,類似skip-gram的對總是(movieN) - >(featureM),但仍傾向於根據共同特徵來排列各種movieN向量。 (在這種情況下,將特徵缺失作爲'not-featureM'標記進行編碼也是有用的,我不確定。)[cont'd] – gojomo
如果你需要類似SGNS的東西,但只需要movieN) - >(movieM)對,我不知道如何處理您的0值對,因爲SGNS只將輸入正值(文中存在)對作爲輸入值。 (它綜合了隨機的負面例子 - 偶爾會與正面的例子相沖突,但最終噪音並沒有太大的傷害。)但是,你可以將你的正面對放入Word2Vec訓練中:將所有這些對變成短的假句,比如'['movie1 ','movie4']'等。在運行所有這些'句子'之後,'movieN'標記可以學習你尋找的那種載體。 – gojomo