Модифицируйте упомянутую функцию Витерби, чтобы повысить точность - PullRequest
0 голосов
/ 22 декабря 2018

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

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

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

...