Votre premier BERT: un guide illustré

bert-distilbert-phrase-classification


Les progrès de l'apprentissage automatique pour le traitement du langage naturel se sont considérablement accélérés au cours des dernières années. Les modèles ont quitté les laboratoires de recherche et sont devenus le fondement des principaux produits numériques. Une bonne illustration de cela est l' annonce récente que le modèle BERT est devenu le principal composant derrière la recherche de Google . Google estime que cette étape (c'est-à-dire l'introduction d'un modèle avancé de compréhension du langage naturel dans le moteur de recherche) représente "la plus grande percée des cinq dernières années et l'une des plus importantes de l'histoire des moteurs de recherche".


– 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', .


model-training



, . DistilBERT' 2 .


bert-distilbert-tutorial-phrase-embedding


DistilBERT'. Scikit Learn. , , :


bert-distilbert-train-test-split-sentence-embedding


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-phrase-classification-example


, .



. 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 . :


bert-output-tensor



. :


récapitulation du tenseur entrée-sortie-bert



BERT' [CLS]. .


bert-output-tensor-selection


, 3d , 2d :


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

features 2d numpy, .


bert-output-cls-senteence-embeddings


, BERT'



, BERT', , . 768 , .


étiquettes de caractéristiques de l'ensemble de données de régression logistique


, . 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-sentence-embedding


.


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.


C'est tout! Une bonne première connaissance s'est produite. L'étape suivante consiste à consulter la documentation et à essayer de peaufiner vos propres mains. Vous pouvez également revenir un peu en arrière et passer de distilBERT à BERT et voir comment cela fonctionne.


Merci à Clément Delangue , Victor Sanh , et à l'équipe Huggingface qui ont fourni des commentaires sur les versions antérieures de ce guide.


Auteurs



All Articles