Превращение алгоритма Биграма-Витерби в алгоритм триграммы Витерби

Я реализовал алгоритм Витерби, используя модель перехода триграммы, однако я хочу улучшить свою точность, перейдя к модели триграммы для алгоритма Витерби. Я уже рассчитал выброс и переход. Я просто не могу понять, где изменить алгоритм.

def viterbi (transition, emission, sentence):
    #set tag as start of sentence and assign a value

    tags=emission.index.tolist()

    #for t in tags:
        #for t2 in tags:
            #if (t2,t) not in transition:
                #transition[(t2,t)]=0.000001       
    start={}
    for tag in tags:
        if tag == '<s>':
            start['<s>']=1
        else:
            start[tag] = 0          

    i=0
    for word in sentence:
        if word not in list(emission):
            #if wordscaps.match(sentence[i]):
                #sentence[i]='<UNK2>'


            else:
                sentence[i]='<UNK>'              
        i = i+1         
    vit=[{}]

    for tag in tags: 

        vit[0][tag]={"current":start[tag]*emission.loc[(tag,sentence[0])], "previous":None}

    for index in range (1,len(sentence)):
        vit.append({})
        for t in tags:

            (prob, oldtag)=max((vit[index-1][prev]["current"]*transition[(prev,t)]*emission.loc[(t,sentence[index])],prev)for prev in tags)
            vit[index][t]={"current":prob,"previous":oldtag}

    likeliest_tags=[]
    maxprob=max(value["current"]for value in vit[-1].values())
    #print(maxprob)
    previous= None
    for tag, everything in vit[-1].items():

        if everything["current"]==maxprob:
            likeliest_tags.append(tag)
            previous=tag
            break

    for t in range(len(vit)-2,-1,-1):
        likeliest_tags.insert(0, vit[t+1][previous]["previous"])
        previous=vit[t+1][previous]["previous"]


    return likeliest_tags

для перехода я вызываю предыдущий тег и текущий тег, но я подумал, возможно, мне нужно сделать второй "начальный" этап с использованием подхода биграммы, а затем, когда у меня есть два предыдущих тега, я могу перейти ко второй части моего алгоритма. Действительно, все поможет. Благодарю.

0 ответов

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