MCPcopy Create free account
hub / github.com/NJUNLP/GTS / Instance

Class Instance

code/BertModel/data.py:51–143  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50
51class Instance(object):
52 def __init__(self, tokenizer, sentence_pack, args):
53 self.id = sentence_pack['id']
54 self.sentence = sentence_pack['sentence']
55 self.tokens = self.sentence.strip().split()
56 self.sen_length = len(self.tokens)
57 self.token_range = []
58 self.bert_tokens = tokenizer.encode(self.sentence)
59 self.length = len(self.bert_tokens)
60 self.bert_tokens_padding = torch.zeros(args.max_sequence_len).long()
61 self.aspect_tags = torch.zeros(args.max_sequence_len).long()
62 self.opinion_tags = torch.zeros(args.max_sequence_len).long()
63 self.tags = torch.zeros(args.max_sequence_len, args.max_sequence_len).long()
64 self.mask = torch.zeros(args.max_sequence_len)
65
66 for i in range(self.length):
67 self.bert_tokens_padding[i] = self.bert_tokens[i]
68 self.mask[:self.length] = 1
69
70 token_start = 1
71 for i, w, in enumerate(self.tokens):
72 token_end = token_start + len(tokenizer.encode(w, add_special_tokens=False))
73 self.token_range.append([token_start, token_end-1])
74 token_start = token_end
75 assert self.length == self.token_range[-1][-1]+2
76
77 self.aspect_tags[self.length:] = -1
78 self.aspect_tags[0] = -1
79 self.aspect_tags[self.length-1] = -1
80
81 self.opinion_tags[self.length:] = -1
82 self.opinion_tags[0] = -1
83 self.opinion_tags[self.length - 1] = -1
84
85 self.tags[:, :] = -1
86 for i in range(1, self.length-1):
87 for j in range(i, self.length-1):
88 self.tags[i][j] = 0
89
90 for triple in sentence_pack['triples']:
91 aspect = triple['target_tags']
92 opinion = triple['opinion_tags']
93 aspect_span = get_spans(aspect)
94 opinion_span = get_spans(opinion)
95
96 '''set tag for aspect'''
97 for l, r in aspect_span:
98 start = self.token_range[l][0]
99 end = self.token_range[r][1]
100 for i in range(start, end+1):
101 for j in range(i, end+1):
102 self.tags[i][j] = 1
103 for i in range(l, r+1):
104 set_tag = 1 if i == l else 2
105 al, ar = self.token_range[i]
106 self.aspect_tags[al] = set_tag
107 self.aspect_tags[al+1:ar+1] = -1
108 '''mask positions of sub words'''

Callers 1

load_data_instancesFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected