如何为 4 个类别的文本分类创建训练数据

Posted

技术标签:

【中文标题】如何为 4 个类别的文本分类创建训练数据【英文标题】:How to create Training data for Text classification on 4 categories 【发布时间】:2017-01-19 13:33:36 【问题描述】:

我的机器学习目标是从项目需求文档中寻找潜在的风险(将花费更多的钱)和机会(将节省金钱)。

我的想法是将数据中的句子分为以下类别之一:风险、机会和不相关(无风险、无机会、默认类别)。

我将使用带有 tf-dif 的多项式贝叶斯分类器。

现在我需要为我的训练集和测试集准备数据。我将这样做的方法是将需求文档中的每个句子标记为 3 个类别中的 1 个。这是一个好方法吗?

或者我应该只标记明显是风险/机会/不相关的句子?

另外,不相关类别是个好主意吗?

【问题讨论】:

【参考方案1】:

我相信三类方法是一种很好的方法。这类似于情绪分析,您通常有正面、负面和中性的文档(或句子)。中性包含绝大多数实例,因此您的分类问题将是不平衡的。这不一定是一个问题,但对于像这样的难题,朴素贝叶斯分类器可能会简单地对中性/不相关桶中的所有内容进行分类,因为中性的先验将非常高。

您的抽样(标签)应该代表现实。不要试图创建一个包含 1000 个风险、1000 个机会、1000 个不相关的数据集。取而代之的是,从 10000 个需求中抽取样本,并为每个需求分配适当的标签,即使这意味着“不相关”比“风险”要多得多。 文本分类模型需要很多实例,因为搜索空间很大。我想知道您是否考虑过这样一个事实:要获得可靠的结果(比如超过 90%),您可能需要手动标记数千个实例。 即使您有数千个训练实例,您的问题看起来也特别困难,除非有一些明显的关键字来触发我不理解的“风险”或“机会”。问问自己:这对人类来说容易判断吗?如果你让 3 位评委对你的要求进行分类,他们会给出相同的答案吗?如果没有,那么您可能需要成千上万的训练文档,并且分类准确度可能仍然令人失望。

【讨论】:

非常感谢,这对我有帮助。我确实意识到我将不得不浏览许多文件并标记每个句子。最初我以为每个类别都需要相同数量的训练样本,但正如你所说,情况并非如此。然后我将简单地浏览每个文档并用 3 个类别中的 1 个标记每个句子,我最终会得到更多不相关的样本。大约 70% 的准确率也不错。你认为这可能在标记大约 5000 个句子的情况下实现吗? 我的感觉是,我会发现以一致的方式从需求中识别风险和机会具有挑战性,更不用说文本分类器了。也就是说,也许你的情况与我的经验不同,也许你的情况中的机会和风险只是一组带有相关关键字的技术(例如:机器学习、NLP = 机会、SOC 2 合规性 = 风险)。同样,要从 5000 个示例中学习,任务需要对人类来说非常容易 谢谢。这项任务对人类来说并不是很简单,但是在风险句中经常出现诸如“负责任”之类的关键字。我如何告诉程序如果出现这样的词,则更有可能出现特定的标签? 我会先尝试不添加手动创建的规则。机器学习的一个好处是您不必维护难以维护、组合等的手动规则集。但是如果您真的需要,您可以将分类器的结果类概率乘以您的手动创造的概率。

以上是关于如何为 4 个类别的文本分类创建训练数据的主要内容,如果未能解决你的问题,请参考以下文章

我需要提高朴素贝叶斯文本分类的准确性

机器学习文本分类,其中文本属于 1 到 N 个类别

Java SVM 文本分类、训练和测试文件?

如何处理多类文本分类中不在训练集中的测试集标签?

文本分类成类别

如何用机器学习对文本分类