【发布时间】:2018-03-20 12:03:42
【问题描述】:
我正在尝试使用最新的估算器 API 在 tensorflow 中实现与 word2vec 类似的模型。 我遇到的问题是当我尝试评估模型时。模型本身应该是推荐系统的基础。现在我要使用的评估指标是 Hitrate 指标,如下:
- 为每个输入计算 k 邻域。
- 确定预期标签是否在 k 邻域中,如果是,则推荐成功。
现在我已经设置了这样的模型:
# Map Embeddings Ids to One Hot Tensors
ref_embedding_ids = tf.feature_column.categorical_column_with_identity(
key='Reference',
num_buckets=params['dict_size'],
default_value=0
)
# Map One Hot Tensors to Dense Embeddings
ref_embeddings = tf.feature_column.embedding_column(
ref_embedding_ids,
dimension=params['embedding_size']
)
# Actually create the input to the model
input_layer = tf.feature_column.input_layer(features, feature_columns=[ref_embeddings])
正如在估算器 API 教程中所做的那样。现在,当我理解这段代码时,input_layer 已经只包含在特征字典中使用键 Reference 引用的嵌入。这太棒了,因为我们不需要将所有嵌入都保存在内存中。
但是现在如果我想在评估模式下计算邻域,我需要访问所有可能输入的嵌入向量来计算相似度。但是我对这些没有任何参考,因为管道设置为只加载必要的部分。我已经尝试找出包含嵌入的变量的名称并使用tf.get_variable 显式加载它,但这也不起作用。
所以我的问题是如何计算给定嵌入 id 的邻域?
此外,在能够计算邻域之后,我需要使用一个度量来继续计算整个评估集的度量,因为该函数会为来自数据集的每个批次调用。但我想这是一个不同的问题,我只是在上下文中提及它。
【问题讨论】:
-
您能找到解决方案吗?我正在尝试做同样的事情,但无法找到访问嵌入向量以在其上运行最近邻算法的方法
标签: python tensorflow word2vec tensorflow-estimator