| 119 | return triplets |
| 120 | |
| 121 | def score_aspect(self): |
| 122 | assert len(self.predictions) == len(self.goldens) |
| 123 | golden_set = set() |
| 124 | predicted_set = set() |
| 125 | for i in range(self.data_num): |
| 126 | golden_aspect_spans = self.get_spans(self.goldens[i], self.sen_lengths[i], self.tokens_ranges[i], 1) |
| 127 | for spans in golden_aspect_spans: |
| 128 | golden_set.add(str(i) + '-' + '-'.join(map(str, spans))) |
| 129 | |
| 130 | predicted_aspect_spans = self.get_spans(self.predictions[i], self.sen_lengths[i], self.tokens_ranges[i], 1) |
| 131 | for spans in predicted_aspect_spans: |
| 132 | predicted_set.add(str(i) + '-' + '-'.join(map(str, spans))) |
| 133 | |
| 134 | correct_num = len(golden_set & predicted_set) |
| 135 | precision = correct_num / len(predicted_set) if len(predicted_set) > 0 else 0 |
| 136 | recall = correct_num / len(golden_set) if len(golden_set) > 0 else 0 |
| 137 | f1 = 2 * precision * recall / (precision + recall) if (precision + recall) > 0 else 0 |
| 138 | return precision, recall, f1 |
| 139 | |
| 140 | def score_opinion(self): |
| 141 | assert len(self.predictions) == len(self.goldens) |