训练分类器时出现“太多值无法解包” ValueError

时间:2019-04-22 10:26:39

标签: python nltk

我想对一列每一行的单词系列进行分类。我定义了一个函数,该函数从每个系列,正负字典和train_set返回一个字典。但是,当我开始定义分类器时,代码在该级别崩溃。

我有此代码:

'B'

完整错误回溯:

bytes

1 个答案:

答案 0 :(得分:3)

原因很简单:NaiveBayesClassifier期望由特征集和标签组成的2-tuples迭代。

例如,在您的上下文中,正词功能集将是这样的:

[({'beauty': 0.2}, 'pos'),
 ({'good': 0.3}, 'pos'),
 ({'happy': 0.4}, 'pos')]

因此,您应将数据馈送到NaiveBayesClassifier的数据应采用以下形式:

labelled_featuresets = [({'beauty': 0.2}, 'pos'),
                        ({'good': 0.3}, 'pos'),
                        ({'happy': 0.4}, 'pos'),
                        ({'bad': 0.5}, 'neg'),
                        ({'sick': 0.3}, 'neg'),
                        ({'lazy': 0.2}, 'neg')]

classifier = NaiveBayesClassifier.train(labelled_featuresets)

但是,如果您查看正在执行的操作的更广泛的上下文,出于某些原因,我不确定这是否真的有意义。

最主要的是,您实际上没有办法决定这些分数的首位。您似乎正在进行情绪分析;最简单,最常见的方法是下载从单词到情感分数的预训练映射,因此您可以尝试。

第二个是功能集是从功能值到标签的映射。如果您查看nltk official example,则功能集如下所示:

[({'last_letter': 't'}, 'female'),
 ({'last_letter': 'a'}, 'female'),
 ({'last_letter': 'h'}, 'female'),
 ({'last_letter': 'l'}, 'female'),
 ({'last_letter': 'a'}, 'female'),
 ({'last_letter': 'a'}, 'female'),
 ({'last_letter': 'e'}, 'female'),
 ({'last_letter': 'r'}, 'male'),
 ({'last_letter': 'a'}, 'male'),
 ({'last_letter': 'n'}, 'female')]

这里的工作流程使用一个名称,从中生成一个功能(最后一个字母),然后使用每个名称的最后一个字母以及它是男性还是女性(标签)来确定条件概率最后一个字母给出的性别名称。

另一方面,您正在尝试确定句子是肯定的还是否定的,这意味着您需要(在此进行简化)来判断每个单词是肯定的还是否定的。但是,如果是这样,那么您的功能和标签都具有完全相同的含义!