我们经常看到“相关项目”。例如,在博客中我们有相关的帖子,在书籍中我们有相关的书籍等。我的问题是我们如何编译这些相关性?如果只是标签,我经常会看到没有相同标签的相关项目。例如,当搜索“粉红色”时,相关项目可能有一个“紫色”标签。
有人有什么想法吗?
有很多方法可以计算两个项目的相似度,但是对于一种简单的方法,请查看 Jaccard 系数。
http://en.wikipedia.org/wiki/Jaccard_index
即:J(a,b) = 交集(a,b)/union(a,b)
So lets say you want to compute the coefficient of two items:
Item A, which has the tags "books, school, pencil, textbook, reading"
Item B, which has the tags "books, reading, autobiography"
intersection(A,B) = books, reading
union(A,B) = books, school, pencil, textbook, reading, autobiography
so J(a,b) = 2/6 = .333
So the most related item to A would be the item which results in the highest Jaccard Coefficient when paired with A.
以下是一些方法:
item_id
和建立一个表格related_item_id
,然后创建一个接口来插入连接。用于关联两个相关但不相似或不属于同一类别/标签(或未分类条目表)的项目。示例:浴缸和橡皮鸭要获得基于标签的相关项目的简单列表,基本解决方案如下:
3张桌子,一张带物品,一张带标签,一张带连接。连接表由两列组成,一列对应其余表中的每个 id。连接表中的条目通过将它们各自的 id 放在一行中来将标签与项目链接起来。
现在,获取相关项目的列表。
获取与原始项目至少共享一个标签的所有项目。确保将标签与项目一起获取,然后使用简单的评级机制来确定哪个项目与原始项目共享最多的标签。每个标签将关系相关性增加一。
根据您的标记习惯,添加一些反机制以防止大型总体标记混淆相关性可能是明智的。为了实现这一点,您可以为低于某个电器阈值的标签赋予更大的权重。通常对我来说效果很好的阈值是total_number_of_tag_appliances/total_number_of_tags,它会产生平均电器数量。如果标签设备计数小于平均值,则关系相关性增加一倍。
我会说他们使用本体来为应用程序添加更多强大的功能。
它可以不仅仅是一个标签,例如它可以是段落中出现的每个作品的平均值,然后是标题等
也可以基于“买了这本书的人也买了”
无论如何,您的物品之间都需要一些联系,而且它们大多是由人类制造的
这是我使用 PostgreSQL 和 Ruby on Rails实现的Jaccard 索引(GIST) ...
这是基于二元组的两个文本之间的jaccard索引的实现。 https://packagist.org/packages/darkopetreski/textcategorization