我目前正在开发一个神经网络,试图根据用户的最近活动为特定用户提供建议。我将尝试通过一个例子来说明我的问题。
现在,假设我正在尝试根据用户最近听的音乐向用户推荐新音乐。由于人们经常听他们熟悉的艺术家,这种神经网络的一个输入可能是他最近听过的艺术家。
问题在于这个特征的编码。因为数据库中艺术家的ID对神经网络没有意义,我能想到的唯一其他选择是对每个艺术家进行独热编码,但考虑到成千上万的不同艺术家,这种方法听起来也不太有前景。
我的问题是:我该如何编码这样的特征?
回答:
您描述的方法称为基于内容的过滤。其直觉是向用户A推荐与A之前喜欢的项目相似的项目。这种方法的一个优点是您只需要一个用户的数据,这通常会导致推荐的“个性化”方法。但其缺点包括特征的构建(您现在面临的问题)、为新用户构建有趣的个人资料的难度,以及它永远不会推荐用户内容档案之外的项目。至于表示的难度,特征通常是手工制作并随后抽象的。对于音乐来说,特征将是像‘艺术家’、‘流派’等,必要时对信息性关键词的抽象通常使用tf-idf来完成。
这可能超出了问题的范围,但我认为也值得提及一种替代方法:协同过滤。这里我们不是寻找相似的项目,而是尝试找到具有相似品味的用户,并推荐他们喜欢的产品。这里您需要的唯一数据是用户对某些数据的评分或他们(不)喜欢程度的值——消除了特征设计的需要。此外,由于我们分析的是相似的人而不是项目用于推荐,这种方法对于新用户也通常有效。协同过滤的一般流程如下:
- 测量兴趣用户与所有其他用户之间的相似性
- (可选)选择由最相似用户组成的较小子集
- 预测评分为“最近邻居”的加权组合
- 返回评分最高的项目
算法中相似性加权的一个流行方法是基于皮尔逊相关系数的。
最后,这里需要考虑的是性能/可扩展性的需求:在普通计算机上为数百万用户计算成对相似性并不是一件轻量级的任务。