Saltar al contenido

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

30 de mayo de 2023

Imagen por autor

ChatGPT, su sucesor GPT-4 y sus alternativas de código abierto han tenido un gran éxito. Los desarrolladores y científicos de datos buscan ser más productivos y usan ChatGPT para simplificar sus tareas diarias.

Aquí, veremos cómo usar ChatGPT para la ciencia de datos a través de una sesión de programación en pareja con ChatGPT. Construiremos un modelo de clasificación de texto, visualizaremos el conjunto de datos, identificaremos los mejores hiperparámetros para el modelo, probaremos diferentes algoritmos de aprendizaje automático y más, todo usando ChatGPT.

A lo largo del camino, también veremos ciertos consejos para estructurar indicaciones a fin de obtener resultados útiles. Para seguir, debe tener una cuenta gratuita de OpenAI. Si es un usuario de GPT-4, también puede seguir las mismas indicaciones.

Intentemos construir un modelo de clasificación de noticias usando ChatGPT para el conjunto de datos de 20 grupos de noticias en scikit-learn.

Este es el mensaje que utilicé: “Me gustaría crear un modelo de clasificación de noticias utilizando el conjunto de datos de 20 grupos de noticias de sklearn. ¿Sabes sobre esto?»

Aunque mi mensaje no es muy específico en este punto, he declarado tanto el objetivo como el conjunto de datos:

  • Objetivo: Construir un nuevo modelo de clasificación
  • Conjunto de datos a utilizar: conjunto de datos de 20 grupos de noticias de scikit-learn

La respuesta de ChatGPT nos dice que comencemos cargando el conjunto de datos.

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

# Load the dataset
newsgroups_train = fetch_20newsgroups(subset="train", shuffle=True)
newsgroups_test = fetch_20newsgroups(subset="test", shuffle=True)

Como también hemos declarado el objetivo (construir un modelo de clasificación de texto), ChatGPT nos dice cómo podemos hacerlo.

Vemos que nos da los siguientes pasos:

  • Usando TfidfVectorizer para el preprocesamiento de texto y llegar a una representación numérica. Este enfoque de usar las puntuaciones TF-IDF es mejor que usar las ocurrencias de conteo usando un CountVectorizer.
  • Crear un modelo de clasificación sobre la representación numérica del conjunto de datos utilizando un clasificador Naive Bayes o Support Vector Machine (SVM).

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

También proporcionó el código para un clasificador Multinomial Naive Bayes, así que usémoslo y verifiquemos si ya podemos tener un modelo que funcione.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report

# Preprocess the text data
vectorizer = TfidfVectorizer(stop_words="english")
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)

# Train a Naive Bayes classifier
clf = MultinomialNB()
clf.fit(X_train, newsgroups_train.target)

# Evaluate the performance of the classifier
y_pred = clf.predict(X_test)
print(classification_report(newsgroups_test.target, y_pred))

Seguí adelante y ejecuté el código anterior. Y funciona como se esperaba, sin errores. Pasamos de una pantalla en blanco a un modelo de clasificación de texto, en unos minutos, con un solo aviso.

Output >>
precision recall f1-score support

0 0.80 0.69 0.74 319
1 0.78 0.72 0.75 389
2 0.79 0.72 0.75 394
3 0.68 0.81 0.74 392
4 0.86 0.81 0.84 385
5 0.87 0.78 0.82 395
6 0.87 0.80 0.83 390
7 0.88 0.91 0.90 396
8 0.93 0.96 0.95 398
9 0.91 0.92 0.92 397
10 0.88 0.98 0.93 399
11 0.75 0.96 0.84 396
12 0.84 0.65 0.74 393
13 0.92 0.79 0.85 396
14 0.82 0.94 0.88 394
15 0.62 0.96 0.76 398
16 0.66 0.95 0.78 364
17 0.95 0.94 0.94 376
18 0.94 0.52 0.67 310
19 0.95 0.24 0.38 251

accuracy 0.82 7532
macro avg 0.84 0.80 0.80 7532
weighted avg 0.83 0.82 0.81 7532

Recomendado:  La IA tiene mucho que ofrecer a la humanidad. También podría causar un daño terrible. Debe ser controlado | stuart russell

Aunque tenemos un modelo de trabajo para resolver el problema en cuestión, aquí hay algunos consejos que pueden ayudarlo cuando lo solicite. El aviso podría haber sido mejor y dividido en pasos más pequeños, así:

  • Cuéntame más sobre el conjunto de datos de 20 grupos de noticias de scikit-learn.
  • ¿Cuáles son las posibles tareas que puedo realizar con este conjunto de datos? ¿Puedo construir un modelo de clasificación de texto?
  • ¿Puede decirme qué algoritmo de aprendizaje automático será el más adecuado para esta aplicación?

