En este artículo, aprenderá cómo scikit-ollama une la interfaz scikit-learn con modelos de Ollama que se ejecutan localmente para realizar una clasificación de texto de disparo cero; no se requiere API en la nube.
Los temas que cubriremos incluyen:
Qué es scikit-ollama y cómo se relaciona con scikit-llm y el ecosistema scikit-learn. Cómo cargar un conjunto de datos de opiniones de reseñas de películas y crear una instancia de un clasificador de disparo cero respaldado por un modelo local de Llama 3. Cómo funciona el patrón de ajuste/predicción en el contexto de la clasificación basada en LLM de tiro cero y qué hace realmente bajo el capó.
No perdamos más tiempo.
Introducción
La integración de modelos de lenguaje grande (LLM) en los flujos de trabajo tradicionales de aprendizaje automático no solo es posible hoy en día, sino que también está transformando la forma en que trabajamos con estos modelos, tanto en términos de costo como de seguridad. Depender únicamente de API comerciales en la nube con cuellos de botella de cuotas y tráfico, así como preocupaciones de privacidad de datos, ya no es el único enfoque, y scikit-ollama tiene mucho que decir al respecto. Esta biblioteca, basada en gran medida en scikit-llm, cierra la brecha entre la sintaxis amigable de scikit-learn utilizada para entrenar y utilizar modelos clásicos de aprendizaje automático y el poder de los LLM, específicamente modelos gratuitos instalados localmente que se ejecutan en Ollama.
Este artículo explora cómo configurar esta integración para crear un clasificador de disparo cero muy práctico para la predicción de sentimientos en reseñas de películas, utilizando un modelo Llama 3 local que se ejecuta en su máquina.
Tutorial paso a paso
Primero, dado que scikit-ollama solo es compatible con Python 3.9 o superior, verifique la versión de Python actualmente instalada en su entorno de desarrollo local o virtual; El mío es un entorno virtual configurado dentro de Visual Studio Code:
Si tiene Python 3.8 o inferior, asegúrese de instalar o cambiar a una versión más reciente de Python antes de continuar. Luego instale scikit-ollama:
instalación de pip scikit-ollama
pepita instalar scikit–ollama
Una vez instalado, podemos comenzar a codificar.
Scikit-LLM proporciona su propio catálogo de conjuntos de datos en su módulo de conjuntos de datos. Usaremos uno de esos conjuntos de datos basados en texto, específicamente uno para la clasificación de sentimientos de reseñas de películas. Este es el código necesario para cargar los datos y mostrar una reseña de ejemplo junto con su etiqueta de opinión asociada:
from skllm.datasets import get_classification_dataset # Cargando un conjunto de datos de análisis de sentimiento de demostración que contiene reseñas de películas # Las etiquetas esperadas son: “positiva”, “negativa”, “neutral” X, y = get_classification_dataset() print(f”Texto de muestra: {X[0]} \nEtiqueta: {y[0]}”)
de habilidad.conjuntos de datos importar obtener_clasificación_conjunto de datos
# Cargando un conjunto de datos de análisis de sentimiento de demostración que contiene reseñas de películas
# Las etiquetas esperadas son: “positiva”, “negativa”, “neutral”
incógnita, y = get_classification_dataset()
imprimir(F“Texto de muestra: {X[0]} \nEtiqueta: {y[0]}”)
Producción:
Texto de muestra: Me quedé absolutamente impresionado con las actuaciones de ‘Summer’s End’. Las actuaciones fueron de primera y la trama me atrapó de principio a fin. Una experiencia cinematográfica realmente cautivadora que recomendaría ampliamente. Etiqueta: positivo
Muestra texto: I era absolutamente estropeado lejos por el actuaciones en ‘Verano’s Fin‘. El interino era arriba–muesca, y el trama tenía a mí agarrado de comenzar a finalizar. A realmente cautivador cinematográfico experiencia eso I quería muy recomendar.
Etiqueta: positivo
Ahora, scikit-ollama en sí. Necesitará tener Ollama instalado localmente en su máquina. Siga las instrucciones de este artículo para hacerlo y asegúrese de instalar el modelo que desea utilizar para esta guía. Para extraer un modelo, ejecute el siguiente comando en su terminal:
El siguiente código importa la clase ZeroShotOllamaClassifier de scikit-ollama para crear una instancia de un clasificador de sentimiento compatible respaldado por un modelo local de Ollama: llama3:latest. Asegúrese de tener este modelo instalado en su máquina antes de continuar:
from skollama.models.ollama.classification.zero_shot import ZeroShotOllamaClassifier # Inicializando el clasificador con nuestro modelo local de Ollama: llama3:latest clf = ZeroShotOllamaClassifier(model=”llama3:latest”)
de skollamá.modelos.ollama.clasificación.tiro_cero importar Clasificador ZeroShotOllama
# Inicializando el clasificador con nuestro modelo local de Ollama: llama3:latest
clf = Clasificador ZeroShotOllama(modelo=“llama3:último”)
Una aclaración muy importante sobre lo que acabamos de hacer. llama3:latest es un LLM de propósito general, creado originalmente para hacer mucho más que clasificar texto: puedes chatear con él, generar ideas y más. Entonces, ¿por qué lo usamos para crear una instancia de un clasificador de tiro cero? Al hacerlo, scikit-ollama, junto con scikit-llm bajo el capó, reformula nuestra tarea de clasificación prevista en un mensaje de generación de texto que está sintácticamente restringido, de modo que el modelo local genere solo lo que se necesita, actuando como lo haría un modelo clásico de aprendizaje automático en términos de formato de salida, sin dejar de aplicar el poderoso razonamiento basado en el lenguaje para el que fue creado.
Este es el núcleo del valor de scikit-ollama y scikit-llm: unir el poder de los LLM con la simplicidad de la interfaz scikit-learn para tareas predictivas como la clasificación.
Es hora de aplicar el ritual tradicional de dos etapas del aprendizaje automático: ajustar y predecir. Si bien el ajuste de un modelo normalmente implica actualizar los pesos en un conjunto de datos etiquetado, en el contexto de la clasificación basada en LLM de tiro cero no hay una actualización de peso real. La llamada fit() se utiliza únicamente para registrar las etiquetas de clasificación candidatas, guiando el modelo para el aprendizaje en contexto:
# “Ajustar” el modelo se reduce a simplemente proporcionar la lista de etiquetas candidatas clf.fit(Ninguno, [“positive”, “negative”, “neutral”])
# “Ajustar” el modelo se reduce simplemente a proporcionar la lista de etiquetas candidatas
clf.adaptar(Ninguno, [“positive”, “negative”, “neutral”])
Al llamar al método predict() y pasar un conjunto de revisiones de texto, la instancia local de Ollama procesa cada entrada como un mensaje y analiza la salida para garantizar que se asigne a una de las etiquetas de clasificación de disparo cero, todo bajo el capó.
El siguiente código genera predicciones en el conjunto de datos e imprime los primeros tres resultados. Tenga en cuenta que en la primera ejecución, se espera un breve retraso en la carga mientras se inicializa el modelo, acompañado de una barra de progreso:
# Generar y mostrar predicciones en nuestro conjunto de datos predicciones = clf.predict(X) para texto, predicción en zip(X[:3]predicciones[:3]): print(f”Texto: ‘{texto}'”) print(f”Sentimiento previsto: {predicción}\n”)
# Generar y mostrar predicciones en nuestro conjunto de datos.
predicciones = clf.predecir(incógnita)
para texto, predicción en cremallera(incógnita[:3], predicciones[:3]):
imprimir(F“Texto: ‘{texto}'”)
imprimir(F“Sentimiento previsto: {predicción}\n”)
Producción:
Texto: ‘Me quedé absolutamente impresionado por las actuaciones en ‘Summer’s End’. Las actuaciones fueron de primera y la trama me atrapó de principio a fin. Una experiencia cinematográfica verdaderamente cautivadora que recomendaría ampliamente”. Sentimiento previsto: positivo Texto: ‘Los efectos especiales de ‘Star Battles: Nebula Conflict’ estaban fuera de este mundo. Me sentí como si realmente estuviera en el espacio. La historia fue increíblemente atractiva y me dejó con ganas de más. Excelente película.” Sentimiento previsto: positivo Texto: ”The Lost Symphony’ fue una clase magistral sobre desarrollo de personajes y narración de historias. La partitura era inquietantemente hermosa y complementaba perfectamente las escenas intensas y emocionales. Felicitaciones al director y al elenco por crear una obra maestra de este tipo”. Sentimiento previsto: positivo
Texto: ‘Me quedé absolutamente impresionado por las actuaciones en ‘Verano‘enviar’. El interino era arriba–muesca, y el trama tenía a mí agarrado de comenzar a finalizar. A realmente cautivador cinematográfico experiencia eso I quería muy recomendar.‘
Sentimiento previsto: positivo
Texto: ‘El especial efectos en ‘Batallas Estelares: Conflicto de Nebulosas’ eran afuera de este mundo. I sintió como I era de hecho en espacio. El historia era increíblemente atractivo y izquierda a mí falto más. Excelente película.‘
Sentimiento previsto: positivo
Texto: ‘‘La sinfonía perdida’ era a clase magistral en personaje desarrollo y contar historias. El puntaje era inquietantemente hermoso y complementado el intenso, emocional escenas perfectamente. Prestigio a el director y elenco para creando semejante a obra maestra.‘
Previsto Sentimiento: positivo
El modelo local genera solo lo que debe, actuando como lo haría un modelo clásico de aprendizaje automático en términos de formato de salida, al mismo tiempo que aplica el poderoso razonamiento interno basado en el lenguaje para el que fue creado.
Acaba de aprovechar un modelo local de Ollama para realizar una tarea de inferencia específica, clasificación de texto, completamente dentro de los límites de su propia máquina.
Concluyendo
Este artículo mostró cómo cambiar las API LLM basadas en la nube por modelos locales de Ollama para realizar tareas de inferencia sin tarifas de suscripción ni datos de texto confidenciales que salgan de su máquina. El ingrediente clave: la biblioteca scikit-ollama, que encapsula elegantemente esta integración local y la pone a disposición como un canal más de aprendizaje de scikit.