ChatGPT vs. R

¿Mutuamente excluyentes?

Jaime Mosquera-Gutiérrez

¿Mutuamente excluyentes?


ChatGPT vs. R


ChatGPT for R

ChatGPT with R

R leverages ChatGPT


Este es un tutorial sobre como utilizar una de las herramientas de IA generativa disponibles para asistir el uso de R.


Los enfoques modernos componen, no excluyen.

¡Bienvenidos!


Jaime Mosquera Gutiérrez

Universidad Nacional

  • Ingeniero Químico
  • Msc. en Estadística (en formación)
  • Machine Learning Engineer


Agenda

  • Parte 1: Conozcamos a ChatGPT

  • Parte 2: Usemos a ChatGPT como usuarios de R

  • Parte 3: Ideas finales

Agenda

  • Parte 1: Conozcamos a ChatGPT

  • Parte 2: Usemos a ChatGPT como usuarios de R

  • Parte 4: Uso avanzado (desarrollador de R, tarea)

Parte 1: Conozcamos a ChatGPT

¿Qué es ChatGPT? - Pregunta


  1. Ejercicio 1.1: preguntele a ChatGPT con un prompt.

Prompt:

Estoy reunido con una audiencia que está compuesta principalmente por usuarios y desarrolladores de R. Muchos de ellos tienen bagaje en Estadística de nivel universitario. ¿Puedes explicar qué es ChatGPT y cómo funciona, de una manera que sea apropiada para esta audiencia.

¿Qué es ChatGPT? - Respuesta


Respuesta:

¿Qué es ChatGPT? - OpenAI


ChatGPT



OpenAI

Es un modelo entrenado para seguir las instrucciones en un prompt y proveer una respuesta detallada.

¿Cómo funciona ChatGPT? (1)


Su nombre tiene las pistas:

ChatGPT


  • Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).

¿Cómo funciona ChatGPT? (2)


Su nombre tiene las pistas:

ChatGPT


  • Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).

  • G, Generative: puede generar texto (incluso de cero).

¿Cómo funciona ChatGPT? (3)


Su nombre tiene las pistas:

ChatGPT


  • Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).

  • G, Generative: puede generar texto (incluso de cero).

  • P, Pretrained: un LLM (Large Language Model) ha sido entrenado sobre 45 TB de datos (internet y libros). Luego se hace fine-tuning con diálogos.

¿Cómo funciona ChatGPT? (4)


Su nombre tiene las pistas:

ChatGPT


  • Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).

  • G, Generative: puede generar texto (incluso de cero).

  • P, Pretrained: un LLM (Large Language Model) ha sido entrenado sobre 45 TB de datos (internet y libros). Luego se hace fine-tuning con diálogos.

  • T, Transformer: es un tipo de red neuronal.

¿Cómo se usa ChatGPT? (1)


  • A partir de prompts.

¿Cómo se usa ChatGPT? (2)


  • A partir de prompts.

  • Estructura de un prompt:

¿Cómo se usa ChatGPT? (3)


  • A partir de prompts.

  • Estructura de un prompt:

    • Instrucción: una tarea específica que deseas que el modelo realice.

¿Cómo se usa ChatGPT? (4)


  • A partir de prompts.

  • Estructura de un prompt:

    • Instrucción: una tarea específica que deseas que el modelo realice.

    • Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.

¿Cómo se usa ChatGPT? (5)


  • A partir de prompts.

  • Estructura de un prompt:

    • Instrucción: una tarea específica que deseas que el modelo realice.

    • Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.

    • Datos de entrada: - es la entrada o pregunta para la que nos interesa encontrar una respuesta.

¿Cómo se usa ChatGPT? (6)


  • A partir de prompts.

  • Estructura de un prompt:

    • Instrucción: una tarea específica que deseas que el modelo realice.

    • Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.

    • Datos de entrada: es la entrada o pregunta para la que nos interesa encontrar una respuesta.

    • Indicador de salida: indica el tipo o formato de la salida.

¿Cómo se usa ChatGPT? - Ejemplo


Contexto:

Estoy reunido con una audiencia que está compuesta principalmente por usuarios y desarrolladores de R. Muchos de ellos tienen bagaje en Estadística de nivel universitario.

Instrucción/Entrada:

¿Puedes explicar qué es ChatGPT y cómo funciona, de una manera que sea apropiada para esta audiencia.

No todos los componentes son necesarios para una prompt.

¿Cómo funciona ChatGPT?

