请您使用多种因素的数据向我提供有关mahout建议的一些详细信息。我有用户ID,书籍,语言,类别等数据。假设,一个人用法语语言阅读带有类别的书作为惊悚片。现在考虑所有这些事实,我需要向他推荐一本书。能不能给我一些关于选择正确道路的见解。?
答案 0 :(得分:1)
对于Mahout 1.0来说,我们为搜索引擎创建索引和查询模型。
模型称为指标,是每个项目的类似项目列表。类似的意义是他们是由同一个人购买的。这是共生推荐者的本质。
协同过滤数据是书籍阅读或ID。如果您推荐一本书,您可以显示具有相同标题的其他ID,用于多种格式(电子书,录制,回归等)。元数据可用于将recs偏向某个类别。语言可能是一个过滤器,除非您认为您的受众通常是多语言的。
通过将购买交付到Mahout 1.0 spark-itemsimilairty来创建CF类型指标。 out将出现每本书的类似书籍清单。索引搜索引擎中的那些。然后,最简单的查询是用户购买书籍的历史记录。这将产生未经推荐的推荐作为有序的书籍列表。
现在将结果偏向用户最喜欢的类别索引索引中单独字段中每个项目的类别。所以索引有一个"指标"一个用于"类别"。 " docs"是你的目录中的物品/书籍。倾斜的查询是(伪代码):
query:
field: indicators; q: "book1 book2 book3 book10" //the user's purchase history
field: categories; q: "user's-favorite-category user's-second-favorite-category"
field: language; filter: "list-of-languages-of-books-the-user-has-purchased"
您可以根据需要在该字段的查询中放置尽可能多的类别,也许是所有用户购买的。注意使用语言过滤器,您可能希望将其用作偏移因子而不是过滤器。通过这种方式,您可以无缝集成由元数据偏斜或过滤的协同过滤rec,以获得更高质量的rec。您可以使用任何您认为有用的元数据。
顺便说一句,如果您添加其他记录的操作(如书籍详细信息的视图),您将获得更好的记录。这将需要一个特殊处理的指标,称为交叉共生指标,也可以通过spark-itemsimilairty计算。实际上,您可以包含用户采取的任何操作 - 整个点击流作为单独的交叉共生指标。这将大大增加您在制作rec时可以使用的协作过滤数据的数量,从而提高质量。
这个想法甚至可以扩展到对不是书籍的项目(如类别)的操作。如果用户购买书籍,他们在某种意义上也购买了一个类别。如果您记录这些"类别购买"作为次要操作并与它们创建交叉共生指标,您可以使用它们来扭曲结果和作为购买指标。查询将如下所示:
query:
field: indicators; q: "book1 book2 book3 book10" //the user's purchase history
field: category-indicators; q: "user's-history-of-purchased-categories"
field: categories; q: "user's-favorite-category user's-second-favorite-category"
field: language; filter: "list-of-languages-of-books-the-user-has-purchased"
在此处阅读spark-itemsimilarity:http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html这包括有关如何将索引和查询部分用于搜索引擎(Solr,Elasticsearch)的一些讨论。