Los autores: Yue Wang, wang.y@salesforce.com (Salesforce Research Asia) Weishi Wang, weishi.wang@salesforce.com (Salesforce Research Asia; Nanyang Technological University, Singapore) Shafiq Joty, sjoty@salesforce.com (Salesforce Research Asia; Nanyang Technological University, Singapore) Steven C.H. Hoi, shoi@salesforce.com (Salesforce Research Asia) Los autores: Yue Wang, wang.y@salesforce.com (Salesforce Research Asia) Weishi Wang, weishi.wang@salesforce.com (Salesforce Research Asia; Universidad Tecnológica de Nanyang, Singapur) Shafiq Joty, sjoty@salesforce.com (Salesforce Research Asia; Universidad Tecnológica de Nanyang, Singapur) Steven C.H. Hoi, shoi@salesforce.com (Salesforce Research Asia) Abstracción A pesar de su éxito, la mayoría de los métodos actuales se basan en un pre-entrenamiento sólo con codificadores (o sólo con decodificadores) que es suboptimal para la generación de tareas (respecto a la comprensión) o procesar el fragmento de código de la misma manera que el NL, descuidando las características especiales de las tareas de generación de PL, como los tipos de token. Presentamos CodeT5, un modelo unificado de codificador pre-entrenado de codificador-decodificador Transformer que aprovecha mejor la semántica del código transmitido de los identificadores emitidos por el developer. Nuestro modelo emplea un marco unificado para apoyar sin problemas tanto las tareas de generación de código como las tareas de generación de PL y permite el aprendizaje multi-tarefas. Además, proponemos . https://github.com/salesforce/CodeT5 1 Introducción Los modelos de lenguaje pre-entrenados como BERT ( , de En el caso de la PAC ( , de ), y T5 ( , de ) han mejorado considerablemente el rendimiento en un amplio espectro de tareas de procesamiento de lenguaje natural (NLP). Suelen emplear un paradigma de pre-entrenamiento y luego de ajuste fino que tiene como objetivo derivar representaciones de lenguaje genérico mediante una formación auto-supervisada en datos no etiquetados a gran escala, que se pueden transferir para beneficiar a múltiples tareas descendentes, especialmente aquellas con anotación de datos limitada. Inspirado en su éxito, hay muchos intentos recientes de adaptar estos métodos de pre-entrenamiento para el lenguaje de programación (PL) ( , de • El , de • El , de ), mostrando resultados prometedores en tareas relacionadas con el código. Devlin et al. 2019 Radford y al. 2019 Raquel y al. 2020 Svyatkovskiy y al . 2020 Canadá y al. 2020 Feng et al. 2020 Sin embargo, a pesar de su éxito, la mayoría de estos modelos se basan en un modelo sólo codificador similar a BERT ( , de • El , de ) o un modelo solo de decodificador como el GPT ( , de , que es suboptimal para la generación y comprensión de tareas, respectivamente. Por ejemplo, CodeBERT ( , de ) requiere un decodificador adicional cuando se aplica para la tarea de resumir el código, donde este decodificador no puede beneficiarse del pre-entrenamiento. Además, la mayoría de los métodos existentes simplemente emplean las técnicas convencionales de pre-entrenamiento de NLP en el código fuente al tratarlo como una secuencia de tokens como NL. Esto ignora en gran medida la rica información estructural en el código, que es vital para comprender plenamente la semántica del código. Svyatkovskiy et al. 2020 Feng et al. 2020 Canadá y al . 2020 Feng et al. 2020 En este trabajo, presentamos CodeT5, un modelo codificador-decodificador pre-entrenado que considera la información tipo token en el código. Nuestro CodeT5 se basa en la arquitectura T5 ( , de ) que emplea denoising secuencia-a-sequencia (Seq2Seq) pre-entrenamiento y se ha demostrado que beneficia tanto a la comprensión como a las tareas de generación en el lenguaje natural. Además, proponemos aprovechar los identificadores asignados por el desarrollador en el código. Cuando escriben programas, los desarrolladores tienden a emplear identificadores informativos para hacer el código más comprensible, de modo que estos identificadores generalmente conservarían la rica semántica del código, El identificador “binarySearch” en la Figura Para fusionar tales conocimientos específicos de código, proponemos un nuevo objetivo consciente del identificador que capacita al modelo para distinguir qué tokens son identificadores y recuperarlos cuando están mascarados. Raquel y al. 2020 de la G, 2 Además, proponemos aprovechar el código y sus comentarios acompañantes para aprender un mejor alineamiento NL-PL. Los desarrolladores a menudo proporcionan documentación para programas para facilitar un mejor mantenimiento del software ( , de En concreto, consideramos la generación NL→PL y la generación PL→NL como tareas dobles y optimizamos simultáneamente el modelo en ellos. de Sousa et al. 2005 En el caso de los sistemas de codificación de datos, el sistema de codificación de datos ( , de A continuación ( , de En la actualidad, la mayoría de los usuarios de GitHub utilizan el sistema de codificación de código abierto GitHub (CodeXGLUE Benchmark, por sus siglas en inglés). , de ), incluyendo dos tareas de comprensión: detección de defectos de código y detección de clones, y tareas de generación como resumir el código, generar, traducir y refinar. , también exploramos el aprendizaje multi-tareas para ajustar el CodeT5 en múltiples tareas a la vez usando un código de control de tareas como el prompt de fuente. Husain et al. 2019 Feng et al. 2020 Lu y al. 2021 1 Presentamos uno de los primeros modelos unificados de codificador-decodificador CodeT5 para soportar tanto la comprensión relacionada con el código como las tareas de generación, y también permite el aprendizaje multi-task. Proponemos un nuevo objetivo de pre-entrenamiento consciente del identificador que considere la información crucial del tipo de token (identificadores) del código. Además, proponemos aprovechar los pares NL-PL que están naturalmente disponibles en el código fuente para aprender un mejor alineamiento cross-modal. Los extensos experimentos muestran que CodeT5 produce resultados de última generación en las catorce sub-tareas de CodeXGLUE.El análisis adicional muestra que nuestro CodeT5 puede capturar mejor la semántica del código con la propuesta de pre-entrenamiento consciente del identificador y la generación dual bimodal beneficia principalmente a las tareas NL↔PL. 2 Trabajo relacionado Los modelos pre-formados basados en las arquitecturas de Transformer ( , de En la actualidad, se pueden clasificar en tres categorías diferentes, por ejemplo, las categorías de las categorías de las categorías de las categorías de las categorías de las categorías ( , de Rubió ( , de , y el electra ( , de , sólo decodificadores modelos como GPT ( , de , y los modelos de codificador-decodificador como MASS ( , de El barroco ( , de ), y T5 ( , de En comparación con los modelos sólo de codificador y solo de decodificador que favorecen las tareas de comprensión y generación, respectivamente, los modelos de codificador-decodificador pueden soportar bien ambos tipos de tareas. A menudo emplean objetivos de pre-entrenamiento de secuencia a secuencia que corrompen la entrada de fuente y requieren que el decodificador los recupere. Pre-training on Natural Language. Vasconcelos y al. 2017 Devlin et al. 2019 Liu y al . 2019b Clark et al. 2020 Radford y al. 2019 canciones y al. 2019 Lewis y Al. 2020 Raquel y al. 2020 El lenguaje de programación es un campo emergente en el que muchos trabajos recientes intentan extender los métodos de pre-entrenamiento de NLP al código fuente. , de ) y Codebert ( , de En el caso de las lenguas indígenas, las lenguas indígenas son un grupo de lenguas indígenas que se caracterizan por la existencia de una lengua indígenas indígenas, y las lenguas indígenas son un grupo de lenguas indígenas ( , de ) tarea de aprender la representación cross-modal NL-PL. Además de los modelos de estilo BERT, (en el ) y (en el ) emplean respectivamente GPT y UniLM ( , de ) para la tarea de finalización del código. Transcoder ( , de ) explora la traducción del lenguaje de programación en un entorno no supervisado.A diferencia de ellos, exploramos modelos de codificador-decodificador basados en T5 para la preparación del lenguaje de programación y soportamos un conjunto más completo de tareas. Pre-training on Programming Language. Canadá y al. 2020 Feng y al . 2020 Clark et al. 2020 Svyatkovskiy et al. 2020 Liu et al. 2020 Dong y al. 2019 Rosario y al. 2020 Algunos trabajos emergentes ( , de ; , de • El , de ) en la literatura reciente también exploran el marco T5 sobre código, pero sólo se centran en un subconjunto limitado de tareas de generación y no apoyan tareas de comprensión como nosotros. , de ) basado en otro modelo de codificador-decodificador BART también puede soportar tanto tareas de comprensión como de generación. Sin embargo, todo el trabajo anterior simplemente procesa el código de la misma manera que el lenguaje natural y en gran medida ignora las características específicas del código. Clement et al. 2020 Mastropaolo et al. 2021 Elnaggar et al. 2021 Ahmad et al. 2021 Por ejemplo, en el caso de las bolsas de plástico ( , de ) incorpora el flujo de datos extraído de la estructura de código en CodeBERT, mientras (en el Proponer un objetivo de desobfuscation para aprovechar el aspecto estructural de PL. Estos modelos sólo se centran en la formación de un mejor codificador específico de código. (en el Por el contrario, nos enfocamos específicamente en los identificadores que reservan la semántica de código rico y fusionamos dicha información en un modelo Seq2Seq a través de dos nuevas tareas de etiquetado de identificadores y predicción. Guo et al. 2021 Rosario y al. 2021 Gutiérrez et al. 2021 3 Código 5 El código T5 se basa en un marco codificador-decodificador con la misma arquitectura que el T5 ( , de Tiene como objetivo derivar representaciones genéricas para el lenguaje de programación (PL) y el lenguaje natural (NL) a través de la formación previa en el código fuente sin etiqueta. , extendemos el objetivo denoisante Seq2Seq en T5 proponiendo dos tareas de etiquetado de identificadores y predicción para permitir al modelo aprovechar mejor la información de tipo de token de PL, que son los identificadores asignados por los desarrolladores. Raquel y al. 2020 2 A continuación, presentamos cómo CodeT5 codifica las entradas PL y NL (§ ) y nuestras propuestas de identificación-conciencia de tareas de pre-entrenamiento (§ ), seguido del ajuste perfecto con aprendizaje de transferencia específico de tareas y formación multi-task (§ ) de 3.1 3.2 3.3 3.1 Codificación NL y PL En la fase de pre-entrenamiento, nuestro modelo recibiría PL-only o NL-PL como entradas dependiendo de si el fragmento de código tiene descripciones NL acompañantes o no. Para las entradas bimodales de NL-PL, las concatenamos en una secuencia con un token delimitador [SEP] y representamos toda la secuencia de entrada en el formato como = ([ClS] es el número de 1*, ..., por lo tanto, [SEP], 1*, ..., cm*, [SEP]), donde y Denota el número de tokens de palabra NL y tokens de código PL, respectivamente. La secuencia de palabras NL estará vacía para las entradas unimodales PL-sólo. x w c n m Con el fin de capturar más características específicas del código, proponemos aprovechar la información tipo token del código. Nombres de funciones y variables) ya que son una de las características más PL-agnosticas y reservan una rica semántica de código. Especificamente, convertimos el segmento PL en un árbol de sintaxis abstracta (AST) y extraemos los tipos de nodos para cada token de código. Finalmente, construimos una secuencia de etiquetas binarias ∈ {0*, * 1} para el segmento PL, donde cada ∈ {0*,* 1} representa si el token ¿Es un identificador o no? de la G, y m yi El Ci 3.2 Tareas de pre-entrenamiento Ahora presentamos nuestras propuestas de tareas de pre-entrenamiento que permiten a CodeT5 aprender patrones útiles a partir de datos bimodales PL-only o NL-PL. Se ha demostrado que el pre-entrenamiento de desprestigio de secuencia a secuencia (Seq2Seq) es bastante eficaz en un amplio conjunto de tareas de NLP ( , • El , de • El , de Esta desnaturalización, por lo general, primero corrompe la secuencia de fuente con algunas funciones de ruido y luego requiere que el decodificador recupere los textos originales. , de ) que mascara aleatoriamente los intervalos con longitudes arbitrarias y luego predice estos intervalos mascados combinados con algunos tokens sentinel en el decodificador. Como se ilustra en la figura a) El Identifier-aware Denoising Pre-training. canciones y al. 2019 Raf-fel y al. 2020 Lewis y Al. 2020 Raquel y al. 2020 Masked Span Prediction (MSP) 2 En concreto, empleamos la misma tasa de corrupción del 15% que T5 y aseguramos que la longitud promedio de la franja sea de 3 mostrando uniformemente los intervalos de 1 a 5 tokens. por el muestreo de intervalos antes de la tokenización de suborden, que tiene como objetivo evitar el mascaramiento de sub-tokens parciales y se ha demostrado útil ( , de Notablemente, pre-trainamos un modelo compartido para varios PLs para aprender robustas representaciones cross-linguales. La palabra máscara Sol y al. 2019 donde θ son los parámetros del modelo, x\mask es la entrada enmascarada, xmask es la secuencia enmascarada para predecir desde el decodificador con k que denota el número de tokens en xmask, y xmask <t es la secuencia de span generada hasta ahora. To fuse more code-specific structural information (the identifier node type in AST) into the model, we propose two additional tasks: y Complementar el entrenamiento precoz. Identificador de etiquetado (IT) Predicción de identificadores mascarados (MIP) • El El objetivo es notificar al modelo con el conocimiento de si este token de código es un identificador o no, que comparte un espíritu similar de sintaxis en algunas herramientas asistidas por desarrolladores. (b), mapeamos los estados ocultos finales del segmento PL en el codificador CodeT5 en una secuencia de probabilidades En el ( 1*, ..., pm*), y calcular una pérdida de entropía cruzada binaria para el etiquetado de secuencias: Identifier Tagging (IT) 2 p p dónde Tenga en cuenta que al lanzar la tarea como un problema de etiquetado de secuencia, se espera que el modelo capture la sintaxis del código y las estructuras de flujo de datos del código. Tiene • El A diferencia del encubrimiento aleatorio de intervalos en MSP, encubrimos todos los identificadores en el segmento PL y empleamos un token sentinel único para todas las ocurrencias de un identificador específico. where changing identifier names does not impact the code semantics. Inspired by (en el ), organizamos los identificadores únicos con los tokens sentinel en una secuencia de objetivo Como se muestra en la figura (c). We then predict it in an auto-regressive manner: Masked Identifier Prediction (MIP) Obfusiones Rosario y al. 2021 I 2 where \I is the masked input. Note that is a more challenging task that requires the model to comprehend the code semantics based on obfuscated code and link the occurrences of the same identifiers together. x deobfuscation We alternately optimize these three losses with an equal probability, which constitutes our proposed identifier-aware denoising pre-training. En la fase de pre-entrenamiento, el decodificador sólo ve intervalos y identificadores mascarados discretos, lo que es diferente de las tareas de continuación donde el decodificador necesita generar textos NL fluidos o snippets de código correcto sintácticamente. Para cerrar la brecha entre el pre-entrenamiento y el ajuste fino, proponemos aprovechar los datos bimodales NL-PL para entrenar el modelo para una conversión bidireccional como se muestra en la Figura (d) Especificamente, consideramos la generación NL→PL y la generación PL→NL como tareas dobles y optimizamos simultáneamente el modelo sobre ellos. Bimodal Dual Generation. 2 En el caso de las lenguas indígenas, se utilizan dos variantes de las lenguas indígenas ( <java> and <en> for Java PL and English NL, respectively). This operation can be also seen as a special case of T5’s span masking by either masking the full NL or PL segment from the bimodal inputs. This task aims to improve the alignment between the NL and PL counterparts. de la G, 3.3 Fine-tuning de CodeT5 Después de un entrenamiento previo sobre datos no etiquetados a gran escala, adaptamos CodeT5 a las tareas a continuación a través de aprendizaje de transferencia específico de tareas o aprendizaje multi-task. Code-related tasks can be categorized into generation and understanding tasks. For the former one, our CodeT5 can be naturally adapted with its Seq2Seq framework. For understanding tasks, we investigate two ways of either generating the label as a unigram target sequence ( , ), or predicting it from the vocabulary of class labels based on the last decoder hidden state following ( ). Task-specific Transfer Learning: Generation vs. Understanding Tasks. Raffel et al. 2020 Lewis et al. 2020 We also explore a multi-task learning setting by training a shared model on multiple tasks at a time. Multi-task learning is able to reduce computation cost by reusing the most of model weights for many tasks and has been shown to improve the model generalization capability in NL pre-training ( , ) Nosotros seguimos ( ) to employ the same unified model for all tasks without adding any task-specific networks but allow to select different best checkpoints for different tasks. To notify the model with which task it is dealing with, we design a unified format of task control codes and prepend it into the source inputs as shown in Figure . For instance, we employ “Translate Java to CSharp:” as the source prompt for the code-to-code translation task from Java to CSharp. Multi-task Learning. Liu et al. 2019a Raquel y al. 2020 1 As different tasks have different dataset sizes, we follow Conneau and Lample (2019) to employ a balanced sampling strategy. For N number of datasets (or tasks), with probabilities {qi} N i=1, we define the following multinomial distribution to sample from: where ni is number of examples for i-th task and α is set to 0.7. This balanced sampling aims to alleviate the bias towards high-resource tasks. 4 Instalación experimental 4.1 Bases de datos de pre-entrenamiento We follow Feng et al. (2020) to employ CodeSearchNet (Husain et al., 2019) to pre-train CodeT5, which consists of six PLs with both unimodal and bimodal data. Apart from that, we additionally collect two datasets of C/CSharp from BigQuery1 to ensure that all downstream tasks have overlapped PLs with the pre-training data. In total, we employ around 8.35 million instances for pretraining. Table 1 shows some basic statistics. To obtain the identifier labels from code, we leverage the tree-sitter2 to convert the PL into an abstract syntax tree and then extract its node type information. We filter out reserved keywords for each PL from its identifier list. We observe that PLs have different identifier rates, where Go has the least rate of 19% and Ruby has the highest rate of 32%. 4.2 Code-specific Tokenizer La tokenización es un ingrediente clave para el éxito de los modelos de lenguaje pre-entrenados como BERT y GPT. A menudo emplean un codificador de byte-pair (BPE) a-kenizer ( , ) to alleviate the Out-of-Vocabulary (OoV) issues. Specifically, we train a Byte-level BPE tokenizer following ( ) and set the vocabulary size to 32,000 as T5. We add additional special tokens ([PAD], [CLS], [SEP], [MASK0], ..., [MASK99]). This tokenzier is trained on all of our pre-training data with non-printable characters and low-frequent tokens (occurring <3 times) filtered. We compare it with T5’s default tokenizer and find that our tokenizer largely reduces the length of tokenized code sequence by 30% - 45% on downstream tasks. This will accelerate the training and especially benefit generation tasks due to the shorter sequence to predict. We also spot a severe problem for applying the T5’s default tokenizer on source code, where it would encode some common code tokens such as brackets [‘{’, ‘}’] into unknown tokens. Sennrich et al. 2016 Radford y al. 2019 4.3 Tareas y métricas descendentes We cover most generation and understanding tasks in the CodeXGLUE benchmark ( , ) y emplear los conjuntos de datos públicos proporcionados y las mismas fracciones de datos que le siguen para todas estas tareas. Lu et al. 2021 En primer lugar, consideramos dos tareas de generación intermodal. aims to summarize a function-level code snippet into English descriptions. The dataset consists of six PLs including Ruby, JavaScript, Go, Python, Java, and PHP from CodeSearchNet ( , ). We employ the smoothed BLEU-4 ( , de ) to eval-uate this task. is the task to gen-erate a code snippet based on NL descriptions. We employ the Concode data ( , ) in Java where the input contains both NL texts and class environment contexts, and the output is a function. We evaluate it with BLEU-4, exact match (EM) accuracy, and CodeBLEU ( , ) that considers syntactic and semantic matches based on the code structure in addition to the n-gram match. Code summarization Husain et al. 2019 Lin and Och 2004 Code generation Iñaki y al. 2018 Ren y al. 2020 Besides, we consider two code-to-code generation tasks. tiene como objetivo migrar el software legado de un PL a otro, donde nos centramos en traducir funciones de Java a CSharp y viceversa. aims to convert a buggy function into a correct one. We employ two Java datasets provided by ( ) with various function lengths: small (fewer than 50 tokens) and medium (50-100 tokens). We use BLEU-4 and exact match to evaluate them. Code translation Code refinement Tufano et al. 2019 We also investigate how CodeT5 performs on two understanding-based tasks. The first one is that aims to predict whether a code is vulnerable to software systems or not. We use the C dataset provided by ( El experimento, la segunda tarea which aims to measure the similarity between two code snippets and predict whether they have the same functionality. We experiment with the Java data provided by (en el ). We employ F1 score and accuracy for evaluating these two tasks respectively. In total, our CodeT5 supports six tasks and fourteen sub-tasks in CodeXGLUE with a unified encoder-decoder model. defect detection Zhou et al. 2019 clone detection Wang et al. 2020 4.4 Modelos de comparación We compare CodeT5 with state-of-the-art (SOTA) pre-trained models that can be categorized into three types: encoder-only, decoder-only, and encoder-decoder models. As models, we consider RoBERTa ( , ), RoBERTa (code) trained with masked language modeling (MLM) on code, CodeBERT ( , ) entrenado con tanto MLM y sustituido token detección ( , ), GraphCode-BERT ( , ) using data flow from code, and DOBF ( , de ) trained with the identifier deobfuscation objective. Note that although DOBF employs a Seq2Seq model during pre-training, it only aims to train a better encoder for downstream tasks without exploring the poten-tial benefit of the pre-trained decoder. encoder-only Liu et al. 2019b Feng et al. 2020 Clark et al. 2020 Guo et al. 2021 Rozière et al. 2021 por models, we compare GPT-2 ( , ) and its adaptations on code domain including CodeGPT-2, and CodeGPT-adapted. The difference is that the latter one utilizes a GPT-2 checkpoint for model initialization while the former one is trained from scratch. As models, the current SOTA model for the CodeXGLUE benchmark is PLBART ( , ) basado en BART ( , ) architecture. For pre-training data, most of these models employ CodeSearchNet ( , ) except DOBF and PLBART. DOBF is pre-trained on 7.9M Java and 3.6M Python files from BigQuery while PLBART employs a much larger data with 470M Python and 210M Java functions, and 47M NL posts from StackOverflow. decoder-only Radford y al. 2019 encoder-decoder Ah-mad et al. 2021 Lewis et al. 2020 Husain et al. 2019 4.5 Model Configurations Se trata de un sistema basado en el sistema de codificación de la tabla 5 ( , ) PyTorch implementation and employ two sizes of CodeT5-small (60M) and CodeT5-base (220M). We set the maximum source and target sequence lengths to be 512 and 256, respectively. We use the mixed precision of FP16 to accelerate the pre-training. We set the batch size to 1024 and employ the peak learning rate of 2e-4 with linear decay. We pre-train the model with the denoising objective for 100 epochs and bimodal dual training for further 50 epochs on a cluster of 16 NVIDIA A100 GPUs with 40G memory. The total training time for CodeT5-small and CodeT5-base is 5 and 12 days, respectively. Raf-fel et al. 2020 3 In the fine-tuning phase, we find that the tasks in CodeXGLUE ( , ) are quite sensitive to some hyper parameters such as learning rate, training steps, and batch size. We conduct a grid search and select the best parameters based on the validation set. In multi-task learning, we cover all downstream tasks except clone detection. Lu y al. 2021 5 Results and Analysis In this section, we compare CodeT5 with SOTA models on a broad set of CodeXGLUE downstream tasks (§ ), and investigate the effects of our bimodal dual generation and multi-task learning (§ ), followed by a detailed analysis on the proposed identifier-aware pre-training (§ ). 5.1 5.2 5.3 5.1 CodeXGLUE Downstream Tasks We evaluate two sizes of our model: CodeT5-small and CodeT5-base that are pre-trained with identifier-aware denoising. In addition, we consider the model that continues to train with bimodal dual generation (dual-gen) and show the results with multi-task fine-tuning. The results of all comparison models are obtained from their original papers and also the CodeXGLUE paper ( , ) de Lu et al. 2021 We show code summarization results of smoothed BLEU-4 on six PL data in Table . We observe all our model variants significantly outperform prior work with either an encode-only (RoBERTa, CodeBERT, DOBF) or encoder-decoder framework (PLBART). Moreover, the salient performance gap between these two groups of models confirms that encode-only frameworks are suboptimal for generation tasks. Compared to the SOTA encoder-decoder model PLBART, we find that even our CodeT5-small yields better overall scores (also on Python and Java) given that our model is much smaller (60M vs. 140M) and PLBART is pre-trained with much larger Python and Java data (> 100 times). We attribute such improvement to our identifier-aware denoising pre-training and better employment of bi-modal training data . By increasing the model size, our CodeT5-base boosts the overall performance by over 1.2 absolute points over PLBART. Code Summarization. 2 4 We compare CodeT5 with GPT-style models and PLBART in Table . Our CodeT5-small outperforms all decoder-only mod-els and also the SOTA PLBART, which again confirms the superiority of encoder-decoder models at generating code snippets. Moreover, our CodeT5-base further significantly pushes the SOTA results across three metrics. Particularly, it achieves around 4.7 points improvement on CodeBLEU over PLBART, indicating our CodeT5 can better comprehend the code syntax and semantics with the __help of identi__fier-aware pre-training. Code Generation. 3 We compare two code-to-code generation tasks: code translation and code refinement in Table and further consider one naive copy baseline by copying the source input as the target prediction. In the code translation task, our CodeT5-small outperforms most of base-lines and obtains comparable results with PLBART, which shows the advantages of encoder-decoder models in the code-to-code generation setting. Our CodeT5-base further achieves consistent improvements over PLBART across various metrics for translating from Java to C# and vice versa. Code-to-Code Generation Tasks. 4 Here we show one CodeT5’s output of translating C# to Java in Figure En este caso, a pesar de la mala puntuación BLEU, CodeT5 es capaz de generar una función que reserva la misma funcionalidad e incluso tiene una mejor legibilidad en comparación con la verdad fundamental. Esto revela que CodeT5 tiene una buena capacidad de generalización en lugar de memorizar y repetir lo que ha visto antes. Por otro lado, también sugiere que la puntuación BLEU no es una métrica de evaluación perfecta para tareas de generación de código, donde a veces una puntuación más alta puede reflejar los problemas de copia problemáticos de los modelos neuronales. 3 Another code-to-code generation task is code refinement, a challenging task that requires detecting which parts of code are buggy and fix them via generating a bug-free code sequence. Due to the large overlap of source and target code, even the naive copy approach yields very high BLEU scores but zero exact matches. Therefore, we focus on the exact match (EM) metric to evaluate on this task. As shown in Table , we observe that EM scores for the small data are consistently higher than the medium one, indicating that it is harder to fix bugs for a longer code snippet. Our CodeT5-base significantly outperforms all baselines on EM and especially boosts over 4.8 points for the more challenging medium task (13.96 vs. GraphCodeBERT’s 9.10), reflecting its strong code understanding capability. 4 We compare with two understanding tasks of defect detection and clone detection in Table 5. Understanding Tasks. Specifically, we generate the binary labels as a unigram sequence from the decoder for the defect detection task, while for the clone detection task, we first obtain the sequence embedding of each code snippet using the last decoder state following ( ) and then predict the labels by measuring their similarity. Both CodeT5-small and CodeT5-base outperform all baselines on the defect detection task while CodeT5-base yields 2.6 accuracy score improvement than PLBART. For the clone detection task, our CodeT5 models achieve comparable results to the SOTA GraphCodeBERT and PLBART models. These results demonstrate that with an encode-decoder framework, our CodeT5 can still be adapted well for understanding tasks. Lewis et al. 2020 5.2 Effects of Bimodal Dual Generation and Multi-task Learning We examine the effects of bimodal dual generation at pre-training and multi-task learning at fine-tuning. The bimodal pre-training brings consistent improvements for code summarization and generation tasks on both CodeT5-small and CodeT5-base. However, this pre-training task does not help and even sometimes slightly hurts the performance for PL-PL generation and understanding tasks. We anticipate this is because bimodal dual generation learns a better alignment between PL and NL that naturally benefits the former tasks involving both PL and NL. As a side effect, this objective could bias the model towards the PL-NL tasks and affect its performance on PL-PL tasks. En el aprendizaje multi-task, generalmente mejora la mayoría de las tareas a continuación, excepto la traducción de código y la detección de defectos. En particular, aumenta en gran medida el rendimiento en la resumida de código, lo que no es sorprendente, ya que la resumida de código ocupa la mayor parte de las sub tareas (seis de trece) y, por lo tanto, se beneficia más del aprendizaje multi-task. Además, observamos que el aprendizaje multi-task mejora constantemente el rendimiento del refinado de código, lo que podría beneficiarse de la formación conjunta de los datos de refinado de pequeña y mediana. Otra razón posible es que el entrenamiento de tareas múltiples con detección de defectos permitiría al modelo comprender mejor la semántica del código para la detección de errores, que también es un paso intermedio necesario para el refinamiento del código. 5.3 Análisis de Pre-Entrenamiento Identificador-consciente Proporcionamos un estudio de ablación para examinar la contribución de cada componente en nuestro objetivo de conciencia del identificador. En concreto, comparamos el rendimiento de nuestro pequeño CodeT5 en cuatro tareas seleccionadas al ablatar cada uno de los tres objetivos: predicción del rango enmascarado (MSP), etiquetado de identificadores (IT) y predicción de identificadores enmascarados (MIP). , we observe that generally removing one of the objectives would reduce the performance for all tasks, indicating that all objectives contribute to the better code understanding of our CodeT5. However, the effect of each objective differs across tasks. Specifically, removing MSP would largely reduce the performance of all generation tasks but instead increase the defect detection performance. This shows that masked span prediction is more crucial for capturing syntactic information for generation tasks. On the contrary, removing MIP would hurt the defect detection task the most, indicating that it might focus more on code semantic understanding. By combining these objectives, our CodeT5 can better capture both syntactic and semantic information from code. 6 We further provide outputs from CodeT5 and its variant without MIP and IT on code generation in Figure . We observe that CodeT5 can correctly generate the exact function, while the model without MIP and IT fails to recover the identifiers of “s2” and “hasField”. This shows our identifier-aware denoising pre-training can better distinguish and leverage the identifier information. 4 We also investigate the identifier tagging performance and find it achieves over 99% F1 for all PLs, showing that our CodeT5 can confidently distinguish identifiers in code. We then check whether MSP and MIP tasks would have conflicts as they employ the same sentinel tokens for masking. In identifier masking, all occurrences of one unique identifier are replaced with the same sentinel token, resulting in a many-to-one mapping compared to the one-to-one mapping in span prediction. We compare models pre-trained with either MSP or MIP, and both on these two tasks in Table Informamos de la exactitud de la predicción y también de la proporción de cuántas veces pueden generar el mismo número de predicciones que los tokens sentinel. Observamos que el pre-entrenamiento sólo con MIP o MSP bias el modelo hacia esa tarea, logrando mala exactitud y mayor desacuerdo en el número de predicciones cuando se aplica a la otra tarea. Interesantemente, encontramos que el objetivo MIP-solo puede recuperar mejor el número correcto de predicciones en la tarea MSP que el modelo MSP-solo hace para la tarea MIP, lo que significa que es más fácil adaptarse de multi-a-un mapping a uno-a-uno mapping y difícil para el contrario. 7 6 Conclusión We have presented CodeT5, a pre-trained encoder-decoder model that incorporates the token type information from code. We propose a novel identifier-aware pre-training objective to better leverage the identifiers and propose a bimodal dual generation task to learn a better NL-PL alignment using code and its comments. Our unified model can support both code understanding and generation tasks and allow for multi-task learning. Experiments show that CodeT5 significantly outperforms all prior work in most CodeXGLUE tasks. Further analysis also reveals its better code comprehension capability across various programming languages. Broader Impact and Ethical Consideration Our work generally belongs to NLP applications for software intelligence. With the goal of improving the development productivity of software with machine learning methods, software intelligence research has attracted increasing attention in both academia and industries over the last decade. Software code intelligence techniques can help developers to reduce tedious repetitive workloads, enhance the programming quality and improve the overall software development productivity. This would considerably decrease their working time and also could potentially reduce the computation and operational cost, as a bug might degrade the system performance or even crash the entire system. Our work addresses the fundamental challenge of software code pre-training, our study covers a wide range of code intelligence applications in the software development lifecycle, and the proposed CodeT5 method achieves the state-of-the-art performance on many of the benchmark tasks, showing its great potential benefit towards this goal. We further discuss the ethical consideration of training CodeT5 and the potential risks when applying it into real-world downstream applications: The training datasets in our study are source code including user-written comments from open source Github repositories and publicly available, which do not tie to any specific application. However, it is possible that these datasets would encode some stereotypes like race and gender from the text comments or even from the source code such as variables, function and class names. As such, social biases would be intrinsically embedded into the models trained on them. As suggested by (en el ), interventions such as filtration or modulation of generated outputs may help to mitigate these biases in code corpus. Dataset bias. Chen et al. 2021 Our model pre-training requires non-trivial computational resources though we have tried our best to carefully design our experiments and improve experiments to save unnecessary computation costs. In fact, compared to the recent large-scale language model Codex ( , ), our CodeT5-base has a much smaller model size of 220M than theirs of 12B (∼ 55×). In addition, we experiment on Google Cloud Plat-form which purchases carbon credits to reduce its carbon footprint, training CodeT5-base produced around 49.25 kg CO2 which was totally off-set by the provider. Furthermore, we release our pre-trained models publicly to avoid repeated training for the code intelligence research community. Computational cost. Chen et al. 2021 e.g., Dado que CodeT5 puede ser implementado para proporcionar asistencia de codificación como la generación de código para ayudar a los desarrolladores, los vicios de automatización de los sistemas de aprendizaje automático deben considerarse cuidadosamente, especialmente para los desarrolladores que tienden a depender excesivamente de las salidas generadas por los modelos. A veces estos sistemas pueden producir funciones que parecen superficialmente correctas pero no se alinean realmente con las intenciones del desarrollador. Si los desarrolladores adoptan involuntariamente estas sugerencias de código incorrecto, esto podría causarles mucho más tiempo en el desgaste e incluso llevar a algunos problemas de seguridad significativos. Sugerimos que los profesionales que utilizan CodeT5 siempre tengan en cuenta que sus salidas de generación deben ser tomadas sólo como referencias que los expertos en dominio requieren para una mayor corrección y verificación de Automation bias. En la actualidad, el sistema de codificación está basado en el código CodeSearchNet ( , ) and a small fraction of Google BigQuery, both of which are originally collected from public Github repositories. Pre-trained mod-els might encode some sensitive information ( personal addresses or identification numbers) from the training data. Though we have conducted multi-rounds of data cleaning to mitigate this before training our models, it is still possible that some sensitive information cannot be completely removed. Besides, due to the non-deterministic nature of generation models like CodeT5, it might produce some vulnerable code to harmfully affect the software and even be able to benefit more advanced malware development when deliberately misused. Security implications. Husain et al. 2019 de la G, Acknowledgements We thank Akhilesh Deepak Gotmare, Amrita Saha, Junnan Li, and Chen Xing for valuable discussions. We thank Kathy Baxter for the ethical review. We also thank our anonymous reviewers for their insightful feedback on our paper. Referencias Wasi Uddin Ahmad, Saikat Chakraborty, Baishakhi Ray, and Kai-Wei Chang. 2021. . In , pages 2655–2668. Association for Computational Linguistics. Unified pre-training for program understanding and generation Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, NAACL-HLT 2021, Online, June 6-11, 2021 Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harrison Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, Alex Ray, Raul Puri, Gretchen Krueger, Michael Petrov, Heidy Khlaaf, Girish Sastry, Pamela Mishkin, Brooke Chan, Scott Gray, Nick Ryder, Mikhail Pavlov, Alethea Power, Lukasz Kaiser, Mohammad Bavarian, Clemens Win-ter, Philippe Tillet, Felipe Petroski Such, Dave Cum-mings, Matthias Plappert, Fotios Chantzis, Eliza-beth Barnes, Ariel Herbert-Voss, William Hebgen Guss, Alex Nichol, Alex Paino, Nikolas Tezak, Jie Tang, Igor Babuschkin, Suchir Balaji, Shantanu Jain, William Saunders, Christopher Hesse, Andrew N. Carr, Jan Leike, Joshua Achiam, Vedant Misra, Evan Morikawa, Alec Radford, Matthew Knight, Miles Brundage, Mira Murati, Katie Mayer, Peter Welin-der, Bob McGrew, Dario Amodei, Sam McCandlish, Ilya Sutskever, and Wojciech Zaremba. 2021. . , abs/2107.03374. Evaluating large language models trained on code Corr Kevin Clark, Minh-Thang Luong, Quoc V. Le y Christopher D. Manning. . In . OpenReview.net. ELECTRA: pre-training text encoders as discriminators rather than Generadores 8a Conferencia Internacional sobre Representaciones de Aprendizaje, ICLR 2020, Addis Ababa, Etiopía, 26-30 de abril de 2020 Colin B. Clement, Dawn Drain, Jonathan Timcheck, Alexey Svyatkovskiy, and Neel Sundaresan. 2020. . In , pages 9052–9065. Association for Computational Linguistics. Pymt5: multi-mode translation of natural language and python code with transformers Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing, EMNLP 2020, Online, November 16-20, 2020 Alexis Conneau y Guillaume Lample. . In Páginas 7057 a 7067. Cross-lingual language model pretraining Advances in Neural Information Processing Systems 32: Annual Conference on Neural Information Processing Systems 2019, NeurIPS 2019, December 8-14, 2019, Vancouver, BC, Canada Sergio Cozzetti B. de Souza, Nicolas Anquetil, and Káthia Marçal de Oliveira. 2005. En Las páginas A study of the documentation essential to software maintenance Procedimientos de la 23a Conferencia Internacional Anual sobre Diseño de Comunicación: Documentación y Diseño para Información Pervasiva, SIGDOC 2005, Coventry, Reino Unido, 21-23 de septiembre de 2005 68–75. ACM. Jacob Devlin, Ming-Wei Chang, Kenton Lee y Kristina Toutanova. En , pages 4171–4186. BERT: Pre-entrenamiento de Transformadores bidireccionales para la comprensión del lenguaje Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, NAACL-HLT 2019, Minneapolis, MN, USA, June 2-7, 2019, Volume 1 (Long and Short Papers) Li Dong, Nan Yang, Wenhui Wang, Furu Wei, Xi-aodong Liu, Yu Wang, Jianfeng Gao, Ming Zhou, and Hsiao-Wuen Hon. 2019. . In , pages 13042–13054. Lenguaje Unificado Modelos de pre-entrenamiento para la comprensión y generación del lenguaje natural Advances in Neural Information Processing Systems 32: Annual Conference on Neural Information Processing Systems 2019, NeurIPS 2019, December 8-14, 2019, Vancouver, BC, Canada Ahmed Elnaggar, Wei Ding, Llion Jones, Tom Gibbs, Tamas Feher, Christoph Angerer, Silvia Severini, Florian Matthes y Burkhard Rost. . , abs/2104.02443. Code-trans: Towards cracking the language of silicone’s codificación a través del autoaprendizaje supervisado y de un alto performance computing CoRR Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xi-aocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang y Ming Zhou. . In , pages 1536–1547. Association for Computational Linguistics. Code-bert: Un modelo pre-entrenado para la programación y los lenguajes naturales Procedimientos de la Conferencia de 2020 sobre métodos empíricos en el procesamiento del lenguaje natural: hallazgos, EMNLP 2020, evento en línea, 16-20 de noviembre de 2020 Daya Guo, Shuo Ren, Shuai Lu, Zhangyin Feng, Duyu Tang, Shujie Liu, Long Zhou, Nan Duan, Alexey Svyatkovskiy, Shengyu Fu, Michele Tu-fano, Shao Kun Deng, Colin B. Clement, Dawn Drain, Neel Sundaresan, Jian Yin, Daxin Jiang, and Ming Zhou. 2021. . In . OpenReview.net. Graphcodebert: Pre-training code representations with data flow 9th International Conference on Learning Representations, ICLR 2021, Virtual Event, Austria, May 3-7, 2021 Hamel Husain, Ho-Hsiang Wu, Tiferet Gazit, Miltiadis Allamanis y Marc Brockschmidt. . , abs/1909.09436. Code-searchnet challenge: Evaluating the state of semantic code search CoRR Srinivasan Iyer, Ioannis Konstas, Alvin Cheung, and Luke Zettlemoyer. 2018. . In , pages 1643–1652. Association for Computational Linguistics. Mapping language to code in programmatic context Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, Brussels, Belgium, October 31 - November 4, 2018 Aditya Kanade, Petros Maniatis, Gogul Balakrishnan, and Kensen Shi. 2020. . In , volume 119 of , páginas 5110-5121. PMLR. Aprender y evaluar contextual embedding of source code Proceedings of the 37th International Conference on Machine Learning, ICML 2020, 13-18 July 2020, Virtual Event Proceedings of Machine Learning Research Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Veselin Stoyanov, and Luke Zettlemoyer. 2020. . In , páginas 7871–7880. de la Asociación para la Lingüística Computacional. BART: denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics, ACL 2020, Online, July 5-10, 2020 Chin-Yew Lin and Franz Josef Och. 2004. En . ORANGE: a method for evaluating automatic evaluation metrics for machine translation COLING 2004, 20th International Conference on Computational Linguistics, Proceedings of the Conference, 23-27 August 2004, Geneva, Switzerland Fang Liu, Ge Li, Yunfei Zhao y Zhi Jin. . In , pages 473–485. IEEE. Multi-task learning based pre-trained language model for code completion 35a Conferencia Internacional IEEE/ACM sobre Ingeniería de Software Automatizado, ASE 2020, Melbourne, Australia, 21-25 de septiembre de 2020 Xiaodong Liu, Pengcheng He, Weizhu Chen, and Jian-feng Gao. 2019a. En , pages 4487–4496. Association for Computational Linguistics. Multi-task deep neural networks for natural language understanding Proceedings of the 57th Conference of the Association for Computational Linguistics, ACL 2019, Florence, Italy, July 28- August 2, 2019, Volume 1: Long Papers Yinhan Liu, Myle Ott, Naman Goyal, Jingfei Du, Man-dar Joshi, Danqi Chen, Omer Levy, Mike Lewis, Luke Zettlemoyer, and Veselin Stoyanov. 2019b. . , abs/1907.11692. Roberta: un enfoque de pre-entrenamiento BERT robusto optimizado CoRR Shuai Lu, Daya Guo, Shuo Ren, Junjie Huang, Alexey Svyatkovskiy, Ambrosio Blanco, Colin B. Clement, Dawn Drain, Daxin Jiang, Duyu Tang, Ge Li, Li-dong Zhou, Linjun Shou, Long Zhou, Michele Tu-fano, Ming Gong, Ming Zhou, Nan Duan, Neel Sun-daresan, Shao Kun Deng, Shengyu Fu, and Shujie Liu. 2021. . , abs/2102.04664. Codexglue: un conjunto de datos de referencia para el aprendizaje automático para la comprensión y la generación de código Corr Antonio Mastropaolo, Simone Scalabrino, Nathan Cooper, David Nader-Palacio, Denys Poshyvanyk, Rocco Oliveto y Gabriele Bavota. . In , pages 336–347. IEEE. Studying the usage of text-to-text transfer transformer to support code-related tasks 43rd IEEE/ACM International Conference on Software Engineering, ICSE 2021, Madrid, Spain, 22-30 May 2021 Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei y Ilya Sutskever. . , 1 ( 8 ) : 9 Language models are unsupervised multitask learners OpenAI blog Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. 2020. . , 21:140:1–140:67. Explorar los límites Aprendizaje de transferencia con un transformador unificado de texto a texto J. Mach. Aprendizaje Res. Shuo Ren, Daya Guo, Shuai Lu, Long Zhou, Shujie Liu, Duyu Tang, Neel Sundaresan, Ming Zhou, Am-brosio Blanco y Shuai Ma. . el , abs/2009.10297 por el Consejo de Administración. Codebleu: a Método para la evaluación automática de la síntesis de código CoRR Baptiste Rozière, Marie-Anne Lachaux, Lowik Chanussot, and Guillaume Lample. 2020. . In Unsupervised translation of programming languages Avances en Sistemas de Procesamiento de Información Neural 33: Conferencia Anual sobre Sistemas de Procesamiento de Información Neural 2020, NeurIPS 2020, diciembre . 6-12, 2020, virtual Baptiste Rozière, Marie-Anne Lachaux, Marc Szafraniec, and Guillaume Lample. 2021. . el , abs/2102.07492. DOBF: A deobfuscation pre-training objective for programming languages Corr Rico Sennrich, Barry Haddow, and Alexandra Birch. 2016. . In Asociación para la Lingüística Informática. Neural machine translation of rare words with Unidades subordinadas Acta de la 54a Reunión Anual de la Asociación de Lingüística Computacional, ACL 2016, 7-12 de agosto de 2016, Berlín, Alemania, Volumen 1: Documentos largos Kaitao Song, Xu Tan, Tao Qin, Jianfeng Lu y Tie-Yan Liu. . In , volume 97 of , páginas 5926–5936. p. MASS: secuencia mascarada a pre-entrenamiento de secuencia para la generación de idiomas Proceedings of the 36th International Conference on Machine Learning, ICML 2019, 9-15 de junio de 2019, Long Beach, California, Estados Unidos Proceedings of Machine Learning Research Yu Sun, Shuohuan Wang, Yu-Kun Li, Shikun Feng, Xuyi Chen, Han Zhang, Xin Tian, Danxiang Zhu, Hao Tian y Hua Wu. . , abs/1904.09223. ERNIE: enhanced representation through knowledge integration CoRR Alexey Svyatkovskiy, Shao Kun Deng, Shengyu Fu y Neel Sundaresan. En , pages 1433–1443. ACM. Intellicode compose: code generation using transformer ESEC/FSE ’20: 28th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering, Virtual Event, USA, November 8-13, 2020 Michele Tufano, Cody Watson, Gabriele Bavota, Massimiliano Di Penta, Martin White y Denys Poshy-vanyk. . , 28(4):19:1–19:29. Un estudio empírico sobre el aprendizaje bug-fixing patches in the wild via neural machine translation ACM Trans. Softw. Ing. Metodol. Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser e Illia Polosukhin. . In , pages 5998–6008. La atención es todo Necesitas Avances en Sistemas de Procesamiento de Información Neural 30: Conferencia Anual sobre Sistemas de Procesamiento de Información Neural 2017, 4 y 9 de diciembre de 2017, Long Beach, CA, Estados Unidos Wenhan Wang, Ge Li, Bo Ma, Xin Xia y Zhi Jin. . In , pages 261–271. IEEE. Detección de clones de código con la red neural gráfica y la sintaxis abstracta aumentada por flujo tree 27th IEEE International Conference on Software Analysis, Evolution and Reengineering, SANER 2020, London, ON, Canada, February 18-21, 2020 Yaqin Zhou, Shangqing Liu, Jing Kai Siow, Xiaon-ing Du, and Yang Liu. 2019. . In , páginas 10197–10207. Título: Eficaz Identificación de vulnerabilidades mediante el aprendizaje de la semántica integral del programa a través de redes neuronales de grafo Avances en Sistemas de Procesamiento de Información Neural 32: Conferencia Anual sobre Sistemas de Procesamiento de Información Neural 2019, NeurIPS 2019, 8-14 de diciembre de 2019, Vancouver, BC, Canadá Daniel Zügner, Tobias Kirschstein, Michele Catasta, Jure Leskovec y Stephan Günnemann. En En el OpenReview.net. Aprendizaje de la representación agnóstica de la fuente Código de estructura y contexto 9th International Conference on Learning Representations, ICLR 2021, Virtual Event, Austria, May 3-7, 2021 Este artículo está disponible en archivo bajo la licencia CC by 4.0 Deed (Attribution 4.0 International). Este documento es Con la licencia CC 4.0 Deed (Attribution 4.0 International). Disponible en Archivo