【问题标题】:What frameworks/db offer a good solution for content-based filtering?哪些框架/数据库为基于内容的过滤提供了良好的解决方案?
【发布时间】:2016-02-07 23:56:06
【问题描述】:

假设我对具有某些属性的产品有 700 000 次观察,我们称它们为标签。

假设我们有 userX。我想实现一个简单的基于内容的过滤方法:根据标签计数/相关性对产品进行排名。 因此,假设 userX 偏好: - 黄色的 - 价格(0-15) - 品牌

要获得推荐,需要检查所有 700.000 个观察值(可以通过标签在 noSQL 数据库规范化设置中完成,但当涉及多个标签时仍然可能有很多观察值),并计算特定产品中存在的标签。

我可以使用什么框架或方法来快速做到这一点? IE。在几秒钟内得到结果?

我的一些想法是:

  • 纯nodejs服务器
  • 纯python服务器
  • neo4j 图形数据库,但不确定如何在此设置中实现关系?

【问题讨论】:

    标签: database-design neo4j recommendation-engine database nosql


    【解决方案1】:

    产品“观察”是否包括用户购买/互动?如果是这样,在像 neo4j 这样的图形数据库中,您可以像这样对数据进行建模:

    这里有一个购买了产品的用户,该产品具有一个或多个标签属性。要生成基于内容的推荐,您可以使用这样的 Cypher 查询:

    MATCH (u:User {name: "Bob"})-[:PURCHASED]->(p:Product)
    MATCH (p)-[:TAGGED]->(t:Tag)
    MATCH (t)<-[:TAGGED]-(rec:Product) WHERE NOT (u)-[:PURCHASED]->(rec)
    RETURN rec, count(*) AS weight ORDER BY weight DESC
    

    此查询实质上是说:“查找 Bob 购买的所有产品。查找这些产品的标签。现在查找带有 Bob 没有购买的相同标签的产品。将这些产品推荐给 Bob,显示最高的产品首先是重叠标签的数量。”

    更多信息请见in this videoin this tutorial

    【讨论】:

    • 举一个真实的例子,blog post 今天刚刚发布,详细介绍了基于内容的电影推荐。
    • 我只需要补充一点:我有 700.000 件商品,每个用户最多可以购买 50 件商品。 Neo4j 可以明智地处理这种性能吗?
    • @JoshAndrews 是的,没问题。许多 Neo4j 用户拥有包含数百万个节点/关系的图表。
    • 快速跟进(一年后)。如果标签和购买的商品上附有重量,例如t.weight 和 p.rating。所以用户在购买时对产品进行评分;然后找到标签相似度最大的产品(对属于用户购买并因此评分的产品的标签权重更大)
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多