martes, 16 de abril de 2013

Clasificación de Texto: entrenamiento de Naïve Bayes

Repasemos como entrenar el algoritmo de clasificación de texto automático: Naïve Bayes para obtener los parámetros necesarios:

El estimador de máxima verosimilitud para la probabilidad previa de la categoría "cj", perteneciente al conjunto de categorías C es:

^            
P(cj) = cant. docs (C=cj)
             cant. docs

El estimador de máxima verosimilitud para la probabilidad previa de la palabra palabra wdada la clase ces:

^            
P(wi | cj) = cantidad (wi | cj)       
                  cantidad(w,cj
                   wV



donde cantidad (wi | cj) es la cantidad de veces que aparece la palabra wi en documentos de la clase cj y ∑ cantidad(w,cj) es la cantidad de palabras del vocabulario (V) que aparecen en documentos de la clase cj

Ahora, ¿que pasa si estoy clasificando la critica de una película y aparece la palabra "fantástica", pero dicha palabra no apareció nunca en el conjunto de documentos que usé para calcular estos parámetros?

Supongamos que las categorías son: Excelente, Buena, Regular, Mala, la probabilidad de que la critica pertenezca a alguna de las clases es cero ya que:

 cantidad ( "fantástica" | "Excelente")  = 0
.....
 cantidad ( "fantástica" | "Mala")  = 0

La forma de solucionar esto es con un viejo conocido: (Add-One) Laplace smoothing

Laplace smoothing aplicado a Naïve Bayes:


^          
P(wi | cj) = cantidad (wi | cj) +1         
                  ∑ (cantidad(w,cj) +1)
                   wV  


al igual que hicimos con los n-gramas en un post anterior, sumamos 1 a cada cantidad(wi,cj) calculada, y normalizamos agregando uno también por cada  w ∈ V, o lo que es lo mismo sumamos en el denominador la cantidad de palabras en el vocabulario:

^          
P(wi | cj) = cantidad (wi | cj)  + 1                
                  cantidad(w,cj) ) + |V|
                      wV  

Ahora sí, ya podemos calcular las  probabilidades previas, es decir los parámetros para este algoritmo utilizando, como dijimos, un conjunto de documentos de entrenamiento.

¿Qué pasa con las palabras desconocidas cuando estemos corriendo el algoritmo de clasificación de texto en producción?

Volviendo al ejemplo anterior, me encuentro con la palabra  "fantástica", la cual nunca apareció en los documentos de entrenamiento.

En este caso agrego la nueva palabra al vocabulario, y calculo su probabilidad dada una clase c como:


^          
P("fantástica" | c) =                     1                            
                                 ∑ cantidad(w,c) ) + |V+1|
                                     wV  

Notese que a V se le sumó 1 porque agrandamos el vocabulario al agregar la palabra: "fantástica"





No hay comentarios:

Publicar un comentario