Керас вложения веса поиска с категориальными переменными - PullRequest
0 голосов
/ 30 января 2019

Предположим, что у меня есть список пользователей и элементов, как в ratings кадре данных.Если я создаю встраиваемые слои item_embedding и user_embedding, то получаю веса встраиваемых слоев, как векторы встраивания сопоставляются с идентификатором элемента / пользователя?Следуют ли они порядку идентификаторов?

import pandas as pd

## minimal example
ratings = {'user': [1000, 10001, 1000], 'item': [115, 112, 115], 'rating': [5, 3, 4]}


## keras model----------------------------------------------------

n_latent_factors_user = 8
n_latent_factors_item = 8

n_users = len(train.user_id.unique())
n_items = len(train.book_id.unique())

## items
item_input= keras.layers.Input(shape=[1],name='Item') ## input 
item_embedding = keras.layers.Embedding(n_items + 1, n_latent_factors_item, name='item-Embedding')(item_input)
item_vec = keras.layers.Flatten(name='Flattenitems')(item_embedding)

## users
user_input = keras.layers.Input(shape=[1],name='User') ## input
user_embedding = keras.layers.Embedding(n_users + 1, n_latent_factors_user,name='User-Embedding')(user_input)
user_vec = keras.layers.Flatten(name='FlattenUsers')(user_embedding)

## concat items and users
concat = keras.layers.concatenate([item_vec, user_vec])

## fully connected
dense_1 = keras.layers.Dense(20,name='FullyConnected', activation='relu')(concat)

## output
result = keras.layers.Dense(1, activation='relu',name='Activation')(dense_1)

## model with input and output
model = keras.Model([user_input, item_input], result)

Я имею в виду, если мы получим вес слоя вложения элементов следующим образом, будет ли первый вектор соответствовать элементу 112?

## items embedding weights
model.layers[2].get_weights()[0]  ## 2x8

1 Ответ

0 голосов
/ 30 января 2019

Вы должны убедиться, что ваши пользователи перечислены как 0, ..., n_users, а элементы перечислены как 0, ..., n_items.Чтобы получить вложения ваших предметов, вы можете сделать

embeddings_items = model.get_layer('item-Embedding').get_weights()[0]

Затем embeddings_items[0] даст вам вложение предмета с номером 0.

...