我有很多内容项存储在数据库中,我知道用户感兴趣的标签。例如,爱丽丝对“医疗保健”,“体育”和“社交”等标签表现出兴趣。每个内容项包含一个或多个标签。我如何匹配这些以向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
]
你会怎么做?
有没有办法为此使用算法,比如余弦的模拟性,或者这只是句子的唯一用法?
答案 0 :(得分:2)
您可以找到Alice和项目之间的相似之处,然后对它们进行排序。因此,建议使用大多数类似的n项。
其中一个相似性指标是余弦相似度(正如您所建议的),其工作原理如下;
对于每个项目,您可以使用标记创建矢量。据我所知,您的项目没有得分,因此项目向量的值将为0或1.每个值将代表特定项目的一个标记。
项目表示;
[0,0,1,1,0,0] - >让我们说第一个值代表医疗保健'第二个值代表运动,最后一个代码代表tag5。此项目没有tag5,因此其值为 0
用户还有与项目类似的向量。 例如,爱丽丝的矢量是; 的 [2.20,1.30,0.5,0,0,0] 强>
创建矢量后,您可以计算相似度(例如,使用余弦相似度。)
请注意,每个用户的尺寸和项目向量等于系统中所有代码的数量。 在此示例中,系统中有6个不同的标记。