使用机器学习的情感分析分类器
Posted
技术标签:
【中文标题】使用机器学习的情感分析分类器【英文标题】:Sentiment Analysis classifier using Machine Learning 【发布时间】:2016-04-30 20:08:14 【问题描述】:我们如何为情绪分析制作一个有效的分类器,因为为此我们需要在庞大的数据集上训练我们的分类器。
我有大量的数据集要训练,但是分类器对象(这里使用 Python)在使用 3000 个单词时会出现内存错误。而且我需要训练超过 10 万个单词。
我的想法是将庞大的数据集划分为更小的部分,并为每个部分创建一个分类器对象,并将其存储在一个 pickle 文件中并使用所有这些部分。但似乎不可能使用所有分类器对象进行测试,因为在测试期间只需要一个对象。
我想到的解决方案是将存储在 pickle 文件中的所有已保存分类器对象组合起来(这只是没有发生),或者继续将相同的对象附加到新的训练集(但同样,它正在被覆盖而不是附加)。
我不知道为什么,但即使它是机器学习的基础,我也找不到任何解决这个问题的方法。每个机器学习项目都需要在庞大的数据集上进行训练,训练这些数据集的对象大小总是会出现内存错误。
那么,如何解决这个问题呢?我对任何解决方案持开放态度,但想听听从事实时机器学习项目的人的做法。
代码片段:
documents = [(list(movie_reviews.words(fileid)), category)
for category in movie_reviews.categories()
for fileid in movie_reviews.fileids(category)]
all_words = []
for w in movie_reviews.words():
all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
word_features = list(all_words.keys())[:3000]
def find_features(document):
words = set(document)
features =
for w in word_features:
features[w] = (w in words)
return features
featuresets = [(find_features(rev), category) for (rev, category) in documents]
numtrain = int(len(documents) * 90 / 100)
training_set = featuresets[:numtrain]
testing_set = featuresets[numtrain:]
classifier = nltk.NaiveBayesClassifier.train(training_set)
PS:我正在使用 NaiveBayes 的 NLTK 工具包。我的训练数据集正在打开并存储在documents
。
【问题讨论】:
【参考方案1】:您似乎缺少两件事:
文本的数据集通常非常稀疏,您应该将它们存储为稀疏矩阵。对于这样的表示,您应该能够使用 vocab 将数百万个文档存储在您的内存中。 100,000。
许多现代学习方法都是在小批量场景中训练的,这意味着您永远不需要内存中的整个数据集,而是将其与随机数据子集一起提供给模型 - 但仍然训练单个模型。这样,您的数据集可以任意大,内存消耗是恒定的(由小批量大小固定),并且只有训练时间随样本量而变化。
【讨论】:
我有文档形式的文本数据。每个文件都有几句话。像这样,我有成千上万的文件。解析所有这些文件对我来说没有问题。但是我选择训练的单词数量确实如此。如果我选择超过 3000 个单词,它就会开始出现字典错误。 没有“字典错误”之类的东西——这似乎是一些特定的实现问题,因此如果没有确切的代码,就不可能跟踪这个特定的问题。如答案所示 - 现代 ML 技术没有这样的限制,因此问题在于您的代码,而不是使用的 ML 方法。 我贴了代码sn-p,这里我用了3000字。以上是关于使用机器学习的情感分析分类器的主要内容,如果未能解决你的问题,请参考以下文章
#私藏项目实操分享# Java实现基于朴素贝叶斯的情感词分析