【问题标题】:binary document classifcation二进制文件分类
【发布时间】:2014-12-10 04:58:43
【问题描述】:

我知道这是一个非常模糊的问题,但我正在尝试找出进行文档分类的最佳方法。我有两套训练和测试。训练集是一组文档,每个标记为 1 或 0。如果文档是信息摘要,则标记为 1,否则标记为 0。我正在尝试创建一个监督分类器。我无法决定使用哪个 nlp 工具包。我在想nltk。你有什么建议吗?我必须用python编写分类器。还有任何特定类型的分类器。我一直在做研究,但似乎无法得到一个好的答案。

【问题讨论】:

  • 可能只是我,但似乎很不清楚您在这里要问什么 - 您能否尝试重新表述您想要做的事情,甚至可以使用您正在处理的数据示例?
  • @MattCoubrough 在我看来这是一个相对明确的问题,但对于 SO 来说可能过于宽泛。简短的回答是,有很多在不同数据集上的表现都不同。
  • 好的,np。我认为这有点模糊,但不确定。我想到了朴素贝叶斯,但它没有达到我想要的精度并且不知道下一步该怎么做
  • @user3750474 这不是很模糊,只是一个约束不足的问题。我的回答更深入一点,但事实是,很难提前知道你能达到什么准确度。
  • @user3750474 如果您更好地描述您的数据集,则更容易给出更准确的答案。但正如我在回答中提到的,朴素贝叶斯和 SVM 是您的最佳选择。

标签: python machine-learning nlp nltk


【解决方案1】:

简短的回答是,这真的取决于。您还没有找到一个很好的资源的原因是因为文档分类到目前为止仍然是一个相对较新且了解甚少的领域。事实是,有大量不同的分类器可能会起作用,而且很难说哪种分类器最适合您的特定任务,而且它非常依赖于数据集。

我能给你的最好建议是,运行其中一个分类器通常需要两个步骤。第一个是矢量化,即将您的文档放入固定长度的矢量表示中。最常见的是tfidf加权,在sklearn中实现得相当好。具体文档见这里:http://scikit-learn.org/stable/modules/feature_extraction.html#tfidf-term-weighting

对输入进行矢量化处理后,您需要选择一个分类器和一个准确度指标。至于分类器,我建议您只需浏览here 显示的示例,然后选择返回最佳准确度指标的示例。

就准确度指标而言,两个最简单的(也有许多非常复杂的替代方案)是简单准确度和AUC,两者都受 sklearn 支持。 AUC 是一种更稳健的准确度版本,对类不平衡更稳健(如果 99.9% 如果你所有的例子都是 1,那么只预测 1 的分类器不应该是最好的分类器)

这实际上是一个相当广泛的主题,需要涵盖的内容很多,但是如果你将一些 sklearn 函数结合在一起,你应该能够很容易地得到一些可行的东西。

【讨论】:

  • 感谢您的信息!你会推荐 scikit learn vs nltk 吗?
  • 是的。 100% 毫无疑问。 nltk 非常老派,非常慢,而且功能通常较少。入门很不错,但它的大部分好处是包装了几个学术数据集。
【解决方案2】:

我通常建议按照 Slater 的建议使用 Scikit。它比 NLTK 更具可扩展性。对于这项任务,使用朴素贝叶斯分类器或支持向量机是您最好的选择。您正在处理二进制分类,因此您没有多类。 至于您应该提取的特征,请尝试使用 unigrams、bigrams、trigrams 和 TFIDF 特征。此外,LDA 可能会变得有用,但从更简单的开始,例如 unigrams。 这也取决于您正在处理的文本的类型和长度。文档分类已经存在了十多年,有很多好论文可供您使用。 如果您有任何其他问题,请告诉我。

【讨论】:

    【解决方案3】:

    其他答案有用且内容丰富,但可能无法解决整个问题。您用“文档分类”来表达您的问题,推荐的方法是该问题的明智解决方案。但是,如果我没看错您的问题,那并不是真正的传统document classification 问题。问题指出:

    如果是信息摘要,则文档标记为 1,如果不是,则标记为 0。

    大多数文档分类系统将每个文档分配到一组类别中的一个。例如。 '文档 1 属于 'Sports' 类,文档 2 属于 'Art',...

    您的问题可能更接近于textual entailment,它试图辨别一个文档(通常是简短的陈述或摘要)是否被另一个(通常较长的)文档所暗示。您也可以稍微研究一下automatic summarization。该字段处理生成摘要(而您只对评分感兴趣),但许多摘要系统还包括评分和排名,用于在一组候选摘要之间进行选择。 (对于发布一系列 Wikipedia 链接表示歉意,但至少一些标准 NLP 任务的术语参考可能会有所帮助。)

    问题中还有一个(当前)未解决的关键问题:如果文档 x 被标记为“信息摘要”,那么它的信息摘要是什么?

    例如,考虑以下语句:

    “自动摘要系统会尝试为较长的文档生成简短、可读的摘要”

    这可能是上面链接的维基百科页面之一的信息摘要。但这肯定不是对其他人的适当总结!看来您的分类器可能需要访问文档正在(假定)摘要的较大文本,以确定摘要是否是一个好的摘要。

    如果您可以访问上述文档,您还可以考虑将您的问题构建为信息检索任务 - 例如,将候选摘要用作查询,并通过目标文档在结果中的排名对其“有用性”进行评分回来。如果这种方法可行,您将从 Lucene 和其他精心设计的 IR 工具中受益。

    【讨论】:

      猜你喜欢
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 2016-06-01
      • 2021-12-28
      • 1970-01-01
      • 2011-04-13
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多