主题或标记建议算法

时间:2015-06-12 21:30:46

标签: python machine-learning nlp topic-modeling

问题在于:当给出一个文本块时,我想建议可能的主题。例如,一篇关于科比布莱恩特的新闻报道会建议像'篮球','nba','体育'这样的标签。

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

有没有人对算法有什么建议?

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

1 个答案:

答案 0 :(得分:2)

有类似问题的尝试 - 一个例子就在这里 - stackoverflow。当您编写问题时,stackoverflow本身会在没有您干预的情况下建议某些标记,但您可以手动添加或删除它们。

开箱即用的分类会因标签数量巨大而失败。您可以通过两个方向解决此问题。

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

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

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

    P.S。使用标记分数时需要进行大量实验。