En este artículo, aprenderá cómo utilizar modelos de lenguaje alojados localmente a través de Ollama para realizar tareas de clasificación de texto, todo sin gastar un centavo en llamadas API.
Los temas que cubriremos incluyen:
Cómo instalar Ollama y ejecutar modelos de código abierto como Llama 3, Mistral y Gemma para ejecutarlos localmente en su máquina. Cómo configurar la biblioteca Scikit-LLM para enrutar solicitudes a un punto final local de Ollama en lugar de a una API de nube paga. Cómo construir un clasificador de texto de disparo cero utilizando un modelo de lenguaje grande local y scikit-LLM en un flujo de trabajo familiar estilo scikit-learn.
Uso de Scikit-LLM con LLM de código abierto
Introducción
Este artículo le enseñará cómo realizar una tarea de lenguaje como la clasificación de texto mediante la integración de modelos de lenguaje grandes (LLM) alojados localmente de tamaño manejable, como Mistral, Gemma y Llama 3: todo gratis gracias a Ollama, un repositorio gratuito para LLM locales, y la biblioteca Scikit-LLM Python.
Requisito previo: instalación de Ollama
Se recomienda utilizar un IDE para ejecutar este tutorial, ya que necesitaremos interactuar con su versión de Ollama instalada localmente desde allí. ¿Nuevo en Ollama? Entonces te recomiendo que consultes este artículo primero. No obstante, aquí hay un resumen de qué hacer en la terminal de línea de comando local para descargar un LLM local después de instalar Ollama en su computadora.
# Pulling Llama 3 (uno de los modelos descargables más populares de Ollama) ollama run llama3 # O alternativamente, intenta tirar de Mistral ollama run mistral # O, si hoy te sientes quisquilloso, simplemente tira de Gemma ollama run gemma de Google
# Pulling Llama 3 (uno de los modelos descargables más populares de Ollama)
ollama correr llama3
# O alternativamente, intenta tirar de Mistral
ollama correr mistral
# O, si hoy te sientes quisquilloso, simplemente utiliza Gemma de Google.
ollama correr gema
Una vez que vea la ventana de interacción del modelo en la terminal, puede escribir “/bye” para mantenerlo ejecutándose en segundo plano, esperando llamadas API. Mientras tanto, en un proyecto recién creado en su IDE de Python, necesitará tener instaladas las siguientes bibliotecas:
instalación de pip scikit-learn pandas scikit-llm
pepita instalar scikit–aprender pandas scikit–llm
Si encuentra el error “Módulo no encontrado” al ejecutar el código Python, intente instalar las dependencias anteriores una por una.
¡Bueno! Es hora de completar nuestro archivo de código Python (¡nómbralo como desees!), paso a paso. Primero, por supuesto, vienen las importaciones. Uno de ellos es la clase ZeroShotGPTClassifier. Similar al scikit-learn clásico, esta es una clase dedicada a entrenar y usar un modelo para la clasificación de tiro cero: concretamente, un LLM de Ollama.
importar pandas como pd desde sklearn.model_selection importar train_test_split desde skllm.config importar SKLLMConfig desde skllm.models.gpt.classification.zero_shot importar ZeroShotGPTClassifier
importar pandas como PD
de aprender.selección_modelo importar tren_prueba_split
de habilidad.configuración importar SKLLMConfig
de habilidad.modelos.gpto.clasificación.tiro_cero importar Clasificador ZeroShotGPT
A continuación, necesitamos aplicar un par de configuraciones específicas para poder comunicarnos con Ollama.
# Use esto para decirle a Scikit-LLM que enrute las solicitudes de la nube hacia su puerto local predeterminado de Ollama SKLLMConfig.set_gpt_url(“http://localhost:11434/v1”) # Scikit-LLM necesita, de forma predeterminada, una clave para pasar las comprobaciones de validación interna. # Pero como Ollama es local y gratuito, esta cadena se ignorará en la práctica. SKLLMConfig.set_openai_key(“local-ollama-es-gratis”)
# Use esto para indicarle a Scikit-LLM que enrute las solicitudes de la nube hacia su puerto local predeterminado de Ollama
SKLLMConfig.set_gpt_url(“http://localhost:11434/v1”)
# Scikit-LLM necesita, de forma predeterminada, una clave para pasar las comprobaciones de validación interna.
# Pero como Ollama es local y gratuito, esta cadena se ignorará en la práctica.
SKLLMConfig.set_openai_key(“ollama-local-es-gratis”)
Después de eso, creamos un pequeño conjunto de datos y lo preparamos para su clasificación. Dado que no vamos a evaluar el rendimiento de clasificación del modelo en este tutorial (nuestro objetivo principal es aprender a usar Scikit-LLM localmente con modelos de código abierto como los disponibles a través de Ollama), no necesitamos una gran cantidad de ejemplos de datos.
datos = { “revisar”: [
“The new macOS update is fantastic and runs smoothly.”,
“My battery is draining incredibly fast after the patch.”,
“I need help resetting my account password.”,
“The display on this monitor is breathtakingly crisp.”,
“Customer support hung up on me, very disappointing.”
]”categoría”: [
“Positive Feedback”,
“Technical Issue”,
“Support Request”,
“Positive Feedback”,
“Negative Feedback”
]} df = pd.DataFrame(datos) X = df[“review”]y = gl[“category”]# Dividir datos en conjuntos de tren/prueba X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
datos = {
“revisar”: [
“The new macOS update is fantastic and runs smoothly.”,
“My battery is draining incredibly fast after the patch.”,
“I need help resetting my account password.”,
“The display on this monitor is breathtakingly crisp.”,
“Customer support hung up on me, very disappointing.”
],
“categoría”: [
“Positive Feedback”,
“Technical Issue”,
“Support Request”,
“Positive Feedback”,
“Negative Feedback”
]
}
df = PD.Marco de datos(datos)
incógnita = df[“review”]
y = df[“category”]
# Dividir datos en conjuntos de tren/prueba
X_tren, X_prueba, y_tren, y_prueba = tren_prueba_split(incógnita, y, tamaño_prueba=0,4, estado_aleatorio=42)
El conjunto de datos contiene opiniones de usuarios y sus categorías correspondientes, por ejemplo, tipos de consultas o comentarios de los clientes. También hicimos una división de entrenamiento/prueba como es habitual con el modelado de aprendizaje automático.
En la siguiente parte del código, agregamos las instrucciones necesarias para inicializar y ejecutar nuestro clasificador, que será en esencia una instancia de ejecución adaptada a la tarea de uno de nuestros modelos Ollama instalados, como Llama 3:
print(“Inicializando ZeroShotGPTClassifier con Llama 3 local…”) # Usando el prefijo ‘custom_url::’ para decirle al sistema que use su punto final “set_gpt_url” (ver arriba) clf = ZeroShotGPTClassifier(model=”custom_url::llama3″) # Ajustando el modelo clf.fit(X_train, y_train) print(“Enviando datos a Ollama para inferencia local…\n”) predictions = clf.predict(X_test)
imprimir(“Inicializando ZeroShotGPTClassifier con Llama 3 local…”)
# Usar el prefijo ‘custom_url::’ para indicarle al sistema que use su punto final “set_gpt_url” (ver arriba)
clf = Clasificador ZeroShotGPT(modelo=“url_personalizado::llama3”)
# Ajuste del modelo
clf.adaptar(X_tren, y_tren)
imprimir(“Enviando datos a Ollama para inferencia local…\n”)
predicciones = clf.predecir(X_prueba)
Para terminar, imprimimos algunos resultados que consisten en un par de resultados de inferencia del modelo (predicciones de clasificación) en los dos ejemplos contenidos en el conjunto de prueba. Este es un conjunto de datos muy pequeño, pero el objetivo aquí es mostrar cómo logramos vincular Scikit-LLM con un modelo de Ollama local y gratuito para usar elegantemente un LLM para una tarea específica sin costo.
para revisión, predicción en zip(X_test, predicciones): print(f”Texto de revisión: ‘{review}'”) print(f”Etiqueta prevista: {prediction}”) print(“-” * 50)
para revisar, predicción en cremallera(X_prueba, predicciones):
imprimir(F“Texto de revisión: ‘{review}'”)
imprimir(F“Etiqueta prevista: {predicción}”)
imprimir(“-“ * 50)
El resultado (puede variar según los ejemplos de prueba):
Enviando datos a Ollama para inferencia local… 100%|███████████████████████████ ████████████████████████████████| 2/2 [00:12<00:00, 6.36s/it]Texto de revisión: “Mi batería se está agotando increíblemente rápido después del parche”. Etiqueta prevista: Solicitud de soporte ————————————————– Texto de revisión: “El servicio de atención al cliente me colgó, muy decepcionante”. Etiqueta prevista: Solicitud de soporte ————————————————–
Envío datos a Ollama para local inferencia...
100%|█████████████████████████████ ██████████████████████████████| 2/2 [00:12<00:00, 6.36s/it]
Revisar Texto: “Mi batería se está agotando increíblemente rápido después del parche”.
Previsto Etiqueta: Apoyo Pedido
—————————————————————————
Revisar Texto: “El servicio de atención al cliente me colgó, muy decepcionante”.
Previsto Etiqueta: Apoyo Pedido
—————————————————————————
Alternativamente, puede ejecutar su script Python desde su terminal. Por ejemplo, si lo nombró local_classification.py, ejecute este comando:
Python local_classification.py
pitón clasificación_local.py
De cualquier manera, si siguió todos los pasos, debería tenerlo funcionando. ¡Bien hecho!
Concluyendo
Este artículo ilustró cómo intercambiar modelos gratuitos ejecutados localmente a través de Ollama, como Llama, Mistral o Gemma, todo gratis y en unos sencillos pasos, gracias a la biblioteca Scikit-LLM de Python, que permite el uso de LLM de vanguardia dentro de un flujo de trabajo de aprendizaje automático clásico y familiar.