Su primer BERT: una guía ilustrada

bert-distilbert-oración-clasificación


El progreso en el aprendizaje automático para el procesamiento del lenguaje natural se ha acelerado significativamente en los últimos años. Los modelos dejaron los laboratorios de investigación y se convirtieron en la base de los principales productos digitales. Una buena ilustración de esto es el reciente anuncio de que el modelo BERT se ha convertido en el componente principal detrás de la búsqueda de Google . Google cree que este paso (es decir, la introducción de un modelo avanzado de comprensión del lenguaje natural en el motor de búsqueda) representa "el mayor avance en los últimos cinco años y uno de los más importantes en la historia de los motores de búsqueda".


– BERT' . , , , , .


, Colab.


: SST2


SST2, , ( 1), ( 0):


sst2


:


– , ( , ) 1 ( ), 0 ( ). :


sentiment-classifier-1.png


:



, , 768. , .


distilbert-bert-sentiment-classifier.png


, BERT, ELMO ( NLP ): ( [CLS]).



, , . DistilBERT', . , , «» BERT', . , , BERT , [CLS] . , , . , , BERT .


transformers DistilBERT', .


entrenamiento modelo



, . DistilBERT' 2 .


bert-distilbert-tutorial-oración-incrustación


DistilBERT'. Scikit Learn. , , :


bert-distilbert-train-test-split-oración-incrustación


distilBERT' ( #1) , ( #2). , sklearn , , 75% ,


:


bert-training-logistic-regression



, , , .


«a visually stunning rumination on love». BERT' , . , ( [CLS] [SEP] ).


bert-distilbert-tokenization-1


, . Word2vec .


bert-distilbert-tokenization-2-token-ids


:


tokenizer.encode("a visually stunning rumination on love", add_special_tokens=True)

DistilBERT'.


BERT, ELMO ( NLP ), :



DistilBERT


DistilBERT' , BERT'. , 768 .


bert-model-input-output-1


, , ( [CLS] ). .


bert-model-calssification-output-vector-cls


, , . :


bert-distilbert-oración-clasificación-ejemplo


, .



. Colab github.


:


import numpy as np
import pandas as pd
import torch
import transformers as ppb # pytorch transformers
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split

github, pandas:


df = pd.read_csv('https://github.com/clairett/pytorch-sentiment-classification/raw/master/data/SST2/train.tsv', delimiter='\t', header=None)

df.head() , 5 , :


df.head()

sst2-df-head


DistilBERT


model_class, tokenizer_class, pretrained_weights = (ppb.DistilBertModel, ppb.DistilBertTokenizer, 'distilbert-base-uncased')

##  BERT  distilBERT?   :
#model_class, tokenizer_class, pretrained_weights = (ppb.BertModel, ppb.BertTokenizer, 'bert-base-uncased')

#   / 
tokenizer = tokenizer_class.from_pretrained(pretrained_weights)
model = model_class.from_pretrained(pretrained_weights)

. , , . . ( , 2000).



tokenized = df[0].apply((lambda x: tokenizer.encode(x, add_special_tokens=True)))

.


sst2-text-to-tokenized-ids-bert-example


( Series/DataFrame pandas) . DistilBERT , 0 (padding). , ( , Python).


, /, BERT':


bert-input-tensor


DistilBERT'


DistilBERT.


input_ids = torch.tensor(np.array(padded))

with torch.no_grad():
    last_hidden_states = model(input_ids)

last_hidden_states DistilBERT', ( , , DistilBERT). , 2000 (.. 2000 ), 66 ( 2000 ), 278 ( DistilBERT).


bert-distilbert-output-tensor-predictions


BERT'


3-d . :


tensor-salida-bert



. :


bert-input-to-output-tensor-recap



BERT' [CLS]. .


selección-tensor-salida-bert


, 3d , 2d :


#        ,      
features = last_hidden_states[0][:,0,:].numpy()

features 2d numpy, .


bert-output-cls-senteence-embeddings


, BERT'



, BERT', , . 768 , .


logistic-regression-dataset-features-labels


, . BERT' [CLS] ( #0), (. ). , – , BERT/DistilBERT


, , .


labels = df[1]
train_features, test_features, train_labels, test_labels = train_test_split(features, labels)

:


bert-distilbert-train-test-split-oración-incrustación


.


lr_clf = LogisticRegression()
lr_clf.fit(train_features, train_labels)

, .


lr_clf.score(test_features, test_labels)

, (accuracy) – 81%.



: – 96.8. DistilBERT , – , . BERT , ( downstream task). DistilBERT' 90.7. BERT' 94.9.



Colab.


¡Eso es todo! Un buen primer conocido sucedió. El siguiente paso es pasar a la documentación e intentar afinar sus propias manos. También puede retroceder un poco y pasar de distilBERT a BERT y ver cómo funciona.


Gracias a Clément Delangue , Victor Sanh , y al equipo de Huggingface que proporcionaron comentarios sobre versiones anteriores de esta guía.


Autores



All Articles