【问题标题】:Matching user interests with content (based on tags)将用户兴趣与内容匹配(基于标签)
【发布时间】:2016-06-24 13:03:06
【问题描述】:

我在数据库中存储了很多内容项,并且我知道用户对哪些标签感兴趣。例如,爱丽丝对“医疗保健”、“体育”和“社交”等标签表现出兴趣。每个内容项包含一个或多个标签。我如何匹配这些以便向 Alice 推荐新内容?

考虑这些基本的数据库表:

CREATE TABLE `content_tag` (
   `id` INT(11) NOT NULL AUTO_INCREMENT,
   `item_id` INT(11) NOT NULL,
   `tag_id` INT(11) NOT NULL,
   PRIMARY KEY (`id`)
);

CREATE TABLE `tag` (
   `id` INT(11) NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(50) NOT NULL,
   PRIMARY KEY (`id`)
);

我有 Alice 的兴趣和一个(相关性)分数,就像权重一样:

array:3 [
    'healthcare' => 2.20
    'sports' => 1.30
    'socal' => 0.5
]

你会如何处理这个问题?

有没有办法为此使用算法,例如余弦相似性,或者这仅适用于句子?

【问题讨论】:

  • 到目前为止你尝试过什么?分数会作为结果排序的“权重”吗?
  • 您可以查看 MySQL 的 FIELD 函数(用于基于兴趣评分的自定义排序)。它也应该在ORDER BY 中工作。
  • @MagnusEriksson FIELD 函数看起来很有前途。我会调查的。

标签: php sql tags comparison recommendation-engine


【解决方案1】:

您可以找到 Alice 和项目之间的相似之处,然后对它们进行排序。因此,将推荐最相似的 n 个项目。

其中一个相似度指标是余弦相似度(如您所建议的),其工作原理如下;

对于每个项目,您可以使用标签创建一个向量。据我了解,您的项目没有分数,因此项目向量的值将是 0 或 1。每个值将代表特定项目的一个标签。

物品表示;

[0,0,1,1,0,0] -> 假设第一个值代表“医疗保健”,第二个代表运动,最后一个标签代表 tag5。该项目没有tag5,所以它的值为0

而且用户也有类似于物品的向量。 例如 Alice 的向量是; [2.20,1.30,0.5,0,0,0]

创建向量后,您可以计算相似度(例如,使用余弦相似度。)

注意每个用户和项目向量的大小等于系统中所有标签的数量。 在这个例子中,系统中有 6 个不同的标签。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    相关资源
    最近更新 更多