Sobre la diferencia entre Naive Bayes y redes neuronales recurrentes
En primer lugar, comencemos diciendo que ambos son clasificadores, destinados a resolver un problema llamado clasificación estadística . Esto significa que tiene muchos datos (en los artículos de su caso) divididos en dos o más categorías (en su caso, sentimiento positivo / negativo). El objetivo del clasificador es aprender cómo se dividen los artículos en esas dos categorías y luego poder clasificar los nuevos artículos por sí mismo.
Dos modelos que pueden resolver esta tarea son el clasificador Naive Bayes y las redes neuronales recurrentes.
Bayes ingenuos
Para utilizar este clasificador para el análisis de texto, generalmente se procesa previamente el texto ( bolsa de palabras + tf-tdf ) para que pueda transformarlo en vectores que contengan valores numéricos. Estos vectores sirven como entrada para el modelo NB.
Este clasificador supone que sus características (los atributos de los vectores que producimos) son independientes entre sí. Cuando se cumple este supuesto, es un clasificador muy fuerte que requiere muy pocos datos para funcionar.
Redes neuronales recurrentes
Estas son redes que leen sus datos secuencialmente, mientras mantienen una "memoria" de lo que han leído previamente. Estos son realmente útiles cuando se trata de texto debido a la correlación que las palabras tienen entre ellos.
Los dos modelos (NB y RNN) difieren mucho en la forma en que intentan realizar esta clasificación:
NB pertenece a una categoría de modelos llamada generativa . Esto significa que durante el entrenamiento (el procedimiento donde el algoritmo aprende a clasificar), NB intenta averiguar cómo se generaron los datos en primer lugar. Básicamente, trata de descubrir la distribución subyacente que produjo los ejemplos que ingresó al modelo.
Por otro lado, RNN es un modelo discriminatorio . Intenta descubrir cuáles son las diferencias entre sus ejemplos positivos y negativos, para realizar la clasificación.
Sugiero consultar "algoritmos discriminativos vs generativos" si quieres aprender mire
Si bien NB ha sido popular durante décadas, los RNN están comenzando a encontrar aplicaciones en la última década debido a su necesidad de altos recursos computacionales. La mayoría de las veces, los RNN están entrenados en GPU dedicadas (que computan mucho más rápido que las CPU).
tl; dr: son dos formas muy diferentes de resolver la misma tarea
Bibliotecas
Debido a que los dos algoritmos son muy populares, tienen implementaciones en muchas bibliotecas. Voy a nombrar algunas bibliotecas de Python desde que lo mencionaste:
Para NB:
scikit-learn : es una biblioteca de Python muy fácil de usar que contiene implementaciones de varios algoritmos de aprendizaje automático, incluido Naive Bayes.
NaiveBayes : no lo he usado, pero supongo que es relevante a juzgar por el nombre.
Debido a que los RNN se consideran un algoritmo de aprendizaje profundo , tienen implementaciones en todas las bibliotecas principales de aprendizaje profundo:
TensorFlow : la biblioteca DL más popular en este momento. Publicado y mantenido por google.
theano : Biblioteca similar a tf, más antigua, publicada por la Universidad de Montreal.
keras : envoltorio para tf y theano. Más fácil. Lo que te sugiero que uses si alguna vez quieres implementar RNN.
caffe : biblioteca DL publicada por UC Berkeley. Tiene API de Python.
Todo lo anterior ofrece soporte para GPU si tiene una GPU NVIDIA habilitada para CUDA.
NLTK de Python es una biblioteca principalmente para el procesamiento del lenguaje natural (derivación, tokenización, etiquetado de parte del discurso). Si bien tiene un paquete de sentimientos , no es el punto de enfoque. Estoy bastante seguro de que NLTK usa NB para el análisis de sentimientos.