Модифицируйте упомянутую функцию Витерби, чтобы повысить точность
Ниже приведена функция, которую мы используем для анализа Витерби.
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
предложить любую другую модификацию этой функции