He estado usando Large Language Models (LLM) la mayoría de los días durante los últimos meses para tres casos de uso principales: análisis de datos, escritura de código y búsqueda web.1.
Observé lo siguiente:
Primero, la codificación incremental funciona mejor que describir una tarea completa a la vez. En segundo lugar, los LLM de programación tienen dificultades para resolver problemas creados por ellos mismos, van en círculos y la depuración puede requerir un trabajo significativo. En tercer lugar, los LLM podrían reemplazar los motores de búsqueda cuando sus índices contengan datos más nuevos o más actualizados para búsquedas resumidas, pero no exhaustivas.
Déjame dar algunos ejemplos:
Este fin de semana quería limpiar algunos enlaces de imágenes HTML en publicaciones de blog más antiguas y convertirlas al formato Markdown. Para hacer esto, debe cargar imágenes en el servicio de alojamiento de imágenes de Cloudinary y usar el nuevo enlace. Ingresé esta descripción en ChatGPT. La transcripción se puede encontrar aquí:
Cree un script de Ruby para buscar todos los archivos de descuento en una carpeta, encuentre etiquetas de imagen HTML y reescríbalas en etiquetas de imagen de descuento. pero reemplace la url con una url de cloudinary. Para obtener la URL de Cloudinary, cree una función para acceder a la API de Cloudinary para enviar la imagen allí y luego analice la respuesta para obtener la URL de actualización de Markdown.
El script no pudo actualizar los archivos. Las iteraciones posteriores no resuelven el problema. El motor se vuelve “ciego” a la falla y reformula la solución con una falla base similar cada vez que se regenera.
Sin embargo, si paso la computadora por cada paso de un programa, como hice recientemente con el análisis de Nvidia, el motor logra formatear los datos con precisión y escribe una función para replicar el análisis para otras métricas.2
Para la búsqueda web, hice un pequeño script para abrir chatGPT para buscar en lugar de google cada vez que escribo una consulta de búsqueda. Escribir consultas se siente como usar Google por primera vez en la computadora de la biblioteca de la escuela: me abro camino a través de diferentes sintaxis de consulta para obtener el mejor resultado.
Las técnicas de resumen a menudo producen contenido formulaico. En un día lluvioso reciente, pregunté qué hacer en San Francisco, Palo Alto y San José. Cada una de las respuestas incluía una recomendación de museo local, compras y spa. Resultados de la búsqueda MadLibs!
El desafío es que estas “páginas de resultados de búsqueda” no revelan cuán extensa fue la búsqueda: ¿cuántas de las 20 recomendaciones principales de TripAdvisor se consultaron? ¿Podría ser de interés una actividad interior menos común como la escalada en roca? Resolver este problema proporciona una experiencia de usuario, incluso una nueva oportunidad de producto.
La puntualidad es importante: ChatGPT se capacitará en datos web hasta 2021, lo que está demostrando ser un problema importante, ya que con frecuencia busco sitios más nuevos. Toda una generación de empresas Web3 aún no existe en la mente de muchos LLM. Así que consulto a Google Bard en su lugar.
Esas primeras asperezas son de esperar. Los primeros motores de búsqueda, incluido Google, también requerían entradas/indicaciones especiales y sufrían resultados de peor calidad en varias categorías. Con tantas personas brillantes trabajando en este campo, las nuevas soluciones seguramente superarán estos desafíos iniciales.
1
Escribí sobre el uso de LLM para la generación de imágenes en una publicación titulada “Conejos en camiones de bomberos”. Y mis impresiones siguen siendo las mismas: es excelente para los casos de uso del consumidor, pero tiene dificultades para lograr la precisión requerida para las aplicaciones B2B.
2 Para analizar el conjunto de datos de NVDA, uso comentarios, que comienzan con #, para decirle a la computadora cómo limpiar un marco de datos antes de dibujarlo. Una vez que esto se logra, le pido a la computadora que cree una función llamada make_long() que hace lo mismo.1.
# read in the tsv file nvda
nvda = read_tsv("nvda.tsv")
# pull out the third row & call it revenue
revenue = nvda[2,]; head(revenue)
# set colnames equal to sequence of 2004 to 2023 by 1
colnames(revenue) = c("field", seq(2004, 2023, 1))
# make revenue long
revenue_long = gather(revenue, year, value)
# set colnames to year and revenue
colnames(revenue_long) = c("year", "revenue")
...
# plot revenue by year on a line chart with the caption tomtunguz.com and the the line color red with a size of 2
ggplot(revenue_long, aes(x = year, y = revenue/1e3, group = 1)) + geom_line(color = "red", size = 2) + labs(title = "Nvidia Revenue Grew 2.5x in 2 Years", subtitle = "Revenue Has Been Flat in the Last Year but AI Growing Fast", x = "", y = "Revenue, $b", caption = "tomtunguz.com") + scale_y_continuous(limits = c(0,30), breaks = seq(0, 30, by=5))
# create a function to take a row from the nvda data set, make it long, convert both columns to numeric
# and delete where there is na
make_long = function(row) {
colnames(row) = c("field", seq(2004, 2023, 1))
row = gather(row, year, value)
colnames(row) = c("year", "value")
row$value = as.numeric(row$value)
row$year = as.numeric(row$year)
row = row[!is.na(row$value),]
row = row[!is.na(row$year),]
return(row)
}