What is this course about?
Natural language processing (NLP) is one of the most important technologies of the information age, and a crucial part of artificial intelligence.
Applications of NLP are everywhere because people communicate almost everything in language: web search, advertising, emails, customer service, language translation, medical reports, etc.
In recent years, Deep Learning approaches have obtained very high performance across many different NLP tasks, using single end-to-end neural models that do not require traditional, task-specific feature engineering.
In this course, students will gain a thorough introduction to cutting-edge research in Deep Learning for NLP.
Through lectures, assignments and a final project, students will learn the necessary skills to design, implement, and understand their own neural network models.
This year, CS224n will be taught for the first time using PyTorch rather than TensorFlow (as in previous years).
This course was formed in 2017 as a merger of the earlier CS224n (Natural Language Processing) and CS224d (Natural Language Processing with Deep Learning) courses. Below you can find archived websites and student project reports.
- Proficiency in Python
- College Calculus, Linear Algebra (e.g. MATH 51, CME 100)
You should be comfortable taking (multivariable) derivatives and understanding matrix/vector notation and operations.
- Basic Probability and Statistics (e.g. CS 109 or equivalent)
You should know basics of probabilities, gaussian distributions, mean, standard deviation, etc.
- Foundations of Machine Learning (e.g. CS 221 or CS 229)
We will be formulating cost functions, taking derivatives and performing optimization with gradient descent.
If you already have basic machine learning and/or deep learning knowledge, the course will be easier; however it is possible to take CS224n without it. There are many introductions to ML, in webpage, book, and video form. One approachable introduction is Hal Daumé's in-progress A Course in Machine Learning. Reading the first 5 chapters of that book would be good background. Knowing the first 7 chapters would be even better!
The following texts are useful, but not required. All of them can be read free online.
If you have no background in neural networks but would like to take the course anyway, you might well find one of these books helpful to give you more background:
There are five weekly assignments, which will improve both your theoretical understanding and your practical skills. All assignments contain both written questions and programming parts.
- Deadlines: All assignments are due on either a Tuesday or a Thursday before class (i.e. before 4:30pm). All deadlines are listed in the schedule.
- Submission: Assignments are submitted via Gradescope (access code is here — requires Stanford login). If you need to sign up for a Gradescope account, please use your @stanford.edu email address. Further instructions are given in each assignment handout.
Do not email us your assignments.
Study groups are allowed, but students must understand and complete their own assignments, and hand in one assignment per student.
If you worked in a group, please put the names of your study group at the top of your assignment.
Please ask if you have any questions about the collaboration policy.
- Honor Code:
We expect students to not look at solutions or implementations online. Like all other classes at Stanford, we take the student Honor Code seriously.
Final Project (43%)
The Final Project offers you the chance to apply your newly acquired skills towards an in-depth application.
Students have two options: the Default Final Project (in which students tackle a predefined task, namely textual Question Answering) or a Custom Final Project (in which students choose their own project). Examples of both can be seen on last year's website.
- Credit: For both default and custom projects, credit for the final project is broken down as follows:
- Deadlines: The project proposal, milestone and report are all due at 4:30pm. All deadlines are listed in the schedule.
- Default Final Project [handout] [github repo] [lecture slides]: In this project, students explore deep learning solutions to the SQuAD (Stanford Question Asking Dataset) challenge.
This year's project is similar to last year's, with some changes (e.g. SQuAD 2.0 rather than SQuAD 1.1, baseline code is in PyTorch rather than TensorFlow).
- Project advice [lecture slides] [lecture notes]: The Practical Tips for Final Projects lecture provides guidance for choosing and planning your project.
To get project advice from staff members, first look at each staff member's areas of expertise on the office hours page. This should help you find a staff member who is knowledgable about your project area.
- Project ideas from Stanford researchers: We have collected a list of project ideas from members of the Stanford AI Lab — these are a great opportunity to work on an interesting research problem with an external mentor. If you want to do these, get started early!
- Team size: Students may do final projects solo, or in teams of up to 3 people. We strongly recommend you do the final project in a team. Larger teams are expected to do correspondingly larger projects, and you should only form a 3-person team if you are planning to do an ambitious project where every team member will have a significant contribution.
- Contribution: In the final report we ask for a statement of what each team member contributed to the project. Team members will typically get the same grade, but we may differentiate in extreme cases of unequal contribution. You can contact us in confidence in the event of unequal contribution.
- External collaborators: You can work on a project that has external (non CS224n student) collaborators, but you must make it clear in your final report which parts of the project were your work.
- Sharing projects: You can share a single project between CS224n and another class, but we expect the project to be accordingly bigger, and you must declare that you are sharing the project in your project proposal.
- Mentors: Every custom project team has a mentor, who gives feedback and advice during the project. Default project teams do not have mentors. Students do not need to find their own mentors; mentors are assigned to custom project teams after project proposals. If you have an external mentor (e.g. Stanford AI Lab researcher), you will be assigned a CS224n staff member `mentor' who grades your work and gives any necessary feedback.
- Computing resources: All teams will receive credits to use the cloud computing service Azure.
- Using external resources: The following guidelines apply to all projects (though the default project has some more specific rules, provided in the Honor Code section of the handout):
- You can use any deep learning framework you like (PyTorch, TensorFlow, Theano, etc.)
- More generally, you may use any existing code, libraries, etc. and consult and any papers, books, online references, etc. for your project. However, you must cite your sources in your writeup and clearly indicate which parts of the project are your contribution and which parts were implemented by others.
- Under no circumstances may you look at another CS224n group’s code, or incorporate their code into your project.
We appreciate everyone being actively involved in the class! There are several ways of earning participation credit, which is capped at 3%:
- Attending guest speakers' lectures:
- In the second half of the class, we have three invited speakers. Our guest speakers make a significant effort to come lecture for us, so (both to show our appreciation and to continue attracting interesting speakers) we do not want them lecturing to a largely empty room.
- For on-campus students, your attendance at lectures with guest speakers is expected! You will get 0.5% per speaker (1.5% total) for attending.
- Since SCPD students can’t (easily) attend classes, they can instead get 0.83% per speaker (2.5% total) by writing a ‘reaction paragraph’ based on listening to the talk; details will be provided. Non-SCPD students with an unavoidable absence who ask in advance can also do this option.
- Attending two random lectures: At two randomly-selected (non-guest) lectures in the quarter, we will take attendance. Each is worth 0.5% (total 1%).
- Completing feedback surveys: We will send out two feedback surveys (mid-quarter and end-of-quarter) to help us understand how the course is going, and how we can improve. Each of the two surveys are worth 0.5%.
- Piazza participation: The top ~20 contributors to Piazza will get 3%; others will get credit in proportion to the participation of the ~20th person.
- Karma point: Any other act that improves the class, which a CS224n TA or instructor notices and deems worthy: 1%
- Each student has 6 late days to use. A late day extends the deadline 24 hours. You can use up to 3 late days per assignment (including all five assignments, project proposal, project milestone, project final report, but not poster).
- Teams must use one late day per person if they wish to extend the deadline by a day. For example, a group of three people must have at least six remaining late days between them (distributed among them in any way) to extend the deadline two days.
- Once you have used all 6 late days, the penalty is 10% of the assignment for each additional late day.
If you feel you deserved a better grade on an assignment, you may submit a regrade request on Gradescope within 3 days after the grades are released.
Your request should briefly summarize why you feel the original grade was unfair.
Your TA will reevaluate your assignment as soon as possible, and then issue a decision.
If you are still not happy, you can ask for your assignment to be regraded by an instructor.
Credit/No credit enrollment
If you take the class credit/no credit then you are graded in the same way as those registered for a letter grade. The only difference is that, providing you reach a C- standard in your work, it will simply be graded as CR.