具有季节性类别变化的日期文档的二进制分类

Posted

技术标签:

【中文标题】具有季节性类别变化的日期文档的二进制分类【英文标题】:Binary classification of dated documents with seasonal class variation 【发布时间】:2014-09-02 18:21:18 【问题描述】:

我有一组带有发布日期的培训文档,其中每个文档都被标记为属于(或不属于)某个主题 T。我想训练一个模型来预测新文档(带有发布日期)是否不属于 T,发布日期可能在过去或将来。假设我已将每个训练文档的文本分解为一组特征(例如,单词或 n-gram 的 TF-IDF),适合由 Weka 等库提供的适当二进制分类算法进行分析(例如,多项式朴素贝叶斯,随机森林或 SVM)。要学习的概念表现出多种季节性;即,在给定日期发布的任意文件属于 T 的先验概率在很大程度上取决于该日期何时落入 4 年周期(由于选举),何时落入年度周期(由于节假日),以及星期几。

我的研究表明,分类算法通常假设(作为其统计模型的一部分)训练数据是从模型最终应用到的同一数据池中随机抽取的。当训练数据中的类分布与野外已知分布有很大差异时,就会导致所谓的“类不平衡”问题。有一些方法可以弥补这一点,包括对代表性不足的类别进行过度抽样、对代表性不足的类别进行过度抽样以及使用成本敏感分类。这允许模型创建者隐式指定新文档将被积极分类的先验概率,但重要的是(不幸的是,出于我的目的),这个先验概率被假定为对于所有新文档都是相等的。

我的模型需要更大的灵活性。由于概念的季节性,在对新文档进行分类时,模型在确定该文档属于 T 的先验概率时,以及在计算属于 T 的后验概率时,必须明确考虑发布日期。文档的特征,这个先验概率应该被适当地考虑。我正在寻找一种分类器实现,它要么(1)将基于日期的先验概率的复杂回归烘焙到分类器中,要么(2)可以使用用户指定的回归函数进行扩展,该函数将日期作为输入并给出先验概率作为输出。

我最熟悉 Weka 库,但如果其他工具适合我的工作,我也愿意使用它们。完成这项任务最直接的方法是什么?

编辑(回应 Doxav 的第 2 点):

我担心的是,不应将基于日期的属性用于学习有关主题何时适用的规则,而应仅将它们用于确定该主题是否适用的先验概率。这是一个具体的例子:假设主题 T 是“圣诞节”。与 12 月发表的故事相比,7 月发表的故事确实不太可能是关于圣诞节的。但是关于圣诞节的故事是故事的文字内容,而不是故事的出版时间。出版日期和“关于圣诞节”之间的关系仅仅是相关性,因此仅用于计算任意日期的任意故事大约是圣诞节的先验概率。相比之下,TF-IDF(在故事文本中的某个术语)和“关于圣诞节”之间的关系是固有的和因果关系,因此值得纳入我们的模型中,了解关于圣诞节的故事意味着什么。

【问题讨论】:

【参考方案1】:

似乎可以简化为典型的 ML 问题:文本分类 + 不平衡数据 + 季节性识别 + 架构 + 典型的批处理/离线 vs 流/在线学习:

    文本分类:https://www.youtube.com/watch?v=IY29uC4uem8 是一个很好的 Weka 文本分类教程,涵盖了数据不平衡问题。

    季节性识别:目标是使模型能够学习一些不同时间属性的规则/推理,因此我们应该通过提取最知名的有用属性来简化其工作。这意味着提取典型的日期周期(即工​​作日、月份、月份、年份...),如果可能,还将其与其他更具体的周期或事件(即选举、假期、任何自定义周期或频繁)合并事件)。如果您希望模型学习时间序列/序列,您应该创建一些滞后数据(之前发生的属性或最近时间间隔的统计信息)。删除日期本身或任何会使模型构建产生偏差的数据可能会很好。

    我不知道您是否打算将其作为服务提供,但这可能会带来很好的启发:http://fr.slideshare.net/TraianRebedea/autonomous-news-clustering-and-classification-for-an-intelligent-web-portal。

    典型的批处理/离线与流/在线学习:显然您已经知道专注于批处理/离线学习的 Weka。我不知道您的数据大小,如果您打算不断处理新数据并重建模型,那么您可以考虑转向流处理和在线学习。因此,您可以迁移到与 Weka 非常接近但专门用于流分类的 MOA,或者使用最新版 Weka 的新流功能(Steam 处理和新的在线学习者)。

更新 1 ;我阅读了您的评论,并看到了不同的解决方案:

答案 #2 仍然是满足您需求的一种可能解决方案,即使它不是最佳解决方案。获得一个表明它是圣诞节期间的属性将设置更高的概率将其标记为圣诞节主题,对于“单词”圣诞节的 TF-IDF 也是如此,但只有两个属性一起会将最大分类概率设置为圣诞节。 您可以使用为每个词提供季节性权重的属性:TF-IDF with time weight,或使用每个词的当前 Google 趋势数据。 如果您希望在上下文中获得最先进的自适应先验,您可以研究分层贝叶斯模型和 NLP 解决方案的平滑。那时不会是 Weka,而且测试速度也不会那么快。

【讨论】:

感谢您的反馈 - 我编辑了我的问题以反映我对您的第 2 点的担忧。

以上是关于具有季节性类别变化的日期文档的二进制分类的主要内容,如果未能解决你的问题,请参考以下文章

获得 SMO 分类的准确输出值,然后将它们明确划分为类别

如何使用 Pytorch 将二进制迁移学习模型扩展到多个图像类别?

二进制输出的文本分类

SVM 和无效类别

如何使用不同尺寸的多个分类输入变量为随机森林回归模型?

如何识别已用于对每个类别进行分类的最佳特征