在tensorflow中,如何将另一个要素作为键给一个要素的值编制索引?

时间:2019-06-20 21:07:00

标签: tensorflow machine-learning tensorflow-transform

我有一个功能预处理问题,对于我来说,它有点太复杂了。 我想从其他3个中生成一个“跨功能”,让我详细介绍一下:

我的ML问题是向用户推荐商品。 在我的示例中,有关于用户的功能和关于商品的功能。我正在尝试预测用户是否会喜欢此商品。 我们使用张量流示例。

我的用户功能中有一个项目ID的“映射”到用户的“亲和力”。我们称其为“项目关联性地图” 亲和力本身是由另一个过程计算的。 由于Tensorflow示例中没有地图类型,因此我们有2个功能:一个是商品ID的有序列表,另一个是亲和力的有序列表。它们是同步的。因此,我的“项目关联性地图”实际上由要素item_affinities_idsitem affinities表示。 是的,我正在使用商品相似性信息作为输入,并尝试预测其他商品相似性。但是这些是不同的,输入是针对与我要预测的产品用例不同的用例计算的。

我还具有第3个功能,即我要为其计算新亲和力的商品的item_id

在天真的numpy中,我可以这样:

item_name = np.array(["item-a"])
item_affinities_ids = np.array(["item-0", "item-a", "item-b"])
item_affinities = np.array([0.2, 0.3, 0.4])
indices = np.where(item_affinities_ids == item_name)
return item_affinities[indices]

现在,在现实生活中,事情可能会变得更加复杂:

  • 我想要一个张量流实现(TFT或本机TF)。
  • 我们使用TF v.13
  • “项目关联性图”可能会丢失。因此,两个结果item_affinities_idsitem affinities表示为SparseTensor。但是,如果其中一个存在,则另一个也存在,并且可以保证它们是同步的(相同大小,相同顺序)。
  • 我们对一批示例进行预测和训练,因此每个(稀疏)张量的第一个维度是batch_size> 1。
  • item_id可能不存在于“项目关联图”中。在那种情况下,我想要一个默认值(0.0)。

我正在寻找可满足所有这些要求的张量流实施。 到目前为止,我有:

# using constants for the demonstration. In real life it would be tensors.
item_name = tf.constant([["item-a"], ["item-3"]])
item_affinities_ids = tf.constant([["item-0", "item-a", "item-b"], ["item-2", "item-1", "item-3"]])
item_affinities = tf.constant([[0.2, 0.3, 0.4], [0.2, -0.9, 0.4]])
return tf.boolean_mask(item_affinities, tf.equal(item_affinities_ids, item_name))

但是它不能处理SparseTensor以及item_id不在item_affinities列表中的情况。 我正在寻找任何人来帮助我。

0 个答案:

没有答案