我在Stanford上CS 224n(上)

没错,我来到了梦开始的地方

(本文首发于微信公众号《夕小瑶的卖萌屋》,标题为《人在斯坦福,刚上cs224n》

题图

文 | Jazon

大家好,我是Jazon,现在是Stanford计算机硕士项目的一只学生,非常荣幸加入小夕的大家庭!请各路大神多多指教呀。

2021年1月12日,又一季Stanford CS224n——自然语言处理开课了,我和很多MSCS同学一起加入了这门课。由于疫情,今年的课程是以线上Zoom的方式进行,由Prof. Manning在他的书房远程授课。第一节课的Zoom有400多位同学参加,足见这门课有多么火爆。如果是线下授课的话,肯定能把教室挤爆。

彼时的Stanford微信和Slack群里十分热闹,大家都在各种找课友、队友。上这门课的主力军是硕士生,当然也有本科生和博士生。能在Stanford亲身体验这门传说中的神课,有一种朝圣的感觉,感觉特别幸运!

课程新设置

今年的课程设置,和2019年版的公开课相比,有不少小变化,这也反映了NLP领域发展之快。具体不同的地方,我会在下文里穿插着介绍~所有的课件都在课程网站(cs224n.stanford.edu)上,而今年Lecture的录播视频在几个月后也会在YouTube上公开,到时候大家就可以看到全新的Lectures啦!

前半学期的课程由10次Lecture和5个作业组成,覆盖NLP和神经网络的核心概念,如词向量、RNN、梯度下降等。第8节课是Final Projects的建议。

后半学期的第11 ~ 18次Lectures则主要是“嘉宾讲座”(Guest Lectures),如T5的提出者Colin Raffel来讲了T5,又或者是一些选学的话题,如Coreference Resolution。不强制上课,没有什么作业,这样可以让我们专心做Project。

特别值得提及的是今年的第9、10节课,Transformers和预训练模型首次进入了核心概念的部分,而不是像以前那样属于选听的嘉宾讲座。授课人是今年224n的Head TA(总助教)——John Hewitt。John是Stanford NLP组的博三学生,讲得真的非常棒!以前我看paper看不懂的TransformerBERT,他讲得真的是深入浅出,我很快就明白了。

BERT Lecture

重磅新作业

和前10次讲座相辅相成的是这门课的5次作业。作业1里大家简单探索了词向量的性质;作业2里我们推导了训练词向量的公式(这是这节课最calculus-intensive的作业);作业3算是唯一一个涉及比较传统的语言学概念与算法的作业,是关于Dependency Parsing(依存句法分析)的。

前3次作业都和去年的一致,作业4和5则是今年新出的。在这里要感谢出作业的TA们!作业4仍然是要搭建一个机器翻译模型,只是目标语言变成了Cherokee(美国原住民的语言之一)。这次作业的编程部分,让我们熟悉了PyTorch模型里的各种Tensor操作。

作业5是今年紧跟NLP大趋势,“重磅”新推出的:在数学部分,我们探索了Multi-head Attention的性质;在编程部分,我们需要复现一些预训练数据处理的代码(span corruption),以及实现Attention的一个变种。

这次作业出乎大家意料地难,我和不少同学们都至少花了25小时才做完。由于是今年首次发布,作业里还有很多说得不清楚的地方,本来Instruction已经9页纸了,TA们又写了一篇很长的Clarification。

那一周我们还需要提交Project Proposal,所以大家都很爆炸。2月20号早上,作业已经截止了一天,Office Hours却排起了可怕的50人长队。这门课的学生总数是475,可想而知有多大比例的同学没能按时写完,不得不用late days。

作业5的主要作者正是我们的John,据说他本来还想让我们Encoder-Decoder也自己写,被其他TA制止了。显然,他严重高估了同学们的实力,对这次失控的局面,他的心里也十分愧疚,一直守在论坛、Office Hours上回答同学们的问题。这也许印证了,特别优秀的人,对别人也会有意无意地设定很高的标准吧!

当然,做完作业5也让我收获很多,作业里我们需要分别训练一个“vanilla”模型和预训练模型、比较结果,于是我对预训练的效果、性质有了更直观的了解。

狂肝作业5的时刻

224n是怎么来的?

话说斯坦福一年有4个学期,这么火的课为什么只有冬季学期开呢?这里我想偏个题,讲讲我校NLP组的特点。Chris Manning教这门课已经20多年了,他算是NLP领域开山鼻祖级别的人物,224n课程材料里有讲到他自己发明的技术(比如GloVe),这是件很神奇的事!

但显然,他是位大忙人,手下有十几位PhD学生,没有精力每学期都教NLP。Stanford NLP组另外3位主要的教授可能也没有时间来教224n:Dan要教CS124(低阶NLP课),Percy要教CS221(人工智能),Potts要教CS224U(自然语言理解)。

Stanford NLP组只有4 ~ 7位教授,相比之下,CMU的LTI(Language Technologies Institute)有30位教授,其中不少大方向都是做NLP的科研,人手要多得多。因此CMU在NLP方面的课程多样得多,除了NLP以外,机器翻译、问答系统、搜索引擎等等,都有专门的课(羡慕脸)。

NLP很大,可惜时间太少

好了,回到224n。像我们Quarter制(4学期制)的学校,一学期是11周,今年由于疫情,学期强行缩减到10周,时间更加紧张。这么短的时间里要塞进整个NLP的内容,显然不可能,所以NLP里很多任务,如信息抽取、对话系统,课程里都没有涉及到(当然124、224U有补充一些概念)。也许224n可以像Data Mining一样,概念部分是一节课(CS 246),Project专门另外一节课来做(CS 341),可能就不用这么赶时间了。

同时,由于时间限制、科技趋势,课程里偏语言学的概念也越来越少。前面有提到,核心课程里唯一比较硬核Linguistics的内容是Dependency Parsing。19年的公开课里Manning花了一节讲Constituency Parsing,今年这节课已被其他内容取代,以后可能也不会再讲这个概念了,有些令人唏嘘。

我第一次接触NLP,应该是读吴军老师的《数学之美》,当初花了不少功夫理解信息论、隐马尔可夫、TF-IDF、分词等等概念,但是224n完全没有涉及它们。这本书是2014年写的,也许其中一些概念在这个BERT的时代已经变得不太相关了吧,真是让人感叹技术迭代的速度之快啊。

完成了前半学期的学习,大家也准备好肝Final Project啦!224n的重头戏还在后半学期,下篇文章会更精彩哦!