【问题标题】:Topic or Tag suggestion algorithm [closed]主题或标签建议算法[关闭]
【发布时间】:2015-06-12 21:30:45
【问题描述】:

问题是:当给定一段文本时,我想建议可能的主题。例如,一篇关于科比·布莱恩特的新闻文章会建议使用以下标签:“篮球”、“nba”、“体育”。

我有一个相当大的训练数据集 (350k+),其中包括文本主体和用户分配给文本的标签。大约有 40k,预先存在的主题;但是,许多主题中没有太多条目。我想说只有大约 5k 个主题中有超过 10 个条目。用户不能分配系统中尚不存在的主题。我也想包括那个

有人对算法的使用有什么建议吗?

如果有人对 python 库也有任何建议,那就太好了。

【问题讨论】:

  • 您需要为问题添加更多内容。针对这个问题已经有很多方法。有很多取决于 (1) 数据大小 - 你有多少新闻文章 (2) 唯一标签的数量 - 语料库中有多少标签?数字是 10 与 1000 有很大的不同 (3) 到目前为止,您尝试和阅读了什么?在 Stack Overflow 上解释这一点很重要。并从问题中删除“谢谢”。它没有任何意义。
  • 你的语料库中唯一标签的数量是多少?
  • 40k。刚刚编辑了我的帖子。感谢您的建议
  • 完美。我之前也解决过类似的问题
  • 另外,只有大约 5,000 个标签中有超过 10 个条目。但是有些标签真的很大。哈哈

标签: python machine-learning nlp topic-modeling


【解决方案1】:

已经尝试过类似的问题 - 一个例子就在这里 - stackoverflow。当您编写问题时,stackoverflow 本身会建议一些标签而无需您的干预,但您可以手动添加或删除它们。

开箱即用的分类会失败,因为标签的数量非常巨大。您可以从两个方向着手解决这个问题。

  1. 最近的邻居 简单、快速、有效。你有一个带标签的训练集。当新文档出现时,您会寻找最接近的匹配项,例如诸如“标签”、“培训”、“数据集”、“标签”等词可以帮助您解决 StackOverflow 上其他类似问题的问题。在这些问题中,机器学习标签就在那里——所以建议使用这个标签。实施的最佳方式是索引您的训练数据(搜索引擎策略)。你可以使用 Lucene、Elastic Search 或类似的东西。当出现新文档时,将其用作查询并搜索之前存储的前 10 个匹配文档。轮询他们的标签。对标签进行排序并使用文档的分数来确定标签的重要性。完毕。

  2. 概率模型 想法是分类的,但现成的工具不会帮助你。查看Clayton Stanley, Predicting Tags for StackOverflow PostsDarren Kuo, On Word Prediction Methods等作品 或Schuster's report on Predicting Tags for StackOverflow Questions

如果您将这个问题作为长期学术项目或研究的一部分,那么采用方法 2 会更好。但是,如果您需要现成的解决方案,请使用方法 1。Lucene 是一个很好的索引工具,即使在生产中也可以使用。它最初是用 Java 编写的,但您可以轻松找到 Python 的包装器。另一种选择是 Elastic SearchKatta 等等。

附言使用标签分数时需要进行大量实验。

【讨论】:

  • 您对提出文档之间的“相似度分数”有何建议?
  • 有很多选择。数百篇论文已经写在上面。好吧,如果你使用 Lucene,这个工具本身应该会告诉你某种你可以利用的相似度分数。 stackoverflow.com/questions/9771119/…
猜你喜欢
  • 1970-01-01
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 2017-07-09
  • 1970-01-01
  • 2020-04-01
相关资源
最近更新 更多