0

我正在尝试使用神经结构化学习构建一个简单的推荐系统模型,使用用户和企业之间的相似性来预测单个用户根据与其他用户和项目的相似性(和权重)对以前未评分的项目进行评分的可能性. 我有我的训练和测试数据,并且已经为用户和项目创建了相似矩阵,这些矩阵本质上是用户-用户或项目-项目的方阵,它们各自的比率从 0 到 1(其中 0 或非常低意味着评分低或没有匹配的项目,或评分的用户,高或接近 1 表示评分的匹配项目很多或评分的用户)。

这是用户-用户相似度矩阵的示例 用户-用户相似度矩阵

在 tensorflow 为神经结构化学习提供的教程中,他们能够将图形输入输入到他们的框架中,以添加交互项,例如相似性。(基本示例在这里:https ://medium.com/tensorflow/introducing-neural-structured-learning-in-tensorflow-5a802efd7afd )

我是一个初学者,虽然我认为我了解它如何工作的一般逻辑,但我不知道如何将相似性矩阵实际“输入”到训练数据中。我已经使用 igraph 将它们制作成图表,但我认为我不了解示例图表中的信息是什么,以了解我应该如何格式化或重塑我的数据以充当输入。我也很困惑,因为在查看示例时,我什至看不到他们在模型中的何处使用了他们的 graph.tsv。我假设这是因为模型代码只是一个骨架,但我应该把它放在哪里?

任何方向将不胜感激!

4

1 回答 1

0

感谢您的提问,对于延迟回复,我深表歉意。

为了将您的相似度图“输入”到 NSL,您需要使用我们的pack_nbrs工具。该工具的 API 如下所述:

https://www.tensorflow.org/neural_structured_learning/api_docs/python/nsl/tools/pack_nbrs

这是我们的在线教程之一的相关部分,展示了它是如何使用的:

https://www.tensorflow.org/neural_structured_learning/tutorials/graph_keras_lstm_imdb#augment_training_data_with_graph_neighbors

pack_nbrs工具/函数读取三个文件:

  1. 包含所有标记的 TF 示例的TFRecord文件。
  2. 包含所有未标记的 TF 示例的TFRecord文件。
  3. 包含相似图的 TSV 文件。

TSV 文件的每个 TAB 分隔行都应在相似图中指定一条边,并具有以下形式:

source_id<TAB>target_id[<TAB>edge_weight]

edge_weight是可选的(如果未提供,默认为 1.0),但由于您似乎具有相似度,因此您可能需要指定它。source_idtarget_id可以是任意字符串,但它们必须与您在文件 (1) 和 (2) 中指定的节点 ID 一致(因此边与节点特征“匹配”)。使用您的示例相似度矩阵,我们可能有:

user0<TAB>user2<TAB>0.516049
user1<TAB>user2<TAB>0.573655

请注意,由于您的相似度矩阵是对称的,因此您无需指定两个方向的边。相反,您可以在调用pack_nbrs时指定add_undirected_edges=True。另请注意,您可能希望应用一些阈值,这样您就不会最终在图中的每对节点之间创建一条边。在上面的示例中,我只包含了相似度 > 0.5 的那些对,但您可能希望根据您的数据应用更大的阈值。您要确保相似度图中的边表示实例之间的真实相似度,否则基于图的正则化的好处将会减少。

我希望这能回答你的问题。如果没有,或者如果您有任何后续问题,请告诉我们。我建议您阅读我们的在线教程,这将为使用 NSL 库和工具打下坚实的基础。

最好的,

艾伦

于 2020-01-07T19:39:31.410 回答