The Internet has transformed much of the world's knowledge into unstructured text, and the amount of data being made available every day continues to grow exponentially. Developing new techniques to turn this data into knowledge is crucial in the age of information. Processing natural language text is both challenging and rewarding. Learning how to work with web-scale data collections is a critical skill to develop in Computer Science, and understanding the computational methods currently available to achieve scalable data processing will position students to be innovators in AI technologies in their future careers. This course will explore state-of-the-art techniques in natural language understanding and language generation. Students will develop an understanding of the key algorithms used in natural language processing, and be exposed to a diverse range of applications including machine translation, text mining, sentiment analysis, and question answering. Python will be used extensively in this course, and so students are expected to have an intermediate level of knowledge with Python programming.