使用神经网络提供建议
Using a neural network to provide recommendations
所以我开始使用 FANN (http://leenissen.dk/) 来创建一个简单的推荐引擎。
例如,
用户 X 与 ID 为 [1, 2, 3]
的记录有关系
其他用户与以下id有关系:
- 用户 A:
[1, 2, 3, 4]
- 用户 B:
[1, 2, 3, 4]
那么,很自然地,用户 X 也有可能对 ID 为 4
的记录感兴趣,并且它应该是推荐引擎的期望输出。
感觉这将是神经网络可以完成的事情。然而,通过尝试 FANN 和谷歌搜索,似乎需要与数据和结果建立某种数学关系。这里有 ids none; ID 也可以是任何符号。
问题:是否可以用神经网络解决这类问题,我应该从哪里开始寻找解决方案?
你要找的是某种递归神经网络;以某种方式存储 'context' 的网络。此类网络的示例是 LSTM and GRU。所以基本上,您必须按顺序输入数据。基于上下文和当前输入,网络将预测最有可能的标签。
it seems there seems to need to be some mathematical relation with the data and results. Here with ids there's none; the ids could just as well be any symbols.
数据和结果之间存在一定的关系,可以通过权重和偏差来表示。
那么它是如何工作的呢?首先,您对输入和输出进行单热编码。所以基本上,您想要预测在一组用户已经交互过的标签之后哪个标签最有可能。
如果您有 5 个标签:A、B、C、D、E,这意味着您将有 5 个输入和输出:[0, 0, 0, 0, 0]
。
如果你的标签是A,数组就是[1, 0, 0, 0, 0]
,如果是D,数组就是[0, 0, 0, 1, 0]
。
所以 LSTM 和 GRU 的关键是数据应该是连续的。所以基本上,您将所有观看的标签一一输入。因此,如果用户观看了 A、B 和 C:
activate: [1,0,0,0,0]
activate: [0,1,0,0,0]
// the output of this activation will be the next predicted label
activate: [0,0,1,0,0]
// output: [0.1, 0.3, 0.2, 0.7, 0.5], so the next label is D
并且您应该始终训练网络,使 INt 的输出为 INt+1
所以我开始使用 FANN (http://leenissen.dk/) 来创建一个简单的推荐引擎。
例如,
用户 X 与 ID 为 [1, 2, 3]
其他用户与以下id有关系:
- 用户 A:
[1, 2, 3, 4]
- 用户 B:
[1, 2, 3, 4]
那么,很自然地,用户 X 也有可能对 ID 为 4
的记录感兴趣,并且它应该是推荐引擎的期望输出。
感觉这将是神经网络可以完成的事情。然而,通过尝试 FANN 和谷歌搜索,似乎需要与数据和结果建立某种数学关系。这里有 ids none; ID 也可以是任何符号。
问题:是否可以用神经网络解决这类问题,我应该从哪里开始寻找解决方案?
你要找的是某种递归神经网络;以某种方式存储 'context' 的网络。此类网络的示例是 LSTM and GRU。所以基本上,您必须按顺序输入数据。基于上下文和当前输入,网络将预测最有可能的标签。
it seems there seems to need to be some mathematical relation with the data and results. Here with ids there's none; the ids could just as well be any symbols.
数据和结果之间存在一定的关系,可以通过权重和偏差来表示。
那么它是如何工作的呢?首先,您对输入和输出进行单热编码。所以基本上,您想要预测在一组用户已经交互过的标签之后哪个标签最有可能。
如果您有 5 个标签:A、B、C、D、E,这意味着您将有 5 个输入和输出:[0, 0, 0, 0, 0]
。
如果你的标签是A,数组就是[1, 0, 0, 0, 0]
,如果是D,数组就是[0, 0, 0, 1, 0]
。
所以 LSTM 和 GRU 的关键是数据应该是连续的。所以基本上,您将所有观看的标签一一输入。因此,如果用户观看了 A、B 和 C:
activate: [1,0,0,0,0]
activate: [0,1,0,0,0]
// the output of this activation will be the next predicted label
activate: [0,0,1,0,0]
// output: [0.1, 0.3, 0.2, 0.7, 0.5], so the next label is D
并且您应该始终训练网络,使 INt 的输出为 INt+1