分享一下我的学习路径,正常的理工科大学生大概三四个月可以入门(学过C语言、线性代数、概率论),独立解决NLP问题,搭建baseline并适当优化效果。
下文涉及的脑图/论文list/代码都在(持续更新ing):
https://github.com/leerumor/nlp_tutorial

NLP的知识体系

不管是NLP,还是其他领域,在学之前最好先对全局有个大概的印象,知道有哪些重要知识点。比如在学NLP之前,需要有一定的数学&编程基础 -> 掌握基本的统计学习模型 -> 了解深度学习网络原理。而真的去学NLP,只需要掌握五种基本任务(分类/序列标注/文本匹配/文本生成/语言模型),再套到具体的任务里就可以了:

入门阶段建议主要精力放在体系的建立上,否则知识零散不便于记忆。可以按照以下的节奏:
第一个月:读懂机器学习、深度学习原理,不要求手推公式
第二个月:了解经典任务的baseline,动手实践,看懂代码
第三个月:深一个应用场景,尝试自己修改模型,提升效果

第一个月:理论基础

1. 数学&编程基础(0-1周)

数学和编程基础因人而异,之前就很扎实的同学可以花两三天稍微复习一下,或者之后边学机器学习边复习也可以;不扎实的同学最好花一周时间再分别入门一下,会用Python面向对象编程、了解矩阵运算、了解概率论,再根据后续的学习去补漏。

2. 统计机器学习基础(2周)

建议初学者先看懂线性分类、SVM、树模型和图模型,这里推荐李航的「统计学习方法」,看起来看快,大概一天一个知识点。看书不清楚的地方可以参考视频教程,推荐吴恩达的「CS229公开课」或者林田轩的「机器学习基石」。
在看教程时不必强迫症式的一章接着一章刷完,重点看以下部分即可:

3. 深度学习基础(2周)

深度学习部分稍微轻松些,推荐邱锡鹏的「神经网络与深度学习」教材,或者吴恩达的「深度学习」网课、李宏毅的「深度学习」网课。先学会神经网络的前后向推导,再去了解其他经典编码器:

第二个月:经典模型&看懂代码

掌握基本的理论基础后就可以分任务开始实践了,其实就五类任务,他们还有很多共通的地方。
文本分类(1周)
先掌握:TextCNN -> TextRNN -> 加Attention -> BERT精调 -> GNN(选学)

2. 序列标注(1周)

序列标注的baseline是LSTM+CRF,之后可以分别对Embedding、编码器、解码三个模块进行学习:

3. 文本匹配(1周)

文本有双塔和匹配两种做法,双塔可以先学SiamCNN,之后了解各种编码器优化方式;基于匹配的方式则在于句子表示间的交互,了解BERT那种TextA+TextB拼接的做法之后,可以再看看阿里的RE2这种轻量级模型的做法:

4. 文本生成(1周)

先掌握:Seq2Seq的LSTM实现 -> 加Attention -> Seq2Seq的Transformer实现 -> GPT2 -> T5
再根据兴趣学习VAE、GAN、RL等。

5. 语言模型(1周)

先掌握:BERT -> XLNet -> ALBERT -> ELECTRA
再了解其他改进:


这里推荐几篇综述:
2020 A Survey on Text Classification: From Shallow to Deep Learning
2020 A Survey on Recent Advances in Sequence Labeling from Deep Learning Models
2020 Evolution of Semantic Similarity - A Survey
2017 Neural text generation: A practical guide
2018 Neural Text Generation: Past, Present and Beyond
2019 The survey: Text generation models in deep learning
2020 Efficient Transformers: A Survey

第三个月:实践&进阶

打一个比赛(3周)

知道各种模型,能看懂原理之后,就要开始实战了。把Github上某个项目跑通并不算“实战”,而是努力去把一个项目做到从0到100,这其中积累的经验才真的有用。
强烈建议打一个比赛,常用的平台有:
Kaggle(国际最知名比赛平台,难度大,但教程丰富,可以学到很多技巧)
天池(阿里的竞赛平台,业内认可度高)
Biendata(近几年知名度也很高的竞赛平台,最好挑知名机构办的比赛)
第一次可以参加已经结束的比赛,先尝试自己打,再去看别人输出的资料和源码,看自己有哪些不足。建议打中文比赛,看数据比较方便,同时可以看看kaggle同类型比赛的kernel,学习trick。同时多看些顶会论文并复现,争取做完一个任务后就把这个任务技巧摸清。


这三个多月结束后,相信坚持下来的同学已经有了不错的水平。接下来就是再继续迭代,深化自己对每个知识点的理解,同时可以:
认真去打一次比赛,拿到好名次
还在读研的话,重点还是在research下功夫,做出自己的成果
去找一个实习,边赚钱边学习
其实自己刚开始学的时候只到了minimum的水平,在后续的实践、面试中才逐渐把知识点补全,并归到自己的体系里。刚入门的同学们也不要气馁,先懵懵懂懂地看一看原理,哆哆嗦嗦地跑一跑代码,时间会给你答案。
怀疑自己的时候,就算算自己到底学了多久,没到一万小时之前都还来得及。