机器学习 - 巨大只有正文本数据集

时间:2017-07-15 08:12:15

标签: machine-learning tensorflow weka text-classification

我有一个数据集,其中包含数千个属于某个主题的句子。我想知道最好创建一个将文本预测为“真”或“假”的分类器,具体取决于他们是否谈论该主题。

我一直在使用 Weka (基本分类器)和 Tensorflow (神经网络方法)的解决方案。

我使用字符串到字向量来预处理数据。

由于没有负面样本,我处理的是单个类。我已经尝试过一类分类器(Weka中的 libSVM ),但误报的数量很高,我无法使用它。

我还尝试添加负片样本,但是当预测文本没有落入负空间时,我尝试过的分类器(NB,CNN,...)倾向于将其预测为误报。我想这是因为大量的阳性样本

如果有必要,我愿意放弃ML作为预测新传入数据的工具

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

我最终为负类添加了数据并构建了一个Multilineal Naive Bayes分类器,它正在按预期完成工作。

(添加的数据大小约为一百万个样本:))

答案 1 :(得分:0)

我的回答是基于这样的假设:对于问题的作者来说,为作者的数据集添加至少100个负样本和1000个正样本是可以接受的,因为我对作者的问题没有答案< / p>

由于这个检测特定主题的情况看起来像主题分类的特定情况,我建议使用分类方法与两个简单的类1类 - 您的主题和另一个 - 所有其他主题开始

我使用相同的方法进行面部识别任务 - 在开始时我使用一个输出神经元建立模型,具有高水平的输出用于面部检测,如果没有检测到面部,则为低

然而这种方法给我的准确性太低 - 不到80% 但是当我尝试使用2个输出神经元时 - 1个类用于图像上的脸部存在而另一个如果没有在图像上检测到脸部,那么它给了我超过90%的MLP准确度,即使不使用CNN

这里的关键点是使用SoftMax函数作为输出层。它显着提高了准确性。根据我的经验,它提高了MNIST数据集的准确性,即使MLP从同一模型的92%提高到97%

关于数据集。对于训练数据集中的每个类的相同数量的样本,至少根据我的经验,大多数具有训练者的分类算法更有效。事实上,如果我的1级小于其他类的平均数量的10%,那么它使得模型几乎无法用于检测这个类。因此,如果您的主题有1000个样本,那么我建议创建尽可能多的不同主题的1000个样本

或者,如果您不想为数据集创建如此大的负样本集,则可以为数据集创建一组较小的负样本,并使用批量训练,批量= 2x负样本数量。为了做到这一点,将你的正样本分成n个块,每个块的大小为负样本数量,并且当训练过程的每次迭代训练你的NN N个批次时,使用正样本的块[i]和所有负样本对于每批。请注意,较低的准确性将是这次权衡的代价

此外,您可以考虑创建更通用的主题检测器 - 找出可以在模型中分析的所有可能主题,例如 - 10个主题,并创建每个主题1000个样本的训练数据集。它还可以提供更高的准确性 关于数据集的另一点。最佳实践是仅使用部分数据集训练模型,例如 - 80%并使用其余20%进行交叉验证。对模型的未知先前数据进行交叉验证将为您提供现实生活中模型精度的良好估计,而不是培训数据集,并且可以避免过度拟合问题

关于模型的建设。我喜欢用#34;从简单到复杂的#34;做法。因此,我建议从具有SoftMax输出的简单MLP开始,并使用1000个正样本和1000个负样本的数据集。在达到80%-90%的准确度后,您可以考虑将CNN用于您的模型,并且我建议增加训练数据集的数量,因为深度学习算法对于更大的数据集更有效

答案 2 :(得分:0)

对于文本数据,您可以使用Spy EM。

基本思想是将你的积极组合与一大堆随机样本结合起来,其中一些是你坚持的。您最初将所有随机文档视为否定类,并使用您的阳性样本和这些阴性样本训练分类器。

现在,这些随机样本中的一些实际上是正面的,并且您可以保守地重新标记任何得分高于最低得分的真实阳性样本的文档。

然后你迭代这个过程,直到它稳定。

相关问题