Un envoltorio Scikit-Learn para Finetune el modelo BERT de Google para tareas de secuencia de texto y token basadas en el puerto Huggingface Pytorch.
SciBERT y BioBERT para dominios científicos y biomédicos.¡Prueba en Google Colab!
Requiere Python> = 3.5 y Pytorch> = 0.4.1
git clone -b master https://github.com/charles9n/bert-sklearn
cd bert-sklearn
pip install . model.fit(X,y) es decir, Finetune BERT
X : Lista, Pandas DataFrame o Numpy Matriz de texto, pares de texto o listas de tokens
y : Lista, Pandas DataFrame o Numpy Manquin de etiquetas/objetivos
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 )Ver cuaderno de demostración.
# 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 )Ver opciones
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 )Consulte Demo_tuning_hyperparameters Notebook.
Los conjuntos de datos de trenes y desarrollo de los puntos de referencia de Glue (Evaluación de comprensión del lenguaje generalizado) se utilizaron con el modelo bert-base-uncased y se compararon nuevamente los resultados informados en la tabla de clasificación de Google Paper y Glue.
| Mnli (m/mm) | QQP | Qnli | SST-2 | Reajuste salarial | STS-B | MRPC | RTE | |
|---|---|---|---|---|---|---|---|---|
| Base Bert (tabla de clasificación) | 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 |
Se pueden encontrar corridas individuales aquí se pueden encontrar aquí.
Resultados de NER para la tarea compartida CoNLL-2003
| Dev F1 | prueba F1 | |
|---|---|---|
| Papel bert | 96.4 | 92.4 |
| bert-sklearn | 96.04 | 91.97 |
Estadísticas de nivel de nivel en la prueba:
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 Consulte el cuaderno Ner_english para una demostración utilizando el modelo 'bert-base-cased' .
Resultados de NER utilizando Bert-Sklearn con SciBERT y BioBERT en la tarea de reconocimiento del nombre del NCBI disease Corpus .
SOTA anterior para esta tarea es 87.34 para F1 en el conjunto de pruebas.
| Prueba F1 (Bert-Sklearn) | Prueba F1 (de documentos) | |
|---|---|---|
| Base de Bert Casado | 85.09 | 85.49 |
| Scibert BaseVocab escondido | 88.29 | 86.91 |
| Scibert scivocab escondido | 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 |
Consulte el cuaderno NER_NCBI_DISEASE_BIOBERT_SCIBERT para una demostración utilizando modelos SciBERT y BioBERT .
Consulte el documento de Scibert y BioBert Paper para obtener más información sobre los modelos respectivos.
Consulte el cuaderno IMDB para una demostración de clasificación de texto en la tarea de sentimiento de revisión de la base de datos de películas de Internet.
Consulte el cuaderno Chunking_english para obtener una demostración sobre la fragmentación sintáctica utilizando los datos de tareas de fragmentación CoNLL-2000 .
Consulte el cuaderno Ner_chinese para una demostración que use 'bert-base-chinese' para el NER chino.
Ejecutar pruebas con pytest:
python -m pytest -sv tests/ Google BERT Github and Paper: "Bert: prioridad de transformadores bidireccionales profundos para la comprensión del lenguaje" (10/2018) por J. Devlin, M. Chang, K. Lee y K. Toutanova
Huggingface pytorch-pretrained-BERT Github
SciBERT Github and Paper: "Scibert: incrustaciones contextualizadas previas al petróleo para texto científico" (3/2019) por I. Beltagy, A. Cohan y K. Lo
BioBERT Github and Paper: "Biobert: un modelo de representación de lenguaje biomédico previamente entrenado para minería de texto biomédico" (2/2019) por J. Lee, W. Yoon, S. Kim, D. Kim, S. Kim, CH SO y J. Kang