title: NLTK Perplexity measure inversion
body: <p>I have given a train text and a test text. What I want to do is to train a language model by train data to calculate the perplexity of the test data.</p>
  
  <p>This is my code: </p>
  
  <pre><code>import os
  import requests
  import io #codecs
  from nltk.util import everygrams
  from nltk.lm.preprocessing import pad_both_ends
  
  from nltk import word_tokenize, sent_tokenize 
  
  fileTest = open("AaronPressman.txt","r");
  with io.open('AaronPressman.txt', encoding='utf8') as fin:
          textTest = fin.read()
  if os.path.isfile('AaronPressmanEdited.txt'):
      with io.open('AaronPressmanEdited.txt', encoding='utf8') as fin:
          text = fin.read()
  
  # Tokenize the text.
  tokenized_text = [list(map(str.lower, word_tokenize(sent))) 
                  for sent in sent_tokenize(text)]
  
  from nltk.lm.preprocessing import padded_everygram_pipeline
  from nltk.lm import Laplace
  
  n = 1
  padded_bigrams = list(pad_both_ends(word_tokenize(textTest), n=1))
  trainTest = everygrams(padded_bigrams, min_len = n , max_len=n);
  
  train_data, padded_sents = padded_everygram_pipeline(n, tokenized_text)
  
  
  model = Laplace(n) 
  model.fit(train_data, padded_sents)
  
  print(model.perplexity(trainTest)) 
  </code></pre>
  
  <p>When I run this code with n=1, which is unigram, I get <code>"1068.332393940235"</code>. With n=2, or bigram, I get <code>"1644.3441077259993"</code>, and with trigrams I get <code>2552.2085752565313</code>.</p>
  
  <p>What is the problem with it?</p>