【发布时间】:2014-10-17 09:04:57
【问题描述】:
能否请您提供一些有关使用多因素数据的 mahout 建议的详细信息。?我有用户 ID、书籍、语言、类别等的数据。假设,一个人用法语阅读了类别为惊悚片的书。现在考虑到所有这些事实,我需要向他推荐一本书。您能否给我一些关于选择正确道路的见解。
【问题讨论】:
能否请您提供一些有关使用多因素数据的 mahout 建议的详细信息。?我有用户 ID、书籍、语言、类别等的数据。假设,一个人用法语阅读了类别为惊悚片的书。现在考虑到所有这些事实,我需要向他推荐一本书。您能否给我一些关于选择正确道路的见解。
【问题讨论】:
正是 Mahout 1.0 的特点,我们为搜索引擎创建模型以进行索引和查询。
模型称为指标,是每个项目的相似项目列表。从某种意义上说,它们是由同一个人购买的。这就是同现推荐器的本质。
协同过滤数据是阅读的书或ID。如果您推荐一本书,您可以为多种格式(电子书、记录、平装本等)显示具有相同标题的其他 ID。元数据可用于将记录偏向某个类别。除非您认为您的受众通常会说多种语言,否则该语言可能是一种过滤器。
通过将购买输入 Mahout 1.0 spark-itemsimilairty 来创建 CF 类型指示器。每本书都会列出类似书籍的列表。索引搜索引擎中的那些。那么最简单的查询就是用户购买书籍的历史。这将产生无偏斜的推荐作为有序的书籍列表。
现在将结果偏向用户最喜欢的类别索引索引中单独字段中每个项目的类别。所以索引有一个“指标”字段和一个“类别”字段。 “文档”实际上是您目录中的项目/书籍。偏斜的查询是(伪代码):
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"
您可以根据需要在该字段的查询中添加任意数量的类别,可能是用户购买过的所有类别。注意语言过滤器的使用,您可能希望将其用作倾斜因素而不是过滤器。通过这种方式,您可以无缝集成由元数据倾斜或过滤的协同过滤记录,以获得更高质量的记录。可以使用您认为有帮助的任何元数据。
顺便说一句,如果您添加已记录的其他操作(例如查看书籍详细信息),您将获得更好的记录。这将需要一个经过特殊处理的指标,称为交叉共现指标,也由 spark-itemsimilarty 计算。事实上,您几乎可以包含用户采取的任何操作——将整个点击流作为单独的交叉共现指标。这将大大增加您在制作记录时可以使用的协同过滤数据量,从而提高质量。
这个想法甚至可以扩展到对非书籍项目的操作,例如类别。如果用户购买了一本书,他们在某种意义上也购买了一个类别。如果您将这些“类别购买”记录为次要操作并与它们创建一个交叉同时出现的指示符,您可以使用它们来扭曲结果和作为购买指示符。查询如下所示:
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)用于索引和查询部分的讨论。
【讨论】: