Scikit-LLM Potencia tu análisis de texto en Python utilizando modelos LLM dentro del marco de trabajo de scikit-learn.
Scikit-LLM potencia el análisis de texto en Python con modelos LLM en scikit-learn.
TUTORIALES PRÁCTICOS, LIBRERÍA PYTHON
Utilice modelos de lenguaje avanzados como ChatGPT para realizar tareas de análisis de texto como la clasificación de sentimientos, resumen de texto y otras tareas de análisis de texto.
Introducción
Scikit-LLM es un paquete de Python que integra modelos de lenguaje grande (LLM) como GPT-3 de OpenAI en el marco de trabajo Scikit-learn para tareas de análisis de texto.
Scikit-LLM está diseñado para funcionar dentro del marco de trabajo de Scikit-learn. Por lo tanto, si está familiarizado con Scikit-learn, se sentirá como en casa con Scikit-llm. La biblioteca ofrece una variedad de características, de las cuales cubriremos las siguientes:
- Clasificación de texto sin etiquetas
- Clasificación de texto sin etiquetas de varias etiquetas
- Vectorización de texto
- Traducción de texto
- Resumen de texto

Tenga en cuenta que todos los conjuntos de datos utilizados en esta publicación fueron creados y compilados exclusivamente por el autor.
¿Por qué esta biblioteca?
El principal beneficio de esta biblioteca es su API familiar de Scikit-learn, en particular,
- Puede utilizar API similares a Scikit-learn, como
.fit()
,.fit_transform()
y.predict()
. - Puede combinar estimadores de la biblioteca Scikit-llm en un pipeline de Sklearn (consulte mi último ejemplo en esta publicación).
Instalación
Puede instalar la biblioteca a través de pip:
- En vivo desde Taipei el CEO de NVIDIA presenta las plataformas Gen ...
- Conoce ControlVideo Un Nuevo Método de Inteligencia Artificial para...
- DINOv2 Modelos de Visión por Computadora Auto-supervisados por Meta AI
pip install scikit-llm
Configuración
Antes de comenzar a usar Scikit-LLM, debe pasar su clave de API de OpenAI a Scikit-LLM. Puede consultar esta publicación para configurar su clave de API de OpenAI.
from skllm.config import SKLLMConfigOPENAI_SECRET_KEY = "sk-***"OPENAI_ORG_ID = "org-***"SKLLMConfig.set_openai_key(OPENAI_SECRET_KEY)SKLLMConfig.set_openai_org(OPENAI_ORG_ID)
Tenga en cuenta que Scikit-LLM proporciona una interfaz conveniente para acceder a los modelos GPT-3 de OpenAI. El uso de estos modelos no es gratuito y requiere una clave de API. Si bien el costo de la API es relativamente barato, dependiendo del volumen de sus datos y la frecuencia de las llamadas, estos costos pueden sumarse. Por lo tanto, es importante planificar y administrar cuidadosamente su uso para controlar los costos. Siempre recuerde revisar los detalles de precios y los términos de uso de OpenAI antes de comenzar con Scikit-LLM.
Para darle una idea aproximada, ejecuté este cuaderno al menos cinco veces para hacer este tutorial, y el costo total fue de US $0.02. ¡Tengo que decir que pensé que sería más alto!
Clasificación de texto sin etiquetas
Una de las características de Scikit-LLM es la capacidad de realizar clasificación de texto sin etiquetas. Scikit-LLM proporciona dos clases para este propósito:
- ZeroShotGPTClassifier: utilizado para la clasificación de etiquetas únicas (por ejemplo, análisis de sentimientos),
- MultiLabelZeroShotGPTClassifier: utilizado para una tarea de clasificación de varias etiquetas.
Clasificador ZeroShotGPT de etiqueta única
Realicemos un análisis de sentimiento de algunas críticas de películas. Para fines de entrenamiento, definimos el sentimiento para cada crítica (definido por una variable movie_review_labels
). Entrenamos el modelo con estas críticas y etiquetas, para que podamos predecir nuevas críticas de películas utilizando el modelo entrenado.
El conjunto de datos de muestra para las críticas de películas se muestra a continuación:
movie_reviews = [ "Esta película fue absolutamente maravillosa. La trama era convincente y los personajes eran muy realistas.", "¡Realmente amé la película! La trama tuvo algunos giros inesperados que me mantuvieron comprometido hasta el final.", "La película estuvo bien. No genial, pero tampoco mala. Una buena opción para ver una sola vez.", "No disfruté tanto de la película. La trama fue bastante predecible y los personajes carecían de profundidad.", "Esta película no fue de mi agrado. Se sintió muy lenta y la trama no fue lo suficientemente interesante.", "La película estuvo bien. No fue impresionante ni decepcionante. Estuvo bien.", "¡La película me dejó sin palabras! La cinematografía fue excelente y las actuaciones fueron de primera.", "No me gustó nada la película. La historia fue poco interesante y las actuaciones fueron mediocres en el mejor de los casos.", "La película estuvo decente. Tuvo sus momentos pero no fue consistentemente interesante."]movie_review_labels = [ "positivo", "positivo", "neutral", "negativo", "negativo", "neutral", "positivo", "negativo", "neutral"]new_movie_reviews = [ # Una crítica positiva "¡La película fue fantástica! Estuve cautivado por la trama desde el principio hasta el final.", # Una crítica negativa "Encontré la película bastante aburrida. La trama se movió demasiado lentamente y las actuaciones fueron mediocres.", # Una crítica neutral "La película estuvo bien. No fue la mejor que he visto, pero ciertamente no la peor."]
Entrenemos el modelo y luego verifiquemos qué predice el modelo para cada nueva crítica.
from skllm import ZeroShotGPTClassifier# Inicializa el clasificador con el modelo OpenAIclf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")# Entrena el modelo clf.fit(X=movie_reviews, y=movie_review_labels) # Usa el clasificador entrenado para predecir el sentimiento de las nuevas críticaspredicted_movie_review_labels = clf.predict(X=new_movie_reviews) for review, sentiment in zip(new_movie_reviews, predicted_movie_review_labels): print(f"Crítica: {review}\nSentimiento predicho: {sentiment}\n\n")
Crítica: ¡La película fue fantástica! Estuve cautivado por la trama desde el principio hasta el final.Sentimiento predicho: positivoCrítica: Encontré la película bastante aburrida. La trama se movió demasiado lentamente y las actuaciones fueron mediocres.Sentimiento predicho: negativoCrítica: La película estuvo bien. No fue la mejor que he visto, pero ciertamente no la peor.Sentimiento predicho: neutral
Como se puede ver arriba, el modelo predijo correctamente el sentimiento de cada crítica de película.
Multi-Labels ZeroShotGPTClassifier
En la sección anterior, teníamos un clasificador de etiquetas únicas (“positivo”, “negativo”, “neutral”). Aquí, vamos a usar el estimador MultiLabelZeroShotGPTClassifier
para asignar múltiples etiquetas a una lista de críticas de restaurantes.
restaurant_reviews = [ "La comida era deliciosa y el servicio era excelente. ¡Una experiencia gastronómica maravillosa!", "El restaurante estaba en una excelente ubicación, pero la comida era solo promedio.", "El servicio fue muy lento y la comida estaba fría cuando llegó. No fue una buena experiencia.", "El restaurante tiene una hermosa ambientación y la comida fue excelente.", "La comida fue genial, pero la encontré un poco cara.", "El restaurante estaba convenientemente ubicado, pero el servicio fue pobre.", "La comida no fue lo que esperaba, pero la ambientación del restaurante fue realmente agradable.", "Excelente comida y servicio rápido. La ubicación también fue muy conveniente.", "Los precios eran un poco altos, pero la calidad de la comida y del servicio fue excelente.", "El restaurante ofrecía una amplia variedad de platos. El servicio también fue muy rápido."]restaurant_review_labels = [ ["Comida", "Servicio"], ["Ubicación", "Comida"], ["Servicio", "Comida"], ["Ambientación", "Comida"], ["Comida", "Precio"], ["Ubicación", "Servicio"], ["Comida", "Ambientación"], ["Comida", "Servicio", "Ubicación"], ["Precio", "Comida", "Servicio"], ["Variedad de Comida", "Servicio"]]new_restaurant_reviews = [ "La comida fue excelente y el restaurante estaba ubicado en el corazón de la ciudad.", "El servicio fue lento y la comida no valía la pena el precio.", "El restaurante tenía una maravillosa ambientación, pero la variedad de platos era limitada."]
Entrenemos el modelo y luego predigamos las etiquetas para nuevas revisiones.
from skllm import MultiLabelZeroShotGPTClassifier# Inicialice el clasificador con el modelo OpenAIclf = MultiLabelZeroShotGPTClassifier(max_labels=3)# Entrene el modeloclf.fit(X=restaurant_reviews, y=restaurant_review_labels)# Use el clasificador entrenado para predecir las etiquetas de las nuevas revisionespredicted_restaurant_review_labels = clf.predict(X=new_restaurant_reviews)for review, labels in zip(new_restaurant_reviews, predicted_restaurant_review_labels): print(f"Revisión: {review}\nEtiquetas Predichas: {labels}\n\n")
Revisión: La comida era excelente y el restaurante estaba ubicado en el corazón de la ciudad.Etiquetas Predichas: ['Comida', 'Ubicación']Revisión: El servicio era lento y la comida no valía el precio.Etiquetas Predichas: ['Servicio', 'Precio']Revisión: El restaurante tenía un ambiente maravilloso, pero la variedad de platos era limitada.Etiquetas Predichas: ['Ambiente', 'Variedad de Comida']
Las etiquetas predichas para cada revisión son exactas.
Vectorización de Texto
Scikit-LLM proporciona la clase GPTVectorizer
para convertir el texto de entrada en una representación vectorial de dimensión fija. Cada vector resultante es una matriz de números flotantes, que es una representación de la oración correspondiente.
Obtengamos una representación vectorizada de las siguientes oraciones.
from skllm.preprocessing import GPTVectorizerX = [ "La IA puede revolucionar las industrias.", "La robótica crea soluciones automatizadas.", "IoT conecta dispositivos para el intercambio de datos."]vectorizer = GPTVectorizer()vectors = vectorizer.fit_transform(X)print(vectors)
[[-0.00818074 -0.02555227 -0.00994665 ... -0.00266894 -0.02135153 0.00325925] [-0.00944166 -0.00884305 -0.01260475 ... -0.00351341 -0.01211498 -0.00738735] [-0.01084771 -0.00133671 0.01582962 ... 0.01247486 -0.00829649 -0.01012453]]
En la práctica, estos vectores son entradas para otros modelos de aprendizaje automático para tareas como la clasificación, el agrupamiento o la regresión, en lugar de examinar los vectores directamente.
Traducción de Texto
Los modelos GPT se pueden usar para traducir haciendo lecturas precisas de un idioma a otro. Podemos traducir un texto a un idioma de interés usando el módulo GPTTranslator
.
from skllm.preprocessing import GPTTranslatorfrom skllm.datasets import get_translation_datasettranslator = GPTTranslator(openai_model="gpt-3.5-turbo", output_language="Inglés")texto_a_traducir = ["Je suis content que vous lisiez ce post."]# "Estoy feliz de que estés leyendo este post."texto_traducido = translator.fit_transform(texto_a_traducir)print( f"Texto en francés: \n{texto_a_traducir[0]}\n\nTexto traducido en inglés: {texto_traducido[0]}")
Texto en francés: Je suis content que vous lisiez ce post.Texto traducido en inglés: Estoy feliz de que estés leyendo este post.
Resumen de Texto
Los modelos GPT son muy útiles para resumir textos. La biblioteca Scikit-LLM proporciona el estimador GPTSummarizer
para la summarización de texto. Veamos eso en acción resumiendo las largas revisiones dadas a continuación.
revisiones = [ ( "Cené en The Gourmet Kitchen anoche y tuve una experiencia maravillosa. " "El servicio fue impecable, la comida exquisita y el ambiente encantador. " "Tuve la pasta de mariscos, que estaba cocida a la perfección. " "La lista de vinos también fue bastante impresionante. " "Recomendaría este restaurante a cualquiera que busque una experiencia de alta cocina." ), ( "Visité The Burger Spot para almorzar hoy y quedé gratamente sorprendido. " "A pesar de ser una cadena de comida rápida, la calidad de la comida fue excelente. " "Pedí la hamburguesa clásica con queso y estaba jugosa y sabrosa. " "Las papas fritas estaban crujientes y bien condimentadas. " "El servicio fue rápido y el personal amable. " "Es un gran lugar para una comida rápida y satisfactoria." ), ( "The Coffee Corner es mi lugar favorito para trabajar y disfrutar de una buena taza de café. " "El ambiente es relajado y el café siempre es de primera calidad. " "También ofrecen una variedad de pasteles y sándwiches. " "El personal siempre es acogedor y el servicio es rápido. " "Disfruto de su café con leche y el muffin de arándanos es una obligación." )]# NOTA# string1 = "ABC"# string2 = ("A" "B" "C")# print(string1 == string2)# >>> True
Tenga en cuenta que el reviews
anterior es una lista de tres elementos, y que cada elemento de la lista está escrito de una manera que facilita su lectura.
from skllm.preprocessing import GPTSummarizergpt_summarizer = GPTSummarizer(openai_model = "gpt-3.5-turbo", max_words = 15)summaries = gpt_summarizer.fit_transform(reviews)print(summaries)
Se genera un breve resumen de cada reseña. El parámetro max_words
establece un límite superior aproximado en la longitud del resumen; en la práctica, puede ser un poco más largo.
Usar un scikit-llm dentro de un pipeline de scikit-learn
Hasta ahora, todos los ejemplos anteriores solo han utilizado estimadores de la biblioteca Scikit-LLM. Como se mencionó antes, el principal beneficio de esta biblioteca es su integración con la plataforma scikit-learn. El siguiente ejemplo utiliza un estimador de scikit-llm en un pipeline de scikit-learn y ejecuta un clasificador XGBoost en los ejemplos de reseñas de películas ilustrados anteriormente.
from sklearn.pipeline import Pipelinefrom sklearn.preprocessing import LabelEncoderfrom skllm.preprocessing import GPTVectorizerfrom xgboost import XGBClassifier# Definir variables con nombres convencionales para reducir la confusiónX, y = movie_reviews, movie_review_labelsX_test, y_test = new_movie_reviews, new_movie_review_labels# Codificar etiquetasle = LabelEncoder()y_encoded = le.fit_transform(y)y_test_encoded = le.transform(y_test)# Usar un pipeline de scikit-learnsteps = [("GPT", GPTVectorizer()), ("Clf", XGBClassifier())]clf = Pipeline(steps)clf.fit(X, y_encoded)y_pred_encoded = clf.predict(X_test)# Revertir las etiquetas codificadas a etiquetas realesy_pred = le.inverse_transform(y_pred_encoded)print(f"\nEtiquetas codificadas (conjunto de entrenamiento): {y_encoded}\n")print(f"Etiquetas reales (conjunto de entrenamiento): {y}")print(f"Etiquetas predichas (codificadas): {y_test_encoded}\n")print("------------------\nEvaluar el rendimiento del clasificador XGBoost:\n")for test_review, actual_label, predicted_label in zip(X_test, y_test, y_pred): print(f"Reseña: {test_review}\nEtiqueta Real: {actual_label}\nEtiqueta Predicha: {predicted_label}\n")
Etiquetas codificadas (conjunto de entrenamiento): [2 2 1 0 0 1 2 0 1]Etiquetas reales (conjunto de entrenamiento): ['positive', 'positive', 'neutral', 'negative', 'negative', 'neutral', 'positive', 'negative', 'neutral']Etiquetas predichas (codificadas): [2 0 1]------------------Evaluar el rendimiento del clasificador XGBoost:Reseña: ¡La película fue fantástica! Me cautivó la historia de principio a fin.Etiqueta Real: positiveEtiqueta Predicha: positiveReseña: Me pareció que la película era bastante aburrida. La trama se movía demasiado lentamente y la actuación era mediocre.Etiqueta Real: negativeEtiqueta Predicha: positiveReseña: La película estuvo bien. No es la mejor que he visto, pero ciertamente no es la peor.Etiqueta Real: neutralEtiqueta Predicha: neutral
Tenga en cuenta que lo anterior es solo un caso de uso para ilustrar la posibilidad de integrar estimadores Scikit-LLM en un pipeline SKlearn.
Si disfrutó de esta publicación, le gustará mi otro artículo sobre algoritmos de cadena a cadena para tareas de procesamiento de lenguaje natural.
Domando el texto con string2string: una poderosa biblioteca de Python para algoritmos de cadena a cadena
Aprovechar string2string para tareas de procesamiento de lenguaje natural
towardsdatascience.com
Conclusión
Scikit-LLM es una herramienta poderosa que agrega el poder de modelos de lenguaje avanzados como GPT-3 al conocido marco scikit-learn. En este tutorial, se examinaron algunas de las características más importantes de Scikit-LLM: 1) clasificación de texto sin entrenamiento, 2) clasificación de texto sin entrenamiento con múltiples etiquetas, 3) vectorización de texto, 4) resumen de texto, 5) traducción de idioma y 6) integración con el pipeline de scikit-learn.
Como mencioné anteriormente, el principal beneficio de esta biblioteca es su API similar a la de scikit-learn y su integración en los pipelines de scikit-learn. Sin embargo, la principal limitación de Scikit-LLM es su fuerte dependencia de OpenAI. Aunque la integración de modelos de código abierto está en el roadmap de Scikit-LLM, aún no está disponible en la biblioteca. Por lo tanto, si usa Scikit-LLM, debe saber que:
- Dado que Scikit-LLM utiliza modelos de OpenAI, existe un costo de API o un límite de tasa en el número de solicitudes realizadas a OpenAI.
- Scikit-LLM está obligado a tener las mismas limitaciones que la API de OpenAI, como no tener acceso a internet o el máximo de tokens permitidos para un modelo de OpenAI dado (en esta publicación, se utiliza principalmente el modelo “gpt-3-turbo”, que tiene un máximo de 4096 tokens).
Scikit-LLM es una herramienta prometedora que abre nuevas posibilidades en el ámbito del análisis de texto utilizando grandes modelos de lenguaje. Esta biblioteca podría ser una adición útil a su caja de herramientas; por lo tanto, sugiero que lo pruebe.
📓 Puede encontrar el cuaderno de esta publicación en GitHub.
¡Gracias por leer!
Soy un científico de datos y un ingeniero senior, y me gustaría escribir sobre estadísticas, aprendizaje automático, análisis de series de tiempo, bibliotecas interesantes de Python y consejos y trucos.
- Si le gustó esta publicación, sígame en Zepes
- Suscríbase a mi lista de correo
- Conectemos en LinkedIn y Twitter
Únase a Zepes con mi enlace de referencia – Esmaeil Alizadeh
📖 Lea cada historia de Esmaeil Alizadeh (y miles de otros escritores en Zepes). Suscríbase a Zepes para obtener el…
Zepes.ealizadeh.com
Referencia
GitHub – iryna-kondr/scikit-llm: Integre sin problemas modelos de lenguaje poderosos como ChatGPT en …
Integre sin problemas modelos de lenguaje poderosos como ChatGPT en scikit-learn para tareas de análisis de texto mejoradas. Puede…
github.com
Enlaces útiles
Scikit-learn
“Usamos scikit-learn para respaldar la investigación básica de vanguardia […]” “Creo que es el paquete de ML mejor diseñado que he…
scikit-learn.org
Cómo obtener una clave de API de OpenAI
Muchas aplicaciones y herramientas de IA ahora requieren que traigas tu propia clave de API de OpenAI. Puedes generar una en OpenAI’s…
www.howtogeek.com
Publicado originalmente en https://ealizadeh.com .