This document provides an introduction to natural language processing (NLP). It defines NLP as teaching computers to process human language. The two main components of NLP are natural language understanding (NLU), which is deriving meaning from language, and natural language generation (NLG), which is generating language from meaning representations. The document discusses the history of NLP from early rule-based systems to current deep learning methods. It also outlines several applications of NLU like classification and summarization and applications of NLG like machine translation and caption generation.