Использование theano для реализации обучения с максимальной вероятностью в языковой модели нейронной вероятности Python

Я пытаюсь реализовать изучение языка максимального правдоподобия для модели языка нейронной вероятности в Python из кода билинейной модели: https://github.com/wenjieguan/Log-bilinear-language-models/blob/master/lbl.py

Я использовал функцию grad в theano для вычисления градиента и попытался использовать функцию train для обновления параметров модели, но он получил ошибки. Вот мой код:

def train(self, sentences, alpha = 0.001, batches = 1000):
    print('Start training...')
    self.alpha = alpha
    count = 0

    RARE = self.vocab['<>']
    #print RARE
    q = np.zeros(self.dim, np.float32)
    #print q
    delta_context = [np.zeros((self.dim, self.dim), np.float32) for i in range(self.context) ]
    #print delta_context
    delta_feature = np.zeros((len(self.vocab), self.dim), np.float32)
    #print delta_feature
    for sentence in sentences:
        sentence = self.start_sen + sentence + self.end_sen
        for pos in range(self.context, len(sentence) ):
            count += 1
            q.fill(0)
            featureW = []
            contextMatrix = []
            indices = []
            for i, r in enumerate(sentence[pos - self.context : pos]):
                if r == '<_>':
                    continue
                index = self.vocab.get(r, RARE)
                print index
                indices.append(index)
                ri = self.featureVectors[index]
                #print ri
                ci = self.contextMatrix[i]
                #print ci
                featureW.append(ri)
                contextMatrix.append(ci)
                #Caculating predicted representation for the target word
                q += np.dot(ci, ri)
            #Computing energy function
            energy = np.exp(np.dot(self.featureVectors, q) + self.biases)
            #print energy
            #Computing the conditional distribution
            probs = energy / np.sum(energy)
            #print probs
            w_index = self.vocab.get(sentence[pos], RARE)


            #Computing gradient
            logProbs = T.log(probs[w_index])
            print 'Gradient start...'
            delta_context, delta_feature = T.grad(logProbs, [self.contextMatrix, self.featureVectors])
            print 'Gradient completed!'
            train = theano.function(
                                    inputs = [self.vocab],
                                    outputs = [logProbs],
                                    updates=((self.featureVectors,self.featureVectors - self.alpha * delta_feature), 
                                             (self.contextMatrix,self.contextMatrix - self.alpha * delta_context)),
                                    name="train"
                                    )



    print('Training is finished!')

Я только что узнал о Python и модели с нейронным вероятностным языком, так что это довольно сложно для меня. Не могли бы вы мне помочь, пожалуйста! Спасибо!

0 ответов

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