Skip to content


Instructor: Bhuwan Dhingra (
Lectures: Tuesday and Thursday 1.45pm – 3.00pm in Physics 128
TAs:  Raghuveer Thirukovalluru ( and Ghazal Khalighinejad (

This class is a graduate-level introduction to the methodologies underlying modern natural language processing (NLP), the study of computing systems which process human languages.  Such systems are common around us today—search engines, document editors, smart speakers all use NLP—and are used widely in industry for analyzing textual data. The class is intended for graduate students and upper-level CS undergraduates.

The course will cover a wide range of NLP tasks and the methods for solving them, which largely consist of machine learning and more recently deep learning. The lectures will cover the mathematics behind these methods and the assignments will require students to implement some of them using a standard machine learning library (Pytorch). By the end of the course, students should be familiar with the main applications of NLP. They should be able to identify appropriate techniques for tackling them, read research papers about those techniques and (with some effort) implement them in Python. Topics include text classification, language modeling, generative and discriminative models of sequences and trees, formal semantics, pretraining, and applications.

Programming assignments will involve building scalable machine learning systems for various NLP tasks. The final project will require students to either pursue original research on an NLP problem or reproduce and analyze results from a prior paper in teams of up to 4.

Prerequisites: [Undergraduate machine learning (COMPSCI 370 or 371) OR statistical inference (STA 250D / MATH 342D) + probability (MATH 230 / STA 230) + linear algebra (MATH 221, 218 or 216)] AND comfort with programming in python.

Image Credit: xkcd 1263