我是机器学习,NLP,数据分析的全新手,但我很有动力去理解它.我正在阅读有关NLTK,scikit-learn等的几本书.我发现了一个
python模块“TextBlob”,并发现它非常容易上手.因此,我创建了一个示例演示python脚本,该脚本位于:
https://gist.github.com/dpnishant/367cef57a8033138eb0a.我正在尝试找出最适合情绪分析和文本分类的算法.我的问题如下:
>为什么即使在如此小的训练集上,NaiveBayesClassifier中的情绪分析也会变慢?这个时间是不变的还是随着更多的训练数据会增加更多?并且情绪分析也是不正确的(参考脚本输出,它对输入文本“三明治是好的”说“负面”).我究竟做错了什么?
>我在TextBlob的文档中读到NaiveBayesClassifier是在movie_review语料库上训练的.是否有任何API可以将其更改为其他内容,nps_chat可能吗?对我来说不太清楚的是语料库的作用是什么?我的意思是,我们正在使用我们自己的样本训练数据训练分类器,那么如何更具体的语料库,例如nps_chat,product_reviews,moview_review等会有帮助吗?
>我知道我需要训练一个分类器来处理未标记的数据.但是,如果培训数据变得庞大,处理它的最佳方法是什么?程序是否应该每次都根据训练数据构建模型,或者我们可以将模型保存到文件(如pickle)并从那里读取它?是否可以使用TextBlob并使用此方法进行任何性能改进?
>在我的脚本中,在最后一个块中,我试图通过NLTKClassifier模块评估SklearnClassifier,但我没有运气.它会抛出一些神秘的错误消息.你能帮我解决一下吗?如果可能的话,我还可以请求您在TextBlob的文档网站上的nltk.classify包中显示一些关于算法/分类器用法的示例,例如: Megam,LogisticRegression,SVM,BernoulliNB,GaussianNB等.用于理解每种算法的适用性的用例将清除像我这样的初学者的许多疑问.
最佳答案 >
Naive Bayes classifier(NBC)是一种简单的算法,时间复杂度低,实际运行速度快.如果你在一个小数据集上得到缓慢的结果,它似乎是由于一个不同的地方.我怀疑它是由TextBlob对象引起的,这对于短文本来说是一种过度杀伤力.尝试使用不同的算法(如决策树)替换NBC,看看它是否确实是应该责备的.
>分类器应该训练一个数据,该数据代表将要测试的数据.虽然电影评论与您的数据集之间的情绪可能有相似之处,但这是不必要的假设和可能的问题来源.有时人们在缺少标记数据的情况下对其他数据集使用预训练.在这种情况下,您应该检查
domain adaptation问题.
>通常你训练模型一次,撒谎并使用它.如果数据集可能改变(在
concept drift的情况下),则需要重新训练.看起来您将从TextBlob转移到
scikit-learn,这也可以保存模型.