新学期开始了,看了一些经验贴,现在学习前辈的经验给自己总结点规划,希望今年是收获满满的。
一、推荐Github/博客系列(持续更新……)
NLP/ML/CV
[1] Algorithm_Interview_Notes-Chinese
[2] THUNLP机器阅读理解
[3] 52nlp
[4] 深度学习前沿笔记
[5] cs224n-camp
[7] 深度学习500问
[8] Papers with Code
[9] Deep Learning - All You Need to Know
https://github.com/osforscience/deep-learning-ocean#what-s-the-point-of-this-open-source-project
[10] 专知NLP知识资料大全集(入门/进阶/论文/数据/综述等)2017
http://www.zhuanzhi.ai/document/0b18475b4fa55a745c9a46adfa3005e2
数据结构与算法
[2] 排序算法可视化
精选指南
热点问题
对话清华NLP实验室刘知远:NLP搞事情少不了知识库与图神经网络
2019年在NLP领域,资源有限的个人/团队能做哪些有价值有希望的工作?
论文写作
如何学会看arxiv.org才能不错过自己研究领域的最新论文?
如何写一篇合格的NLP论文 :必看!
TensorFlow/Pytorch
TensorFlow
Gathers machine learning and Tensorflow deep learning models for NLP problems(❤365)
https://github.com/huseinzol05/NLP-Models-Tensorflow
Tensorflow-Cookbook:简单易用 TensorFlow 代码集
弗吉尼亚理工博士 Amirsina Torfi-简单tensorflow
NLP-Models-Tensorflow(NLP不同任务深度学习模型大全)
《机器学习实战:基于Scikit-Learn和TensorFlow》
Pytorch
PyTorch 中文手册(pytorch handbook)
项目里面有 4 个资源:神经机器翻译、问答匹配、新闻分类和电影分级
PyTorch资源列表:450个NLP/CV/SP、论文实现、库、教程&示例:https://github.com/bharathgs/Awesome-pytorch-list
二、NLP知识点清单
1、机器学习篇
需掌握的原理
1)朴素贝叶斯
2)逻辑回归,线性回归
3)决策树,不同的划分方式,ID3,C4.5,CTAR,XGBoost等等
4)Ensemble模型
5)SVM,核函数选择,不同SVM形式
6)HMM,CRF
7)最大熵原理,图解最大熵原理(The Maximum Entropy Principle)
8)KNN和K-Means,DBSACN也了解一下,以及各种距离计算方式,关于机器学习距离的理解
以上列出的算法都需要掌握其基本原理以及优缺点
需会写的公式
1)BP后向传播过程的推导,先定义Loss函数,然后分别对输出层参数和隐藏层参数进行求导,得到参数的更新量。
2)softmax和交叉熵推导,分成i=j 和 ij 两种情况来算
3)各种Loss函数
4)似然函数,负对数似然函数的推导
5)最小二乘法,利用矩阵的秩进行推导
6)贝叶斯定理,拉普拉斯平滑
补充进阶的公式
1)RNN在BP过程中梯度消失的原因,也把这个链式求导过程写出来。
2)各种优化方法的公式,SGD,Momentum,Adagrad,Adam
3)Batch Normalization,就是个归一化过程,再加一个scale操作
4)SVM推导,拉格朗日了解一下
5)最大熵模型相关推导
2、深度模型篇
掌握基础原理
1)CNN原理,如何用在文本上,在什么情况下适合用CNN,在什么情况下用LSTM
2)RNN系列,掌握RNN、LSTM和GRU的内部结构,RNN产生梯度消失的原因,LSTM如何解决,GRU对LSTM的改进。
3)Word2vec工具,怎么训练词向量,skip-gram和cbow
4)Attention机制
5)NLP基础任务,比如分词算法(序列标注任务),分类算法
掌握实战技巧
1)数据预处理,权重初始化,为什么不能全部初始化为0,词向量怎么预训练
2)过拟合问题,原因是什么,怎么解决,主要从数据和模型两方面出发
3)调参技巧,比如,卷积核大小怎么按层设置,bn放在哪里比较合适,激活函数之间的区别(sigmoid,tanh和relu),词向量维度怎么设置,等等。
4)模型评估指标,acc,pre,recall,f1,roc曲线和auc曲线,分别适用于什么任务,怎么降低偏差,怎么降低方差
5)优化方法,批量梯度下降,随机梯度下降,mini-batch梯度下降的区别,adam,adagrad,adadelta,牛顿法
6)梯度消失问题,原因(链式求导,激活函数),解决方法(主要是batch norm);以及梯度爆炸问题(梯度截断)
7)关于训练集和验证集,为什么要划分,如何划分(留出法,交叉验证)
8)如何处理数据不均衡问题,也是从数据和模型两方面出发解决。
3、算法编程篇
编程分成三种:普通算法编程,海量数据编程,模型编程。
普通算法编程
一般用C++或Java,需要掌握数组,链表,二叉树,递归,贪心,动态规划,各种容器,各种排序算法,在时间或者空间上的优化思路,以及复杂度的分析。
容器是个好东西,用vector代替数组,用map实现桶思想,用set排序,用queue写bfs,用stack写dfs等等。
刷题指南:剑指offer,然后上牛客网做题。或者刷LeetCode。
随手列几道常考的代码题:
1)复杂链表的复制,链表的删除
2)最长公共子序列,逆序对
3)快排,归并排序,堆排序
4)二分查找,以及衍生的题目
5)深度优先搜索
海量数据编程
这种用python写比较方便一点,可以把大文件划分成小文件,或者分治加哈希。
模型编程
有时候可能会让你用某个深度学习框架搭某个模型。做科研比较推荐pytorch,业界用tf 比较多。
参考文献