监督学习算法中的多个标签

数据挖掘 机器学习 文本挖掘
2021-10-12 07:34:11

我有一个带有相应主题的文本语料库。例如"A rapper Tupac was shot in LA",它被标记为["celebrity", "murder"]所以基本上每个特征向量可以有很多标签(数量不一样。第一个特征向量可以有3个标签,第二个1个,第三个5个)。

如果我只有一个标签对应于每个文本,我会尝试一个朴素贝叶斯分类器,但如果我可以有很多标签,我真的不知道该怎么做。

有什么方法可以将朴素贝叶斯转换为多标签分类问题(如果有更好的方法 - 请告诉我)?

PS关于我拥有的数据的一些事情。

  • 数据集中大约 10.000 个元素
  • 文字大约是2-3句话
  • 每个文本最多 7 个标签
1个回答

首先,朴素贝叶斯在这里可能不合适。它假设输入之间的独立性(因此是“Naive”)并且句子中的单词非常依赖。

但是,假设您真的想使用 NB 作为开始实验的算法,我会考虑两种选择:

Ungraceful:很多 NB 分类器

这将是一种替代方法。将观察到的所有单词组成一个语料库作为输入向量。将所有观察到的标签作为输出向量制作一个语料库。具有多个输出的 NB 分类器等效于具有多个 NB 分类器,每个分类器具有一个输出(在您使用的任何软件框架中更容易实现)。将每个元素视为一个训练样本,其中给定的输入(一个词)如果该词存在则为 a 1,如果该词不存在则为 a 0对输出使用相同的二进制方案。

这种蛮力强制将 NB 分类器应用于您的数据,并让您通过仍然挖掘您将留下的大量分类器来找到意义。

更优雅:处理您的数据

如果您想使用一个多类 NB 分类器运行,这是我推荐的方法。

您的目标是弄清楚如何将每组标签映射到单个类。我确信有某种聚类方案或网络分析(也许 ["celebrity"] 链接到 ["murder"] 可能成为片段 ["debauchery"]),可以将您的标签明智地映射到一个单独的集群。如果您将标签视为节点并将两个给定标签一起视为链接,那么您将需要研究社区检测算法(这是我要开始的地方)。但是,如果您只是想要一些工作,那么对标签进行某种破解,将标签列表转换为仅在您的数据集中最常见的标签就足够了。

此方法预先加载了清理数据的工作,并使 NB 分类器的输出更易于理解。