4

我是机器学习、NLP、数据分析方面的新手,但我非常有动力去更好地理解它。我正在阅读几本关于 NLTK、scikit-learn 等的书籍。我发现了一个 Python 模块“TextBlob”,并发现它非常容易上手。因此,我创建了一个示例演示 python 脚本,托管在:https ://gist.github.com/dpnishant/367cef57a8033138eb0a 。我正在尝试找出最适合情绪分析和文本分类的算法。我的问题如下:

  1. 为什么即使在这么小的训练集上,NaiveBayesClassifier 中的情感分析也很慢?这个时间是恒定的还是会随着更多的训练数据而增加更多?并且情绪分析也不正确(参考脚本输出,它对输入文本“三明治很好”表示“否定”)。我究竟做错了什么?

  2. 我在 TextBlob 的文档中读到 NaiveBayesClassifier 是在 movie_review 语料库上训练的。是否有任何 api 我可以将其更改为其他内容,也许是 nps_chat?我不太清楚的是语料库的作用是什么?我的意思是,我们正在使用我们自己的样本训练数据训练分类器,那么更具体的语料库(例如 nps_chat、product_reviews、moview_review 等)将如何提供帮助?

  3. 我知道我需要训练一个分类器才能处理未标记的数据。但是,如果训练数据变得庞大,那么处理它的最佳方法是什么?程序应该每次都从训练数据中构建模型,还是有办法将模型保存到文件(比如pickle)并从那里读取?TextBlob 是否有可能,并且这种方法是否会提高性能?

  4. 在我的脚本中,在最后一个块中,我试图通过 NLTKClassifier 模块评估 SklearnClassifier,但我没有运气。它会抛出一些神秘的错误消息。你能帮我解决它吗?如果可能的话,我还可以请求您展示一些有关使用 TextBlob 文档网站上的 nltk.classify 包中可用的算法/分类器的示例,例如 Megam、LogisticRegression、SVM、BernoulliNB、GaussianNB 等。了解每种算法的适用性将消除像我这样的初学者的很多疑问。

4

1 回答 1

2
  1. 朴素贝叶斯分类器( NBC) 是一种简单的算法,时间复杂度低,在实践中运行速度很快。如果您在小数据集上得到缓慢的结果,这似乎是由于不同的地方。我怀疑这是由于 TextBlob 对象造成的,这对于短文本来说太过分了。尝试用不同的算法(如决策树)替换 NBC,看看它是否确实是罪魁祸首。

  2. 分类器应该在表示将要测试的数据的数据上进行训练。尽管电影评论和您的数据集之间的情绪可能有相似之处,但这是不必要的假设,并且可能是问题的根源。在缺乏标记数据的情况下,有时人们会在其他数据集上使用预训练。在这种情况下,您应该检查域适应问题。

  3. 通常你训练模型一次,然后使用它。如果数据集可能发生变化(在概念漂移的情况下),则需要重新训练。看来您将从 TextBlob 迁移到scikit-learn中受益,这也可以保存模型。

于 2017-04-24T07:40:04.407 回答