使用自然语言处理让系统学会对文本进行分类

3

在我花费大量时间学习相关概念之前,我想知道NLP和Python的NLTK是否可以通过简单地输入文本并告诉系统哪些类别适用来帮助我训练一个系统。

假设我有约100个文本,并且我想将它们归类到它们所描述的业务范畴中。是否有一种方法只需针对每个文本指示系统正在描述的业务,然后在长期运行中使该系统更加准确地对新文本进行分类?

3个回答

3
你所描述的是一个分类问题。为了训练分类模型,你可以使用NLTK自带的朴素贝叶斯分类器NaiveBayesClassifier或者来自scikit-learn更先进和可定制的模型之一。 这里是NLTK NB分类器的文档示例。 这里是来自scikit-learn的Multinomial NB分类器的示例。 两个软件包都为您的问题提供了完整的解决方案。NLTK为您提供了适当的分词和词形还原工具,使您能够在将文本馈送给训练器或将其用于分类之前自行处理它们,并为您提供训练算法。Scikit-learn也可以实现这一点,但有些不同之处:如果您只需要进行分词,则预处理部分会更加自动化,并且您有更多选项来训练您的模型。在此示例中自行查看。 有了这些工具,您应该能够完成工作。然而,如果您是新手,请注意以下几点提示:
  1. 确保对训练文本进行的任何预处理操作也同样适用于之后要分类的文本。
  2. 考虑获取更大的训练集,因为100个文本并不算是"大数据"。
  3. 如果您还不了解它,请熟悉pickle模块,这将使您能够在计算机上保存模型。
  4. 如果选择使用scikit-learn,请尝试使用SVM分类器替换MultinomialNB分类器并比较结果。 SVM通常更好。

2
简而言之: 是的,有点儿。NLTK可以很好地分解原始文本,剥离停用词(常见但对文本意义不大的单词)。您可以取任何文本,标记化并绘制每个单词的频率。然而,最常见的单词将是“the”、“of”、“for”等:停用词。这将给您一个良好的总体想法,但通常还不够好。因此,您需要一些分类方法,这也是NLTK所具备的。您可能需要查看此处
通常人们用tf-idf来实现这个目的。另一个非常棒的包是gensim,它旨在实现您正在寻找的功能。其他包也有一些您可能需要查看的部分,如scikit-learn。
从长远来看?这实际上取决于您可以投入多少资源到您的项目中,但(相对)简单的方法是标记化:贝叶斯定理。100个文本是一个很小的数量,因此使用标记化进行分类可能不会非常准确。

0

我相信你所需要的是自然语言处理中的主题建模。Python有几个库可以实现这一点(但据我所知,NLTK不行)。可以看看这些库:gensimGraphLablda


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接