Модифицируйте упомянутую функцию Витерби, чтобы повысить точность

Ниже приведена функция, которую мы используем для анализа Витерби.

def Viterbi(words, train_bag = train_tagged_words):
        state = []
        T = list(set([pair[1] for pair in train_bag]))

        for key, word in enumerate(words):
            #initialise list of probability column for a given observation
            p = [] 
            for tag in T:
                if key == 0:
                    transition_p = tags_df.loc['.', tag]
                else:
                    transition_p = tags_df.loc[state[-1], tag]

                # compute emission and state probabilities
                emission_p = word_given_tag(words[key], tag)[0]/word_given_tag(words[key], tag)[1]
                state_probability = emission_p * transition_p    
                p.append(state_probability)

            pmax = max(p)
            # getting state for which probability is maximum
            state_max = T[p.index(pmax)] 
            state.append(state_max)
        return list(zip(words, state))

теперь я должен создать способы или модификацию, чтобы она могла увеличить точность и пометить неправильно помеченные слова

попробовал 1 Я попытался указать 0,001 как вероятность выброса, но это не сильно повысило точность

emission_p = (word_given_tag(words[key], tag)[0])/(word_given_tag(words[key], tag)[1]) or 0.001

предложить любую другую модификацию этой функции

0 ответов

Другие вопросы по тегам