我们如何为情感分析制作一个工作分类器,因为我们需要在庞大的数据集上训练我们的分类器 .
我有大量的数据集来训练,但是分类器对象(这里使用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 回答
您似乎缺少两件事:
文本的数据集通常非常稀疏,您应该将它们存储为稀疏矩阵 . 对于这样的表示,你应该能够用词汇在你的记忆中存储数百万份文件 . 十万分之一
许多现代学习方法都是在小批量场景中训练的,这意味着你永远不需要内存中的整个数据集,而是用随机的数据子集将它提供给模型 - 但仍然训练单个模型 . 这样,您的数据集可以是任意大的,内存消耗是恒定的(由小批量大小固定),并且只有训练时间与样本量一致 .