自然语言处理学习路线图

有群友问了一个问题 感觉有一定的普遍性 在这里稍微整理了一下 分享给大家。

Q:作为一个初学者,我想走nlp,请问该学哪些知识? 看什么书,学习路线怎么走之类的

A:首先  你这个问题   知乎已经有了不少高价值的答案。https://www.zhihu.com/question/19895141   关于看什么书,学习路径,都有回答。     但是我想  你问“想走NLP”的意思应该是“以后找一份自然语言处理相关的工作” 。 Ok,为了完成这样一个大目标,我想仅仅给你说几本书是不够的,我还有些可以补充的地方。

1。首先   不需赘述  NLP本身的知识是很重要的。

     在像百度、搜狗、360、淘宝、京东等这样的互联网公司里,核心数据仍然是文本数据,基于文本可以做大量的工作,来为公司的核心业务目标服务。例如搜索业务(包括网页搜索,以及电商搜索、地图搜索等都是类似原理),需要对用户的搜索query做大量的分析,分析用户的搜索意图,进而给用户呈现他需要的搜索结果,并且顺带捎上搜索广告。在这个看似简单的过程中,其实衍生出非常多的技术问题。

       我们通过下面的图  稍微介绍一下,这个过程中,NLP技术是怎么应用的。我们可以看到,这个过程中,NLP做了大量的工作



        补充一下,query预处理部分做的事情还包括:

        大小写转换;全半角转换 ;连续无意义符号转化为空格;修整空格;语法上的一些处理

       意图分类的部分,如果做得细致一点,需要对每个行业的query去细分意图,比如医疗行业的意图再细分,可能有“找医院”“问症状”“问治疗方法”“问药品”“问手术”等。

        说了一大堆 你可能已经绕晕了。

自然语言处理学习路线图_第1张图片

 OK  开始说正事。你如果能够把我刚才说的这些过程里 某些工作做得特别细,那么自然语言处理大量地应用场景里,自然能够找到你发挥才能的平台。

      总结一下,具体的基础技能。

 I)、query处理的基本能力。

---   分词,以及由此衍生出的term重要性、切词粒度和紧密度等问题。这个问题看似简单,其实不然,比如让你去设计一个分词器,你会设计什么数据结构来高效地切词?对于有些特殊的句子,比如”长春市长春药店“,你的分词工具会切出来”长春市/长春/药店“还是会切出来””长春/市长/春药店“?。分词工具比较有名的有个python版本的jieba分词,可以去了解一下。

                   ---  query纠错。斯坦福大学自然语言处理课程有讲解:query纠错部分  链接:http://pan.baidu.com/s/1kVNrjBT 密码:rbjl  。整门课程下载:http://www.aqinet.cn/forum.php?mod=viewthread&tid=34&extra=page%3D1  

                   ---  新词发现。互联网不断造出新词,比如”蓝菇香瘦“,怎么发现新词也是一个很大的挑战。

 II)、query分析的基本能力

 ---  序列标注问题。怎么识别实体,怎么识别query中的品牌词。品牌词识别在搜索广告中是一个重要的问题,打个比方,你在搜狗广告部门工作,用户搜索”王者荣耀游戏官方网站“,你给出一个”阴阳师游戏官方网站“的广告,这是找死的节奏啊!等着腾讯爸爸来找你谈话了。当然,对于”王者荣耀“这样的热词,这是一个相对好处理的问题。但是搜索广告中有大量的广告主,有时候要去区分它们是很头疼的事情,比如”张爱国足疗店“、”李爱国足疗店“、”王爱国足浴店“,他们的字面相似度是如此之高,但是又是不同的服务商。具体做序列标注的方法,可以参考 斯坦福大学自然语言处理课程 的                 【09_Week_4_-_Named_entity_recognition_and_Maximum_Entropy_Sequence_Models】  链接:http://pan.baidu.com/s/1nvrzdsl 密码:d5uv  。序列标注问题的经典方法是 CRF。很多机器学习的课程教材里都会讲到。

                --- 关联词对挖掘, 同义词挖掘给一个query,给它寻找相关的query。这是NLP中的一个基本问题。一般来说,挖掘关联query的方法有这样一些。  基于频繁项挖掘的方法(数据挖掘中经典的apriori算法)、基于相似度的方法(如基于点击行为的cos相似度)等。具体就不多说了,需要结合公司现有数据的特点,来制定挖掘策略。query一般来说是比较长的,有时候我们还需做一些比较短的同义词的挖掘,比如”女人“和”女性“”女士“这样的同义。除了一些投机取巧但是很有效的方法(找现成的词典、去百度百科等地方爬等),我们还有一些其他的高级方法来做这个事。比如我以前做过基于点击相似度和word2vec结合来筛选同义词,效果非常好。这个听听就好,初学者可以不用管。

