This document discusses language models and their evaluation. It begins with an overview of n-gram language models, which assign probabilities to sequences of tokens based on previous word histories. It then discusses techniques for dealing with data sparsity in language models, such as smoothing methods like Laplace smoothing and Good-Turing estimation. Finally, it covers evaluating language models using perplexity, which measures how surprised a language model is by the next words in a test set. Lower perplexity indicates a better language model.