2012-10-12 77 views
3

我想创建一个使用关于节目的信息的节目推荐,所以我相信这是基于内容的。我希望有人选择他们观看过的节目,并根据他们的内容推荐相似的节目。Mahout基于内容的推荐

目前我的数据文件看起来像这样

Code   Genre 
1260064148537,NOGENRE 
1260064149243,Drama 
1260064149741,Spoof 
1260064764631,Classical 
12600647412748,HipHopRnB&Dancehall 
126006483593,NOGENRE 
1260065049943,NOGENRE 
12600705429,Sketch 
1260070324431,News 
126007032486,Sport 
... 

我写我自己的ItemSimilarity找到相似的风格,但我不知道是如何使用的DataModel我的数据,我有一个长和一个字符串,然后如何将其发送给推荐人。我是否必须编写自己的DataModel?如果是的话,我该怎么做呢?

回答

4

第一个问题是您是否有任何其他数据将用户连接到节目。如果你不这样做,那么你实际上并没有推荐问题。这只是一个类似项目的问题。你推荐类似于用户现在看的东西。

当然,你必须定义相似性。如果你所拥有的只是每个节目的单一标签,除了说拥有相同标签的情况下它们是相似的,否则没有多少可以做。您可以使用ItemSimilarity并迭代所有项目(可能预先计算)来计算与当前项目最相似的内容。

当然,如果您的相似度仅为0或1,具体取决于它们是否共享标签,那甚至不是相似性问题。这只是搜索。找到相同类别的东西,你就完成了。

当你有用户项目数据的时候,推荐人会进入游戏。您可以使用这种数据来制作ItemSimilarity,然后使用该数据加上用户项目数据(也可以是查看计数等)来制作推荐人。但我也认为你必须评估你是否可以获得更丰富的标签数据;如果是的话,你当然可以做出更好的相似性指标

(因为上述原因,您不会使用这个输入DataModel但我应该注意,您不能使用字符串标识符,它们必须是数字,可以使用带有一些额外工作的字符串,但它不是这是值得的。)

+0

谢谢肖恩。目前我只使用Genre作为测试,但最终我会添加更多,如Channel和Director。我会计算相似之处,如果相同类型将相似度加0.5,如果相同通道将0.3加到相似度等等,那么我可以提出更好的建议。 我唯一需要的用户信息是如果他们观看了节目,那么对于观看的节目只会是1,或者对于未观看的节目只有0。 我制作了一个非常粗糙的原型,没有使用推荐器或数据模型,但是对于我正在使用的大量演出(约38,000)而言,它非常缓慢并且内存密集。 – user1740655

+1

@ user1740655对于这种情况,您可能需要查看使用图形数据库推荐的东西 – ulkas

相关问题