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.
- Cómo las naciones están perdiendo una carrera global para abordar los daños de la inteligencia artificial.
- Red de robots monitoriza tuberías utilizando sensores de ondas acústicas
- Janne Aas-Jakobsen, Fundadora y CEO de CONSIGLI AS Papel de la IA en Ingeniería y Construcción, Tecnologías Sostenibles, Expansión Global, Perspectivas Empresariales e Innovación Tecnológica.
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!
Was this article helpful?
93 out of 132 found this helpful
Related articles
- Primer aniversario de ChatGPT dando forma al futuro de la interacción AI
- Es probable que las grandes empresas tecnológicas establezcan la política de inteligencia artificial en Estados Unidos. No podemos permitir que eso suceda’.
- Top 40+ Herramientas Generativas de IA (Diciembre 2023)
- Investigadores de Microsoft Research y Georgia Tech revelan los límites estadísticos de las alucinaciones en los modelos de lenguaje
- Transformando los servicios BFSI utilizando el poder de las características generativas de la IA en GCP
- Inaugurando la ciencia de datos en América Latina con Favio Vázquez
- ‘Eres un Experto’ No es tan mágica como crees la sugerencia de IA