【问题标题】:What formula is used for building a list of related items in a tag-based system?什么公式用于在基于标签的系统中构建相关项目列表?
【发布时间】:2011-05-23 19:48:58
【问题描述】:

有很多网站使用“标签”来对系统中的项目进行分类。例如,YouTube 使用关键字对视频进行分类,Stack Overflow 使用标签对问题进行分类等。

这些网站使用哪些公式(尤其是 SO)来根据其拥有的标签构建与另一个项目相关的项目列表?我正在构建一个类似于 SO 上的系统,我想找到一种方法来根据一个项目的标签生成大约 20 个项目的列表,但也要让它足够传播,以便每张照片生成一个非常不同的列表,因此单击任何给定相关列表中的项目最终可以将您带到数据库中的几乎所有项目。

【问题讨论】:

    标签: sql algorithm tags


    【解决方案1】:

    基于用户标签的组织的技术术语是folksonomy。谷歌搜索该术语会带来大量关于这些系统如何组合在一起的材料。一个好的起点是Wikipedia article

    【讨论】:

      【解决方案2】:

      几年前我不得不为一份合同解决这个确切的问题,公司很友好地让我在 http://bentilly.blogspot.com/2011/02/finding-related-items.html 上写下我是如何做到的。

      您会注意到,如果您获得大量数据,那么您真的非常想在数据库之外执行此操作。

      【讨论】:

        【解决方案3】:

        项目之间的相似性通常表示为表示项目的向量之间的点积。所以如果你有一个基于标签的系统,每个标签都会定义一个维度。如果为该项目设置了标签 i,则该项目的向量在维度 i 中变为 1(如果您允许多个标签,则为更高的数字)。如果您计算两个项目的向量的点积,您将获得这些项目的相似度(注意向量必须被归一化,以便绝对值为 1)。

        请注意,维度会变得非常大(通常有几万个标签)。这听起来像是这种事情的表演终结者。但是您也不会认为向量真的很稀疏,并且多个点积成为稀疏矩阵与它自己的转置的一个大矩阵乘法。使用高效的稀疏矩阵乘法算法,可以相对较快地完成。

        还要注意,大多数系统不仅依赖于标签,还依赖于“用户行为”(无论这意味着什么)。 IE。对于 Youtube 用户的行为可能是“观看视频”、“订阅频道”、“寻找与视频 X 相似的视频”或“使用标签 y 标记视频 x”。

        【讨论】:

          【解决方案4】:

          我最终使用了以下代码(具有不同的名称),该代码查找具有至少一个共同标签的所有其他项目,并按常见标签的数量对结果进行排序,降序,并按针对我的问题的其他标准进行子排序:

          SELECT PT.WidgetID, COUNT(*) AS CommonTags, PS.OtherOrderingCriteria1, PS.OtherOrderingCriteria2, PS.OtherOrderingCriteria3, PS.Date FROM WidgetTags PT INNER JOIN WidgetStatistics PS ON PT.WidgetID = PS.WidgetID
              WHERE PT.TagID IN (SELECT PTInner.TagID FROM WidgetTags PTInner WHERE PTInner.WidgetID = @WidgetID)
              AND PT.WidgetID != @WidgetID
          GROUP BY PT.WidgetID, PS.OtherOrderingCriteria1, PS.OtherOrderingCriteria2, PS.OtherOrderingCriteria3, PS.Date
          ORDER BY CommonTags DESC, PS.OtherOrderingCriteria1 DESC, PS.OtherOrderingCriteria2 DESC, PS.OtherOrderingCriteria3 DESC, PS.Date DESC, PT.WidgetID DESC
          

          【讨论】:

            猜你喜欢
            • 2010-12-06
            • 1970-01-01
            • 2013-03-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多