机器学习文本分类,其中文本属于 1 到 N 个类别

Posted

技术标签:

【中文标题】机器学习文本分类,其中文本属于 1 到 N 个类别【英文标题】:Machine learning text classification where a text belongs to 1 to N classes 【发布时间】:2016-08-05 06:21:30 【问题描述】:

所以我试图(只是为了好玩)根据电影的描述对电影进行分类,这个想法是“标记”电影,例如,给定的电影可能同时是“动作”和“幽默”。

通常在使用文本分类器时,您得到的是给定文本所属的类,但在我的情况下,我想将文本分配给 1 到 N 个标签。

目前我的训练集如下所示

+--------------------------+---------+
|        TEXT              |  TAG    |
+--------------------------+---------+
| Some text from a movie   |  action |
+--------------------------+---------+
| Some text from a movie   |  humor  |
+--------------------------+---------+
| Another text here        | romance |
+--------------------------+---------+
| Another text here        | cartoons|
+--------------------------+---------+
| And some text more       | humor   |
+--------------------------+---------+

接下来我要做的是训练分类器来告诉我每个标签是否属于单个文本,例如,如果我想弄清楚一个文本是否被归类为“幽默”,我会结束使用以下训练集

+--------------------------+---------+
|        TEXT              |  TAG    |
+--------------------------+---------+
| Some text from a movie   |  humor  |
+--------------------------+---------+
| Another text here        |not humor|
+--------------------------+---------+
| And some text more       | humor   |
+--------------------------+---------+

然后我训练一个分类器,该分类器将了解文本是否幽默(其余标签采用相同的方法)。之后,我以总共 4 个分类器结束

动作/无动作 幽默/不幽默 浪漫/不浪漫 卡通/没有卡通

最后,当我得到一个新文本时,我将它应用于 4 个分类器中的每一个,对于每个分类器,如果这种分类超过某个特定值,则给我一个正分类(即给我 X 而不是 no-X)阈值(比如 0.9),然后我假设新文本属于标签 X,然后我对每个分类器重复相同的操作。

特别是我使用朴素贝叶斯算法,但同样可以应用于任何输出概率的算法。

现在的问题是,这种方法是否正确?我在这里做错了什么吗?从结果中我得到的东西似乎是有道理的,但我想要第二个意见。

【问题讨论】:

【参考方案1】:

是的,这是有道理的。这是一种众所周知的多标签/多类分类基本技术,称为“one vs all”(或“one vs all”)分类器。这是非常古老且广泛使用的。另一方面 - 它也非常幼稚,因为您不考虑您的类/标签之间的任何关系。您可能有兴趣阅读有关结构学习的内容,其中涵盖了可以利用(通常有)标签空间上的一些结构的主题。

【讨论】:

为什么这个有负的 cmets?我觉得它很有用...添加upvote! @Juan,我也很惊讶看到这里投了反对票,但由于没有评论解释选民的想法 - 我认为这不是非常“真实”的投票。【参考方案2】:

您所描述的问题可以通过Latent Dirichlet Allocation 解决,这是一种统计方法topic model,用于查找文档集合中的潜在(“潜在”)主题。这种方法基于一个模型,其中每个文档都是这些主题的混合。

一般来说,您最初决定主题(在您的情况下,标签是主题),然后运行培训师。然后,LDA 软件将输出每个文档主题的概率分布。

这里有一个很好的介绍:http://blog.echen.me/2011/08/22/introduction-to-latent-dirichlet-allocation/

【讨论】:

lda 是用于寻找潜在变量的无监督技术,与完全监督多类问题的 OP 问题无关 @lejlot:在 OP 的问题中,他没有提到监督学习。他说他曾尝试使用朴素贝叶斯,但使用监督学习并不是唯一的方法。引用:I want to assign a text to 1 to N tags。他还说so for example, if I want to figure out whether or not a text is classified as "humor" 。 LDA 可以解决这些问题。 OP 创建训练集,使用多类广义朴素贝叶斯。它被很好地描述了,基本的监督设置方法。当您尝试找出有关数据的某些信息时,无监督学习技术非常有用。当您的任务明确时-它们不是一个好方法,因为它们的内部目标不是解决您的问题-而是找到自己的解决方案。就像集群一样——你总会发现一些数据集群,但假设这无论如何都与你的任务相关是完全错误的。 @lejlot:他尝试使用朴素贝叶斯作为第一次尝试,因为这是他对如何解决问题的猜测。这并不意味着解决方案中有监督学习。 仅作记录。我在这里使用监督学习。不管怎样,我的问题是我的方法是否正确。我当然感谢任何建议......【参考方案3】:

是的。您的方法是正确的,它是一种众所周知的策略,可以使旨在进行二元分类的分类器能够处理多类分类任务。

Andrew Ng(斯坦福大学)解释了这种方法here。尽管它是为逻辑回归解释的,但正如您所提到的,这个想法可以应用于任何输出概率的算法。

【讨论】:

是的,事实上我已经完成了课程。然而,在该视频中解释了该方法,以便您可以使用 logistc 回归不是在 2 个类之间而是在 N 个类之间进行分类。我想要得到的是相似的,除了我不仅想添加 N 个类,我还想将最多 N 个类分配给给定的文本。也就是说,你是对的,顺便说一句,我的数字似乎显示相同:) 我认为您可以简单地指定一个概率阈值(可能通过观察当前数字)并分配电影属于该类别的概率超过阈值的任何 N 个类别。我看过使用相同方法的学术文章。

以上是关于机器学习文本分类,其中文本属于 1 到 N 个类别的主要内容,如果未能解决你的问题,请参考以下文章

机器学习基础——带你实战朴素贝叶斯模型文本分类

机器学习基础——朴素贝叶斯做文本分类代码实战

深度学习实战案例:新闻文本分类

深度学习实战案例:新闻文本分类

二进制输出的文本分类

文本分类/机器学习:我还需要“默认”类别吗?