【问题标题】:multi-label text classification with zero or more labels具有零个或多个标签的多标签文本分类
【发布时间】:2017-09-18 20:20:06
【问题描述】:

我需要使用零个或多个类别/标签(5 个标签,如金融、技术等)对网站文本进行分类。我的问题是处理不属于这些标签之一的文本。

我尝试了 ML 库(maxent、naive bayes),但它们错误地将“其他”文本与其中一个标签匹配。如何训练模型来处理“其他”文本? “其他”标签太宽泛了,不可能挑出一个有代表性的样本。

由于我没有 ML 背景,也没有太多时间来构建良好的训练集,因此我更喜欢更简单的方法,例如术语频率计数,使用预定义的术语列表来匹配每个标签。但是通过计数,我如何确定相关性分数,即文本是否实际上是那个标签?我没有语料库,无法使用 tf-idf 等。

【问题讨论】:

  • 为什么不能使用 TF-IDF?这是获取文本比较指标的规范工具。
  • 顺便说一句,你一直说你没有这方面的背景。这不是借口:您需要发展这方面的技能来解决您的问题。 StackOverflow不是编码服务。据我所知,您的范例没有预先打包的解决方案——而且 SO 不是寻找它们的地方。
  • TF-IDF 可能是最可行的——感谢您指出。我的团队希望避免涉及收集训练数据的解决方案,因此我询问是否有更简单的解决方案。

标签: machine-learning text-classification multilabel-classification


【解决方案1】:

哇!经典 ML 算法不会同时结合多分类和“输入/输出”。也许你可以做的是训练五个模型,每个班级一个,一个对抗世界的训练。然后使用一个超级模型来寻找这五个声称输入的任何一个;如果没有人声称它,那就是“其他”。

另一种可能性是颠倒评估顺序:在整个数据集上训练一个模型作为二元分类器。在这五个中训练第二个作为 5 类 SVM(例如)。第一个模型找到“其他”;其他一切都传递给第二个。

【讨论】:

  • 谢谢,但是我如何挑选不在我的课程中的训练数据?收集训练数据似乎是一项巨大的工作,我可能会忽略一个与我的标签有共同词的主题。有没有比机器学习更简单的方法可以涉及词频计数?
  • 第二种可能性,你不知道。使用“一类”SVM,它为当前数据找到一个合理的边界。我认为这可能是更准确的方法。
  • 您的意思是使用 1-class SVM 而不是您最初为第二种可能性建议的二元分类器?
  • 1-class SVM is 是一个二元分类器:在 0 类中根本没有观察到,但它仍然分类为“好”并且“不好”。
  • 谢谢,这很有帮助。
【解决方案2】:

另一个想法,是给用户神经网络使用softmax输出函数,softmax会给你每个类的概率,当网络对一个类非常有信心时,会给它一个高概率,而对其他类的概率低,但如果它不安全,概率之间的差异会很低,而且没有一个会很高,如果你定义一个阈值,比如:如果每个类的概率小于 70%,预测“其他”

【讨论】:

  • 感谢您的建议。使用神经网络会很棒,但它似乎比 ML 更难使用,而且我没有这方面的背景。
【解决方案3】:

创建直方图怎么样?您可以使用词袋方法,使用 for 的重要指标,例如科技与金融。因此,您可以尝试通过分析特定网站的标签和文章来识别此类指标,或者只是浏览网页以查找此类指标:

http://finance.yahoo.com/news/most-common-words-tech-finance-205911943.html

假设您的输入变量X 具有n 维度,其中n 表示指标的数量。例如Xi 则保存单词“asset”的出现次数,Xi+k 保存当前文章中单词“big data”的出现次数。

不要定义 5 个标签,而是定义 6 个。您的最后一个类别类似于“包罗万象”的类别。这实际上是您的零匹配类别。

如果您必须匹配零个或多个类别,请训练一个模型,该模型返回每个标签/类的概率分数(例如 Luis Leal 建议的神经网络)。您可以根据该分数对您的输出进行评分,并说每个分数高于某个阈值t 的类都是匹配类别。

【讨论】:

    【解决方案4】:

    试试这个NBayes implementation
    对于识别“其他”类别,不要太费心。只需训练清楚识别它们的所需类别,并在分类器中引入阈值。
    如果标签的值没有超过阈值,则分类器添加“其他”标签。

    这一切都在训练数据中。

    【讨论】:

      【解决方案5】:

      AWS Elasticsearch percolate 是理想的选择,但由于单独过滤文档的 HTTP 开销,我们无法使用它。

      Classify4J 似乎是满足我们需求的最佳解决方案,因为该模型看起来很容易训练,并且不需要训练不匹配项。 http://classifier4j.sourceforge.net/usage.html

      【讨论】:

        猜你喜欢
        • 2018-09-11
        • 2017-01-22
        • 1970-01-01
        • 2018-10-04
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2020-04-09
        • 2016-06-14
        相关资源
        最近更新 更多