将用户兴趣与内容相匹配(基于标签)

Matching user interests with content (based on tags)

我在数据库中存储了很多内容项,我知道用户对哪些标签感兴趣。例如,Alice 对 "healthcare"、"sports" 和 "social" 等标签表现出兴趣。每个内容项都包含一个或多个标签。我将如何匹配这些以便向 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`)
);

而且我有爱丽丝的兴趣以及(相关性)分数,这就像权重:

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

你会如何处理这个问题?

有没有办法为此使用算法,例如余弦相似性,或者这只是句子的改进?

您可以找到爱丽丝和物品之间的相似之处,然后对它们进行排序。因此,将推荐最相似的 n 项。

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

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

项目表示;

[0,0,1,1,0,0] -> 假设第一个值代表 'healthcare',第二个代表运动,最后一个标签是对于标签 5。此商品没有 tag5 所以它的值为 0

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

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

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