El prompt varía según la tarea:


Tarea de lenguaje natural:

Summarize the text below as a bullet point list of the most important points.

Text: """
{text input here}
"""

Tarea de código:

# Write a simple R function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers

mile2km <- function(num)


Consejos de OpenAI para promp engineering

¿Dónde usar ChatGPT?


  1. Plataforma web (navegador)
  2. Usando directamente la OpenAI API
  3. Usando GPTStudio


🌐 Usaremos mayoritariamente la opción 1.

💸 Las opciones 2 y la 3 requieren API Key .

Plataforma web


Ventajas

  • ChatGPT 3.5 es gratuito.
  • Muy fácil de usar (solo chatear).
  • La experiencia de uso es agradable.

Desventajas

  • Debes copiar pegar código/texto manualmente.
  • Tiene problemas de saturación de servidores.

OpenAI API


Ventajas

  • Pagas por cada consulta y no te preocupas de la saturación.
  • Puedes elegir diferentes tipos de modelos y sus parámetros.
  • Puedes integrar las capacidades de ChatGPT a un desarrollo

Desventajas

  • Llega a ser costoso.
  • Requiere conocimientos de desarrollador.

Parte 2: Usemos a ChatGPT como usuarios de R

…y sigamos conociéndolo…

¿Para qué es bueno ChatGPT? (1)

  • Para generar versiones preliminares de un código.

Ejercicio 2.1:

Cree una aplicación Shiny que cree un diagrama de dispersión a partir del conjunto de datos mtcars.


Sondeo 1

¿Para qué es bueno ChatGPT? (2)


Prompt:

Genere el código para una aplicación Shiny que cree un diagrama de dispersión interactivo del conjunto de datos mtcars. Ponga un menú desplegable para la variable del eje x y un menú desplegable para la variable del eje y.


Original app1.R

Modificada app2.R

Parte 1 original

library(shiny)
library(ggplot2)

# Define la interfaz de usuario de la aplicación Shiny
ui <- fluidPage(
  titlePanel("Diagrama de Dispersión de mtcars"),
  
  # Crear menús desplegables para las variables del eje x y eje y
  sidebarLayout(
    sidebarPanel(
      selectInput("x_var", "Eje X:", choices = colnames(mtcars)),
      selectInput("y_var", "Eje Y:", choices = colnames(mtcars))
    ),
    
    # Crear el área de visualización del gráfico
    mainPanel(
      plotOutput("scatterplot")
    )
  )
)

Parte 2 original

# Define el servidor de la aplicación Shiny
server <- function(input, output) {
  
  # Crear un gráfico de dispersión interactivo basado en las selecciones del usuario
  output$scatterplot <- renderPlot({
    ggplot(mtcars, aes_string(x = input$x_var, y = input$y_var)) +
      geom_point() +
      labs(x = input$x_var, y = input$y_var) +
      theme_minimal()
  })
}

# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)

Un borrador.

Parte 2 modificada

# Define el servidor de la aplicación Shiny
server <- function(input, output) {
  
  # Crear un gráfico de dispersión interactivo basado en las selecciones del usuario
  output$scatterplot <- renderPlot({
    ggplot(mtcars, aes_string(x = input$x_var, y = input$y_var)) +
      geom_point(aes(colour = cyl), size = 3) +
      labs(x = input$x_var, y = input$y_var) +
      theme_minimal() +
      theme(text = element_text(size = 40))
  })
}

# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)

Un borrador. Podemos agregar fácilmente nuevas características.

Salidas

¿Para qué es bueno ChatGPT? (2)

  • Para apoyar la escritura de documentación.

Ejercicio 2.2:

Escriba la documentación para el siguiente script bajo el estándar roxygen2:


dRNMW_raw.R

Ejemplo:

Documentación de la distribución odd Weibull

#' The Odd Weibull Distribution
#' 
#' @author Jaime Mosquera Gutiérrez \email{jmosquerag@unal.edu.co}
#'
#' @description
#' Density, distribution function, quantile function,
#' random generation and hazard function for the Odd Weibull distribution with
#' parameters \code{mu}, \code{sigma} and \code{nu}.
#'
#' @param x,q   vector of quantiles.
#' @param p vector of probabilities.
...

