La mayoría de nosotros hemos utilizado aprendizaje supervisado para nuestros casos de uso en ML o IA, así que somos plenamente conscientes de lo importante que es tener un buen conjunto de datos bien etiquetados/anotados. Pero muchas veces no disponemos de datos públicos para nuestra aplicación en concreta, y etiquetar datos a mano puede ser inabordable. Para solucionar esto, hoy echaremos un vistazo al pipeline zero-shot de la librería transformers de Huggingface.
Si no la teníamos ya instalada, lo primero de todo es realizarlo, por ejemplo a través de pip
!pip install git+https://github.com/huggingface/transformers.git
Ahora ya solo tenemos que definir el objeto pipeline con el argumento zero-shot-classification y el modelo correspondiente
from transformers import pipeline
classifier = pipeline("zero-shot-classification",
model="vicgalle/xlm-roberta-large-xnli-anli")
Existen dos formas para hacer la clasificación zero-shot:
- Por defecto. Le pasamos la secuencia de texto a clasificar, así como una lista con las etiquetas candidatas. Entonces, el clasificador del pipeline nos devolverá una puntuación por cada etiqueta candidata, que se puede interpretar como una probabilidad, pues suma 1 a lo largo de todas las etiquetas.
sequence = "¿A quién vas a votar en 2020?"
candidate_labels = ["política", "salud", "economía"]
classifier(sequence, candidate_labels)
Como vemos en el siguiente output, la etiqueta o clase pronosticada sería la de política con un 84% de probabilidad
2. Usando el atributo multiclass. Si lo especificamos a True, ahora la puntuación de cada etiqueta es independiente de las demás, pero siempre permanecerá entre 0 y 1. Esto es útil en el caso de que nuestro texto pueda pertenecer a múltiples categorías, como muestra el siguiente ejemplo, igual que el anterior pero añadiendo la nueva categoría de elecciones.
sequence = "¿A quién vas a votar en 2020?"
candidate_labels = ["política", "salud", "economía", "elecciones"]
classifier(sequence, candidate_labels, multiclass=True)
Ahora el modelo correctamente predice que las categorías más probables para el texto son política y elecciones.