45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
import re
|
|
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
from nlu_utils import predict_multiple
|
|
from flair.models import SequenceTagger
|
|
|
|
def __parse_acts(acts):
|
|
acts_split = acts.split('&')
|
|
remove_slot_regex = "[\(\[].*?[\)\]]"
|
|
return set(re.sub(remove_slot_regex, "", act) for act in acts_split)
|
|
|
|
def __parse_predictions(predictions):
|
|
return set(prediction.split('/')[0] for prediction in predictions)
|
|
|
|
# Exploratory tests
|
|
frame_model = SequenceTagger.load('frame-model-prod/best-model.pt')
|
|
# slot_model = SequenceTagger.load('slot-model-prod/final-model.pt')
|
|
|
|
total_acts = 0
|
|
act_correct_predictions = 0
|
|
slot_correct_predictions = 0
|
|
|
|
for file_name in os.listdir('data'):
|
|
if file_name.split('.')[-1] != 'tsv':
|
|
continue
|
|
|
|
df = pd.read_csv(f'data/{file_name}', sep='\t', names=['kto', 'treść', 'akt'])
|
|
df = df[df.kto == 'user']
|
|
all_data = np.array(df)
|
|
|
|
for row in all_data:
|
|
sentence = row[1]
|
|
acts = __parse_acts(row[2])
|
|
|
|
predictions_raw = predict_multiple(frame_model, sentence.split(), 'frame')
|
|
predictions = __parse_predictions(predictions_raw)
|
|
|
|
for act in acts:
|
|
total_acts += 1
|
|
if act in predictions:
|
|
act_correct_predictions += 1
|
|
|
|
|
|
print(f"Accuracy - predicting acts: {(act_correct_predictions / total_acts)*100} ({act_correct_predictions}/{total_acts})") |