Los grandes modelos de lenguaje (LLMs) suelen ser pre-entrenados con extensos conjuntos de datos que incluyen tanto texto como código. Si bien el código es fundamental para los modelos centrados en tareas de programación, su inclusión se ha vuelto cada vez más común, incluso en los LLMs diseñados para aplicaciones no relacionadas con la codificación.
En un estudio reciente, investigadores de Cohere exploraron cómo la presencia de datos de código en el pre-entrenamiento de LLMs impacta su rendimiento general en diversas tareas más allá de la codificación. “Aunque los profesionales han coincidido de manera anecdótica en que los datos de código son vitales para el rendimiento de los LLMs, se ha realizado poca investigación sobre su impacto preciso en tareas no relacionadas con el código”, señalaron los investigadores.
Su investigación confirma que el código mejora significativamente el rendimiento de los LLMs en una variedad de tareas no codificadas, con implicaciones para aplicaciones de entrenamiento en el mundo real.
Investigando el Impacto del Código
Los investigadores llevaron a cabo una serie de experimentos para evaluar cómo el código influye en el rendimiento general de los LLMs. Los factores clave incluían la cantidad de código en los datos de entrenamiento, el momento de introducción del código durante el entrenamiento, la calidad del código y el tamaño de los modelos.
Utilizando un enfoque de entrenamiento en dos fases, realizaron un "pre-entrenamiento continuado" en modelos previamente entrenados, incorporando diferentes proporciones de texto y código a lo largo de un número fijo de tokens. Esto fue seguido por una fase de "enfriamiento", enfatizando conjuntos de datos de mayor calidad durante las etapas de entrenamiento final.
El modelo base fue entrenado únicamente con texto. Otros modelos fueron pre-entrenados en conjuntos de datos equilibrados de texto y código, o en datos solo de código antes de pasar al texto. Evaluaron modelos que variaban de 470 millones a 2.8 mil millones de parámetros en varios benchmarks centrados en conocimientos del mundo, razonamiento en lenguaje natural y rendimiento de código.
Los Beneficios del Código para Tareas No Codificadas
Los experimentos demostraron que el código mejoró sustancialmente el rendimiento de los LLMs en tareas no codificadas. En razonamiento en lenguaje natural, los modelos entrenados con código superaron consistentemente a sus contrapartes solo de texto. De hecho, el pre-entrenamiento exclusivo en código logró el mejor rendimiento en estos benchmarks.
“Esto indica que comenzar con un modelo pre-entrenado que tenga una mezcla de código influye positivamente en las tareas de razonamiento en lenguaje natural”, explicaron los investigadores. En tareas de conocimiento del mundo, un conjunto de datos equilibrado de código y texto durante el pre-entrenamiento produjo los mejores resultados. Los investigadores sugirieron que “el rendimiento óptimo en tareas de conocimiento del mundo depende de una mezcla equilibrada de datos para la inicialización y una mayor proporción de texto durante el pre-entrenamiento continuo”.
En tareas generativas, tanto los modelos solo de código como los equilibrados superaron a los modelos solo de texto, lo que indica que la incorporación de código no solo mejora el razonamiento, sino también la calidad generativa. Además, observaron que los beneficios de añadir código aumentaban con el tamaño del modelo, siendo las mejoras más significativas en el conocimiento del mundo y el rendimiento de código, seguidas de mejoras modestas en el razonamiento en lenguaje natural.
“Estos resultados sugieren que el intercambio entre las tareas de lenguaje natural y la generación de código se intensifica a medida que el tamaño del modelo crece”, afirmaron.
Aunque los LLMs suelen mostrar comportamientos emergentes a escalas mayores, los investigadores no pudieron probar modelos muy grandes debido a limitaciones de costos. Sin embargo, se mantienen optimistas sobre que sus hallazgos se extenderán a escalas superiores. “Dado que nuestros resultados son válidos desde 470M hasta 2.8B parámetros, creemos que se aplicarán a modelos aún más grandes y a presupuestos de tokens”, señalaron.
El estudio también reveló que incorporar código sintético de alta calidad en los datos de pre-entrenamiento mejora notablemente el rendimiento, abordando las limitaciones del código generado por humanos. “Nuestro código sintético se creó a partir de enunciados de problemas para producir soluciones validadas en Python”, dijo Viraat Aryabumi, autor principal y becario de investigación en Cohere. “Esto abre un potencial futuro, ya que aprovechar un modelo docente de alto rendimiento es esencial para generar código sintético efectivo”.
Además, encontraron que integrar datos adyacentes al código, como solicitudes de extracción y commits de GitHub, mejoró las capacidades de razonamiento. La incorporación de código en la fase de enfriamiento condujo a mejoras adicionales en el rendimiento en tareas no codificadas, ofreciendo valiosas ideas para las empresas que buscan afinar modelos con sus propios datos en lugar de entrenarlos desde cero.
“La fase de enfriamiento se alinea estrechamente con el ajuste fino en cuanto a costos, calidad de datos y requisitos de recursos, proporcionando ganancias sustanciales. Recomendamos incluir código a lo largo del proceso de entrenamiento”, enfatizó Aryabumi. “Utilizar código de alta calidad—como bases de código internas y datos adyacentes al código—también puede mejorar los resultados durante el enfriamiento”.
A medida que Cohere se enfoca en desarrollar LLMs para aplicaciones empresariales, estos hallazgos podrían influir en futuras implementaciones de modelos y productos, ofreciendo potencialmente una variedad de modelos pre-entrenados con diferentes mezclas de texto y código ajustadas para tareas específicas. Las empresas podrán afinar estos modelos con datos propios para un rendimiento óptimo.
“Nuestros hallazgos son altamente relevantes para los desarrolladores y probablemente conducirán al lanzamiento de modelos más eficientes”, afirmó Aryabumi. “Lo sorprendente es cómo el código mejora el rendimiento más allá de las tareas relacionadas con la codificación, y esto informa nuestro enfoque para desarrollar modelos de vanguardia”.