应好友邀约,写一篇有关我在NLP上学习的历程,以供大家作参考。点开的朋友,如果真的想了解这个过程,也想知道一些具体的信息,并从中有所收获,真心希望大家能认真看下去,尤其是一些近期和我在聊的新人,我虽不算大神,但是自认为还是有一定经验的,如果信得过我,请认真看吧。如果有什么想法欢迎和我多聊~
懒人目录
- 学习历程
- 学习路径
- 学习建议
- 其他建议
学习历程
背景介绍
为了更好地让大家去理解我的历程,我先说说我当时的背景。
时间起点就从大四开始吧,信息与计算科学(提醒一下,这是个数学类专业,不是计算机的)专业,数学理论上还是比较自信的,计算机会点皮毛吧,matlab会点,写过点Java和前端三剑客,python也是大四中后期才自学的,蹩脚得很。
就在这种情况下,开始机器学习和NLP方面的学习。
启蒙阶段
大四期间(16-17学年)因为机缘巧合接触了李航老师的《统计学习方法》,并在团队合作的情况下通关了里面的内容,回想起来还是满满的求生欲。由于只是过了书上的内容,所以只是对理论有了比较完整的了解,但是具体怎么用,怎么实现,基本是不知道的。
这段时间,基本就是拼的自己的脑子在攻克这本书,实际上,对于数学专业来说,这本书相比微分方程、实分析之类的还是简单很多,所以数学出身的同学还是不用太担心,但是对于高数、线代、概率论不好的同学,吃力是毋庸置疑的。
当然的,书终究只是书,有时候书真的看不懂,我会结合着网上的别的材料材料一起看,博客之类的,可以帮助理解,当然有些会有些错误,包括书本身和博客,需要自己甄别,好在不太多,不至于有三观级别的查错。
很多人因为这本书的困难而放弃,而且很多人会非常追捧周志华老师的《机器学习》,诚然这是本好书,但是如果你因为《统计学习方法》看不懂而去看周志华老师的《机器学习》,那你后面的提升会被严重限制,例如你只知道HMM的三个问题却不知道这三个问题怎么解决。(因为难而躲避,你终究会为你的躲避付出代价,要想多赚点真不是说有就有的)。
有关方法实现,我的学习基本来自于百度,例如“python SVM”,这样就会出大量的文章来讲,选一个试试你就会了,这已经是非常简单的方法了。
懒人记录:
- 《统计学习方法》不仅在于里面的方法,还有里面的计算思想,正则化,极大似然估计,梯度下降等,所以理论搞懂,会为你以后的进步打下基础,欠的账迟早要还。
- 注意除了学方法,还要学实现,我当时欠了这块的账,在后续才补了回来,自己找个数据集玩玩(鸢尾花)之类的,做一遍就好
- Python是这块的基操,没有不会的理由。
入门阶段
机器学习想必是有些基础了,但是如何用,在哪用,其实非常苦恼,因此自己结合自己的研究生方向与当前社会现状,和老师沟通了一条线路,NLP,主要课题是研究如何通过NLP与网络信息实现对金融市场的预测,这也就奠定了整个研究生阶段的主要内容了。可惜的是,老师其实对NLP的了解不深,只能从金融市场有关内容中给我建议,但是NLP既然要做,也注定是一条孤独艰难的路。
17年9月入学,至12月,我完成了第一篇有关研究内容的初稿,从什么都不知道,到有论文吧,这段时间除了偶尔看看LPL的比赛,基本就在学校理学楼221里面(学校一间几乎被废弃,桌子除了我的位置基本都是尘的教室里)自习,严格而言都不算实验室,只是一个可供自习落脚的地方吧,这么一个环境学习下来的。
当时完全不清楚NLP是什么,也不知道这东西怎么做,只能通过看论文、看博客慢慢去学,当时甚至连淘宝和网课都没有,前期每天只有两个工作,刷论文和写爬虫。爬虫那时候技术不是很强,用的自己比较熟悉的Ajax去网络抓包,论文方面是每看一篇就整理成笔记,笔记多少和文章摘要作用之类的有关,觉得有用了才回去深看,后来一篇综述成了一个转折点,这篇综述我至今仍然能口述,简直是救命的神药。论文虽然没有说具体的研究理论和方法,但是既然是综述,也就提到了很多名词,我也知道了要学什么,要做什么,目前的研究现状如何,因为这篇文章,我感觉我的瓶颈都解决了。
于是就开始按图索骥,查找有关方法和理论,慢慢把技术学起来,另外我还百度了一本大型著作——《统计自然语言处理》。从基本的语言模型,从简单的开始,慢慢开展(我的第一个文本分类的基线就是从TFIDF+SVM开始的),然后是,用着自己蹩脚的,现在看来简直是垃圾的代码技术,想一行,搜一行地完成了这块完整的代码,并通过各种实验最终完成了自己的第一稿论文(创新点啥的肯定都是有的),那时就是12月。
懒人记录:
- 别老说没灵感,艺术家如此,科研也如此,灵感来源于你的积累,积累从哪里来,论文。
- 动手查,动手做,多查资料,百度、论文、github,道理都懂,但是为啥还有很多人会问我百度就能知道的问题呢?
- 不是宣扬独立战斗,团队应该有团队的样子,但是你应该有独立解决问题的能力,否则团队要你干吗?会求助是好事,但是要问到别人手把手教你的层次,那就是个巨婴了。
- 综述是个好东西,带survey、review的多半是,看看会对研究现状有清晰的了解,近期的关键论文基本都被引在里面了,你也省去很多找论文和鉴别论文的时间。
- 《统计自然语言处理》最好看看,虽然里面谈的方法不多,但是引文很全,甚至建议引文都看看,简单过一遍至少你知道文本分析和自然语言处理的差别在哪里,别老是炒概念。
- 从最简单的开始,先做一个初步的,然后开始慢慢加大难度,这应该是一个正常的学习历程。
进阶阶段
说到进阶,大概就是从18年上半年开始吧。当时面临的一个大问题是怎么找工作,当然还有论文的推进,到了工业界,技能要求更完善,因此这块也是我自学的集中期,论文在坚持看但是重在基础的完善(光看论文知识很难系统化、完善化)。
深度学习方面,自己的深度学习是平时积累的,BP是本科的课程就已经接触,CNN之类的也是在平时找个1天左右看博客看会的,RNN是后来自己用到了才临时看的,包括后续的LSTM之类的,真没有集中专项学习。我目前会tensorflow和keras,前者是淘宝花了4块钱买的教程,keras是看文档自学的,后来买了一本紫色封面的书边看边学会的。
自己在文本分类方面看过不少论文,也有重现,所以有一些理解。建议大家还是把文本分类能自己动手把几个常见模型都看一遍甚至重现(博客上、公众号上经常有人提到的,就叫做常见),毕竟文本分类是最最简单的自然语言处理任务,也是门槛最低的,这个都不会复杂的任务更加做不了对吧。
另外,为了自己对NLP目前现状有个更好地了解,我自己投资了一下,买了一门网课吧,选的是深蓝学院的课,其实几百块,每周2次,真不指望能学到什么(要是真的这么短时间就能学会为啥那么多人学不起来?),但是能让我知道我有哪些是应该知道但是不知道的,然后开始学起来。
NLP的自学其实到这块就已经进入这个行业了,进入到行业里也就有了很多信息,过程的话我就写到这里吧。
学习路径
上面说了很多,现在来总结一下我的学习路径,当时算是刀耕火种的时代,下面这个只能做参考。
- 《统计学习方法》
- 刷有关领域的论文,因为论文体现发展前沿的重要方式
- 《统计自然语言处理》
- 博客+论文级别的深度学习基础get
- 淘宝买的tensorflow视频,keras文档学keras
- 自学gensim等NLP工具+动手实践
- 根据实际遇到的问题持续通过多种渠道学习
由于现在资源比较丰富了,所以还是推荐大家看看下面的材料
- 百度、淘宝、github、论文,最快捷、扎实的学习路径
- 机器学习:《统计学习方法》、雷明的《机器学习与应用》,塞巴斯蒂安的《python机器学习》,sklearn的API文档建议自己多看看查查
- 深度学习:黄文坚《tensorflow实战》、tensorflow技术解析与实战、《keras深度学习实践》、TF和keras的官方文档
- 自然语言处理:《统计自然语言处理》、刘兵的《情感分析》、《基于深度学习的自然语言处理》。个人还是建议多看看博客、公众号等,经常提到的模型才是最好的,目前大部分书都只是浮于表面,这只与NLP这块的发展现状有关,博客多看自己也多动手
- 其他:《数据挖掘导论》,《机器学习实践指南》、《python数据分析与挖掘实战》、《精通数据科学》
从我的视角,这些书能够看完并且能够理解,超过60%-70%的人没问题,关键就看你能不能看下来,目前我还有坚持每天看书和看论文的习惯。
学习建议
- 扎实基础,无论是数学还是编程开发,不要想着避开,出来混总是要还的
- 不要老是抱怨自己没有资料,只是你没找过而已,甚至是百度淘宝都是有的
- 不一定要系统学习,前沿知识很难有体系,所以一方面平时要接受信息,另一方面坚持去查资料看
- 多阅读工具给的文档,英文?翻译软件能帮到你
其他建议
- 这个领域对数学和技术都具有一定要求,门槛其实很高,当然赚的不少,但是有没有媒体说的那么好呢,我的答案是否,所以大家要谨慎,别就顾着炒概念和涌入,泡沫破了代价很大。
- 技术扎实是安身立命之本,裁员也裁水平不够的对吧
- 多!看!论!文!没灵感了看论文,实验不会做了参考论文,文章格式不会拉的时候看论文。
- 尽量尝试自己把问题解决,问别人之前多问问自己,百度了没,谷歌了没,看过论文没,都是怎么说的,我还没解决的点在那里,绝对比问一个人“在吗”然后抖着腿等高效多了
后记
没想过自己会通过这个基于回顾到整个自己自学的历程,研究生历程远不止如此,没故意写的很辛苦,当时其实也觉得过难受,但是回过头看自己,感觉是真的很酷。NLP的学习远不止这些,我至今仍在一直学习,好多内容我都还来不及学习,bert、elmo等都还没有时间看,由于自己的工作方向等原因,近期我还在看短文本分了等方面的内容,坚持进步,坚持学习吧,没有什么是容易的。
网友评论