SetFitABSA Análisis de Sentimiento Basado en Aspectos de Pocas Muestras utilizando SetFit

SetFitABSA Análisis de Sentimiento Basado en Aspectos con Pocas Muestras utilizando SetFit

SetFitABSA es una técnica eficiente para detectar el sentimiento hacia aspectos específicos dentro del texto.

El Análisis de Sentimiento Basado en Aspectos (ABSA, por sus siglas en inglés) es la tarea de detectar el sentimiento hacia aspectos específicos dentro del texto. Por ejemplo, en la frase “Este teléfono tiene una pantalla genial, pero su batería es demasiado pequeña”, los términos de aspecto son “pantalla” y “batería” y las polaridades de sentimiento hacia ellos son positiva y negativa, respectivamente.

ABSA es ampliamente utilizado por organizaciones para extraer información valiosa mediante el análisis de los comentarios de los clientes hacia aspectos de productos o servicios en varios dominios. Sin embargo, la etiquetación de datos de entrenamiento para ABSA es una tarea tediosa debido a la naturaleza detallada (a nivel de token) de identificar manualmente los aspectos dentro de las muestras de entrenamiento.

Intel Labs y Hugging Face se complacen en presentar SetFitABSA, un marco para el entrenamiento de modelos ABSA específicos de dominio con pocas muestras. SetFitABSA es competitivo e incluso supera a los modelos generativos como Llama2 y T5 en escenarios de pocas muestras.

En comparación con los métodos basados en LLM, SetFitABSA tiene dos ventajas únicas:

🗣 No se necesitan indicaciones: el aprendizaje contextual con LLMs requiere indicaciones hechas a mano, lo que hace que los resultados sean frágiles, sensibles a la redacción y dependientes de la experiencia del usuario. SetFitABSA prescinde por completo de las indicaciones generando embeddings completos directamente a partir de un pequeño número de ejemplos de texto etiquetados.

🏎 Rápido de entrenar: SetFitABSA solo requiere un puñado de muestras de entrenamiento etiquetadas; además, utiliza un formato de datos de entrenamiento simple, eliminando la necesidad de herramientas de etiquetado especializadas. Esto hace que el proceso de etiquetación de datos sea rápido y fácil.

En esta publicación del blog, explicaremos cómo funciona SetFitABSA y cómo entrenar tus propios modelos utilizando la biblioteca SetFit. ¡Vamos a sumergirnos!

¿Cómo funciona?

El proceso de entrenamiento en tres etapas de SetFitABSA

SetFitABSA se compone de tres pasos. El primer paso extrae los candidatos de aspectos del texto, el segundo paso devuelve los aspectos clasificando los candidatos de aspectos como aspectos o no aspectos, y el paso final asocia una polaridad de sentimiento a cada aspecto extraído. Los pasos dos y tres se basan en modelos SetFit.

Entrenamiento

1. Extracción de candidatos de aspectos

En este trabajo suponemos que los aspectos, que suelen ser características de productos y servicios, son en su mayoría sustantivos o compuestos de sustantivos (cadenas de sustantivos consecutivos). Utilizamos spaCy para tokenizar y extraer sustantivos/compuestos de sustantivos de las oraciones en el conjunto de entrenamiento (pocas muestras). Dado que no todos los sustantivos/compuestos de sustantivos extraídos son aspectos, nos referimos a ellos como candidatos de aspectos.

2. Clasificación de aspectos/no aspectos

