О разнице между наивными байесовскими и рекуррентными нейронными сетями
Прежде всего давайте начнем с того, что оба они классификаторы, предназначенные для решения проблемы, называемой статистической классификацией . Это означает, что у вас есть много данных (в ваших статьях), разделенных на две или более категории (в вашем случае позитивные / негативные настроения). Цель классификатора состоит в том, чтобы узнать, как статьи делятся на эти две категории, а затем иметь возможность самостоятельно классифицировать новые статьи.
Две модели, которые могут решить эту задачу - это наивный байесовский классификатор и рекуррентные нейронные сети.
Наивный байесовский метод
Чтобы использовать этот классификатор для анализа текста, вы обычно предварительно обрабатываете текст ( мешок слов + tf-tdf ), чтобы преобразовать его в векторы, содержащие числовые значения. Эти векторы служат входом для модели NB.
Этот классификатор предполагает, что ваши объекты (атрибуты созданных нами векторов) не зависят друг от друга. Когда это предположение выполняется, это очень сильный классификатор, который требует очень мало данных для работы.
Рекуррентные нейронные сети
Это сети, которые читают ваши данные последовательно, сохраняя при этом «память» того, что они прочитали ранее. Они действительно полезны при работе с текстом из-за корреляции между ними.
Две модели (NB и RNN) сильно отличаются в способе выполнения этой классификации:
NB относится к категории моделей, называемых генеративными . Это означает, что во время обучения (процедура, в которой алгоритм учится классифицировать), NB пытается выяснить, как данные были сгенерированы в первую очередь. По сути, он пытается выяснить базовый дистрибутив, который привел примеры, которые вы вводите в модель.
С другой стороны, RNN является дискриминационной моделью. Он пытается выяснить, в чем различия между вашими положительными и отрицательными примерами, чтобы выполнить классификацию.
Я предлагаю запросить «дискриминационные и порождающие алгоритмы», если вы хотите узнать больше
В то время как NB был популярен в течение десятилетий, RNN начинают находить приложения в течение последнего десятилетия из-за их потребности в высоких вычислительных ресурсах. RNN чаще всего обучаются на выделенных графических процессорах (которые вычисляются намного быстрее, чем процессоры).
tl; dr: это два совершенно разных способа решения одной и той же задачи
Библиотеки
Поскольку эти два алгоритма очень популярны, они имеют реализации во многих библиотеках. Я назову несколько библиотек Python, так как вы упомянули это:
Для NB:
scikit-learn : очень простая в использовании библиотека Python, содержащая реализации нескольких алгоритмов машинного обучения, в том числе Naive Bayes.
NaiveBayes : не использовал это, но я думаю, что это уместно, судя по названию.
Поскольку RNN считаются алгоритмом глубокого обучения , они имеют реализации во всех основных библиотеках глубокого обучения:
TensorFlow : самая популярная библиотека DL на данный момент. Опубликовано и поддерживается Google.
theano : Библиотека, похожая на tf, более старая, изданная Университетом Монреаля.
Керас : Обертка для TF и Theano. Намного легче. То, что я предлагаю вам использовать, если вы когда-нибудь захотите внедрить RNN.
caffe : библиотека DL, изданная UC Berkeley. Имеет API Python.
Все вышеперечисленное обеспечивает поддержку графических процессоров, если у вас есть графический процессор NVIDIA с поддержкой CUDA.
NLTK в Python - это библиотека, предназначенная главным образом для обработки естественного языка (стеммирование, токенизация, тегирование части речи). Хотя у него есть пакет настроений , это не главное. Я почти уверен, что NLTK использует NB для анализа настроений.