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)
def _get_frames(self, s: Sent): return s.get_frames(self.conf.ftag)