【问题标题】:Tag based clustering algorithm基于标签的聚类算法
【发布时间】:2023-03-21 08:34:01
【问题描述】:

我希望根据标签对许多提要进行聚类。 一个典型的例子是 twitter 提要。每个提要都有与之关联的用户定义标签。通过分析标签,是否有可能将提要分成不同的组,并告诉这么多提要基于这么多标签。 一个例子是 -

  • Feed1 - 印度尼西亚地震#earthquake #asia #bad
  • Feed2 - 我所在地区发生大地震#earthquake #bad
  • Feed3 - 我的父母去了新加坡#asia #tour
  • Feed4 - XYZ 公司裁员很多人#XYZ #layoff #bear
  • Feed5 - XYZ 情况越来越糟,正计划裁员 #XYZ #layoff #bad
  • Feed6 - XYZ 处于裁员狂潮中#layoff #XYZ #worst

聚类后

  • #asia , # 地震 - Feed1 , Feed2
  • #XYZ , #layoff - Feed4 , Feed 5 , Feed6

这里的聚类纯粹是基于标签。 有什么好的算法可以实现这个

【问题讨论】:

    标签: algorithm tags cluster-analysis


    【解决方案1】:

    有趣的问题。我正在这里编造一些东西,但我认为这会奏效。

    算法

    对于每个提要,提供一个完整的标签组合列表(长度 >= 2),可能为了一致性而排序。例如:

    • Feed1:(asia-bad)、(asia-earthquake)、(bad-earthquake)、(asia-bad-earthquake)
    • Feed2:(严重地震)
    • Feed3:(亚洲巡回演唱会)
    • Feed4:(bear-layoff)、(bear-XYZ)、(layoff-XYZ)、(bear-layoff-XYZ)
    • Feed5: (bad-layoff), (bad-XYZ), (layoff-XYZ), (bad-layoff-XYZ)
    • Feed6: (layoff-worst), (layoff-XYZ), (worst-XYZ), (layoff-worst-XYZ)

    然后反转映射:

    • (亚洲坏):Feed1
    • (亚洲地震):Feed1
    • (严重地震):Feed1,Feed2
    • (asia-bad-earthquake): Feed1
    • (亚洲巡回演唱会):Feed3
    • (熊裁员):Feed4
    • ...
    • (裁员-XYZ):Feed4、Feed5、Feed6
    • ...

    然后,您可以剔除频率高于某个阈值的所有条目。在这种情况下,如果我们将频率阈值设为 2,那么 Feed1 和 Feed2 会出现 (bad-earthquake),而 Feed4、Feed5 和 Feed6 会出现 (layoff-XYZ)。

    性能问题

    一个简单的实现会导致性能极差——每个提要的标签数量呈指数级增长(更不用说空间要求了)。但是,有多种方法可以应用启发式方法来改进这一点。例如:

    1. 通过扫描所有提要(或随机选择 X 个提要)确定最流行的 X 标记 - 这与每个提要的标记数量成线性关系。然后只考虑每个提要的 Y 个最受欢迎的标签。
    2. 确定所有(或大多数)标签的频率。然后,对于每个帖子,只考虑该帖子中 X 最受欢迎的标签。这可以防止出现某些情况,例如,某个帖子有 15 个标签,从而导致出现大量组合,其中大部分永远不会发生。
    3. 对于每篇文章,只考虑长度
    4. 仅扫描随机选择的 X 个提要。

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      如果我正确理解了您的问题,您希望将标签聚集在一起,然后根据提要中的标签将提要放入这些集群中。

      为此,您可以根据标签一起出现的提要数量创建标签之间的相似性度量。对于您的示例,这将是这样的

                     #earthquake | #asia | #bad | ...
      #earthquake        1       |  1/2  |  2/2
      #asia             1/2      |   1   |  1/2
      #bad              2/3      |  1/3  |   1
      ...
      

      这里,(i,j) 的值等于 frequency of (i,j)/frequency of (i)

      现在您有了标签之间的相似度矩阵,您几乎可以使用任何适合您需求的聚类算法。由于标签的数量可能非常大,并且在运行算法之前估计集群的数量很困难,我建议使用一些层次聚类算法,例如快速模块化聚类,它也非常快 (See some details here)。但是,如果您对想要将其分解成的集群数量有一些估计,那么光谱聚类可能也很有用 (See some details here)。

      将标签聚集在一起后,您可以使用一种简单的方法将每个提要分配给一个集群。这可以非常简单,例如,计算提要中每个集群的标签数量,并分配具有最大匹配标签数量的集群。

      如果您对集群策略很灵活,那么您也可以尝试以类似的方式将这些提要集群在一起,方法是根据提要之间的公共标签数量创建提要之间的相似性,然后在提要上应用集群算法相似矩阵。

      【讨论】:

      • 你能详细说明最后一个关于相似矩阵的陈述吗?
      • 您好,感谢您的回答。我想知道这个“频率”相似度矩阵和 tf-idf 方法是否有任何联系?
      猜你喜欢
      • 2020-01-30
      • 2015-07-18
      • 2020-02-17
      • 2019-04-14
      • 2017-03-05
      • 2011-04-20
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多