Вопрос или проблема
У меня есть размеченный набор данных с обзорами продуктов, где метка — это оценка от 1 до 5, а обзор — просто текст. Я использую простой наивный байесовский классификатор (sklearn), чтобы попытаться предсказать оценку, учитывая обзор, что работает достаточно хорошо (~65% точности – надеюсь, это неплохо, учитывая, что существует 5 классов, и я использую только наивный байес?)
classifier = Pipeline([('vec', CountVectorizer()), ('clf', MultinomialNB())])
classifier.fit(x_train, y_train)
predicted = classifier.predict(x_test)
accuracy = accuracy_score(y_test, predicted) # ~65%
В любом случае, я хотел бы создать классификатор, который действительно хорошо предсказывает, имеет ли обзор оценку 4 или 5, например. Мне не очень важно, как (плохо) классификатор справляется с оценками, кроме 4 или 5.
Мои идеи были
- изменить набор данных и изменить все метки на 1, где метка не 4 или 5, затем снова обучить классификатор
- использовать только обучающие примеры, которые имеют метку 4 или 5
Однако оба подхода вообще не помогают, F-оценка для классов 4 и 5 не улучшается. Что я могу сделать, чтобы улучшить классификатор только для этих 2 классов?
Лучший подход — удалить все данные, не размеченные как 4 или 5.
Затем повторите все шаги. Снова сделайте деление на обучающую и тестовую выборки и переобучите весь пайплайн с нуля, включая CountVectorizer.
Ответ или решение
Оптимизация F-Score для классов 4 и 5 в классе «рейтинг продуктов»
Введение
Ваша задача заключается в том, чтобы улучшить производительность классификатора на определенных классах (в данном случае классах 4 и 5) в процессе оценки текстовых отзывов о продуктах с использованием наивного байесовского классификатора. Данная задача требует точного подхода, так как стандартные методы могут не давать желаемого результата. В этой статье мы рассмотрим несколько оптимизированных стратегий для повышения F-Score для классов 4 и 5.
Подходы к оптимизации
-
Учет только нужных классов: Использование данных только для классов 4 и 5, как вы уже упомянули, является неожиданно эффективной стратегией. Убедитесь, что ваш набор данных, используемый для тренировки, состоит только из этих двух классов. Это предотвратит смешивание данных и определит более четкие границы для вашего классификатора.
# Фильтрация данных filtered_data = dataset[(dataset['rating'] == 4) | (dataset['rating'] == 5)] x_train, y_train = filtered_data['review'], filtered_data['rating']
-
Переподготовка векторов: После фильтрации данных следует повторно обучить
CountVectorizer
, чтобы он учитывал только текстовые данные ваших классов. Это необходимо, чтобы избежать учитывания несущественных характеристик из выброшенных классов.from sklearn.pipeline import Pipeline from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import CountVectorizer from sklearn.model_selection import train_test_split from sklearn.metrics import f1_score # Разделение на обучающую и тестовую выборки x_train, x_test, y_train, y_test = train_test_split(x_train, y_train, test_size=0.2, random_state=42) # Создание и обучение классификатора classifier = Pipeline([('vec', CountVectorizer()), ('clf', MultinomialNB())]) classifier.fit(x_train, y_train)
-
Использование других метрик: Если ваша цель сфокусирована на классах 4 и 5, рассмотрите возможность использования других подходящих метрик, таких как Чувствительность (Recall), которая будет показывать, насколько хорошо ваша модель выявляет положительные классы, игнорируя негативные.
-
Уравновешивание классов: В случае если классы 4 и 5 имеют значительное различие в представлении, вы можете применить техники балансировки классов, такие как метод увеличения выборки (SMOTE) или близкие к нему подходы, чтобы создать больше примеров для недопредставленных классов.
-
Обучение с увеличением выбросов: Если в вашем исходном наборе данных наблюдаются сложно настроенные границы между классами, рассмотрите возможность выделения новых образцов с помощью методов аугментации текста, таких как Paraphrasing или Synonym Replacement. Это поможет вашему классификатору стать более устойчивым к различным формулировкам.
Заключение
Оптимизация F-Score для классов 4 и 5 в ваших данных отзывов о продуктах требует варьирования подходов, начиная с фильтрации набора данных и заканчивая использованием метрик, ориентированных на ваши цели. Переподготовка векторов и применение техник балансировки представляют собой более продвинутые шаги для достижения ваших целей. Неустойчивый ли ваш классификатор, не указывайте на его недостатки, а используйте возможности улучшения, чтобы достичь высокой точности в вашей конкретной области.