Skip to content

Reimplementation of a BERT based model (Shi et al, 2019), currently the state-of-the-art for English SRL. This model implements also predicate disambiguation.

Notifications You must be signed in to change notification settings

Riccorl/transformer-srl

Repository files navigation

Upload Python Package Code style: black

Semantic Role Lableing with BERT

Semantic Role Labeling based on AllenNLP implementation of Shi et al, 2019. Can be trained using both PropBank and VerbAtlas inventories and implements also the predicate disambiguation task, in addition to arguments identification and disambiguation.

How to use

Install the library

pip install transformer-srl

Pre-trained model

You can also use a pre-trained model. To use it, first install the correct version of transformer-srl:

pip install transformer-srl==2.4.6

then download the pretrained model srl_bert_base_conll2012.tar.gz from here.

File Model Version F1 Argument F1 Predicate
srl_bert_base_conll2012.tar.gz bert-base-cased 2.4.6 86.0 95.5

CLI

echo '{"sentence": "Did Uriah honestly think he could beat the game in under three hours?"}' | \
allennlp predict path/to/srl_bert_base_conll2012.tar.gz - --include-package transformer_srl

Inside Python Code

from transformer_srl import dataset_readers, models, predictors

predictor = predictors.SrlTransformersPredictor.from_path("path/to/srl_bert_base_conll2012.tar.gz, "transformer_srl")
predictor.predict(
  sentence="Did Uriah honestly think he could beat the game in under three hours?"
)

Infos

  • Language Model: BERT
  • Dataset: CoNLL 2012

Results with VerbAtlas

With bert-base-cased:

# Dev set
- F1 arguments 87.6
- F1 predicates 95.5
# Test set
- F1 arguments x
- F1 predicates x

With bert-base-multilingual-cased:

# Dev set
- F1 arguments 86.2
- F1 predicates 94.2
# Test set
- F1 arguments 86.1
- F1 predicates 94.9

To-Dos

  • Works with both PropBank and VerbAtlas (infer inventory from dataset reader)
  • Compatibility with all models from Huggingface's Transformers. - Now works only with models that accept 1 as token type id
  • Predicate identification (without using spacy)