viernes, 16 de mayo de 2014

Análisis de Sentimientos: Creación de un lexicón propio

En ocasiones conviene armar un Lexicón propio para un dominio especifico antes que usar uno ya existente. Podemos empezar por crear nuestro Lexicón a partir de:

  •  un puñado de ejemplos previamente clasificados
  • algunas reglas escritas a mano que identifiquen ciertos patrones en una frase.


Pero no necesariamente será suficiente, entonces la pregunta que nos hacemos es: ¿Cómo expandir dicho Lexicón inicial?


Algoritmo de Hatzivassiloglou y McKeown para la ampliación de un Lexicón


Hatzivassiloglou y McKeown [1] idearon un método bastante intuitivo para identificar la polaridad de una palabra. Básicamente buscaron que otras palabras aparecían vinculadas a palabras ya conocidas. El razonamiento es el siguiente: si una palabra con polaridad conocida aparece unida por la conjunción "y" (and en inglés) a una segunda palabra concluyo que la nueva palabra tendrá una polaridad similar. En cambio si vienen unidas por la conjunción "pero" (but en inglés) la polaridad de la nueva palabra será opuesta.

Adjetivos unidos por "y" tienen la misma polaridad:

  • Justo y legitimo
  • corrupto y brutal



Adjetivos unidos por "pero" tienen distinta polaridad:

  • justo pero brutal
  • corrupto pero legitimo
  • hermosa pero malvada

Hay excepciones, pero son una minoría de casos:

  • justo y brutal

Teniendo esta idea en mente, idearon un algoritmo en 4 pasos:

1)  Construyeron un Lexicón a mano con 1336 adjetivos: 657 positivos y 679 negativos
2)  Buscaron en Google cada uno de los adjetivos con la formula: “was <adjetivo> and” y recolectaron la palabra que seguía a continuación. Luego lo repitieron con "but" en vez de "and".
Ejemplo: "was nice and". 

3) Construyeron un mapa que vinculaba las palabras similares entre sí, mostrando también las que tenían sentido opuesto:
4) Finalmente buscaron una forma de separar el mapa creado intentando que queden dos conjuntos bien diferenciados:


Si bien lograron ampliar considerablemente el Lexicón original, el nuevo Lexicón contenía algunos errores, es decir palabras mal catalogadas. Es por ello que este algoritmo necesariamente necesita de un paso extra que consista en la revisión de los datos obtenidos.


Algoritmo de Turney para obtener la polaridad de frases

En 2002, Turney [2] elaboró un algoritmo para clasificar criticas a partir de la polaridad de frases, no solo de palabras. Este algoritmo se puede desglosar en 3 pasos principales:

1. Extraer frases de opiniones/criticas (reviews) y armar un Lexicón de frases
2. Aprender la polaridad de cada frase
3. Puntuar las críticas según el promedio de las polaridades de sus frases



1. Extracción de frases: ¿Qué frases extraer?



Turney no extrajo cualquier frase, sino que usó solo frases de 2 palabras, siempre que estas coincidiesen con alguno de los siguientes patrones:




Primer Palabra Segunda Palabra Tercer Palabra (no se extrajo)
Adjetivo Sustantivo (plural o singular) Cualquier palabra
Adverbio Adjetivo No Sustantivo
Adjetivo Adjetivo No Sustantivo
Sustantivo (plural o singular) Adjetivo No Sustantivo
Adverbio Verbos Cualquier palabra

La tercer palabra no se extrajo, solo se usó para fijar el patrón de coincidencia.

2. Polaridad de las frases

Para verificar la polaridad de las frases, se verificó cuan cerca aparecían estas de palabras con polaridad ya conocida como por ejemplo: "excelente" y "pobre". La idea detrás de esto es que la co-ocurrencia de una frase junto con la palabra "excelente" o bien con la palabra "pobre" no es casualidad, sino que la frase misma tiene una carga de valor, una polaridad. 

Entonces para medir esta co-ocurrencia, esta relación entre una frase y una palabra conocida ("excelente" o "pobre") usamos un concepto de teoría de la información: Pointwise mutual information.

Pointwise mutual information:

