Python Django-如何推荐类似产品
我有一个带有标签和类别的产品列表,如下所示Python Django-如何推荐类似产品,python,django,categories,recommendation-engine,Python,Django,Categories,Recommendation Engine,我有一个带有标签和类别的产品列表,如下所示 class Product(models.Model): tags = TaggableManager() #using django-taggit categories = models.ManyToManyField(Category) 我正在寻找一种有效实现方法,例如 p = Product.objects.get(...) p.similar_products() # -> should return a list so
class Product(models.Model):
tags = TaggableManager() #using django-taggit
categories = models.ManyToManyField(Category)
我正在寻找一种有效实现方法,例如
p = Product.objects.get(...)
p.similar_products() # -> should return a list sorted by similarity
如何计算相似性:两个产品之间的相似性分数应该是它们共同拥有的标签和类别的数量
挑战在于这种方法需要每秒计算数百次,因为有效地进行计算非常重要
我可能会通过缓存来加快速度,但问题仍然存在——是否有django原生方法可以根据标记和类别计算和评分类似的产品?(我知道django的建议,但它似乎使用用户和评级)
谢谢:)免责声明:以下是我如何解决这个问题的开始。按原样提供,不适用于用途,不包括保修 是否有django原生方法根据标签和类别计算和评分类似产品 简短的回答是否定的——Django是一个web应用程序框架,而不是一个推荐系统 我正在寻找一种有效实现方法的方法(…) 请意识到,这是一项非常重要的核心任务。您需要解决两个部分:
manytomy
关系:
class Product(models.Model):
tags = TaggableManager() #using django-taggit
categories = models.ManyToManyField(Category)
similars = models.ManyToManyField(Product)
注意,这里的关键思想是为每个产品存储所有类似产品的主键列表。那么类似的\u产品
方法就是:
def similar_products(self):
return self.similars.all()
挑战在于这种方法需要每秒计算数百次
根据产品目录和类别列表的大小,这种方法可能无法很好地扩展。不过,同样的概念还有更有效的实现,例如,您可以在数据库之外缓存或存储类似产品的密钥列表,例如使用诸如Redis之类的内存存储
计算相似度
计算相似性是一项计算复杂的任务。本质上,您希望将每个产品与所有其他产品进行比较,本质上是O(n^2)。有相当多的问题
两个产品之间的相似性得分应为
它们有共同点的标记和类别
一种天真的方法如下
对于每种产品
类别\ U分数
,这是类别指标的二进制表示(基本上是一个位字符串)similarity=abs(product1.category\u分数-product2.category\u分数)
product.similar
关系- 维基百科
- 托比·塞加兰
- 相关问题和答案(请参见==>)
manytomy
关系:
class Product(models.Model):
tags = TaggableManager() #using django-taggit
categories = models.ManyToManyField(Category)
similars = models.ManyToManyField(Product)
注意,这里的关键思想是为每个产品存储所有类似产品的主键列表。那么类似的\u产品
方法就是:
def similar_products(self):
return self.similars.all()
挑战在于这种方法需要每秒计算数百次
根据产品目录和类别列表的大小,