Un emballage Scikit-Learn au modèle Bert de Finetune Google pour les tâches de séquence de texte et de jeton basé sur le port Pytorch HuggingFace.
SciBERT et BioBERT pré-entraînés pour les domaines scientifiques et biomédicaux.Essayez dans Google Colab!
nécessite Python> = 3,5 et Pytorch> = 0,4.1
git clone -b master https://github.com/charles9n/bert-sklearn
cd bert-sklearn
pip install . model.fit(X,y) IE Finetune BERT
X : Liste, Pandas Dataframe ou Numpy Array de texte, de paires de texte ou de listes de jetons
y : Liste, Pandas DataFrame ou Numpy Tableau d'étiquettes / cibles
from bert_sklearn import BertClassifier
from bert_sklearn import BertRegressor
from bert_sklearn import load_model
# define model
model = BertClassifier () # text/text pair classification
# model = BertRegressor() # text/text pair regression
# model = BertTokenClassifier() # token sequence classification
# finetune model
model . fit ( X_train , y_train )
# make predictions
y_pred = model . predict ( X_test )
# make probabilty predictions
y_pred = model . predict_proba ( X_test )
# score model on test data
model . score ( X_test , y_test )
# save model to disk
savefile = '/data/mymodel.bin'
model . save ( savefile )
# load model from disk
new_model = load_model ( savefile )
# do stuff with new model
new_model . score ( X_test , y_test )Voir Demo Notebook.
# try different options...
model . bert_model = 'bert-large-uncased'
model . num_mlp_layers = 3
model . max_seq_length = 196
model . epochs = 4
model . learning_rate = 4e-5
model . gradient_accumulation_steps = 4
# finetune
model . fit ( X_train , y_train )
# do stuff...
model . score ( X_test , y_test )Voir les options
from sklearn . model_selection import GridSearchCV
params = { 'epochs' :[ 3 , 4 ], 'learning_rate' :[ 2e-5 , 3e-5 , 5e-5 ]}
# wrap classifier in GridSearchCV
clf = GridSearchCV ( BertClassifier ( validation_fraction = 0 ),
params ,
scoring = 'accuracy' ,
verbose = True )
# fit gridsearch
clf . fit ( X_train , y_train )Voir Demo_tuning_hyperParameters Notebook.
Les ensembles de données de train et de développement des repères Glue (Generalized Language Comprendre l'évaluation) ont été utilisés avec le modèle bert-base-uncased et ont comparé à nouveau les résultats rapportés dans le papier Google et le classement de la colle.
| MNLI (m / mm) | QQP | QNLI | SST-2 | Cola | STS-B | MRPC | Rte | |
|---|---|---|---|---|---|---|---|---|
| Bert Base (classement) | 84.6 / 83.4 | 89.2 | 90.1 | 93.5 | 52.1 | 87.1 | 84.8 | 66.4 |
| Bert-Sklearn | 83.7 / 83.9 | 90.2 | 88.6 | 92.32 | 58.1 | 89.7 | 86.8 | 64.6 |
Des courses individuelles peuvent être trouvées ici.
Résultats NER pour la tâche partagée CoNLL-2003
| Dev F1 | Tester F1 | |
|---|---|---|
| Papier bert | 96.4 | 92.4 |
| Bert-Sklearn | 96.04 | 91.97 |
Statistiques de niveau de portée au test:
processed 46666 tokens with 5648 phrases ; found: 5740 phrases ; correct: 5173.
accuracy: 98.15% ; precision: 90.12% ; recall: 91.59% ; FB1: 90.85
LOC: precision: 92.24% ; recall: 92.69% ; FB1: 92.46 1676
MISC: precision: 78.07% ; recall: 81.62% ; FB1: 79.81 734
ORG: precision: 87.64% ; recall: 90.07% ; FB1: 88.84 1707
PER: precision: 96.00% ; recall: 96.35% ; FB1: 96.17 1623 Voir Ner_English Notebook pour une démo utilisant le modèle 'bert-base-cased' .
NER Résultats utilisant Bert-Sklearn avec SciBERT et BioBERT sur la tâche de reconnaissance du nom du NCBI disease Corpus .
SOTA précédent pour cette tâche est de 87,34 pour F1 sur l'ensemble de tests.
| Test F1 (Bert-Sklearn) | Tester F1 (à partir des papiers) | |
|---|---|---|
| Bert Bert Basé | 85.09 | 85.49 |
| Scibert Basevocab Basé | 88.29 | 86.91 |
| Scibert Scivocab Casé | 87.73 | 86.45 |
| Biobert PubMed_V1.0 | 87.86 | 87.38 |
| Biobert PubMed_PMC_V1.0 | 88.26 | 89.36 |
| Biobert PubMed_V1.1 | 87.26 | N / A |
Voir NER_NCBI_DIsease_biobert_scibert Notebook pour une démo utilisant des modèles SciBERT et BioBERT .
Voir Scibert Paper et Biobert Paper pour plus d'informations sur les modèles respectifs.
Voir le cahier IMDB pour une démonstration de classification de texte sur la tâche de sentiment de révision de la base de données de la base de données sur Internet.
Voir le carnet Chunking_English pour une démo sur la bunking syntaxique à l'aide des données de tâche de section CoNLL-2000 .
Voir NER_CHINEISE CHARBOR pour une démo utilisant 'bert-base-chinese' pour le NER chinois.
Exécutez des tests avec Pytest:
python -m pytest -sv tests/ Google BERT Github et papier: "Bert: pré-formation des transformateurs bidirectionnels profonds pour la compréhension du langage" (10/2018) par J. Devlin, M. Chang, K. Lee et K. Toutanova
Huggingface pytorch-pretrained-BERT Github
SciBERT Github and Paper: "Scibert: Incorporation contextualisée pré-entraînée pour le texte scientifique" (3/2019) par I. Beltagy, A. Cohan et K. Lo
BioBERT Github and Paper: "Biobert: Un modèle de représentation biomédicale pré-formé pour l'exploitation biomédicale de texte" (2/2019) par J. Lee, W. Yoon, S. Kim, D. Kim, S. Kim, Ch SO et J. Kang