Ahora que tenemos los candidatos de aspectos, necesitamos entrenar un modelo para poder distinguir entre los sustantivos que son aspectos y los que no son aspectos. Para este propósito, necesitamos muestras de entrenamiento con etiquetas de aspecto/no aspecto. Esto se hace considerando los aspectos en el conjunto de entrenamiento como aspectos “verdaderos”, mientras que otros aspectos candidatos no superpuestos se consideran no aspectos y, por lo tanto, se etiquetan como “falsos”:

  • Frase de entrenamiento: “Los camareros no son amigables, pero la pasta con crema está fuera de este mundo”.
  • Tokenizado: [Los, camareros, no, son, amigables, pero, la, pasta, con, crema, está, fuera, de, este, mundo, .]
  • Aspectos candidatos extraídos: [Los, camareros, no, son, amigables, pero, la, pasta, con, crema, está, fuera, de, este, mundo, .]
  • Etiquetas “gold” del conjunto de entrenamiento, en formato BIO: [B-ASP, O, O, O, O, O, B-ASP, I-ASP, O, O, O, O, O, O, B-ASP, O]
  • Etiquetas generadas de aspecto/no aspecto: [Los, camareros, no, son, amigables, pero, la, pasta, con, crema, está, fuera, de, este, mundo, .]

Ahora que hemos etiquetado a todos los candidatos de aspectos, ¿cómo lo utilizamos para entrenar el modelo de clasificación de aspectos candidatos? En otras palabras, ¿cómo utilizamos SetFit, un marco de clasificación de oraciones, para clasificar tokens individuales? Bueno, aquí está el truco: cada candidato de aspecto se concatena con toda la oración de entrenamiento para crear una instancia de entrenamiento utilizando la siguiente plantilla:

aspecto_candidato:oración_entrenamiento

Aplicando la plantilla al ejemplo anterior, generaremos 3 instancias de entrenamiento: dos con etiquetas Verdadero que representan instancias de entrenamiento de aspecto, y una con etiqueta Falso que representa una instancia de entrenamiento que no es de aspecto:

Después de generar las instancias de entrenamiento, estamos listos para utilizar el poder de SetFit para entrenar un clasificador binario específico de dominio y de pocos datos para extraer aspectos de una reseña de texto de entrada. Este será nuestro primer modelo SetFit ajustado.

3. Clasificación de la polaridad del sentimiento

Una vez que el sistema extrae los aspectos del texto, necesita asociar una polaridad de sentimiento (positiva, negativa o neutra) a cada aspecto. Para este propósito, utilizamos un segundo modelo SetFit y lo entrenamos de manera similar al modelo de extracción de aspectos, como se ilustra en el siguiente ejemplo:

  • Oración de entrenamiento: “Los meseros no son amigables pero la pasta cremosa es deliciosa.”
  • Tokenizada: [Los, meseros, no, son, amigables, pero, la, pasta, cremosa, es, deliciosa, .]
  • Etiquetas verdaderas del conjunto de entrenamiento: [NEG, O, O, O, O, O, POS, POS, O, O, O, O, O, .]

Observa que, contrario al modelo de extracción de aspectos, no incluimos los elementos que no son aspectos en este conjunto de entrenamiento, ya que el objetivo es clasificar la polaridad de sentimiento hacia aspectos reales.

Realizando inferencia

En el momento de la inferencia, la oración de prueba pasa por la fase de extracción de candidatos de aspectos en spaCy, lo que resulta en instancias de prueba que utilizan la plantilla aspecto_candidato:oración_prueba. Después, los elementos que no son aspectos son filtrados por el clasificador aspecto/no aspecto. Por último, los aspectos extraídos se alimentan al clasificador de polaridad de sentimiento que predice la polaridad de sentimiento por aspecto.

En la práctica, esto significa que el modelo puede recibir texto normal como entrada y producir aspectos y sus sentimientos:

Entrada del modelo:

"sus platillos de cena son fantásticos."

Salida del modelo:

[{'span': 'platillos de cena', 'polarity': 'positiva'}]

Benchmarks

SetFitABSA se sometió a pruebas comparativas con trabajos recientes de vanguardia hechos por AWS AI Labs y Salesforce AI Research que ajustan T5 y GPT2 mediante enunciados. Para obtener una imagen más completa, también comparamos nuestro modelo con el modelo Llama-2-chat que utiliza el aprendizaje basado en el contexto. Utilizamos los populares conjuntos de datos ABSA Laptop14 y Restaurant14 de la Evaluación Semántica Challenge 2014 (SemEval14). SetFitABSA se evalúa tanto en la tarea intermedia de extracción de términos de aspecto (SB1) como en la tarea completa ABSA de extracción de aspecto junto con predicciones de polaridad de sentimiento (SB1+SB2).

