This course will explore a range of techniques designed to help machines perform tasks involving human language. We will cover both rules-based and machine learning approaches for morphological, syntactic, semantic, co-reference, and discourse processing. We will also touch on issues involved in natural language understanding, such as cognitive and linguistic phenomena and applications that can benefit from natural language processing such as question answering, machine translation, and spoken language understanding.