Esempio n. 1
0
 def _prep_sent(self, sent: Sent):
     conf: MySRLConf = self.conf
     slen = len(sent)
     _loss_weight_non = getattr(sent, "_loss_weight_non", 1.)  # todo(+N): special name; loss_weight_non
     # note: for simplicity, assume no loss_weight_non for args
     # first for events
     evt_arr = np.full([slen], 0, dtype=np.int)  # [evt]
     arg_arr = np.full([slen, slen], 0, dtype=np.int)  # [evt, arg]
     evt_items = np.full([slen], None, dtype=object)  # [evt]
     for f in sent.get_frames(conf.evt_ftag):  # note: assume no overlapping
         # predicate
         evt_widx, evt_wlen = self.evt_span_getter(f.mention)
         evt_label = f.label_idx
         assert evt_wlen==1 and evt_label>0, "For simplicity!!"
         evt_items[evt_widx] = f
         evt_arr[evt_widx] = evt_label
         # arguments
         if conf.arg_only_rank1:
             cur_args = [a for a in f.args if a.info.get("rank", 1) == 1]
         else:
             cur_args = f.args
         # bio or not
         if conf.arg_use_bio:  # special
             arg_spans = [self.arg_span_getter(a.mention) + (a.label_idx,) for a in cur_args]
             tag_layers = self.vocab_arg.spans2tags_idx(arg_spans, slen)
             if len(tag_layers) > 1:
                 zwarn(f"Warning: 'Full args require multiple layers with {arg_spans}")
             arg_arr[evt_widx, :] = tag_layers[0][0]  # directly assign it!
         else:  # plain ones
             for a in cur_args:
                 arg_role = a.label_idx
                 arg_widx, arg_wlen = self.arg_span_getter(a.mention)
                 arg_arr[evt_widx, arg_widx:arg_widx+arg_wlen] = arg_role
     return ZObject(sent=sent, slen=slen, loss_weight_non=_loss_weight_non,
                    evt_items=evt_items, evt_arr=evt_arr, arg_arr=arg_arr)
Esempio n. 2
0
 def _get_frames(self, s: Sent):
     return s.get_frames(self.conf.ftag)