---- query相关性度量。还有一个问题,是度量query之间的相关性,这个方法就更多了,从简单的tf-idf相似度 到 word2vec相似度、基于主题模型的相似度(如plsa、lda)等。当然,通常会去训练一个相关性模型,通过规则和人力结合的方法去标注一批数据,然后选择一系列特征(字粒度或者词粒度、词袋、词向量、ngram等  ,NLP的特征工程问题以后有机会再展开讲),选择一个模型(lr svm 最大熵 随机森林 gbdt  dnn cnn rnn等都有可能),最后训练出一个模型。当然在实际工程应用中,为了追求最佳的效果,往往会把多个模型进行bagging,达到一个最优的效果。如果你对刚才这一系列的术语转晕了头,建议你得补补机器学习的基础知识了。推荐学习林轩田的课程   机器学习基石http://www.aqinet.cn/forum.php?mod=viewthread&tid=33&extra=page%3D1以及  机器学习技法http://www.aqinet.cn/forum.php?mod=viewthread&tid=99&page=1&extra=#pid315。两门课由浅入深。

    III)、NLP的高级模型

----主题模型。主题模型在前几年曾经非常火,从PLSA到LDA,取得了广泛应用,后来word2vec问世,在很多方面将其取代。但是主题模型至今仍然有不少应用。而且作为一个有比较完善的概率统计学理论支撑的模型,主题模型中蕴含了很多NLP的精华,值得学习。

----词向量模型,包括word2vec和fasttext,他们的作者都是facebook科学家Mikolov。

------ 深度学习。深度学习在NLP方面也发挥出强大的威力,比如百度和谷歌在机器翻译中都成功地应用了深度学习,百度广告部门某团队通过采用深度神经网络使得广告收入取得较大幅度的增加并获得公司最高奖。  深度学习在NLP的应用 可以参考课程 《斯坦福大学cs224d》:http://www.aqinet.cn/forum.php?mod=viewthread&tid=36&extra=page%3D1想要玩一些深度学习方面的NLP任务,可以从用tensorflow做卷积文本分类开始:http://mp.weixin.qq.com/s/6_mvPGq-b1p7Ci_FoqAZ3g

  2.其他技能

要做NLP工程师,光有NLP本身的技能还不够。找过互联网NLP实习的同学都知道:

基本的语言能力: 会Linux ,会Python ,会C++和java中至少一样

算法和数据结构功底

机器学习理论和一定的实战经验

Hadoop(加分)

实习或者竞赛经验(加分)

3.关于路线图:       我认为不妨先定一个小目标:找一个NLP的实习,或者如果学校里有条件,找一个NLP的项目团队去参加一下,这是进步最快的方式。

      如果条件太普通,去找一写NLP有关的大数据竞赛参加一下 也可以。比如kaggle上就有一些。

      当然 对于初学者,要实现这个小目标,也是有一定的难度。比如什么都没有接触,怎么参加竞赛呢?

      Okay  自然地  第一步 是学习基本的机器学习的理论和NLP的理论。有一定的理论底子以后,开始用python的sklearn框架或者直接上tensorflow去玩一些开放的数据集,比如kaggle电影评论数据集  http://mp.weixin.qq.com/s/abEC_oqNHOl8muzJKQfQdw。

最后,安利一下,这个论坛里我把我收集了超过半年的资料都分门别类整理了出来,便于大家查找,后面还会整理一些自己的心得笔记。也有不少热心群友共享了自己的资源和知识。欢迎你和我们一起爱知求真,努力奋斗。

4.总结一下

推荐书籍:

PYTHON自然语言处理 NLTK Natural Language Processing with Python中文版pdf:

http://www.aqinet.cn/forum.php?mod=viewthread&tid=25&extra=page%3D1

推荐视频:

斯坦福大学自然语言处理课程   http://www.aqinet.cn/forum.php?mod=viewthread&tid=34&extra=page%3D1

斯坦福大学cs224d课程:http://www.aqinet.cn/forum.php?mod=viewthread&tid=36&extra=page%3D1机器学习基石   http://www.aqinet.cn/forum.php?mod=viewthread&tid=33&extra=page%3D1  

机器学习技法  http://www.aqinet.cn/forum.php?mod=viewthread&tid=99&page=1&extra=#pid315   。

python视频: 链接: https://pan.baidu.com/s/1i5t9ey5 密码: 1bpp

你可能感兴趣的:(自然语言处理学习路线图)