martes, 16 de abril de 2013

Clasificación de Texto: Naïve Bayes paso a paso

Hagamos un ejemplo, paso a paso para afianzar los conocimientos. 

Supongamos que tengo 4 documentos en mi corpus de entrenamiento, y dos clases: "C" y "U" que indican si un documento habla sobre Chile o sobre Uruguay respectivamente. Tengo ademas un quinto documento con el cual voy a probar mi clasificador:

Corpus Documento Palabras Clase
Entrenamiento 1 Chileno Santiago Chileno C
2 Chileno Chileno Valparaiso C
3 Chileno Allende C
4 Montevideo Uruguay Chileno U
Prueba 5 Chileno Chileno Chileno Montevideo Uruguay ?



Las formulas de Naïve Bayes son:

^             
P(c) =  Nc                             
            N

donde N es el número de documentos

^          
P(w | c) = cantidad (w | c) +1          
                 cantidad(c) + |V|

y luego calculamos la clase del doc 5 viendo cual maximiza su probabilidad:

 cmap =  argmax P(cj P(xi | cj)
                 cj ∈ C        

Bueno, ahora a calcular!

P(C) = 3/4              Tengo 3 documentos de clase C, de un total de 4
P(U) = 1/4              Tengo 1 solo documento de clase U, de un total de 4

V = 6

Calculamos las probabilidades condicionales que nos interesan para clasificar al documento 5

P(Chileno| C) =  (5+1) / (8+6) = 6/14 = 3/7
P(Montevideo| C) = (0+1) / (8+6) = 1/14
P(Uruguay|C) = (0+1) / (8+6) = 1/14

P(Chileno| U) =  (1+1) / (3+6) = 2/9
P(Montevideo| U) =(1+1) / (3+6) = 2/9
P(Uruguay|U) =(1+1) / (3+6) = 2/9

Ahora calculemos cual de ambas probabilidades es más grande:

P(C|doc5) ∝ 3/4 * 3/7 * 3/7 * 3/7 * 1/14 * 1/14 ≈ 0.0003

P(U|doc5) ∝ 1/4 * 2/9 * 2/9 * 2/9 * 2/9 * 2/9  ≈ 0.0001

Entonces, según este modelo el documento 5 habla sobre Chile, es decir, pertenece a la clase C

NOTA: usamos el signo ∝ para indicar que la probabilidad calculada es proporcional y no igual ya que eliminamos el denominador de la ecuación, total solo nos interesa saber cual es mayor. El denominador tendría que ser P(d).

Algunas palabras más sobre  Naïve Bayes

En este ejemplo y en los anteriores siempre modelizamos un documento solo como palabras, pero es posible modelizar también frases o expresiones regulares para mejorar los resultados de clasificación, lo cual es común en el caso de filtros de SPAM.  
Algunos ejemplos:

  • "Generic Viagra" o "Online Pharmacy"  => se toma la frase
  • (dollar) NN,NNN,NNN.NN    => se toma el patrón de números
  • impress..... girl  => frase armada con cualquier contenido en el medio


Resumen sobre  Naïve Bayes


  • Muy rápido y requiere poco almacenamiento
  • Robusto ante características (palabras) irrelevantes
  • Muy bueno en dominios en donde hay muchas características y todas son importantes
  • Ademas, si resulta que el supuesto sobre la independencia de las palabras es cierto, Naive Bayes es optimo.


Conclusión
             Es un muy buen clasificador de textos aunque hay otros más precisos. 



6 comentarios:

  1. Hola Juan, de nuevo gracias por el contenido que publicás acá. Ratifico y refuerzo lo aprendido en coursera con este contenido.

    Respecto al ejemplo, tengo una pregunta: la probabilidad para una característica (o palabra para el ejemplo) es "^P(w | c)". Aunque el denominador es "cantidad(c) + |V+1|", en el ejemplo lo utilizás como "cantidad(c) + |V|".

    La pregunta es: "cantidad(c) + |V+1|" aplica para cuando encuentro una palabra que no está en el vocabulario? O, ¿para entrenar el modelo y también cuando lo estoy ejecutando? (Para el caso del ejemplo, entonces los denominadores serían 15 y 9 para Chile y Uruguay, respectivamente?)

    ResponderEliminar
    Respuestas
    1. Corrijo el denominador de la clase Uruguay: 10.

      Eliminar
    2. Hola Jhon Adrían, primero que nada disculpá la tardanza en responder estuve alejado del blog. Tu pregunta es muy buena, el denominador es: "cantidad(c) + |V|" , siendo 14 y 9 en ambos casos, el "+1" fue un error de escritura mio. Sin embargo cuando encontras una palabra nueva, que no estaba en el conjunto de entrenamiento su probabilidad será: 1/ (cantidad(c)+ |V| + 1).
      Estimo que no te sirve tan tarde la respuesta, pero al menos queda respondida para futuros lectores.
      Saludos

      Eliminar
  2. sirve para un entrenamiento de mas de mil datos

    ResponderEliminar
  3. Hola Alejandro, sí, sirve para grandes cantidades de datos. De hecho, Bayes Naive está recomendado para conjuntos de datos pequeños pero también conjuntos grandes de datos. En el medio hay otros métodos que ajustan mejor como SVM.
    Bayes está implementado en WEKA: https://www.cs.waikato.ac.nz/ml/weka/ y se puede usar de forma muy sencilla para trabajar con grandes volúmenes de datos, WEKA está preparado pra trabajar con Big Data.

    ResponderEliminar