Semantic Role Labeling

Similar to most works on SRL, we decompose the SRL task into two subtasks: (a) identifying verbal and nominal predicates in a given sentence, and (b) identifying arguments for each predicate. As discussed in the previous section, we observed that the predicate identification subtask trains well in a MTL setting. However, the second subtask, argument identification, did not train well in a joint setting. For this reason, we trained it separately, independently of all other tasks.

Our SRL data for argument identification follows the Metal Full format:

A       DT      O       O       1       O       2       O       6
record  NN      O       O       1       A1      2       O       6
date    NN      O       A1      1       O       2       A1      6
has     VBZ     O       O       1       O       2       O       6
n't     RB      O       O       1       O       2       AM-NEG  6
been    VBN     O       O       1       O       2       O       6
set     VBN     O       O       1       O       2       O       6
.       .       O       O       1       O       2       O       6
...

Please see the File Formats section for details on this format.

The configuration file to train the identification of SRL arguments is the following:

mtl {
  shardsPerEpoch = 10
  maxEpochs = 100
  epochPatience = 5
  numberOfTasks = 1
  batchSize = 1
  trainer = adam

  layers {
    initial {
      learnedWordEmbeddingSize = 128
      charEmbeddingSize = 32
      charRnnStateSize = 16
      posTagEmbeddingSize = 32
      neTagEmbeddingSize = 16
      distanceEmbeddingSize = 16
      distanceWindowSize = 50
      useIsPredicate = true
      c2i = "org/clulab/c2i-en.txt"
      tag2i = "org/clulab/tag2i-en.txt"
      ne2i = "org/clulab/ne2i-en.txt"
    }

    intermediate1 {
      rnnStateSize = 128
      numLayers = 1
      useHighwayConnections = true
      type = "gru"
    }
  }

  task1 {
    name = "En SRL arguments"
    train = "dynet/en/srl/train.args"
    dev = "dynet/en/srl/dev.args"
    test = "dynet/en/srl/test-wsj.args"
    type = "dual"

    layers {
      final {
        inference = "greedy"
      }
    }
  }

}

Note that mtl.task1.type is set to “dual”, which corresponds to the dual Metal task, where the last forward layer concatenates the embeddings of both argument and head for each prediction (hence the “dual” name). For this task type, the initial layer has the following additional parameters:

Parameter Description Default value
m.l.i.posTagEmbeddingSize Size of the learned embeddings for POS tags. If -1, no embeddings are created for POS tags. -1
m.l.i.neTagEmbeddingSize Size of the learned embeddings for NE labels. If -1, no embeddings are created for NE labels. -1
m.l.i.distanceEmbeddingSize Size of the learned embeddings for the relative distance between the given predicate and the current token. For example, in the sentence “John ate cake”, the distance between the predicate “ate” and “John” is -1. If the value of this parameter is -1, no embeddings are created for these distances. -1
m.l.i.distanceWindowSize Window size considered for the above distance values. If the value of this parameter is k, we consider values in the window [ -k, k]. All the distances outside this window are mapped to either -k + 1 (if the token appears to the left of the predicate), or k + 1 (if the token is to the right of the predicate). -1
m.l.i.useIsPredicate If true, we create a Boolean feature set to 1 if the current token is the predicate, and 0 otherwise. false
m.l.i.tag2i File that maps POS tags to unique integer indices that are used internally by Metal. The first column in this file contains POS tags; the second contains the corresponding index values. If you use Metal for another language, adjust this file to include the relevant POS tags in that language. The POS tag at index 0 is reserved for UNKNOWN. “org/clulab/tag2i-en.txt”
m.l.i.ne2i File that maps NE labels to unique integer indices that are used internally by Metal. The first column in this file contains NE labels; the second contains the corresponding index values. If you use Metal for another language or with a different NER, adjust this file to include the relevant NE labels. The label at index 0 is reserved for UNKNOWN. “org/clulab/ne2i-en.txt”