使用机器学习对大文本进行分类

Posted

技术标签:

【中文标题】使用机器学习对大文本进行分类【英文标题】:categorize large text using machine learning 【发布时间】:2018-08-15 13:11:55 【问题描述】:

我有一个大的 xls 文档,其中每一行都包含一个问题 id、它的描述和它的 expl 类别:类别 1-A-a1

我正在尝试构建一个机器学习模型,以帮助我根据类别对该文档进行分类。目标是针对每个新条目(又名新问题描述),我们将能够定义其各自类别的模型。

约束: 我有 10 多个类别,它们也是分层的(类别 1 有不同的子类别,每个子类别都有不同的子子类别)。我正在考虑分层分类或多类分类但无法分辨。

描述特征是长文本。我正在考虑多项逻辑回归,但我读到它需要数值数据。我是否必须制作文档中使用的所有单词的字典才能给它一个数值?这是一个正确的选择吗?

我还希望对每个新条目进行评分以对最近的类进行分类(对于新描述 X ,类别 2-B-b1 给出 80% 的分数)

【问题讨论】:

【参考方案1】:

一个好的方法是将您的 .xls 文件转换为 pandas 数据框并使用 fasttext https://fasttext.cc/ 创建文本分类模型,任何新文本都将被分类到其各自的类别中。 请参阅 https://github.com/facebookresearch/fastText 以获取正确的文档。

【讨论】:

谢谢您的回复,您能再给我解释一下吗? 找到了这个 tutorialkart.com/fasttext/… 。它可能有用。我会尝试并提供反馈。我需要知道监督分类的文本速度有多快?使用了哪些算法或概率? 这应该为您提供您正在寻找的详细信息(请参阅关于skip-grams vs CBOW的tensorflows文档以获得更清晰的信息)analyticsvidhya.com/blog/2017/07/…【参考方案2】:

您可以使用的策略之一是伯努利朴素贝叶斯 (https://en.wikipedia.org/wiki/Naive_Bayes_classifier)。

这是一个简单的数学方程式,可让您将问题简化为每个类别的单词频率列表。

一旦您为已知属于适当类别的文本建立了有意义的词频基线,该公式将能够返回新文本在每个类别中的匹配概率。

这可以给出一个非常大的单词 x 类别矩阵,但每个元素的处理非常简单。根据您的数量和性能要求,可以对公式进行优化,以将计算限制为文本中实际存在的单词,以分类和跳过与已看到的其他单词相关的因素之前但没有出现在文本中(如果伯努利分类器与您的解决方案相关,我可以详细说明)。请注意,Python 中可能存在分类器的现有实现(我尚未检查)。

【讨论】:

确实,我将从朴素贝叶斯算法开始。但是分不清bernouilli NB和多项式NB之间的区别。当我们有许多类并且不同类可以具有共同特征时,它们是否都适用?很混乱 我建议从伯努利开始。 Multinominal 有一些额外的限制:由于 log 导致的因子计算成本高,使用大量类别/单词更难以优化,并且需要补偿来管理零频率。除非给定文本中给定单词的出现次数对您的资格要求有很大影响,否则它不会增加您从 Bernoulli 获得的东西。

以上是关于使用机器学习对大文本进行分类的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用哪种分类模型来进行机器学习中的作者归属?

文本分类(机器学习方法)

文本分类(机器学习方法)

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

学习使用sklearn自带的贝叶斯分类器进行文本分类和参数调优

使用 createML 创建文本分类器模型时使用啥机器学习算法?