有些小伙伴知道我做nlp的总问我怎么学习,其实我也是个菜鸟,就介绍一下我对算法的理解,说说怎么入门。

对算法的理解:

    关于算法工程师,应用很广,用的知识也被分为很多分支,地图的道路规划可能用到动态规划,代码计算的优化算法简单的就是熟知的数据结构中的排序与查找,广告推荐用到关联规则,然后近些年火起来的机器学习,深度学习都是算法。这些算法也没有严格的界限,工业上经常各种算法一起使用。个人认为目前算法可以分为两类,一是优化计算量,如查找排序,路径搜索,这种主要利用一些巧妙的思维逻辑减少计算量,最后得到想要的准确的结果;二是利用概率统计从数据中挖掘有用信息,这种就是机器学习与深度学习,从已有的数据中计算各种概率,并优化处理过程的计算量,最后得到的结果是一个有概率的结果,这还有一个搜索算法。目前互联网公司比较多的算法岗位多是指人工智能,机器学习,以及广告推荐,而风险评估这岗位也多用机器学习算法做的,也就是第二类。这一类的一个依据是什么大数定理,还有其他的定理,我忘记了,通俗意思就是:当一件事(如抛硬币)发生的次数多了,我们就可以粗糙的认为这件事中的某个现象(如正面朝上)出现的理论概率就是这个现象出现的次数与这件事发生次数的比值,即正面朝上的次数/投硬币次数=正面朝上的概率。当我们无法得知一件事的准确概率时,就从已有的数据去这样计算来估计,然后数据越多,计算出的概率越准确。

人工智能大概分为几个领域:自然语言处理,图像处理,语音处理。

    自然语言处理主要是对文本的处理,底层是要对文本分词,词性标注,建立词向量等。往上又主要分为:文本分类,文本翻译,阅读理解,智能问答,知识图谱等。具体业务应用比如新闻稿分类,商品的正面负面评论分类,语言上的翻译,客服自动回答等,这些都没有严格界线,都很灵活的应用在系统上。比如淘宝的商品推荐首先要对商品的属性进行类似文本分类,接着对客户的数据进行分类添加标签,然后互相对应又用到搜索匹配算法。
    图像处理了解的不多,文本以词或字符为单位,图像以像素点为单位,传统的会对图像像素的色彩数值进行计算,如腐蚀膨胀等,深度学习以CNN为开端则是对图像以一个小区域为单位进行计算,所有带有相邻像素的信息更准确。主要应用有OCR识别,如识别车牌号,门禁识别人脸,识别图片的文字,现在有app可以扫描银行卡识别卡号,具体又有分类或者识别出具体的文字或字符。很多时候都要传统的算法进行图象预处理,把图像特征突出的更明显效果更好。
    语音处理这块我接触的最少,几乎为0,大概就是把声音转成文字,一段声音分多帧,还有音素什么的,其实只要识别成文本后剩下的就是自然语言处理的工作了。
    很多业务场景都是很多算法结合使用的,比如智能机器人首先语音识别把听到的声音转为文字,然后利用自然语言处理判断意图进而去领域数据库或者知识图谱内利用搜索算法快速检索可能性最大的词汇,再组织成语言利用语音技术发声回答。

那么具体怎么学习与入门呢?

    首先要会一门编程语言,首推python其次java与c++和c,不用太熟,能写数据结构中的排序与查找算法就行。
    然后建议学一些机器学习的算法,从工程入手,跟着书籍或者视频调用现成的包实现小demo,了解这是到底是干什么的,然后尝试了解具体算法原理,最简单的是k-近邻算法,然后贝叶斯,逻辑回归等等。我推荐一本书<机器学习实战>“图灵程序设计丛书,Peter Harrington著,李锐,李鹏,曲亚东,王斌翻译”。里面有很好的案例与解释,还有python代码,最适合工程入手的小伙伴。然后是周志华的西瓜书(因里面常以西瓜举例得绰号)与李航的《统计学习方法》,视频推荐“唐宇迪博士”的,如果英文好看国外视频更好,还有吴恩达大佬的。当有了机器学习的一点基础在学一点神经网络玩玩。接着看往哪个领域发展,做自然语言处理要了解分词,词性标注,实体识别,文本分类,句子相似,词向量等等。具体可以先看tf-idf,余弦相似,跟着众多博客写写,我觉得简单易懂还有效。然后ng-ram,hmm,crf,rnn,lstm,sequency2sequency,word2vec,fasttext,bert等等都尝试尝试。图像的话我不知道,可以先看看图像的基本处理方法如腐蚀膨胀等等,不看也影响不大,直接从CNN开始到Alex Net 还有VGG等等,最近有个fasterRcnn。做NLP可以看看吴军的《数学之美》,其他的好像没什么好书,硬要推荐就是宗成庆老师的自然语言处理综述

关于特征工程

    其中做机器学习有一个过程叫“特征工程”,结果的怎么样和特征提取的好坏有很大的关系。常见的两个机器学习入门案例,一个是房价预测,一个是垃圾邮件分类。所谓的“特征工程”就是提取准确的特征,而“特征”就是蕴含我们需要信息的属性,我们可以根据这些属性来计算我们最终想要的结果,比如房价预测,房价肯定和房子的大小,房子的位置有很大关系关,所以我们的特征就有房子的面积,房子距市中心的距离等,而无关的特征则没必要加上去还会增加计算量,比如房价会和小区有多少单元相关吗?就算有,影响也不大。如何能从一堆数据中找到和我们关心的结果有影响的属性数据是十分重要的,有时只能把所有属性全加上去靠算法反馈赋予不同权重来弱化无关特征的影响,有时无关属性多了反而影响我们的预测结果。算法工程师一大半时间在数据处理和提取特征上。而深度学习则是相当于自动提取特征了,我们一股脑的把所有数据放上去,深度学习算法则不断反馈修改权重参数,最终分配好不同特征的权重,然后再预测,但是这时各个特征的权重对我们来说也是一个黑盒子。无论用什么算法,能精准提取特征或提前去除无用特征总归对算法准确度的提升有很大的帮助。突然想到一个例子,比如看相先生,实际也是提取特征,根据人的五官容貌,衣着,皮肤,谈吐这些特征判断这个人的家境经历脾气性格。。。还有就是要会把这些特征进行量化,就是表示成数字来让计算机去计算,NLP的词向量就是对特征的量化,图像的卷积也是。

最后

    看书,视频学习,看博客。。。多多百度google一些专有名词,扩大领域知识积累。都这么入门然后看论文论坛做项目提升。有心的可以看看kaggle的比赛,里面有数据有案例.后端小伙伴转算法还是很好转的,但是如果工作还不错不建议转,去年开始算法岗位就有些难找工作了,因为已经出了几届搞算法的学生了,接下来需要的是大神资深人士,可以先搞搞,觉得自己学的很不错了再去转。然后一些工程上常用的东西:python模块的numpy,pandas,matplotlib,sklearn,tensorflow,keras,pytorch...如果熟悉C++可以考虑做图像用caffe.其实文中很多东西我只是听说或了解,大家一起学习呀!
    本文很多内容凭记忆写的,有误望谅解!
01-10 03:55