我有很多带有相关标签的短句(我想预测)。例如:
This is a short sentence, label1
对于每个短句,我提取所有的名词和形容词,并将它们用作朴素贝叶斯分类器的特征。所以对于上面的句子:
short, sentence
是否会提取两个单词。
总共我有260,000个观测值(50 MB csv文件)。由此我能够提取大约7,103个独特的名词和形容词。但是使用它们都是不切实际的。所以我想使用顶部 N 最常出现的单词作为功能。
如果我使用前50个单词,我的代码运行得很好。这是一个片段:
featuresets = [(document_features(i), i.label) for i in y]
train_set, test_set = featuresets[testTrainCutoff:], featuresets[:testTrainCutoff]
classifier = nltk.NaiveBayesClassifier.train(train_set)
如果使用前100个单词,我会得到' MemoryError'在尝试构建特征集时#39;从stackoverflow上的另一个问题,我找到了一个潜在的解决方案,即使用nltk.classify.apply_features
返回一个对象,该对象的作用类似于列表,但不会将所有的特征集存储在内存中#34; (source)。
所以我更新了我的代码:
train_set, test_set = y[testTrainCutoff:], y[:testTrainCutoff]
train_set, test_set = apply_features(document_features,train_set), apply_features(document_features,test_set)
classifier = nltk.NaiveBayesClassifier.train(train_set)
但是,现在我收到以下错误:
File "C:\Python27\lib\site-packages\nltk\classify\naivebayes.py", line 191, in train
for featureset, label in labeled_featuresets:
ValueError: too many values to unpack
作为旁注:我在40 GB的RAM机器上运行它,所以我发现我收到这些错误很奇怪
答案 0 :(得分:0)
我看到了同样的问题,对我而言,它与系统资源无关。这是我案例的解决方案。
我正在填充我的要素对象,如特征词:
features = {<features>}
而不是包含dict和分类值的元组:
features = ({<features>},classification)
无论我制作特征数组有多小,它总是给我
ValueError: too many values to unpack
这种不正确的数据结构。一旦我改为元组,一切都运行良好。希望这会有所帮助。