ner bert
1.0.0
Hay dos soluciones basadas en esta arquitectura.
Este repositorio contiene la solución de la tarea NER basada en la reimplementación de Pytorch del repositorio de flujo tensor de Google para el modelo BERT que se lanzó junto con el documento Bert: pre-entrenamiento de transformadores bidireccionales profundos para la comprensión del lenguaje por Jacob Devlin, Ming-Wei Chang, Kenton Lee y Kristina Toutanova.
Esta implementación puede cargar cualquier punto de control TensorFlow previamente capacitado para Bert (en particular los modelos previamente capacitados de Google).
La versión anterior está en la rama "antigua".
from modules.data import bert_data
data = bert_data.LearnData.create(
train_df_path=train_df_path,
valid_df_path=valid_df_path,
idx2labels_path="/path/to/vocab",
clear_cache=True
)
from modules.models.bert_models import BERTBiLSTMAttnCRF
model = BERTBiLSTMAttnCRF.create(len(data.train_ds.idx2label))
from modules.train.train import NerLearner
num_epochs = 100
learner = NerLearner(
model, data, "/path/for/save/best/model", t_total=num_epochs * len(data.train_dl))
from modules.data.bert_data import get_data_loader_for_predict
learner.load_model()
dl = get_data_loader_for_predict(data, df_path="/path/to/df/for/predict")
preds = learner.predict(dl)
from sklearn_crfsuite.metrics import flat_classification_report
from modules.analyze_utils.utils import bert_labels2tokens, voting_choicer
from modules.analyze_utils.plot_metrics import get_bert_span_report
from modules.analyze_utils.main_metrics import precision_recall_f1
pred_tokens, pred_labels = bert_labels2tokens(dl, preds)
true_tokens, true_labels = bert_labels2tokens(dl, [x.bert_labels for x in dl.dataset])
tokens_report = flat_classification_report(true_labels, pred_labels, digits=4)
print(tokens_report)
results = precision_recall_f1(true_labels, pred_labels)
No buscamos los mejores parámetros y obtuvimos los siguientes resultados.
| Modelo | Conjunto de datos | Tok de desarrollo F1 | Desvia F1 de desarrollo | Prueba de TOK F1 | Prueba de F1 Span |
|---|---|---|---|---|---|
| NUESTRO | |||||
| M-Bertcrf-IO | Factrina | - | - | 0.8543 | 0.8409 |
| M-Bertncrf-IO | Factrina | - | - | 0.8637 | 0.8516 |
| M-bertbilstmcrf-io | Factrina | - | - | 0.8835 | 0.8718 |
| M-bertbilstmncrf-io | Factrina | - | - | 0.8632 | 0.8510 |
| M-Bertattncrf-IO | Factrina | - | - | 0.8503 | 0.8346 |
| M-bertbilstmattncrf-io | Factrina | - | - | 0.8839 | 0.8716 |
| M-bertbilstmattnncrf-io | Factrina | - | - | 0.8807 | 0.8680 |
| M-bertbilstmattncrf-fit_bert-io | Factrina | - | - | 0.8823 | 0.8709 |
| M-bertbilstmattnncrf-fit_bert-io | Factrina | - | - | 0.8583 | 0.8456 |
| - | - | - | - | - | - |
| Bertbilstmcrf-io | Conll-2003 | 0.9629 | - | 0.9221 | - |
| B-bertbilstmcrf-io | Conll-2003 | 0.9635 | - | 0.9229 | - |
| B-bertbilstmattncrf-io | Conll-2003 | 0.9614 | - | 0.9237 | - |
| B-bertbilstmattnncrf-io | Conll-2003 | 0.9631 | - | 0.9249 | - |
| Sota actual | |||||
| Deeppavlov-rubert-gan | Factrina | - | - | - | 0.8266 |
| CSE | Conll-2003 | - | - | 0.931 | - |
| Bernemacia | Conll-2003 | 0.966 | - | 0.928 | - |
| Base | Conll-2003 | 0.964 | - | 0.924 | - |