Причина довольно проста: 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 , набор функций будет выглядеть примерно так:
[({'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')]
Рабочий процесс здесь берет имя, генерирует из него одну функцию (последнюю букву),а затем использует последнюю букву каждого имени в сочетании с тем, является ли он мужчиной или женщиной (метка), для определения условной вероятности пола имени с учетом его последней буквы.
С другой стороны, что выВы пытаетесь решить, является ли предложение положительным или отрицательным, что означает, что вам нужно (упрощенно здесь) сказать, является ли каждое отдельное слово положительным или отрицательным.Однако, если это так, то и ваша функция, и ваш ярлык означают одно и то же!