首先,朴素贝叶斯在这里可能不合适。它假设输入之间的独立性(因此是“Naive”)并且句子中的单词非常依赖。
但是,假设您真的想使用 NB 作为开始实验的算法,我会考虑两种选择:
Ungraceful:很多 NB 分类器
这将是一种替代方法。将观察到的所有单词组成一个语料库作为输入向量。将所有观察到的标签作为输出向量制作一个语料库。具有多个输出的 NB 分类器等效于具有多个 NB 分类器,每个分类器具有一个输出(在您使用的任何软件框架中更容易实现)。将每个元素视为一个训练样本,其中给定的输入(一个词)如果该词存在则为 a 1
,如果该词不存在则为 a 0
。对输出使用相同的二进制方案。
这种蛮力强制将 NB 分类器应用于您的数据,并让您通过仍然挖掘您将留下的大量分类器来找到意义。
更优雅:处理您的数据
如果您想使用一个多类 NB 分类器运行,这是我推荐的方法。
您的目标是弄清楚如何将每组标签映射到单个类。我确信有某种聚类方案或网络分析(也许 ["celebrity"] 链接到 ["murder"] 可能成为片段 ["debauchery"]),可以将您的标签明智地映射到一个单独的集群。如果您将标签视为节点并将两个给定标签一起视为链接,那么您将需要研究社区检测算法(这是我要开始的地方)。但是,如果您只是想要一些工作,那么对标签进行某种破解,将标签列表转换为仅在您的数据集中最常见的标签就足够了。
此方法预先加载了清理数据的工作,并使 NB 分类器的输出更易于理解。