import warnings from asl_data import SinglesData def recognize(models: dict, test_set: SinglesData): """Recognize test word sequences from word models set :param models: dict of trained models {'SOMEWORD': GaussianHMM model object, 'SOMEOTHERWORD': GaussianHMM model object, ...} :param test_set: SinglesData object :return: (list, list) as probabilities, guesses both lists are ordered by the test set word_id probabilities is a list of dictionaries where each key a word and value is Log Liklihood. [{SOMEWORD': LogLvalue, 'SOMEOTHERWORD' LogLvalue, ... }, {SOMEWORD': LogLvalue, 'SOMEOTHERWORD' LogLvalue, ... }, ] guesses is a list of the best guess words ordered by the test set word_id. ['WORDGUESS0', 'WORDGUESS1', 'WORDGUESS2',...] """ warnings.filterwarnings("ignore", category=DeprecationWarning) probabilities = [] guesses = [] #warnings.filterwarnings("ignore", category=DeprecationWarning) probabilities = [] guesses = [] X_lengths = test_set.get_all_Xlengths() for X, lengths in X_lengths.values(): log_l = {} # Save the likelihood of a word max_score = float("-inf") # Save max score as recognizer iterates best_guess = None # Save best guess as recognizer iterates for word, model in models.items(): try: # Score word using model word_score = model.score(X, lengths) log_l[word] = word_score if word_score > max_score: max_score = word_score best_guess = word except: # Unable to process word log_l[word] = float("-inf") guesses.append(best_guess) probabilities.append(log_l) return probabilities, guesses