Avances en Modelos de Lenguaje Especializados para Ingeniería de Software
Este estudio destaca la efectividad de los modelos de lenguaje personalizados usando datos de Stack Overflow.
― 10 minilectura
Tabla de contenidos
- Importancia de los Modelos de Lenguaje en Ingeniería de Software
- Resumen de Stack Overflow
- Estructura de Modelos de Lenguaje Preentrenados
- Entrenamiento con Datos de Stack Overflow
- Diseño del Modelo y Proceso de Entrenamiento
- Evaluación del Rendimiento del Modelo
- Conclusión
- Fuente original
- Enlaces de referencia
Los grandes Modelos de lenguaje preentrenados han cambiado tanto la comprensión del lenguaje natural como la ingeniería de software. Modelos como la serie GPT de OpenAI han hecho grandes avances en comparación con modelos anteriores como BERT y RoBERTa. Estos modelos grandes aprenden patrones y significados del lenguaje usando enormes cantidades de datos de Internet. Se entrenan con datos diversos, lo que les ayuda a entender cómo los humanos usan el lenguaje.
Sin embargo, los modelos más grandes son costosos de crear y usar, y a menudo no están abiertos para el examen público. Esto significa que muchas veces no sabemos cómo se construyeron o qué datos utilizaron. Creemos que, aunque los modelos generales grandes son útiles, también hay una necesidad de modelos más pequeños y específicos que puedan enfocarse en tareas particulares. En este estudio, observamos el rico entorno de Stack Overflow, un sitio de preguntas y respuestas para programadores, como un ejemplo de donde tales modelos enfocados pueden sobresalir.
Nuestro enfoque implica usar datos disponibles de Stack Overflow, que incluye pares extensos de preguntas y respuestas, junto con comentarios. Seguimos prácticas estándar para entrenar nuestros modelos. Creamos dos modelos a partir de estos datos: uno con 125 millones de Parámetros y otro con 762 millones de parámetros, con costos de alrededor de $374 y $1600, respectivamente. Comparamos cómo se desempeñan nuestros modelos frente a modelos anteriores que se enfocaron completamente en datos de Stack Overflow, así como modelos de uso general y ChatGPT de OpenAI en cuatro tareas distintas específicas para Stack Overflow.
Nuestros modelos superan consistentemente a otros modelos en todas las tareas, demostrando que incluso el más pequeño a menudo proporciona resultados sólidos. Ambos modelos están disponibles para el público. El éxito resalta que cuando los modelos se entrenan a fondo en datos específicos, pueden ofrecer una alternativa poderosa y rentable a modelos grandes y de código cerrado.
Importancia de los Modelos de Lenguaje en Ingeniería de Software
Los modelos de lenguaje han impactado significativamente tanto el procesamiento del lenguaje natural como la ingeniería de software. En procesamiento de lenguaje natural, estos modelos ayudan con varias tareas como clasificar y organizar texto, analizar sentimientos en texto y traducir de un idioma a otro. En ingeniería de software, tratan el código como un lenguaje y ayudan con tareas como completar código, encontrar errores y resumir código.
Se pueden construir modelos desde cero para nuevas tareas si tienen suficientes datos, típicamente contados en millones de tokens. Sin embargo, hallazgos recientes muestran que es más efectivo pre-entrenar modelos con grandes cantidades de datos antes de ajustarlos para tareas específicas. Después del pre-Entrenamiento, modelos más pequeños como BERT generalmente se ajustan para tareas específicas mientras que modelos más grandes como GPT-3 pueden interactuar con los usuarios respondiendo preguntas y proporcionando ejemplos.
La tendencia ha sido hacia modelos más grandes. Modelos como GPT-3, que tiene 175 mil millones de parámetros, y otros requieren grandes cantidades de datos, a menudo en cientos de miles de millones de tokens, para ser efectivos. Tienen un rendimiento notable en tareas de lenguaje cuando se les da una descripción de un problema y algunos ejemplos.
Sin embargo, usar estos modelos grandes tiene un precio. Son caros y difíciles de ajustar para proyectos más pequeños con recursos limitados. Muchos de estos modelos tampoco son de código abierto, lo que restringe el acceso a cómo fueron entrenados y qué datos utilizaron. Además, su enfoque de entrenamiento general a menudo resulta en un rendimiento más bajo en tareas donde hay suficientes datos específicos para entrenar.
En respuesta, la comunidad de ingeniería de software ha desarrollado modelos enfocados en tareas de codificación específicas. Por ejemplo, CodeBERT se basa en BERT y se entrena para predecir partes faltantes de código. Otros modelos como Codex y CodeGen están diseñados para crear código a medida que reciben entradas.
En este estudio, contribuimos entrenando modelos adicionales estilo BERT en datos de Stack Overflow. Esta plataforma es única ya que contiene información de alta calidad, combinando explicaciones con código, lo que la hace ideal para programadores que buscan ayuda.
Modelos genéricos de BERT han sido ajustados con éxito en datos de Stack Overflow. Algunos investigadores incluso han propuesto pre-entrenar estos modelos específicamente en Stack Overflow, encontrándolos más efectivos para tareas específicas. En nuestro trabajo, ampliamos esta idea, mejorando cómo entrenamos estos modelos al enfocarnos en los vastos y ricos datos disponibles de Stack Overflow.
Resumen de Stack Overflow
Stack Overflow es una gran plataforma de preguntas y respuestas, particularmente para programadores de software. Cada publicación consta de varios elementos clave: un título, un cuerpo de pregunta, un cuerpo de respuesta y comentarios de usuarios. El título ofrece una breve visión general de qué trata la pregunta, mientras que el cuerpo de la pregunta contiene información detallada sobre el problema o consulta del usuario.
El cuerpo de la respuesta contiene respuestas de otros usuarios que abordan la pregunta, mientras que los comentarios proporcionan contexto adicional, aclaraciones o sugerencias sobre la publicación principal. Las publicaciones también están etiquetadas con palabras clave que describen sus temas, ayudando a los usuarios a encontrar preguntas y respuestas relevantes.
Cuando los usuarios hacen preguntas en el sitio, generalmente proporcionan no solo texto, sino también materiales relacionados como código de muestra, capturas de pantalla y enlaces a recursos. Además, utilizan etiquetas para identificar el lenguaje de programación o la biblioteca involucrada en sus consultas. Una vez que se publica una pregunta, otros usuarios pueden responder con respuestas, y el autor original puede seleccionar una como la solución aceptada.
La comunidad también puede votar a favor o en contra de respuestas y preguntas, lo que ayuda a resaltar el contenido más útil y minimizar publicaciones de baja calidad. Sin embargo, vale la pena mencionar que la respuesta aceptada no siempre es la que tiene más votos, lo que indica la rica diversidad de opiniones sobre cómo resolver problemas.
Estructura de Modelos de Lenguaje Preentrenados
Los modelos de lenguaje predicen texto basado en el contexto proporcionado. Hay dos tipos clave: modelos autorregresivos y modelos de lenguaje enmascarado. Los modelos autorregresivos predicen la siguiente palabra en una secuencia basada en palabras anteriores. En contraste, los modelos de lenguaje enmascarado predicen ciertas palabras ocultas en un texto.
Ambos tipos pueden ser preentrenados en extensos conjuntos de datos de texto, descomponiendo documentos en ejemplos de entrenamiento. Los modelos autorregresivos son particularmente útiles cuando el resultado deseado es generar nuevo texto, como se ve en modelos como ChatGPT. Los modelos de lenguaje enmascarado, como BERT, se benefician al tener el documento completo durante el entrenamiento, lo que les permite crear una comprensión sólida del texto.
BERT, desarrollado por Google, es especialmente notable. Utiliza una arquitectura única que le permite aprender del contexto al predecir palabras enmascaradas en oraciones. Este diseño lo ayuda a entender mejor el significado del texto, haciéndolo efectivo para varias tareas como etiquetar entidades nombradas en una oración o clasificar texto.
Google ha lanzado dos versiones de BERT, BERTBase y BERTLarge, que varían en tamaño y complejidad. BERTBase tiene 110 millones de parámetros, mientras que BERTLarge tiene alrededor de 340 millones de parámetros. Nuestros modelos, SOBertBase y SOBertLarge, buscan aprovechar arquitecturas similares mientras se enfocan en los ricos datos de Stack Overflow.
Entrenamiento con Datos de Stack Overflow
Stack Overflow proporciona volcados actualizados regularmente de contenido disponible públicamente, incluidas preguntas, respuestas, comentarios e interacciones de usuarios. Esta riqueza de datos, junto con su clara anotación de texto explicativo junto con el código, lo convierte en un excelente recurso para la investigación en ingeniería de software.
Sin embargo, trabajar con datos de Stack Overflow presenta algunos desafíos. La calidad de las respuestas varía significativamente, algunas son incompletas o carecen de contexto. La gran cantidad de datos hace que sea difícil discernir el contenido de alta calidad relevante para preguntas de investigación específicas.
Para mejorar la calidad de los datos, filtramos las respuestas para enfocarnos en aquellas que tienen al menos un voto positivo, lo que indica un cierto nivel de participación comunitaria. Después de filtrar, obtuvimos millones de publicaciones de respuestas y comentarios para crear nuestro conjunto de datos para el entrenamiento.
Preprocesamos los datos para garantizar que sean adecuados para el entrenamiento del modelo. Esto incluye tokenizar y limpiar el texto, mientras que preservamos los fragmentos de código ya que son una parte integral del contenido. El texto limpio se tokeniza para un procesamiento eficiente en nuestro modelo de lenguaje.
Diseño del Modelo y Proceso de Entrenamiento
En nuestro diseño, establecemos la longitud máxima de secuencia de entrada para nuestros modelos en 2048 tokens, un aumento significativo desde los convencionales 512 tokens utilizados en muchos modelos. Esta decisión se basa en el análisis que muestra que muchas publicaciones de Stack Overflow superan el límite de longitud tradicional, lo que nos permite retener más contexto útil durante el entrenamiento.
Dividimos nuestro entrenamiento en dos modelos, SOBertBase con 125 millones de parámetros y SOBertLarge con 762 millones de parámetros. El entrenamiento se realiza utilizando técnicas y herramientas avanzadas para garantizar un procesamiento paralelo eficiente. Entrenamos nuestros modelos durante 100,000 pasos, exponiéndolos a miles de millones de tokens para asegurar que aprendan efectivamente de los datos.
El costo total de este entrenamiento es relativamente bajo en comparación con muchos modelos de vanguardia, lo que lo hace accesible para equipos más pequeños e investigadores que pueden no tener recursos extensos a su disposición.
Evaluación del Rendimiento del Modelo
Para evaluar qué tan bien se desempeñan nuestros modelos, los ajustamos en cuatro tareas diferentes que se enfocan en entender preguntas y respuestas de Stack Overflow. Estas tareas incluyen:
- Predicción de Calidad de Preguntas: Determinar la calidad de las preguntas publicadas en la plataforma.
- Predicción de Preguntas Cerradas: Predecir si una pregunta será cerrada por moderadores.
- Reconocimiento de Entidades Nombradas: Identificar entidades técnicas importantes dentro del texto.
- Detección de Obsolescencia: Identificar respuestas que pueden contener información o código desactualizado.
Para cada tarea, analizamos la efectividad de nuestros modelos en comparación con modelos de uso general y modelos especializados previamente establecidos. Usamos métricas como precisión, exactitud y puntuación F1 para proporcionar una comprensión completa del rendimiento.
Nuestros resultados demuestran que SOBert superó significativamente a otros modelos en todas las tareas. El modelo más pequeño, SOBertBase, a menudo tuvo un rendimiento notable, demostrando que modelos más pequeños entrenados efectivamente en datos específicos pueden lograr resultados sólidos.
Conclusión
A través de nuestro estudio, enfatizamos la importancia de usar modelos especializados entrenados en conjuntos de datos específicos. Los resultados muestran que incluso modelos con menos parámetros pueden superar a modelos más grandes y de propósito general cuando se entrenan con datos relevantes y de alta calidad.
Liberamos nuestros modelos para uso público, proporcionando herramientas valiosas para cualquier persona que busque mejorar su comprensión del contenido de Stack Overflow. Este trabajo ilustra que la consideración cuidadosa de los datos de entrenamiento y el diseño del modelo es fundamental para lograr resultados exitosos en tareas de procesamiento de lenguaje natural e ingeniería de software.
Título: "Medium" LMs of Code in the Era of LLMs: Lessons From StackOverflow
Resumen: Large pre-trained neural language models have brought immense progress to both NLP and software engineering. Models in OpenAI's GPT series now dwarf Google's BERT and Meta's RoBERTa, which previously set new benchmarks on a wide range of NLP applications. These models are trained on massive corpora of heterogeneous data from web crawls, which enables them to learn general language patterns and semantic relationships. However, the largest models are both expensive to train and deploy and are often closed-source, so we lack access to their data and design decisions. We argue that this trend towards large, general-purpose models should be complemented with single-purpose, more modestly sized pre-trained models. In this work, we take StackOverflow (SO) as a domain example in which large volumes of rich aligned code and text data is available. We adopt standard practices for pre-training large language models, including using a very large context size (2,048 tokens), batch size (0.5M tokens) and training set (27B tokens), coupled with a powerful toolkit (Megatron-LM), to train two models: SOBertBase, with 109M parameters, and SOBertLarge with 762M parameters, at a budget of just $\$187$ and $\$800$ each. We compare the performance of our models with both the previous SOTA model trained on SO data exclusively as well general-purpose BERT models and OpenAI's ChatGPT on four SO-specific downstream tasks - question quality prediction, closed question prediction, named entity recognition and obsoletion prediction (a new task we introduce). Not only do our models consistently outperform all baselines, the smaller model is often sufficient for strong results. Both models are released to the public. These results demonstrate that pre-training both extensively and properly on in-domain data can yield a powerful and affordable alternative to leveraging closed-source general-purpose models.
Autores: Manisha Mukherjee, Vincent J. Hellendoorn
Última actualización: 2024-01-24 00:00:00
Idioma: English
Fuente URL: https://arxiv.org/abs/2306.03268
Fuente PDF: https://arxiv.org/pdf/2306.03268
Licencia: https://creativecommons.org/licenses/by/4.0/
Cambios: Este resumen se ha elaborado con la ayuda de AI y puede contener imprecisiones. Para obtener información precisa, consulte los documentos originales enlazados aquí.
Gracias a arxiv por el uso de su interoperabilidad de acceso abierto.