Bien, ya hemos creado un modelo de clasificación de texto. Pero sucedió muy rápido, así que disminuyamos la velocidad e intentemos generar una visualización simple del conjunto de datos.

En particular, intentemos comprender la distribución de las muestras de capacitación en las 20 categorías de noticias e identificar si hay algún desequilibrio de clase.

Este es el mensaje que utilicé: “Me gustaría visualizar el conjunto de datos para comprender la distribución de clases e identificar el desequilibrio de clases. ¿Puedes ayudarme con la visualización?

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

ChatGPT sugirió que un gráfico de barras o un histograma de la cantidad de muestras en cada una de las clases sería una buena visualización. Eso suena razonable.

Aquí está el código que generó ChatGPT para crear un gráfico de barras simple en matplotlib:

import matplotlib.pyplot as plt

# Load the dataset
newsgroups_train = fetch_20newsgroups(subset="train", shuffle=True)

# Count the number of samples for each class
class_counts = {}
for label in newsgroups_train.target:
class_name = newsgroups_train.target_names[label]
if class_name in class_counts:
class_counts[class_name] += 1
else:
class_counts[class_name] = 1

# Plot the class distribution
plt.bar(class_counts.keys(), class_counts.values())
plt.xticks(rotation=90)
plt.xlabel('Class')
plt.ylabel('Number of Samples')
plt.title('Class Distribution')
plt.show()

Aquí está la trama. Está limpio, las etiquetas son legibles. También podemos ver el número de muestras en cada una de las 20 clases.

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

La distribución de las muestras de capacitación en las 20 clases es aproximadamente uniforme y no hay un desequilibrio de clase visible. Por lo tanto, el modelo que obtuvimos en el paso anterior es útil. Y no necesitamos usar técnicas novedosas de remuestreo para abordar el desequilibrio de clases.

A continuación, me gustaría ajustar los hiperparámetros del modelo. Primero, me gustaría comprender los diferentes hiperparámetros que se pueden ajustar. Luego, podemos hacer una búsqueda de cuadrícula simple si no hay demasiados hiperparámetros.

Aquí está el mensaje: «¿Hay algún hiperparámetro que pueda ajustar para mejorar el modelo del clasificador?»

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

En el código que obtuvimos, max_df Para el TfidfVectorizer también es sintonizable. Sabemos que la puntuación TF-IDF funciona asignando mayor peso a los términos que aparecen con frecuencia en un documento en particular, mientras que asigna un peso sustancialmente menor a los términos que aparecen con frecuencia en todos los documentos. El max_df usa el porcentaje de ocurrencia para ignorar un término en particular.

Por ejemplo, max_df de 0,5 indica que se ignorarán todos los términos que aparecen en al menos el 50% de los documentos. Si lo desea, puede eliminar esto. Pero lo voy a retener solo para ver qué max_df Puedo usar.

Recomendado:  Aplicación NewProfilePic: ¿Diversión fotográfica inocente o un riesgo de privacidad?

El código utiliza una búsqueda de cuadrícula simple y elige los valores óptimos en función de las puntuaciones de validación cruzada.

from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline

# Define the pipeline with TF-IDF and Multinomial Naive Bayes
pipeline = Pipeline([
('tfidf', TfidfVectorizer(stop_words="english")),
('clf', MultinomialNB())
])

# Define the hyperparameter grid
param_grid = {
'tfidf__max_df': [0.5, 0.75, 1.0],
'clf__alpha': [0.1, 0.5, 1.0],
'clf__fit_prior': [True, False],
}

# Perform grid search with cross-validation
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(newsgroups_train.data, newsgroups_train.target)

# Print the best hyperparameters and cross-validation score
print("Best hyperparameters: ", grid_search.best_params_)
print("Cross-validation score: ", grid_search.best_score_)

Output >>
Best hyperparameters: {'clf__alpha': 0.1, 'clf__fit_prior': False, 'tfidf__max_df': 0.5}
Cross-validation score: 0.9088736147919108

Conectando los valores de estos hiperparámetros, obtuve una mejora de alrededor del 2 % en la precisión de la clasificación.

Aquí, no teníamos muchos hiperparámetros para ajustar. Si tiene muchos hiperparámetros donde cada uno puede tomar un conjunto de valores, ejecutar la búsqueda de cuadrícula puede ser costoso. Y podría tener sentido realizar una búsqueda aleatoria en su lugar.

Vimos en uno de los primeros pasos que una SVM también funciona bien para un problema de clasificación de este tipo.

Ahora me gustaría crear un clasificador de vectores de soporte para el mismo conjunto de datos.

El mensaje que usé: “¿Puede decirme si puedo usar un SVM para resolver el mismo problema? ¿Puedes generar el código para hacer eso?”

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

Y aquí vamos:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# Load the dataset
newsgroups_train = fetch_20newsgroups(subset="train", shuffle=True)

