Тренировочная модель биграмма - PullRequest
0 голосов
/ 22 февраля 2020

Я совершенно новичок в концепции класса, поэтому я запутался. Вот мой код:

class BigramModel(object):

    def __init__(self, inputfile):
        self.inputfile = inputfile
        self.context = []
        self.word = []
        self.testfile = []

    def logprob(self, context, word):
        return get_sent_bigram_log_prob([(context,word)])


    def get_ppl(self, testfile):  
        log_sent_freq = get_unigram_freq(testfile)
        return 2 ** (-1 * log_sent_freq/len(nltk.word_tokenize(testfile)))

Я получаю за это результаты, но я не чувствую, что тренирую свою модель здесь. Вероятно, сделать некоторые ошибки с частью self.context et c.

Когда я хочу сгенерировать предложения с кодом ниже, я получаю сообщение об ошибке «Объект BigramModel не повторяется»

import random
def text_generator(bigramlm, n):
    sentence = []
    for anyWord in bigramlm:
        nextword=random.choice(sorted(logprob(sent).items(), key = lambda x: x[-1] , reverse = False)[:5])
        sentence = [anyWord, nextword ]+ sentence
        anyWord = nextword
        if nextword == '</s' or len(sentence)==20:
            break
    for i in range(n):
        print(sentence)
model=BigramModel(shakespeare)
print(model)
print(text_generator(bigramlm=model, n=5))

...