Préambule

Le Transformateurs Le repère de “Hugging Apparence” contient de fourmillant modèles de gouge prêts à l’affectation, altruistes à télécharger et à acclimater pile Tensorflow & Keras.

À cette fin, les utilisateurs doivent couramment impétrer :

  • Le modèle sézigue (par prototype Bert, Albert, RoBerta, GPT-2 et etc.)
  • L’partie tokenizer
  • Les responsabilité du modèle

Parmi cet étude, nous-même allons bosser sur une tâche de nomenclature numérique familier et habituer à nous jeu de modalités sur 3 modèles :

Uniquement, les lecteurs doivent classicisme que l’on peut bosser pile des transformateurs sur une caractéristique de dettes en consentement, analogues que :

  1. excision de caractéristiques
  2. étudié des sentiments
  3. stockage de rédaction
  4. opposition à une complication
  5. liste
  6. thème et ressources d’dissemblables.

Circonstance préalables

À nous débutant parturition consiste à camper le transformateurs équipage via reticulate.

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

Subséquemment, également d’méthode, chargez le normalisé ‘Keras’, ‘TensorFlow’ >= 2.0 et un couple de bibliothèques classiques de R.

Notez que si vous-même exécutez TensorFlow sur GPU, vous-même pouvez réduire les paramètres suivants contre d’obliquer les problèmes de bordereau.

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

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

Modèle

Nous-même avons déjà état que envers policer des modalités sur le modèle spécial, les utilisateurs doivent télécharger le modèle, son partie tokenizer et ses responsabilité. Par prototype, envers impétrer un modèle RoBERTa, il faut faire également suit :

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

# get Model with weights
troquer$TFRobertaModel$from_pretrained('roberta-base')

Confection des modalités

Un rassemblement de modalités envers la nomenclature numérique est broussailleux chez le conditionnement text2vec. Chargeons le jeu de modalités et prélevons un spécimen envers une escouade délié du modèle.

Divisez nos modalités en 2 parties :

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

canter = df(idx_train,)
signe = df(!idx_train,)

Accès de modalités envers Keras

Jusqu’actuellement, nous-même n’avons bâché que l’import de modalités et la élément train-test. Moyennant allaiter le entrecroisement, nous-même endettons troquer à nous rédaction grège en liste via le tokenizer introduit. Et comme adaptez le modèle envers former une nomenclature numérique en ajoutant une apprêt gluant pile une singulière ensemble à la fin.

Uniquement, nous-même voulons policer nos modalités envers 3 modèles GPT-2, RoBERTa et Electra. Nous-même endettons calligraphier une bogue envers ceci.

Critique : un modèle nécessite en commun 500 à 700 Mo

# list of 3 models
ai_m = list(
  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 list for model results
gather_history = list()

for (i in 1:length(ai_m)) {
  
  # tokenizer
  tokenizer = glue::glue("troquer${ai_m((i))(2)}$from_pretrained('{ai_m((i))(3)}',
                         do_lower_case=TRUE)") %>% 
    rlang::parse_expr() %>% eval()
  
  # model
  model_ = glue::glue("troquer${ai_m((i))(1)}$from_pretrained('{ai_m((i))(3)}')") %>% 
    rlang::parse_expr() %>% eval()
  
  # inputs
  text = list()
  # outputs
  empreinte = list()
  
  data_prep = function(data) {
    for (i in 1:nrow(data)) {
      
      txt = tokenizer$encode(data(('comment_text'))(i),max_length = max_len, 
                             truncation=T) %>% 
        t() %>% 
        as.matrix() %>% list()
      lbl = data(('target'))(i) %>% t()
      
      text = text %>% append(txt)
      empreinte = empreinte %>% append(lbl)
    }
    list(do.call(plyr::rbind.fill.matrix,text), do.call(plyr::rbind.fill.matrix,empreinte))
  }
  
  train_ = data_prep(canter)
  test_ = data_prep(signe)
  
  # slice dataset
  tf_train = tensor_slices_dataset(list(train_((1)),train_((2)))) %>% 
    dataset_batch(batch_size = batch_size, drop_remainder = TRUE) %>% 
    dataset_shuffle(128) %>% dataset_repeat(epochs) %>% 
    dataset_prefetch(tf$data$experimental$AUTOTUNE)
  
  tf_test = tensor_slices_dataset(list(test_((1)),test_((2)))) %>% 
    dataset_batch(batch_size = batch_size)
  
  # create an input layer
  input = layer_input(shape=c(max_len), dtype='int32')
  hidden_mean = tf$reduce_mean(model_(input)((1)), axis=1L) %>% 
    layer_dense(64,poussée = 'épelé')
  # create an produit layer for binary nomenclature
  produit = hidden_mean %>% layer_dense(units=1, poussée='sigmoid')
  model = keras_model(inputs=input, outputs = produit)
  
  # compile with AUC marque
  model %>% 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)}'))
  # canter the model
  history = model %>% keras::fit(tf_train, epochs=epochs, #steps_per_epoch=len/batch_size,
                validation_data=tf_test)
  gather_history((i))<- history
  names(gather_history)(i) = ai_m((i))(1)
}

Générer chez un Calendrier de glose

Extrayez les résultats envers distinguer les benchmarks :

Les couple ROBERTa et Électre les modèles montrent un couple de améliorations supplémentaires ensuite 2 époques d’contagion, ce qui ne peut pas nature dit de GPT-2. Parmi ce cas, il est distinct qu’il peut exaucer de policer un modèle de gouge même envers une singulière étape.

Inventaire

Parmi cet étude, nous-même avons montré pardon appliquer les modèles NLP de gouge de R. Moyennant justifier pardon les infliger à des dettes encore complexes, il est beaucoup prescrit de référer le tutoriel sur les transformateurs.

Nous-même encourageons les lecteurs à oser ces modèles et à trancher à elles résultats ci-après chez la fragment des annales !

Corrections

Si vous-même voyez des errata ou si vous-même souhaitez représenter des modifications, veuillez inspirer un gêne sur le repère commencement.

Remploi

Le rédaction et les figures sont au-dessous perversion Creative Commons Emploi CC BY 4.0. Le lexique commencement est utilisable sur https://github.com/henry090/transformers, survivant exposition contradictoire. Les chiffres qui ont été réutilisés à directement d’dissemblables pluies ne relèvent pas de cette perversion et peuvent nature reconnus par une état chez à eux explication : “Emblème de …”.

Accessit

Moyennant l’emploi, veuillez produire ce parturition également

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

Accessit BibTeX

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

By nsmaat