Grandes modelos de lenguaje y el auge de los generadores de código de IA
Por Martín Heller
Editor colaborador, InfoWorld |
Cuando escribí sobre GitHub Copilot en noviembre de 2021, Copilot era una de las pocas tecnologías de generación de código de IA disponibles. Lo probé como una extensión de Visual Studio Code. En ese momento, Copilot no siempre generaba código bueno, correcto o incluso en ejecución, pero aun así era algo útil. La gran promesa detrás de Copilot (y otros generadores de código que usan el aprendizaje automático) es que fue diseñado para mejorar con el tiempo, incorporando comentarios de los usuarios e incorporando nuevos ejemplos de código en su corpus de entrenamiento.
A partir de mayo de 2023, hay cientos de extensiones de "IA" o "generación de código" disponibles solo para Visual Studio Code. Varios de estos pueden ahorrarle algo de tiempo mientras codifica, pero si cree en su código generado sin revisarlo, probarlo y depurarlo, tengo un puente para venderle.
Cientos de extensiones de Visual Studio Code en el mercado prometen "generación de código" o "IA", pero solo una fracción de ellas genera código basado en el aprendizaje automático.
Un desarrollo prometedor en esta área es que varias herramientas tienen generación automática de pruebas unitarias. La generación de pruebas unitarias es un problema mucho más manejable que la generación de código de propósito general; de hecho, se puede hacer usando patrones simples, pero aún tendrá que revisar y ejecutar las pruebas generadas para ver si tienen sentido.
En el resto de este artículo, ofreceré una breve historia de los modelos de lenguaje, antes de examinar los modelos de lenguaje grande (LLM) de última generación, como la familia GPT de OpenAI y LaMDA y PaLM de Google, utilizados para la generación de texto. y la generación de código hoy. Terminaremos con un recorrido rápido por 10 herramientas de generación de código, incluidas Amazon CodeWhisperer, Google Bard y GitHub Copilot X.
Los modelos de lenguaje se remontan a Andrey Markov en 1913. Esa área de estudio ahora se llama cadenas de Markov, un caso especial de modelos de Markov. Markov demostró que en ruso, concretamente en Eugene Onegin de Pushkin, la probabilidad de que aparezca una letra depende de la letra anterior, y que, en general, las consonantes y las vocales tienden a alternarse. Desde entonces, los métodos de Markov se han generalizado a palabras, a otros idiomas y a otras aplicaciones lingüísticas.
El trabajo de Markov fue ampliado por Claude Shannon en 1948 para la teoría de las comunicaciones, y nuevamente por Fred Jelinek y Robert Mercer de IBM en 1985 para producir un modelo de lenguaje basado en validación cruzada (que llamaron estimaciones eliminadas), y aplicado a tiempo real, Reconocimiento de voz de gran vocabulario. Esencialmente, un modelo de lenguaje estadístico asigna probabilidades a secuencias de palabras.
Para ver rápidamente un modelo de idioma en acción, escriba algunas palabras en la Búsqueda de Google o en una aplicación de mensajes de texto en su teléfono inteligente y permita que ofrezca opciones de autocompletado.
En 2000 Yoshua Bengio et al. publicó un artículo sobre un modelo de lenguaje probabilístico neuronal en el que las redes neuronales reemplazan las probabilidades en un modelo de lenguaje estadístico, evitando la maldición de la dimensionalidad y mejorando las predicciones de palabras (basadas en palabras anteriores) sobre un modelo de trigrama suavizado (entonces el estado del arte ) en un 20% a 35%. La idea de modelos de lenguaje de red neuronal autorregresivos y de alimentación hacia adelante todavía se usa hoy en día, aunque los modelos ahora tienen miles de millones de parámetros y están entrenados en corpus extensos, de ahí el término "modelos de lenguaje grande".
Como veremos, los modelos de lenguaje han seguido creciendo con el tiempo para que funcionen mejor. Sin embargo, esto tiene sus costos. El artículo de 2021 Sobre los peligros de los loros estocásticos: ¿Pueden los modelos de lenguaje ser demasiado grandes? por Emily Bender, Timnit Gebru, et al. se pregunta si estamos yendo demasiado lejos con esta tendencia. Los autores sugieren, entre otras cosas, que primero deberíamos sopesar los costos ambientales y financieros e invertir recursos en seleccionar y documentar cuidadosamente conjuntos de datos en lugar de ingerir todo en la web.
La reciente explosión de grandes modelos de lenguaje fue desencadenada por el artículo de 2017 Attention is All You Need, de Ashish Vaswani et al. de Google Brain y Google Research. Ese documento introdujo "una nueva arquitectura de red simple, el Transformador, basada únicamente en mecanismos de atención, prescindiendo por completo de la recurrencia y las circunvoluciones". Los modelos de transformadores son más simples y superiores a los modelos recurrentes y convolucionales. También requieren mucho menos tiempo para entrenar.
ELMo es una representación de palabras profundamente contextualizada de 2018 de AllenNLP (consulte el artículo de ELMo) que modela características complejas del uso de palabras (p. ej., sintaxis y semántica) y cómo estos usos varían en los contextos lingüísticos (es decir, para modelar la polisemia). El modelo original tiene 93,6 millones de parámetros y se entrenó en One Billion Word Benchmark.
BERT es un modelo de lenguaje de 2018 de Google AI Language basado en la arquitectura de red neuronal Transformer (2017) de la empresa (consulte el documento BERT). BERT está diseñado para entrenar previamente representaciones bidireccionales profundas a partir de texto sin etiquetar mediante el condicionamiento conjunto del contexto izquierdo y derecho en todas las capas. Los dos tamaños de modelo utilizados en el documento original fueron 100 millones y 340 millones de parámetros totales. BERT usa modelado de lenguaje enmascarado (MLM) en el que ~15% de los tokens están "corrompidos" para el entrenamiento. Fue entrenado en Wikipedia en inglés más el Toronto Book Corpus.
El modelo 2020 Text-To-Text Transfer Transformer (T5) de Google (consulte el documento T5) sintetiza un nuevo modelo basado en las mejores técnicas de transferencia de aprendizaje de GPT, ULMFiT, ELMo y BERT y sus sucesores, utilizando un nuevo código abierto , conjunto de datos previos al entrenamiento llamado Colossal Clean Crawled Corpus (C4). El C4 estándar para inglés es un conjunto de datos de 800 GB basado en el conjunto de datos de Common Crawl. T5 reformula todas las tareas de procesamiento del lenguaje natural en un formato unificado de texto a texto donde la entrada y la salida son siempre cadenas de texto, en contraste con los modelos de estilo BERT que generan solo una etiqueta de clase o un tramo de la entrada. El modelo base T5 tiene alrededor de 220 millones de parámetros totales.
OpenAI, una empresa de investigación y despliegue de IA, tiene la misión de "garantizar que la inteligencia general artificial (AGI) beneficie a toda la humanidad". Por supuesto, OpenAI aún no ha alcanzado AGI. Y algunos investigadores de IA, como el pionero del aprendizaje automático Yann LeCun de Meta-FAIR, creen que el enfoque actual de OpenAI para AGI es un callejón sin salida.
OpenAI es responsable de la familia de modelos de lenguaje GPT, que están disponibles a través de la API de OpenAI y el servicio Azure OpenAI de Microsoft. Tenga en cuenta que toda la familia GPT se basa en la arquitectura de red neuronal Transformer 2017 de Google, que es legítima porque Google utiliza Transformer de código abierto.
GPT (Transformador preentrenado generativo) es un modelo de 2018 de OpenAI que utiliza alrededor de 117 millones de parámetros (consulte el documento GPT). GPT es un transformador unidireccional que se entrenó previamente en el Toronto Book Corpus y se entrenó con un objetivo de modelado de lenguaje causal (CLM), lo que significa que fue entrenado para predecir el siguiente token en una secuencia.
GPT-2 es una ampliación directa de GPT de 2019 con 1500 millones de parámetros, entrenados en un conjunto de datos de ocho millones de páginas web o ~40 GB de datos de texto. OpenAI originalmente restringió el acceso a GPT-2 porque era "demasiado bueno" y daría lugar a "noticias falsas". La empresa finalmente cedió, aunque los posibles problemas sociales empeoraron aún más con el lanzamiento de GPT-3.
GPT-3 es un modelo de lenguaje autorregresivo de 2020 con 175 000 millones de parámetros, entrenado en una combinación de una versión filtrada de Common Crawl, WebText2, Books1, Books2 y Wikipedia en inglés (consulte el documento GPT-3). La red neuronal utilizada en GPT-3 es similar a la de GPT-2, con un par de bloques adicionales.
El mayor inconveniente de GPT-3 es que tiende a "alucinar", en otras palabras, inventar hechos sin una base discernible. GPT-3.5 y GPT-4 tienen el mismo problema, aunque en menor medida.
CODEX es un descendiente de 2021 de GPT-3 que se ajustó para la generación de código en 54 millones de repositorios GitHub de código abierto. Es el modelo utilizado en GitHub Copilot, que analizo en la siguiente sección.
GPT-3.5 es un conjunto de actualizaciones de 2022 para GPT-3 y CODEX. El modelo gpt-3.5-turbo está optimizado para el chat, pero también funciona bien para las tareas de finalización tradicionales.
GPT-4 es un gran modelo multimodal de 2023 (que acepta entradas de imágenes y texto, emite salidas de texto) que, según OpenAI, exhibe un rendimiento a nivel humano en varios puntos de referencia profesionales y académicos. GPT-4 superó a GPT-3.5 en una serie de exámenes simulados, incluido el examen de barra uniforme, el LSAT, el GRE y varios exámenes de materias AP.
Es motivo de gran preocupación que OpenAI no haya explicado cómo se entrenó GPT-4; la compañía dice que es por razones competitivas, lo que tiene sentido dada la competencia entre Microsoft (que ha estado financiando OpenAI) y Google. Aún así, no conocer los sesgos en el corpus de entrenamiento significa que no conocemos los sesgos en el modelo. La opinión de Emily Bender sobre GPT-4 (publicada en Mastodon el 16 de marzo de 2023) es que "se debe suponer que GPT-4 es basura tóxica hasta que #OpenAI esté * abierto * sobre sus datos de entrenamiento, arquitectura modelo, etc."
ChatGPT y BingGPT son chatbots que se basaron originalmente en gpt-3.5-turbo y en marzo de 2023 se actualizaron para usar GPT-4. Actualmente, para acceder a la versión de ChatGPT basada en GPT-4, debe suscribirse a ChatGPT Plus. El ChatGPT estándar, basado en GPT-3.5, se entrenó con datos que se cortaron en septiembre de 2021. BingGPT, al que puede acceder en el navegador Microsoft Edge, también se entrenó con datos que se cortaron en 2021, pero dice (cuando pregunta it) que "estoy constantemente aprendiendo y actualizando mis conocimientos con nueva información de la web".
BingGPT explicando su modelo de lenguaje y datos de entrenamiento, a la derecha de la imagen. Captura de pantalla tomada el 16 de marzo de 2023.
A principios de marzo de 2023, Pascale Fung, del Centro de Investigación de Inteligencia Artificial de la Universidad de Ciencia y Tecnología de Hong Kong, dio una charla sobre la evaluación de ChatGPT. Vale la pena pasar la hora para verlo.
LaMDA (Language Model for Dialogue Applications), la tecnología de conversación "innovadora" de Google de 2021, es un modelo de Transformer de 2017 entrenado en diálogo y ajustado para mejorar significativamente la sensatez y la especificidad de sus respuestas. Una de las fortalezas de LaMDA es que puede manejar la desviación del tema que es común en las conversaciones humanas.
Una versión de LaMDA impulsa a Bard, el servicio de inteligencia artificial conversacional de Google. Bard se lanzó el 21 de marzo de 2023 y estuvo disponible para el público en general el 10 de mayo de 2023. Analizo sus capacidades de generación de código a continuación.
PaLM (Pathways Language Model) es un modelo de transformador denso de solo decodificador de 2022 de Google Research con 540 000 millones de parámetros, entrenado con el sistema Pathways (consulte el artículo de PaLM). PaLM se capacitó con una combinación de conjuntos de datos en inglés y multilingües que incluyen documentos web de alta calidad, libros, Wikipedia, conversaciones y código de GitHub.
Google también creó un vocabulario "sin pérdidas" para PaLM que conserva todos los espacios en blanco (especialmente importantes para el código), divide los caracteres Unicode fuera del vocabulario en bytes y divide los números en tokens individuales, uno para cada dígito. PaLM-Coder es una versión de PaLM 540B ajustada con precisión en un conjunto de datos de código exclusivo de Python.
PaLM-E es un modelo de lenguaje multimodal "incorporado" (para robótica) de 2023 de Google. Los investigadores comenzaron con PaLM, un poderoso modelo de lenguaje grande, y lo incorporaron (la "E" en PaLM-E) al complementarlo con datos de sensores del agente robótico. PaLM-E es también un modelo de visión y lenguaje generalmente capaz. Además de PaLM, incorpora el modelo de visión ViT-22B.
LLaMA (Large Language Model Meta AI) es un modelo de lenguaje grande "en bruto" de 65 000 millones de parámetros lanzado por Meta AI (también conocido como Meta-FAIR) en febrero de 2023. Según Meta, "entrenar modelos básicos más pequeños como LLaMA es deseable en el lenguaje grande". espacio modelo porque requiere mucho menos poder de cómputo y recursos para probar nuevos enfoques, validar el trabajo de otros y explorar nuevos casos de uso. tareas."
LLaMA se lanzó en varios tamaños, junto con una tarjeta modelo que detalla cómo se construyó el modelo. Originalmente, tenía que solicitar los puntos de control y el tokenizador, pero ahora están disponibles, ya que alguien que obtuvo correctamente los modelos mediante la presentación de una solicitud publicó un torrente descargable en 4chan, según Yann LeCun de Meta-FAIR.
Si bien se pueden usar varios modelos de lenguaje grandes, incluidos ChatGPT y Bard, para la generación de código tal como se lanzaron, ayuda si se ajustan con precisión en algún código, generalmente de software gratuito de código abierto para evitar una violación manifiesta de los derechos de autor. Eso todavía plantea el espectro de la "piratería de software de código abierto", que es el reclamo de una demanda colectiva federal de 2022 contra GitHub, Microsoft (propietario de GitHub) y OpenAI sobre el producto GitHub Copilot y el modelo OpenAI GPT Codex.
Tenga en cuenta que, además de usar modelos de IA capacitados en gran medida en código disponible públicamente, algunas herramientas de generación de código se basan en la búsqueda de sitios de código compartido como Stack Overflow.
Amazon CodeWhisperer se integra con los IDE de Visual Studio Code y JetBrains, genera sugerencias de código en respuesta a comentarios y finalizaciones de código en función del código existente, y puede escanear el código en busca de problemas de seguridad. También puede activar CodeWhisperer para usarlo dentro de AWS Cloud9 y AWS Lambda.
CodeWhisperer admite bien los lenguajes de programación Python, Java, JavaScript, TypeScript y C#, y otros 10 lenguajes de programación en menor grado. Está disponible gratis para desarrolladores individuales y cuesta $19 por usuario por mes para equipos profesionales.
CodeWhisperer me ayudó a escribir el código de Python que se muestra a continuación. Lo revisé, probé y depuré, y está bien.
Generación de código con Amazon CodeWhisperer. Escribí el comentario en la parte superior del archivo y la mayor parte del resto era CodeWhisperer. Tuve que elegir mi código entre varias opciones y eliminar una declaración de importación no utilizada de una opción anterior.
La compatibilidad de Bard con la programación se anunció el 21 de abril de 2023. El anuncio señala la compatibilidad con más de 20 lenguajes de programación, incluidos C++, Go, Java, JavaScript, TypeScript y Python. Como prueba rápida, le pedí a Bard que "escribiera una función Go para devolver la fecha y la hora actuales". Lo hizo tan rápido:
Bard generó una función de lenguaje Go correcta, un ejemplo del uso de la función y una explicación de la función, todo desde el mensaje "escriba una función Go para devolver la fecha y la hora actuales". Tenga en cuenta los iconos para copiar la función y el código de prueba.
Bard no solo escribió la función, sino que también la explicó y generó un ejemplo de cómo llamar a la función.