El PMI de un par de valores x e y pertenecientes a dos variables aleatorias discretas: X e Y respectivamente, cuantifica la discrepancia entre la probabilidad de su coincidencia dada su distribución conjunta y su distribución individual y asumiendo su independencia. Matemáticamente:

PMI(X,Y) = Log2      P(x,y)    
                    P(x)P(y)

En otras palabras: cuanto más posible es que el evento X aparezca vinculado al evento Y a que aparezcan ambos de forma independiente entre sí.

Pointwise mutual information entre dos palabras:

PMI(palabra1,palabra2) = Log2   P(palabra1,palabra2)    
                               P(palabra1)P(palabra2)

Turney utilizó el buscador Altavista.com para obtener estos valores, pero la forma que utilicemos para contar estos resultados dependerá de nuestro conjunto de datos de entrenamiento. Entonces:

P(palabra) = cantidad de resultados para "palabra"
                         cantidad total

P(palabra) = #palabra
                 N


P(palabra1, palabra2) =

=  cantidad de resultados para "palabra1 NEAR palabra2"
                (cantidad total)^2


P(palabra1, palabra2) = #(palabra1 NEAR palabra2)
                                  N^2

NOTA: NEAR significa "cerca de", esto se explicó en detalle en el postconsultas de frases e índices posicionales indica que palabra1 apareció a no más de N palabras de distancia de palabra2 en un texto dado.

PMI(palabra1, palabra2) =

                   #(palabra1 NEAR palabra2)
=Log2                       N^2                                                    #(palabra1) #(palabra2)                                                    N*N

Los N se cancelan, y queda:

PMI(palabra1, palabra2) =  Log2 (  #(palabra1 NEAR palabra2) )
                                    #(palabra1) #(palabra2)
                     
Calculando la polaridad de una frase:

Polaridad(frase) = PMI(frase,"excelente") -  PMI(frase,"pobre")

= Log2 ( #(frase NEAR excelente) )- Log2( #(frase NEAR pobre) ) 
           #(frase ) #(excelente)        #(frase ) #(pobre)

Por propiedad de lo logaritmos:

= Log2   #(frase NEAR excelente #(frase ) #(pobre) 
           #(frase ) #(excelente#(frase NEAR pobre)       
Simplificando:

= Log2   #(frase NEAR excelente) #(pobre) 
          #(frase NEAR pobre)#(excelente


3. Puntuar las críticas según el promedio de las polaridades de sus frases

Este es el paso más sencillo del algoritmo y no merece demasiada explicación, basta con decir que hay que armar una lista de frases y asociarles el valor obtenido con los cálculos anteriores para luego descomponer las criticas en sus frases y realizar el promedio.

Les dejo a continuación algunos ejemplos frases obtenidas con este método:

Frase Polaridad
online service    2.8
online experience 2.3
low fees 0.33
inconveniently located -1.5
Average 0.32

Vale aclarar que estas frases fueron extraídas solo de conjuntos de criticas positivas y sin embargo, podemos ver que algunas frases tienen una polaridad negativa.

Conclusiones sobre este algoritmo:

En experimentos con 410 opiniones de Epinions, el algoritmo alcanzó una exactitud promedio de
74%.  Al parecer las críticas cinematográficas resultan difíciles de clasificar para este algoritmo ya que obtuvo una precisión del 66%, sin embargo para criticas sobre bancos y automóviles obtuvo una precisión de entre el 80% y el 84%. Para opiniones sobre viajes obtuvo un valor intermedio.



Referencias:

[1]      Hatzivassiloglou, V., & McKeown, K. R. (1997, July). Predicting the semantic orientation of adjectives. In Proceedings of the 35th Annual Meeting of the Association for Computational Linguistics and Eighth Conference of the European Chapter of the Association for Computational Linguistics (pp. 174-181). Association for Computational Linguistics.


[2]     Turney, Peter D. "Thumbs up or thumbs down?: semantic orientation applied to unsupervised classification of reviews." Proceedings of the 40th annual meeting on association for computational linguistics. Association for Computational Linguistics, 2002.


No hay comentarios:

Publicar un comentario