Comparación de tamaño de modelo

Nota que para la tarea SB1, SetFitABSA tiene 110M de parámetros, para SB2 tiene 110M de parámetros, y para SB1+SB2 SetFitABSA consta de 220M de parámetros.

Comparación de desempeño

Vemos una clara ventaja de SetFitABSA cuando el número de instancias de entrenamiento es bajo, a pesar de ser 2 veces más pequeño que T5 y 3 veces más pequeño que GPT2-medium. Incluso en comparación con Llama 2, que es 64 veces más grande, el rendimiento es igual o mejor.

SetFitABSA vs GPT2

SetFitABSA vs T5

Tenga en cuenta que para una comparación justa, realizamos comparaciones con SetFitABSA exactamente con las divisiones de conjuntos de datos utilizadas por las diversas bases de referencia (GPT2, T5, etc.).

SetFitABSA vs Llama2

Nos damos cuenta de que aumentar el número de muestras de entrenamiento en contexto para Llama2 no resultó en un rendimiento mejorado. Este fenómeno ya se ha demostrado anteriormente para ChatGPT, y creemos que debería investigarse más a fondo.

Entrenando tu propio modelo

SetFitABSA es parte del marco SetFit. Para entrenar un modelo ABSA, comience instalando setfit con la opción absa habilitada:

python -m pip install -U "setfit[absa]"

Además, debemos instalar el modelo spaCy en_core_web_lg:

python -m spacy download en_core_web_lg

Continuamos preparando el conjunto de entrenamiento. El formato del conjunto de entrenamiento es un Dataset con las columnas text, span, label, ordinal:

  • text: La oración o texto completo que contiene los aspectos.
  • span: Un aspecto de la oración completa. Puede ser varias palabras. Por ejemplo: “comida”.
  • label: La etiqueta (polaridad) correspondiente al aspecto. Por ejemplo: “positivo”. Los nombres de las etiquetas pueden elegirse arbitrariamente al etiquetar los datos de entrenamiento recopilados.
  • ordinal: Si el aspecto ocurre varias veces en el texto, entonces este ordinal representa el índice de esas ocurrencias. A menudo, esto es simplemente 0, ya que cada aspecto generalmente aparece solo una vez en el texto de entrada.

Por ejemplo, el texto de entrenamiento “Restaurante con comida maravillosa pero el peor servicio que he visto” contiene dos aspectos, por lo que agregaremos dos líneas a la tabla del conjunto de entrenamiento:

Una vez que tengamos listo el conjunto de datos de entrenamiento, podemos crear un entrenador de ABSA y ejecutar el entrenamiento. Los modelos SetFit son bastante eficientes para entrenar, pero como SetFitABSA implica dos modelos entrenados secuencialmente, se recomienda utilizar una GPU para el entrenamiento para mantener el tiempo de entrenamiento bajo. Por ejemplo, el siguiente script de entrenamiento entrena un modelo completo SetFitABSA en aproximadamente 10 minutos con la GPU gratuita Google Colab T4.

from datasets import load_datasetfrom setfit import AbsaTrainer, AbsaModel# Crear un conjunto de entrenamiento como se describe anteriormente# Por conveniencia utilizaremos un conjunto de datos ya preparado aquitrain_dataset = load_dataset("tomaarsen/setfit-absa-semeval-restaurants", split="train[:128]")# Crear un modelo con un sentence transformer elegido del Hubmodel = AbsaModel.from_pretrained("sentence-transformers/paraphrase-mpnet-base-v2")# Crear un entrenador:trainer = AbsaTrainer(model, train_dataset=train_dataset)# Ejecutar el entrenamiento:trainer.train()

¡Eso es todo! Hemos entrenado un modelo ABSA específico del dominio. Podemos guardar nuestro modelo entrenado en el disco o subirlo al Hugging Face Hub. Tenga en cuenta que el modelo contiene dos submodelos, por lo que se les asigna su propia ruta:

