【发布时间】:2016-01-11 05:21:22
【问题描述】:
在我开始花大量时间学习这些概念之前,我想知道 NLP 和 Python 的 NLTK 是否可以通过简单地输入文本并告诉它适用的类别来帮助我训练系统。
假设我有大约 100 个文本,我想根据它们描述的业务对它们进行分类。有没有办法根据文本向系统指示正在描述什么业务,然后让该系统从长远来看越来越准确地对新文本进行分类?
【问题讨论】:
在我开始花大量时间学习这些概念之前,我想知道 NLP 和 Python 的 NLTK 是否可以通过简单地输入文本并告诉它适用的类别来帮助我训练系统。
假设我有大约 100 个文本,我想根据它们描述的业务对它们进行分类。有没有办法根据文本向系统指示正在描述什么业务,然后让该系统从长远来看越来越准确地对新文本进行分类?
【问题讨论】:
您所描述的是classification 问题。要训练分类模型,您需要使用 NLTK 自己的 NaiveBayesClassifier 或来自 scikit-learn 的更先进和可定制的模型之一。
Here is the documentation example for NLTK's NB classifier.
Here is an example for the Multinomial NB classifier from scikit-learn
这两个软件包都为您的问题提供了完整的解决方案。 NLTK 为您提供了所有工具,可以在将文本提供给训练器或将它们扔到训练模型进行分类之前自行正确标记和词形还原文本,它还为您提供训练算法。 Scikit-learn 也这样做,但略有不同:如果您需要做的只是标记化,那么预处理部分会更加自动化,并且您有更多选项来训练您的模型。 See for yourself in this example.
有了这个,您应该拥有完成工作的工具。但是,如果您对此不熟悉,这里有一些提示:
pickle 模块,请先熟悉它,这可以让您在计算机上保存模型。scikit-learn,请尝试用 SVM 替换 MultinomialNB 分类器并比较结果。 SVM 通常更好。【讨论】:
简而言之:是的,有点。 NLTK 可以很好地分解原始文本,去除停用词(常见但不会对文本提供很多有意义的见解的词)。您可以获取任何文本,对其进行标记并绘制每个单词的频率。然而,最常见的词是“the”、“of”、“for”等:停用词。这会给你一个很好的整体想法,但通常还不够好。所以你需要某种分类,它也随 NLTK 一起提供。您可能想查看this。
最常见的 tf-idf 是人们为此目的使用的。在您的情况下可能会派上用场的另一个出色的软件包是gensim,它旨在完全满足您的需求。其他软件包有您可能想查看的部分,例如 scikit-learn。
从长远来看?这实际上取决于您可以投入多少资源到您的项目中,但(相对)简单的方法是标记:贝叶斯定理。 100 个文本是一个很小的数字,因此使用标记进行分类可能不会非常准确。
【讨论】:
我相信您在 NLP 中寻找的是Topic Modeling。 Python 有几个库可以做到这一点(据我所知,但不是 NLTK)。看看这些gensim、GraphLab 或lda。
【讨论】: