【问题标题】:Best way to classify labeled sentences from a set of documents从一组文档中分类标记句子的最佳方法
【发布时间】:2013-09-25 02:49:08
【问题描述】:

我有一个分类问题,我需要找出解决它的最佳方法。我有一组培训文档,其中文档中的一些句子和/或段落标有一些标签。并非所有句子/段落都被标记。一个句子或段落可能有多个标签/标签。我想做的是制作一些模型,在给定新文档的情况下,它将为文档中的每个句子/段落提供建议的标签。理想情况下,它只会给我高概率的建议。

如果我使用 nltk NaiveBayesClassifier 之类的东西,结果会很差,我认为是因为它没有考虑训练文档中的“未标记”句子,其中包含许多与标记句子相似的单词和短语。这些文件是法律/金融性质的,并且充满了法律/金融术语,其中大部分应该在分类模型中打折。

除了来自训练集的标记数据之外,是否有一些比朴素贝叶斯更好的分类算法,或者有什么方法可以将未标记的数据推入朴素贝叶斯?

【问题讨论】:

  • 您能否粗略估计有多少数据被标记,有多少没有。由于 NBC 是一个概率模型,它可能会偏向于大量数据。
  • 你有多少数据?您可能需要至少数千个数据才能进行最佳分类。
  • 另外,你看过Chapter 6 of the NLTK book吗?他们在朴素贝叶斯之上谈论决策树和最大熵模型。 SVM 可能也值得一看 - 您可以通过 nltk.classify 包访问它们和其他分类方法,该包是 wrapper 周围的 scikit-learn library

标签: machine-learning nlp classification nltk


【解决方案1】:

有没有办法将未标记的数据推送到朴素贝叶斯

“标记”和“未标记”数据之间没有区别,朴素贝叶斯构建简单的条件概率,特别是 P(label|attributes)P(no label|attributes) 所以它很大程度上基于使用的处理管道,但我高度怀疑它实际上忽略了未标记的部分。如果出于某种原因这样做,并且您不想修改代码,您还可以在所有剩余的文本段中引入一些人为的标签“无标签”。

有没有比朴素贝叶斯更好的分类算法

是的,NB其实是最基本的模型,还有几十个更好(更强,更通用)的模型,在文本标注上取得了更好的效果,包括:

  • 隐马尔可夫模型 (HMM)
  • 条件随机场 (CRF)
  • 一般 - 概率图形模型 (PGM)

【讨论】:

  • HMM 和 CRF 将无法处理这个问题的多标签方面。事实上,很难想到如何将其作为序列标记并保留该方面
  • @BenAllison 实际上,他可以为每个标签训练一个 CRF 模型,只要没有数千个标签就可以了。
  • 它会工作,我不确定工作是否正常。每个标签一个 CRF 将意味着您在后续时间步中失去标签之间的交互,这首先是 CRF 的重点......除非我误解了您的意思?
【解决方案2】:

以下是我要稍微修改现有方法的方法:为每个可能的标签、每个句子训练一个分类器。包括所有不表达该标签的句子作为标签的 否定 示例(这将隐式计算未标记的示例)。对于一个新的测试句子,运行所有 n 个分类器,并保留得分高于某个阈值的类作为新句子的标签。

我可能会使用朴素贝叶斯以外的其他东西。如果您想要一些概率,逻辑回归 (MaxEnt) 是显而易见的选择:如果您不关心概率(我认为您目前不关心),SVM 非常强大。

这确实是一个序列标记任务,理想情况下,您也可以将附近句子的预测折叠起来……但据我所知,CRF/StructSVM 或其他序列标记方法没有原则性扩展,可以让实例具有多个标签。

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 2019-01-02
    • 1970-01-01
    • 2015-11-10
    • 2019-10-16
    • 2022-01-11
    • 2012-02-20
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多