我正在使用 CNN 对新闻文章进行情绪分析。它是具有输出的二元分类:有趣和无趣。在我的数据集中,大约有 50,000 篇无趣的文章,只有大约 200 篇有趣的文章。我知道这个比例严重偏斜。
- 我的问题是在这种情况下应该是什么比率。
- 我想尝试的一种方法是对 Uninteresting 新闻文章进行聚类,并从每个聚类中抽取样本进行训练。有更好的方法吗?
我正在使用 CNN 对新闻文章进行情绪分析。它是具有输出的二元分类:有趣和无趣。在我的数据集中,大约有 50,000 篇无趣的文章,只有大约 200 篇有趣的文章。我知道这个比例严重偏斜。
理想的真假比率不存在,它们应该尽可能地反映现实,但如果比率过于偏斜而无法提高训练速度,您始终可以删除负数。让我用一个例子来解释它。广告点击率与互联网一样古老,它倾向于低于 1% 的正面和 99% 的负面。然而,数据科学家更喜欢在整个数据集上对其进行训练,因为许多负面因素将包含模型无法找到的信息。它们可能不会提供很多积极的信息,但它们仍然有些重要。有一些方法可以通过采样人为地重新平衡 CTR 比率,以防您想要更快的训练并且它仍然有效。在您的情况下,正面为 0.4%,类似于广告的点击率,因此您可以:收集更多数据以增加正面的数量,以便更好地了解是什么让一篇文章变得有趣。如果不可能尝试通常会提高预测性能的集成。
聚类是一种无监督的方法,因此这样做会丢失信息(训练标签),此外,一大群否定词和一小群肯定词的句子嵌入(表示)不能传达信息以及已经存在的词嵌入对数十亿份文件进行了培训。
此外,对分类变量运行 k-means 会产生异常集群,因为它旨在与连续变量一起使用。您可以在以下链接中找到有关该主题的更多信息:
因此,您应该使用高维嵌入或表示来将含义聚集在一起,这已经在词义中进行了探索,但是对于句子或文章,向量表示的实现变得更加复杂。一种可能的方法是 Word Movers' Distance,但还有更多可能的方法,你应该用谷歌搜索它们。此外,使用嵌入方法的非线性聚类算法(例如 t-sne)可能会产生比 k-means 更好的结果。
更好的方法是:
使用多个模型并比较它们在此数据集上的性能。我的印象是会有某些关键词使文章变得有趣,所以即使作为入门模型,一袋词仍然会有所帮助。
使用特征工程。您的模型可能会忽略重要的特征,例如文章长度、阅读时间、段落数、复杂词的比例(以长度衡量)等。特征工程在您尚未使用的情况下始终很重要。
使用预训练的嵌入。CNN 和 RNN 模型可以使用预训练的嵌入,例如 GloVe、Word2Vec 或 FastText,因此您可以在架构的后期使用更好的表示和其他复杂层。这对于提高准确性非常重要。
使用指标来衡量改进和排名来检查预测的最有趣的文章。