【问题标题】:keras embedding weights lookup with categorical variableskeras嵌入权重查找与分类变量
【发布时间】:2019-01-29 22:17:18
【问题描述】:

假设我在ratings 数据框中有一个用户和项目列表。如果我创建嵌入层 item_embeddinguser_embedding 然后获取嵌入层的权重,嵌入向量如何映射到项目/用户 ID?它们是否遵循 id 的顺序?

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

【问题讨论】:

    标签: python keras embedding collaborative-filtering


    【解决方案1】:

    您需要确保您的用户被枚举为0, ..., n_users,并且项目被枚举为0, ..., n_items。要获得项目的嵌入,您可以这样做

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

    然后embeddings_items[0] 给你嵌入项目编号 0。

    【讨论】:

    • 所以例如在这里我应该首先将 112, 115 映射到 >>> 0, 1 或 1, 2,因为嵌入矩阵的大小是 n_items + 1。它不处理 ids 顺序而不管它们的值吗?
    • 是的。由于嵌入矩阵的大小为n_items + 1,我想您想将索引 0 用于词汇表外的项目。在这种情况下,您应该将您的项目映射到 1、2。
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2023-01-10
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多