1
resposta

perplexity diferente das aulas

Olá pessoal! Toda vez que rodo o perplexity está dando 'inf' ao invés dos valores '47,67' e '21,53'. Alguém pode me ajudar? Segue o código para ver se estou fazendo algo de errado:

def treinar_modelo_mle(lista_textos):
    todas_questoes = ' '.join(lista_textos)
    todas_palavras = WhitespaceTokenizer().tokenize(todas_questoes)
    bigrams, vocabulario = padded_everygram_pipeline(2, todas_palavras)

    modelo = MLE(2)
    modelo.fit(bigrams, vocabulario)
    return modelo

modelo_port_2 = treinar_modelo_mle(port_treino)

print(modelo_port_2.perplexity(palavras_bigramns[0]))
print(modelo_port_2.perplexity(palavras_bigramns[1]))
1 resposta

Olá Guilherme, tudo bem ?

Desculpa pela demora no retorno.

Testei a sua função e ela está funcionando corretamente, então vamos investigar o que esse resultado significa.

Quando o valor da perplexidade é inf pode indicar que temos uma palavra que o modelo não aprendeu isso porque a perplexidade é a inversa da probabilidade, então se o modelo não conhece a palavra a probabilidade é zero e a perplexidade é infinita. Como foi explicado nesta aula.

Então uma sugestão para resolver esse resultado é verificar a variável palavras_bigramns está igual a da aula.

texto = "good morning"
palavras = WhitespaceTokenizer().tokenize(texto)
palavras_fakechar = [list(pad_both_ends(palavra, n = 2)) for palavra in palavras]
palavras_bigramns = [list(bigrams(palavra)) for palavra in palavras_fakechar]
print(palavras_bigramns)

Resultado:

[[('<s>', 'g'), ('g', 'o'), ('o', 'o'), ('o', 'd'), ('d', '</s>')], [('<s>', 'm'), ('m', 'o'), ('o', 'r'), ('r', 'n'), ('n', 'i'), ('i', 'n'), ('n', 'g'), ('g', '</s>')]]

Espero que isso resolva o resultado, mas se o problema não for resolvido, poderia por favor compartilhar seu código completo para investigarmos outras possibilidades.

Bons Estudos.