with tutorial start sklearn scikit multiclass mastery machine learning learn how classify python machine-learning nlp

python - tutorial - sklearn classify text



Identificando mĂșltiples categorĂ­as y sentimientos asociados dentro del texto (2)

Si tiene un corpus de texto, ¿cómo puede identificar todas las categorías (de una lista de categorías predefinidas) y el sentimiento asociado (escritura positiva / negativa) con él?

Haré esto en Python, pero en este momento no estoy necesariamente buscando una solución específica para el idioma.

Veamos esta pregunta con un ejemplo para tratar de aclarar lo que estoy preguntando.

Si tengo un corpus completo de reseñas para productos, por ejemplo:

La Xbox One de Microsoft ofrece gráficos impresionantes y una lista sólida de títulos exclusivos de 2015. La consola de Microsoft actualmente supera a la PS4 con una mejor selección de aplicaciones de medios. La actualización de la consola del tablero de instrumentos de otoño de 2015 es una mejora notable. La consola tiene compatibilidad con versiones anteriores con alrededor de 100 títulos de Xbox 360, y esa lista está lista para crecer. La nueva interfaz de la Xbox One es aún más intrincada que la de la PS4. En general, la PS4 ofrece tiempos de instalación, gráficos y rendimiento ligeramente mejores en juegos multiplataforma. La Xbox One también se queda atrás de la PS4 en su selección de juegos indie. El legado de Kinect sigue siendo un defecto. Si bien la PS4 sigue siendo nuestra opción preferida en general en la carrera de consolas de juegos, las importantes correcciones de rumbo y exclusivas sólidas de la Xbox One la convierten en una alternativa atractiva.

Y tengo una lista de categorías predefinidas, por ejemplo:

  • Gráficos
  • Juego Jugar
  • Selección de juegos
  • Aplicaciones
  • Actuación
  • Irrelevante / Otro

Podría tomar mi gran corpus de críticas y desglosarlas por frase. Para cada oración en mis datos de entrenamiento puedo etiquetarlos a mano con las categorías apropiadas. El problema es que podría haber varias categorías en 1 oración.

Si fuera 1 categoría por oración, cualquier algoritmo de clasificación de scikit-learn haría el truco. Al trabajar con multiclases podría usar algo así como la clasificación de etiquetas múltiples.

Agregar el sentimiento es la parte más difícil. Identificar el sentimiento en una oración es una tarea bastante simple, pero si hay una mezcla de sentimientos en diferentes etiquetas que se vuelve diferente.

La frase de ejemplo "The Xbox One tiene una buena selección de juegos, pero el rendimiento es peor que el de PS4". Podemos identificar dos de nuestras categorías predefinidas (selección de juegos, rendimiento) pero tenemos un sentimiento positivo hacia la selección del juego y un sentimiento negativo hacia el rendimiento.

¿Cuál sería una forma de identificar todas las categorías en el texto (de nuestra lista predefinida) con su sentimiento asociado?


El único enfoque que podría pensar consistiría en un conjunto de pasos.

1) Usa alguna biblioteca para extraer entidades del texto y sus relaciones. Por ejemplo, consulte este artículo:

http://www.nltk.org/book/ch07.html

Al analizar cada texto, puede averiguar qué entidades tiene en cada texto y qué fragmentos de texto están relacionados con la entidad.

2) Utilice la extracción de sentimiento NLTKs para analizar fragmentos específicamente relacionados con cada entidad y obtener su opinión. Eso te da el sentimiento de cada entidad.

3) Después de eso, debe venir con una forma de mapear las entidades que puede enfrentar en el texto a lo que llama ''temas''. Desafortunadamente, no veo una manera de automatizarlo ya que claramente no define los temas de manera convencional, a través de la frecuencia de las palabras (como en los algoritmos de modelado de temas: LDA, NMF, etc.).


Un método simple es dividir su conjunto de entrenamiento en oraciones mínimas usando un analizador sintáctico y usarlo como entrada para el etiquetado y la clasificación del sentimiento.

Tu oración de ejemplo:

The Xbox One has a good selection of games but the performance is worse than the PS4

Usando el analizador de Stanford , tome las etiquetas S que no tienen etiquetas S para niños (y por lo tanto son oraciones mínimas) y vuelva a juntar las fichas. Para la oración anterior que te daría estos:

The Xbox One has a good selection of games the performance is worse than the PS4

El sentimiento dentro de una etiqueta S debe ser consistente la mayor parte del tiempo. Si oraciones como The XBox has good games and terrible graphics son comunes en su conjunto de datos, es posible que deba dividirlos en etiquetas NP, pero eso parece poco probable.

Con respecto al etiquetado, como mencionaste, cualquier método de clasificación multi etiqueta debería funcionar.

Para los métodos más sofisticados, hay mucha investigación sobre cómo unir los modelos de sentimiento de tema: una búsqueda de "modelo de sentimiento de tema" revela una gran cantidad de documentos y códigos. Aquí hay datos de entrenamiento de muestra de un documento que presenta un Modelo de Sentimiento de Tema Oculto que se ve en tu callejón. Observe cómo en la primera oración con etiquetas hay dos temas.

¡Espero que ayude!