# Convert the text data to a matrix of TF-IDF features
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(newsgroups_train.data)
y = newsgroups_train.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Define the SVM classifier
clf = SVC(kernel="linear")

# Train the SVM classifier
clf.fit(X_train, y_train)

# Predict the class labels for the test set
y_pred = clf.predict(X_test)

# Calculate the accuracy of the SVM classifier
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

Dado que tenemos una puntuación de precisión de más del 90 %, SVM parece ser una buena opción para este conjunto de datos.

Output >> Accuracy: 0.9019001325673884

Como se ve, puede usar ChatGPT para probar rápidamente diferentes modelos para resolver el mismo problema.

Una vez que haya duplicado la creación de un modelo de trabajo, también puede explorar otras direcciones disponibles. Veamos la reducción de dimensionalidad como ejemplo.

En este punto, no estoy interesado en ejecutar algoritmos de reducción de dimensionalidad porque ya tengo un modelo de trabajo. Y el espacio de características no es de dimensiones muy altas. Por lo tanto, no necesitamos reducir la cantidad de dimensiones antes de la construcción del modelo.

Sin embargo, veamos los enfoques para la reducción de la dimensionalidad para este conjunto de datos específico.

Recomendado:  Una cosa en la que nos estamos equivocando sobre la IA

El mensaje que usé: «¿Puede decirme las técnicas de reducción de dimensionalidad que puedo usar para este conjunto de datos?»

Integración de ChatGPT en flujos de trabajo de ciencia de datos: consejos y prácticas recomendadas

Las siguientes técnicas han sido sugeridas por ChatGPT:

  • Análisis Semántico Latente o SVD
  • Análisis de componentes principales (PCA)
  • Factorización de matrices no negativas (NMF)

Terminemos nuestra discusión enumerando las mejores prácticas para usar ChatGPT.

Las siguientes son algunas de las mejores prácticas que se deben tener en cuenta al usar ChatGPT para la ciencia de datos:

  • No ingrese datos confidenciales ni código fuente: No introduzca ningún dato confidencial en ChatGPT. Cuando trabaja en equipos de datos en organizaciones, a menudo creará modelos a partir de datos de clientes, que deben mantenerse confidenciales. En su lugar, puede intentar crear prototipos para conjuntos de datos disponibles públicamente similares e intentar transponerlos a su conjunto de datos o problema. Del mismo modo, absténgase de ingresar código fuente confidencial o cualquier información que no deba divulgarse.
  • Sea específico con sus indicaciones: Sin indicaciones específicas, es bastante difícil obtener respuestas útiles de ChatGPT. Por lo tanto, estructure su aviso de manera que sea lo suficientemente específico. Las indicaciones deben, al menos, transmitir claramente el objetivo. un paso a la vez.
  • Descomponga las indicaciones más largas en indicaciones más pequeñas: Si tiene una cadena de pensamientos sobre cómo realizar una tarea en particular, intente dividirla en pasos más simples y solicite a ChatGPT que realice cada uno de los pasos.
  • Depure de manera efectiva usando ChatGPT: En este ejemplo, todo el código que obtuvimos se ejecutó sin errores; pero esto puede no ser siempre el caso. Puede encontrar errores debido a funciones obsoletas, referencias de API no válidas y más. Cuando se encuentra con errores, puede ingresar el mensaje de error y el seguimiento relevante en su aviso. Y mire las soluciones ofrecidas, luego proceda a depurar su código.
  • Indicaciones de seguimiento: Si usa (o planea usar) ChatGPT mucho en su flujo de trabajo diario de ciencia de datos, podría ser una buena idea realizar un seguimiento de las indicaciones. Esto puede ayudar a refinar las indicaciones con el tiempo e identificar técnicas de ingeniería de indicaciones para obtener mejores resultados de ChatGPT.

Al usar ChatGPT para aplicaciones de ciencia de datos, comprender el problema comercial es el primer paso y el más importante. Por lo tanto, ChatGPT es solo una herramienta para simplificar y automatizar ciertas tareas y es no un reemplazo para la experiencia técnica de los desarrolladores.

Sin embargo, sigue siendo una herramienta invaluable para aumentar la productividad al ayudar a construir y probar rápidamente diferentes modelos y algoritmos. ¡Así que aprovechemos ChatGPT para perfeccionar nuestras habilidades y convertirnos en mejores desarrolladores!

Bala Priya C es un desarrollador y escritor técnico de la India. Le gusta trabajar en la intersección de matemáticas, programación, ciencia de datos y creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, ciencia de datos y procesamiento de lenguaje natural. ¡Le gusta leer, escribir, codificar y tomar café! Actualmente, está trabajando para aprender y compartir su conocimiento con la comunidad de desarrolladores mediante la creación de tutoriales, guías prácticas, artículos de opinión y más.