32.3 C
Colombia
lunes, julio 7, 2025

Modelos de PNL de última generación de R



Modelos de PNL de última generación de R

Introducción

El Transformadores repositorio de “Cara de abrazo” contiene una gran cantidad de modelos de última generación listos para usar, que son fáciles de descargar y ajustar con Tensorflow y Keras.

Para ello, los usuarios normalmente necesitan obtener:

  • El modelo en sí (por ejemplo, Bert, Albert, RoBerta, GPT-2, and many others.)
  • El objeto tokenizador
  • Los pesos del modelo.

En esta publicación, trabajaremos en una tarea clásica de clasificación binaria y entrenaremos nuestro conjunto de datos en 3 modelos:

Sin embargo, los lectores deben saber que se puede trabajar con transformadores en una variedad de tareas posteriores, como por ejemplo:

  1. extracción de características
  2. análisis de sentimiento
  3. clasificación de texto
  4. respuesta a preguntas
  5. resumen
  6. traducción y muchos más.

Requisitos previos

Nuestro primer trabajo es instalar el transformadores paquete a través de reticulate.

reticulate::py_install('transformers', pip = TRUE)

Luego, como de costumbre, cargue ‘Keras’ estándar, ‘TensorFlow’ >= 2.0 y algunas bibliotecas clásicas de R.

Tenga en cuenta que si ejecuta TensorFlow en GPU, se pueden especificar los siguientes parámetros para evitar problemas de memoria.

physical_devices = tf$config$list_physical_devices('GPU')
tf$config$experimental$set_memory_growth(physical_devices[[1]],TRUE)

tf$keras$backend$set_floatx('float32')

Plantilla

Ya mencionamos que para entrenar datos sobre el modelo específico, los usuarios deben descargar el modelo, su objeto tokenizador y sus pesos. Por ejemplo, para conseguir un modelo RoBERTa hay que hacer lo siguiente:

# get Tokenizer
transformer$RobertaTokenizer$from_pretrained('roberta-base', do_lower_case=TRUE)

# get Mannequin with weights
transformer$TFRobertaModel$from_pretrained('roberta-base')

Preparación de datos

Se proporciona un conjunto de datos para la clasificación binaria en texto2vec paquete. Carguemos el conjunto de datos y tomemos una muestra para un entrenamiento rápido del modelo.

Divida nuestros datos en 2 partes:

idx_train = pattern.int(nrow(df)*0.8)

prepare = df[idx_train,]
check = df[!idx_train,]

Entrada de datos para Keras

Hasta ahora, solo hemos cubierto la importación de datos y la división entre pruebas. Para alimentar la entrada a la pink, tenemos que convertir nuestro texto sin formato en índices a través del tokenizador importado. Y luego adapte el modelo para realizar una clasificación binaria agregando una capa densa con una sola unidad al remaining.

Sin embargo, queremos entrenar nuestros datos para 3 modelos GPT-2, RoBERTa y Electra. Necesitamos escribir un bucle para eso.

Nota: un modelo en common requiere 500-700 MB

# checklist of three fashions
ai_m = checklist(
  c('TFGPT2Model',       'GPT2Tokenizer',       'gpt2'),
   c('TFRobertaModel',    'RobertaTokenizer',    'roberta-base'),
   c('TFElectraModel',    'ElectraTokenizer',    'google/electra-small-generator')
)

# parameters
max_len = 50L
epochs = 2
batch_size = 10

# create a listing for mannequin outcomes
gather_history = checklist()