model.save_pretrained(    "models/setfit-absa-model-aspect",     "models/setfit-absa-model-polarity")# omodel.push_to_hub(    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")

Ahora podemos utilizar nuestro modelo entrenado para inferencia. Comenzamos cargando el modelo:

from setfit import AbsaModelmodel = AbsaModel.from_pretrained(    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-aspect",    "tomaarsen/setfit-absa-paraphrase-mpnet-base-v2-restaurants-polarity")

Luego, utilizamos la API predict para ejecutar la inferencia. La entrada es una lista de cadenas de texto, cada una representa una reseña textual:

preds = model.predict([    "La mejor pizza fuera de Italia y realmente sabrosa.",    "Las variaciones de comida son excelentes y los precios son absolutamente justos.",    "Desafortunadamente, debes esperar un poco y obtener una nota con un número de espera si está muy lleno."])print(preds)# [#     [{'span': 'pizza', 'polarity': 'positive'}],#     [{'span': 'variaciones de comida', 'polarity': 'positive'}, {'span': 'precios', 'polarity': 'positive'}],#     [{'span': 'tiempo de espera', 'polarity': 'neutral'}, {'span': 'número de espera', 'polarity': 'neutral'}]# ]

Para obtener más detalles sobre las opciones de entrenamiento, guardar y cargar modelos, e inferencia, consulta la documentación de SetFit.

Referencias

  • Maria Pontiki, Dimitris Galanis, John Pavlopoulos, Harris Papageorgiou, Ion Androutsopoulos y Suresh Manandhar. 2014. SemEval-2014 tarea 4: Análisis de sentimiento basado en aspectos. En Actas del 8º taller internacional de evaluación semántica (SemEval 2014), páginas 27–35.
  • Siddharth Varia, Shuai Wang, Kishaloy Halder, Robert Vacareanu, Miguel Ballesteros, Yassine Benajiba, Neha Anna John, Rishita Anubhai, Smaranda Muresan, Dan Roth, 2023 “Afinación de instrucciones para análisis de sentimiento basado en aspectos de pocos ejemplos”. https://arxiv.org/abs/2210.06629
  • Ehsan Hosseini-Asl, Wenhao Liu, Caiming Xiong, 2022. “Modelo de lenguaje generativo para análisis de sentimiento basado en aspectos de pocos ejemplos”. https://arxiv.org/abs/2204.05356
  • Lewis Tunstall, Nils Reimers, Unso Eun Seo Jo, Luke Bates, Daniel Korat, Moshe Wasserblat, Oren Pereg, 2022. “Aprendizaje de pocos ejemplos eficiente sin indicaciones”. https://arxiv.org/abs/2209.11055

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Conoce el modelo GOAT-7B-Community un modelo de IA ajustado finamente a partir del modelo LLaMA-2 7B en un conjunto de datos recopilados de la aplicación GoatChat.

Recientemente, científicos del Laboratorio de Investigación de IA presentaron el modelo GOAT-7B-Community, que mejora...

Inteligencia Artificial

Ajuste fino rápido y rentable de LLaMA 2 con AWS Trainium

Los grandes modelos de lenguaje (LLMs) han capturado la imaginación y la atención de desarrolladores, científicos, te...

Investigación

Usando Inteligencia Artificial, científicos encuentran un medicamento que podría combatir infecciones resistentes a los medicamentos.

El algoritmo de aprendizaje automático identificó un compuesto que mata Acinetobacter baumannii, una bacteria que ace...

Inteligencia Artificial

Investigadores del MIT presentan LILO un marco neuro-simbólico para aprender bibliotecas interpretables para la síntesis de programas

Los grandes modelos de lenguaje (LLMs) se están volviendo cada vez más expertos en programación en varios contextos, ...

Inteligencia Artificial

Stability AI lanza el primer modelo japonés de visión y lenguaje

La creación y formulación de un modelo único y completo capaz de manejar una variedad de tareas definidas por el usua...