TensorFlow很棒,我们已经为推荐系统实现了神经网络模型。我们使用embedding_lookup_sparse
来处理稀疏输入。然后使用SavedModel
API导出模型,并使用TensorFlow Serving
投放。一切都运作良好但我们认为我们可以优化数据集的过程。
这是我们的典型数据集。所有功能可分为两部分,“用户功能”和“项目功能”。每个批次都有多个来自同一用户的样本,因此这些样本具有相同的“用户特征”。
例如,这里有一批5个样本,前100个功能是“用户功能”。
label user features item features
1 2:1 15:1 30:1 70:1 110:1 190:1 200:1
0 2:1 15:1 30:1 70:1 170:1 290:1 300:1
1 2:1 15:1 30:1 70:1 180:1 390:1 400:1
1 2:1 15:1 30:1 70:1 190:1 490:1 500:1
0 2:1 15:1 30:1 70:1 200:1 590:1 600:1
因为每个批次的“用户特征”总是相同的,所以我们不需要“查找”完整的矩阵,而只需要查找第一个样本。
我们已经为Java中的缓存数据实现了这种优化,并且几乎获得了四倍的加速。但我们希望使用TensorFlow Serving
来为模型提供服务,因此我们可能需要将“optimize embedding_lookup_sparse”实现为TensorFlow操作。
这种数据集格式在推荐系统中非常普遍,通过这种优化可以大大提高推理的性能。任何人都可以帮助或指明如何在TensorFlow
中实现这一点吗?
顺便说一下,“项目功能”也可以全局缓存。这是优化器的另一种方式。