Я работаю с отзывами в магазине приложений, чтобы классифицировать их как класс "0" или класс "1" на основе текста в обзоре и настроения, которое несет обзор.
На моих этапах классификации я применяю следующие методы к моему фрейму данных:
def get_sentiment(s):
vs = analyzer.polarity_scores(s)
if vs['compound'] >= 0.5:
return 1
elif vs['compound'] <= -0.5:
return -1
else:
return 0
df['sentiment'] = df['review'].apply(get_sentiment)
Для простоты данные уже помечены как класс '0' или '1 ', но я тренирую модель для классификации новых экземпляров, которые еще не были маркированы. Короче говоря, данные, с которыми я работаю, уже помечены. Они находятся в столбце classification
.
Затем в моем методе разделения теста поезда сделайте следующее:
msg_train, msg_test, label_train, label_test = train_test_split(df.drop('classification', axis=1), df['classification'], test_size=0.3, random_state=42)
Таким образом, в кадре данных для параметра X есть review
и sentiment
, а для параметра y - только classification
, на котором я тренирую свою модель.
Поскольку нормализация повторяется, для простоты я запускаю конвейер следующим образом:
pipeline1 = Pipeline([
('bow', CountVectorizer(analyzer=clean_review)),
('tfidf', TfidfTransformer()),
('classifier', MultinomialNB())
])
Где функция clean_review
выглядит следующим образом:
def clean_review(sentence):
no_punc = [c for c in sentence if c not in string.punctuation]
no_punc = ''.join(no_punc)
no_stopwords = [w.lower() for w in no_punc.split() if w not in stopwords_set]
stemmed_words = [ps.stem(w) for w in no_stopwords]
return stemmed_words
Где stopwords_set - это набор стоп-слов engli sh из библиотеки nltk
, а ps
из модуля PortStemmer
в библиотеке nltk
(для определения слова).
Я получаю следующую ошибку: ValueError: Found input variables with inconsistent numbers of samples: [2, 505]
Когда я искал эту ошибку раньше, я обнаружил, что вероятной проблемой могло быть то, что существует несоответствие в количестве записей для каждого атрибут. Я обнаружил, что это не так. Все записи, которые я использую, имеют значения для каждого столбца.
Может ли кто-нибудь еще помочь мне понять, что может означать эта ошибка?
Моя конечная цель - создать информационный фрейм, к которому применены CountVectorizer и TfIdfTransformer, но при этом сохранить столбец для настроения каждого обзора.
Затем я хотел бы иметь возможность обучить классификатор MultinomialNB на этом кадре данных и применить эту модель к другим задачам.