for (i in 1:size(ai_m)) {
  
  # tokenizer
  tokenizer = glue::glue("transformer${ai_m[[i]][2]}$from_pretrained('{ai_m[[i]][3]}',
                         do_lower_case=TRUE)") %>% 
    rlang::parse_expr() %>% eval()
  
  # mannequin
  model_ = glue::glue("transformer${ai_m[[i]][1]}$from_pretrained('{ai_m[[i]][3]}')") %>% 
    rlang::parse_expr() %>% eval()
  
  # inputs
  textual content = checklist()
  # outputs
  label = checklist()
  
  data_prep = perform(knowledge) {
    for (i in 1:nrow(knowledge)) {
      
      txt = tokenizer$encode(knowledge[['comment_text']][i],max_length = max_len, 
                             truncation=T) %>% 
        t() %>% 
        as.matrix() %>% checklist()
      lbl = knowledge[['target']][i] %>% t()
      
      textual content = textual content %>% append(txt)
      label = label %>% append(lbl)
    }
    checklist(do.name(plyr::rbind.fill.matrix,textual content), do.name(plyr::rbind.fill.matrix,label))
  }
  
  train_ = data_prep(prepare)
  test_ = data_prep(check)
  
  # slice dataset
  tf_train = tensor_slices_dataset(checklist(train_[[1]],train_[[2]])) %>% 
    dataset_batch(batch_size = batch_size, drop_remainder = TRUE) %>% 
    dataset_shuffle(128) %>% dataset_repeat(epochs) %>% 
    dataset_prefetch(tf$knowledge$experimental$AUTOTUNE)
  
  tf_test = tensor_slices_dataset(checklist(test_[[1]],test_[[2]])) %>% 
    dataset_batch(batch_size = batch_size)
  
  # create an enter layer
  enter = layer_input(form=c(max_len), dtype='int32')
  hidden_mean = tf$reduce_mean(model_(enter)[[1]], axis=1L) %>% 
    layer_dense(64,activation = 'relu')
  # create an output layer for binary classification
  output = hidden_mean %>% layer_dense(models=1, activation='sigmoid')
  mannequin = keras_model(inputs=enter, outputs = output)
  
  # compile with AUC rating
  mannequin %>% compile(optimizer= tf$keras$optimizers$Adam(learning_rate=3e-5, epsilon=1e-08, clipnorm=1.0),
                    loss = tf$losses$BinaryCrossentropy(from_logits=F),
                    metrics = tf$metrics$AUC())
  
  print(glue::glue('{ai_m[[i]][1]}'))
  # prepare the mannequin
  historical past = mannequin %>% keras::match(tf_train, epochs=epochs, #steps_per_epoch=len/batch_size,
                validation_data=tf_test)
  gather_history[[i]]<- historical past
  names(gather_history)[i] = ai_m[[i]][1]
}


Reproducirse en un Computadora portátil

Extraiga resultados para ver los puntos de referencia:

Tanto el roberta y electra Los modelos muestran algunas mejoras adicionales después de 2 épocas de entrenamiento, lo que no se puede decir de GPT-2. En este caso, está claro que puede ser suficiente entrenar un modelo de última generación incluso para una única época.

Conclusión

En esta publicación, mostramos cómo utilizar los modelos de PNL de última generación de R. Para comprender cómo aplicarlos a tareas más complejas, es muy recomendable revisar el tutorial de transformadores.

¡Animamos a los lectores a probar estos modelos y compartir sus resultados a continuación en la sección de comentarios!

Correcciones

Si ve errores o desea sugerir cambios, por favor crear un problema en el repositorio de origen.

Reutilizar

El texto y las figuras tienen licencia Artistic Commons Attribution. CC POR 4.0. El código fuente está disponible en https://github.com/henry090/transformersa menos que se indique lo contrario. Las figuras que han sido reutilizadas de otras fuentes no están cubiertas por esta licencia y pueden reconocerse por una nota en su pie de foto: “Figura de…”.

Citación

Para atribución, cite este trabajo como

Abdullayev (2020, July 30). Posit AI Weblog: State-of-the-art NLP fashions from R. Retrieved from https://blogs.rstudio.com/tensorflow/posts/2020-07-30-state-of-the-art-nlp-models-from-r/

Cita BibTeX

@misc{abdullayev2020state-of-the-art,
  writer = {Abdullayev, Turgut},
  title = {Posit AI Weblog: State-of-the-art NLP fashions from R},
  url = {https://blogs.rstudio.com/tensorflow/posts/2020-07-30-state-of-the-art-nlp-models-from-r/},
  yr = {2020}
}

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Latest Articles