Спасибо, у меня есть два вопроса, что если я хочу использовать «биграммы», а не «каждыйграммы» для обучения и тестирования? и что, если я хочу вычислить недоумение для всех предложений? Должен ли я получить среднее из недоразумений?

тируюperplexity мера для языковой модели для текста:

  train_sentences = nltk.sent_tokenize(train_text)
  test_sentences = nltk.sent_tokenize(test_text)

  train_tokenized_text = [list(map(str.lower, nltk.tokenize.word_tokenize(sent))) 
                for sent in train_sentences]

  test_tokenized_text = [list(map(str.lower, nltk.tokenize.word_tokenize(sent))) 
                for sent in test_sentences]

  from nltk.lm.preprocessing import padded_everygram_pipeline
  from nltk.lm import MLE,Laplace
  from nltk.lm import Vocabulary

  vocab = Vocabulary(nltk.tokenize.word_tokenize(train_text),1);

  n = 2
  print(train_tokenized_text)
  print(len(train_tokenized_text))
  train_data, padded_vocab = padded_everygram_pipeline(n, train_tokenized_text)

  # print(list(vocab),"\n >>>>",list(padded_vocab))
  model = MLE(n) # Lets train a 3-grams maximum likelihood estimation model.
  # model.fit(train_data, padded_vocab)
  model.fit(train_data, vocab)

  sentences = test_sentences
  print("len: ",len(sentences))
  print("per all", model.perplexity(test_text)) 

Когда я используюvocab вmodel.fit(train_data, vocab) недоумение вprint("per all", model.perplexity(test_text)) это число (30.2), но если я используюpadded_vocab который имеет дополнительные<s> а также</s> это печатаетinf.

Ответы на вопрос(1)

Ваш ответ на вопрос