《从零开始学习⾃然语⾔处理(NLP)》-基础准备(0)
写在最前⾯
在这个⽇新⽉异的信息时代,海量数据的积累,计算能⼒的不断提升,机器学习尤其是深度学习的蓬勃发展,使得⼈⼯智能技术在不同领域焕发出蓬勃的活⼒。⾃⼰经历了嵌⼊式开发,移动互联⽹开发,⽬前从事⾃然语⾔处理算法开发⼯作。从⼯程软件开发到⾃然语⾔处理算法开发,希望通过这个系列的⽂章,能够由浅⼊深,通俗易懂的介绍⾃然语⾔处理的领域知识,分享⾃⼰的成长,同⼤家⼀起进步。
信⼼与兴趣
很多同学提到算法可能就会打退堂⿎,尤其是⼀直从事纯⼯程的软件开发。⼯作中连经典的数据结构都很少使⽤,更不⽤提五花⼋门的机器学习和深度学习算法。尤其各个⼤⼚的算法专家、数据科学家都是背景爆表,动不动就是国外名校的Phd,⾄少也是国内清北、C9。实际上,针对普通的算法开发岗,从学习梯度上来讲,算法和⼯程的差异并不⼤。当然也并不需要⾮要名校硕博。
以前经常和同事开玩笑说,好⽍⼤家都是985的本硕,但⼿上这⼯作,个⾼中⽣也能妥妥搞定啊。虽然是玩笑,线上的产品当然也不是像Demo 那么简单,但真实的⼯作真的没有那么明显的条条框框限制。⾃⼰也是⾯试官,百度这样的⼤⼚对普通的开发要求也只是⼤专。针对普通的算法开发,⾃⼰觉得本科基本⾜够了,当然更没有像211/985这样的限制。
⼀般来讲,从事某个领域的⼯作,从底层基础到业务实现⼀般包括如下的⼏个层次(以互联⽹移动开发和算法开发为例):
通⽤基础专业基础领域基础业务⽅向
学java都有哪些培训机构
动开发操作系统、计算机⽹络、编译原理、数
据结构、编程语⾔、设计模式
Android开
发、iOS开发
驱动开发、Framework开发、应
⽤开发
电商、社交、智能硬件
法开发编程语⾔(python)、数学基础(线性代
数、概率/统计、微积分)
机器学习,
深度学习
语⾳、⾃然语⾔理解、计算机视
觉、推荐、计算⼴告、风控
搜索,智能客服,⼴告
推荐,互联⽹⾦融signal下载最新版本
从技能栈的对⽐来看,算法开发对数学要求要⾼些,这⼜会让很多同学看着头痛。实际上对数学的恐
惧主要原因在于,对⼤多数⼈来说,数学主要是⽤来应付作业和考试的,⽽很少在真实的⼯程场景中使⽤它。
⾃⼰的本科专业是电⼦信息⽅向(觉得空闲时间多,顺⼿拿了个计算机科学与技术的双学⼠),有⼀些专业课程也蛮让⼈头痛的,⽐如《通信原理》、《信号与系统》、《数字信号处理》、《微机原理》、《数字电路》等,五花⼋门的抽象概念和算法公式。当时参加全国⼤学⽣电⼦设计竞赛,选⼊的学校的电⼦设计校队,参加系统的学习和培训(有半年的时间参加集中培训,不⽤像其他同学⼀样⽇常上课):
当⼤家还在纠结《通信系统》⾥的调制解调原理时,我们已经在做单边带调制收⾳机了;
当⼤家还在纠结《信号与系统》的傅⾥叶变换时,我们已经在做基于快速傅⾥叶变换的频谱仪了;
当⼤家还在纠结《数字信号处理》⾥的滤波器时,我们已经在做50Hz及其谐波过滤的⼯频陷波器了;
当⼤家还在纠结《微机原理》的X86汇编指令时,我们已经⽤上⼯业级的Msp430和C8051F系列控制器了;
当⼤家还在纠结《数字电路》的逻辑控制和抱怨VHDL难学时,我们已经在⽤Verilog玩Altera的FPGA了。
本来是⾮常枯燥有难以对付的专业课,但有了实际的使⽤场景和⼯程实践,反⽽变得⾮常有趣,不但专业课的教材就在⼿边经常翻阅,还会专门相应的Paper,看看有没有更好更新的⽅案。⾃⼰对这些专业课不但没有反感,反⽽觉得超级有⽤,知识就是⼒量,在这⼀刻特别贴切。
我们回过头来说数学,也是同样的体验。算法的开发⼯作为数学和算法提供了实践的⼟壤,理论有了实践这块沃⼟,也就不再那么枯燥和晦涩。像很多数学⼤神⼀样徒⼿推公式确实是件很难的事情,但基于基础的数学知识来解决⼯程问题,这并没有想象中的那么难。⽽且,学习本来就是⼀个往复的过程,先有⼀个⼤概,尝试⽤已有的知识解决问题,当问题解决不掉时,再反过来学习⾃⼰⽋缺的知识。
说了信⼼再说兴趣,很多同学会觉得⽬前机器学习和深度学习⼤⽕,是不是就该放弃⼿上的⼯程岗位,全⼒以赴的加⼊到算法的⼤军中。⾃⼰觉得要不加⼊这个⽅向还是看个⼈兴趣吧,现在算法岗位炙⼿可热,但三五年之后就不好说了。典型的就是Android/iOS移动开发,10年左右如⽇中天,市场蓝海,⼈才紧俏,公司抢⼈的盛况应该跟现在差不多。收益的决定因素是市场,但个⼈的成长从长期来看,还要看⾃⼰的兴趣。依照T型能⼒理论来说,深度⽅⾯,前端、后台、架构、嵌⼊式、客户端都OK;⼴度⽅⾯,机器学习和深度学习不论从是否要从事相关的领域开发,花些时间了解和学习⼀下,总的来说也还是不错的。
好了,下⾯我们就具体看看从事⾃然语⾔处理需要准备的基础知识吧。
真实情况也⼤抵如此,如果直接跳过机器学习直接学习深度学习可以吗?当然可以啊,⽽且,直接学习深度学习还会觉得深度学习的⼊门门槛更低。
这估计会让很多同学觉得反常识。但反过来你问问⾃⼰,如果没有学习过汇编,上来就⽤C语⾔搞嵌⼊式应⽤开发可以吗?没有学习过C++,上来就⽤Java搞Android开发可以吗?当然可以啊。从⼊门⾓度没问题,但从长期来看还是需要的,想深⼊⼀个领域,知识的完备是必要的。
wordpress模板使用⽐如嵌⼊开发⽤汇编写过两级中断向量表,做Android开发也开发过JNI。
深度学习也是⼀样,从最快⼊门的⾓度来看,可以跳过机器学习,直接进⼊深度学习,但从长期看机器学习还是必要的。⽽且,看完了吴恩达的《机器学习》课程,再看他的深度学习也更流畅。
Coursera:《DeepLearning》
⼀定要完成作业!⼀定要完成作业!⼀定要完成作业!重要的事情说三遍。
补充下,吴恩达在Coursera上的课程,《MachineLearning》是免费观看的,在线作业是付费的。《DeepLearning》⽆论是视频还是在线作业都是付费的。⽹易云课堂有免费的视频课程,但不能提交在线作业。其实,Coursera上的课程也挺便宜的,做完作业还有证书,还是挺不错的。
⾄于书的话,可以看看“花书”《深度学习》
vs2017运行⾃然语⾔处理
好了终于到了这篇⽂章的核⼼部分了,因为是专业基础,所有市⾯上的系统学习资料也就没前⾯那么多了。但仔细的话也不少(都需要,⼿动捂脸):
tcp ip协议是一个多层的体系结构
经典⾃然语⾔处理(斯坦福):《Natural Language Processing course by Dan Jurafsky and Christopher Manning》
经典+深度学习(National Research University Higher School of Economics):《Natural Language Processing》
深度学习⾃然语⾔处理(斯坦福):《Natural language processing with DeepLearning》
大学python入门教程深度学习⾃然语⾔处理(CMU):《CMU Neural Nets for NLP》
除了第⼀个之外,后⾯的视频都⽐较新。相对来说,书的资料就相对滞后了,如果有兴趣可以翻翻经典的宗成庆的《统计⾃然语⾔处理》,主要是针对经典的⾃然语⾔处理⽅法,虽然⽅法是经典的,但领域问题的描述还是很全⾯的。
⼩节
总的来说,算法开发和普通的⼯程开发,从学习梯度上来讲差别不⼤,也不需要⾼⼤上的背景和学历。确定兴趣,看好⽅向,就坚持⼀步⼀步积累,理论结合实践,相信很快你也能像我⼀样,跨过算法开发的门槛,体会⽤算法解决实际⼯程问题的乐趣。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。