#' @export
dOW <- function(x, mu, sigma, nu, log=FALSE){
  ...
  prod1 <- (mu*x)^sigma
  loglik <- log(sigma*nu) - log(x) + sigma*( log(mu) + log(x) ) +
    (mu*x)^sigma + ( nu - 1 )*log(expm1( prod1 )) -
    2*log1p( (expm1(prod1))^nu )
  
  if (log == FALSE)
    dens <- exp(loglik)
  else
    dens <- loglik
  return(dens)
}

¿Para qué es bueno ChatGPT? (3)

Solución:

Prompt:

Consider the following R script:

```r
<<Pegar aquí el script>>
```

Document this script using the roxygen2 standard.

#' The New Modified Weibull distribution


Script: dRNMW.R

Sondeo 2

¿Para qué es bueno ChatGPT? (4)


  • Enseñarte nuevos conceptos (¡Cuidado, puede alucinar!).
  • Ayudarte a escribir emails, cartas de recomendación/motivación, etc. En general, escritura creativa (¡Cuidado con el plagio!)
  • Traducir, corregir gramática.
  • Procesar texto: resumir, extraer partes clave, identificar intenciones, sentimientos.

¿Para qué es bueno ChatGPT?


  • Tareas con cierto nivel de razonamiento (ojo, no todas).

¿Cuándo falla ChatGPT? (1)


  • En razonamiento.
  • Inferencia de lenguaje natural.
  • En pensamiento crítico.

¿Cuándo falla ChatGPT? (2)


En acertijos.


Ejercicio 2.3:

Pídale que resuelva el siguiente acertijo,


Prompt:

Consider the # symbol for unknown letters. What word fits with the pattern #E#L#?


Extraído del portal The Conversation

Sondeo 3

ChatGPT se muestra inseguro de sus respuestas si se le cuestiona, y las justifica mal

Parte 3: Ideas finales

Problemas éticos

Filtración de información


Fake News

Derechos de autor


  • ChatGPT puede incurrir en plagio porque podría “memorizar” textos de internet, o el estilo de usuarios.


  • Se han presentado demandas colectivas contra OpenAI y empresas similares por esencialmente tomar el trabajo de otros sin considerar las “3C”.

Las “3C”:


  • Consentimiento (para que su trabajo sea incluido en los datos de entrenamiento).
  • Compensación (por el uso de su trabajo para entrenar el modelo).
  • Crédito (para cuando el modelo genera resultados basados en el contenido original del creador)

Buenas prácticas


Consejos para el usuario de ChatGPT:

  • Úselo las respuestas como un borrador (texto/código preliminar)
  • Pruebe versiones alternativas de un prompt.
  • Piense siempre en el límite de palabras
  • El diablo está en los detalles
  • Recuerde que ChatGPT almacena lo que usted le dice.

¡Algunas cosas pueden cambiar!


  • En Diciembre 2022, ChatGPT inventaba referencias.

  • En Q1 2023, ChatGPT resolvía mal los acertijos y parecía seguro de sus respuestas.

¡Gracias!

Referencias

Parte 4: Uso avanzado (desarrollador de R)

GPTStudio


  • ChatGPT puede usarse dentrol de RStudio.
  1. Ingresar a Posit Cloud. Abrir la cuenta o registrarse.

  2. Crear un proyecto nuevo de RStudio.

  3. Preparar el ambiente:

install.packages("pak")
pak::pak("usethis")

# Versión de desarrollo
pak::pak("michelnivard/gptstudio")
  1. Generar la Open AI API key

  1. Espicificar la API key
usethis::edit_r_environ()

  1. Reiniciar la sesión de R

  1. Cmd + Shift + p en Mac, Ctrl + Shift + p en Windows. Seleccionar ChatGPT in Source.

  1. Escriba su prompt en un comentario.
# Implement a barplot of the mtcars dataset for the mean wt per cyl with cyl along the x-axis and mean wt along the y-axis, using ggplot
  1. Sombree el comentario y utilice la herramienta Comment your code

En acción

Este prompt

# Implement a barplot of the mtcars dataset for the mean wt per cyl with cyl along the x-axis and mean wt along the y-axis, using ggplot

Se torna en código

# Load the necessary library
library(ggplot2)

# Calculate the mean weight (wt) per number of cylinders (cyl)
mean_wt_per_cyl <- aggregate(wt ~ cyl, data = mtcars, FUN = mean)

# Create a barplot using ggplot
ggplot(data = mean_wt_per_cyl, aes(x = cyl, y = wt)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  xlab("Cylinders") +
  ylab("Mean Weight (wt)") +
  ggtitle("Mean Weight per Cylinders")

Fin