乔山办公网我们一直在努力
您的位置:乔山办公网 > word文档 > 自然语言处理怎么最快入门?(word2vec源码)

自然语言处理怎么最快入门?(word2vec源码)

作者:乔山办公网日期:

返回目录:word文档



非科班出身,自学撸出中文分词库HanLP,在GitHub标星1.5万,成为最受欢迎的自然语言处理项目。他将学习经验总结成书《自然语言处理入门》,帮助小白快速入门NLP。

针对题主的提问,HanLP自然语言处理类库的开发者何晗的经验很值得借鉴。

截至 2019 年 11月初,HanLP项目在 GitHub Star 数达到了 15.6 K,超过了宾夕法尼亚大学的 NLTK、斯坦福大学的 CoreNLP。

贴上GitHub地址:https://github.com/hankcs/HanLP

何晗在开发这款 NLP 工具包时,还是上海外国语大学一名日语专业的大二学生,HanLP项目脱胎他大学时接的一份兼职,何晗也因缘从一个非科班专业的小白逐步成长为NLP领域的专家。如今,正在攻读CS博士的他(研究方向:句法分析、语义分析与问答系统),结合自己的学习历程和HanLP的开发经验创作出版了《自然语言处理入门》一书,得到了周明、刘群、王斌等业内顶级 NLP 专家的推荐。

从着手开发HanLP,到HanLP达到工业使用的水准,何晗对自学NLP有深刻的见解。如果用一句话来总结,那就是:自顶而下,从工程去切入,由应用层往下面的基础层拓展,递归补充理论知识,才能事半功倍。以下入门NLP的建议,皆来自于何晗的经验,分享给像题主这样的初学者,希望能对大家有所启发。

一、初学者,请避开自学NLP的常见误区
  • 有的初学者排斥基础理论——认为学校教的都是没用的,公司里都用不到;
  • 有的初学者对基础理论敬而远之——认为理论太高深了,自己基础不好,学了也白学;
  • 有的初学者,特别是已经工作的程序员,基本方向正确但学习路径错误,比较容易走极端:
    • 在工作很忙的情况下,只是抱着经典书籍苦啃,直到筋疲力尽项目也毫无进展,从而丧失了学习NLP的兴趣;
    • 或者,俗称调库小能手,跟风潮流,缺少理论基础,缺乏独立思考能力(比如,认为深度学习最牛,其他的基础理论都是垃圾;认为CNN/RNN/BERT会调参就行了)。

而实际上,自然语言处理是计算机科学、人工智能和语言学学科的交集,这三方面的学科知识都是需要储备的,基础理论的学习必不可少。但很多初学者都是在工作之后才入坑NLP,既难以静下心来啃书啃课,又缺少很好的老师传授知识经验。所以,有效可行的入门方式就是从工程切入,遵循这样的逻辑:延迟加载,只在使用的时候才去加载必要的资料:

  • 你首先看到的是一个摸得着的实际问题,为了解决该问题才去接触一个具体的方案;
  • 为了理解这个方案,才会引入必要的背景知识;
  • 为了实现这个方案,才会引入相关细节;
  • 为了克服这个方案的问题,才会过渡到新的方案。
二、想快速入门NLP,边学边做疗效好

何晗入门NLP,读过的经典书有:《统计自然语言处理》(宗成庆 著)(对应语言学知识)、《统计学习方法》(李航 著)(对应人工智能知识),《挑战程序设计竞赛》(秋叶拓哉、盐田阳一、北川宜稔 著)(对应计算机算法知识)。

不过,在看经典书籍的过程中,他发现,学习自然语言处理并不需要完全把这几本书看透,最好是可以边看书边做项目。这些书都是非常牛的好书,然而可惜的是,看完书中的章节,不知该如何应用其中的知识点,即使实现了文章中提到的模型,也很难直接将其运用于工程项目。

想必很多初学者都面临类似的学习困惑。为了解决这个问题,何晗动手写了《自然语言处理入门》,目的就是希望学习者看完一章后,便可以将知识点直接用于项目,适合NLP初学者入门并快速布置到生产环境中。成效快,痛苦小,疑问少。

何晗在《自然语言处理入门》一书中,以自己的HanLP开源项目为案例,代码对照公式讲解每一个算法每一个模型,让入门者带着工程思维理解NLP的知识要点,试图在目前市面上艰深晦涩的教科书和简单的入门书之间作出平衡。

《自然语言处理入门》带领学习者从基本概念入手。逐步介绍中文分词、词性标注、命名实体识别、信息抽取、文本聚类、文本分类、句法分析这几个热门问题的算法原理和工程实现。通过对多种算法的讲解和实现,比较各自的优缺点和适用场景。这些实现并非教学专用,而是生产级别的成熟代码,可以直接用于实际项目。

在理解这些热门问题的算法后,这本书会引导学习者根据自己的项目需求拓展新功能,最终达到理论和实践上的同步入门。

何晗认为,NLP的学习路径,应该尊重一般人的认知规律,而不是学术上的纲目顺序,以此为宗旨来编排图书的内容。因此,面向普通程序员,这本书内容分为以下三大部分:

第一部分介绍一些字符串算法,让普通程序员从算法的角度思考中文信息处理。

第二部分由易到难地讲解一些常用的机器学习模型,让算法工程师晋级为机器学习工程师。由中文分词贯穿始终,构成一种探索式的递进学习。这些模型也并非局限于中文分词,会在第三部分应用到更多的自然语言处理问题上去。

第三部分新增了许多与文本处理紧密相关的算法,让机器学习工程师进化到自然语言处理工程师。特别地,最后一章介绍了当前流行的深度学习方法,起到扩展视野、承上启下的作用。学习者可根据自身情况,灵活跳过部分章节。

何晗在自学过程中走过不少弯路,深知数学语言的艰深晦涩,并且痛恨罗列公式故作高深的文章,所以他在书中只保留了必不可少的公式和推导,并且公式与代码相互印证。配套代码由Java和Python双语言写成,与GitHub上最新代码同步更新,所以你只要具备基本的编程经验,就可以跟随书本零起点入门。

此外,何晗还总结出一份最为详尽的NLP+ML“双生树”思维导图,导图中的关联知识点不仅涵盖NLP领域的核心知识,甚至涉及许多前沿研究和应用,印刷尺寸宽60cm,高74cm,随书附赠供学习者参考。

三、进阶NLP的学习资料和工具推荐
  • 推荐读这些经典书籍:
  • 多读论文,推荐用Google Scholar和Papers检索:
  • 克服语言障碍,推荐用欧路词典:
  • 追踪前沿动态,推荐NLP-progress,在各项NLP任务上的排行榜

网址:https://nlpprogress.com/

  • 一个中肯的建议:NLP没有通用的解法,算法不够,语料来补
  1. 算法不是万能的。(想想:一两个百分点对实际业务有多少帮助,又增加了多少成本?)
  2. 不要完全相信论文。(a. 不要相信不公开源代码的论文; b. 不要相信公开源代码但数据预处理作假的论文; c. 即使能跑出作者宣称的分数,请考虑:模型是否能泛化到你的行业领域? 又增加了多少成本?)
  3. 语料极其重要。(a. 语料几乎可以把准确率提升到你期望的任何水准,只要数量质量足够; b. 目前通用语料几乎都是新闻,谁能标注出行业语料,谁就是大王; c. 深度学习时代,无标注的纯文本语料也大有用场; d. 软件工程2.0:用数据编程。)

建议1:如何在NLP领域快速学会第一个技能?

我的建议是:找到一个开源项目,比如机器翻译或者深度学习的项目。理解开源项目的任务,编译通过该项目发布的示范程序,得到与项目示范程序一致的结果。然后再深入理解开源项目示范程序的算法。自己编程实现一下这个示范程序的算法。再按照项目提供的标准测试集测试自己实现的程序。如果输出的结果与项目中出现的结果不一致,就要仔细查验自己的程序,反复修改,直到结果与示范程序基本一致。如果还是不行,就大胆给项目的作者写信请教。在此基础上,再看看自己能否进一步完善算法或者实现,取得比示范程序更好的结果。


建议2:如何选择第一个好题目?

工程型研究生,选题很多都是老师给定的。需要采取比较实用的方法,扎扎实实地动手实现。可能不需要多少理论创新,但是需要较强的实现能力和综合创新能力。而学术型研究生需要取得一流的研究成果,因此选题需要有一定的创新。我这里给出如下的几点建议。

先找到自己喜欢的研究领域。你找到一本最近的ACL会议论文集, 从中找到一个你比较喜欢的领域。在选题的时候,多注意选择蓝海的领域。这是因为蓝海的领域,相对比较新,容易出成果。

充分调研这个领域目前的发展状况。包括如下几个方面的调研:方法方面,是否有一套比较清晰的数学体系和机器学习体系;数据方面,有没有一个大家公认的标准训练集和测试集;研究团队,是否有著名团队和人士参加。如果以上几个方面的调研结论不是太清晰,作为初学者可能不要轻易进入。

在确认进入一个领域之后,按照建议一所述,需要找到本领域的开源项目或者工具,仔细研究一遍现有的主要流派和方法,先入门。

反复阅读本领域最新发表的文章,多阅读本领域牛人发表的文章。在深入了解已有工作的基础上,探讨还有没有一些地方可以推翻、改进、综合、迁移。注意做实验的时候,不要贪多,每次实验只需要验证一个想法。每次实验之后,必须要进行分析存在的错误,找出原因。

对成功的实验,进一步探讨如何改进算法。注意实验数据必须是业界公认的数据。

与已有的算法进行比较,体会能够得出比较一般性的结论。如果有,则去写一篇文章,否则,应该换一个新的选题。

建议3:如何写出第一篇论文?

接上一个问题,如果想法不错,且被实验所证明,就可开始写第一篇论文了。

确定论文的题目。在定题目的时候,一般不要“…系统”、“…研究与实践”,要避免太长的题目,因为不好体现要点。题目要具体,有深度,突出算法。

写论文摘要。要突出本文针对什么重要问题,提出了什么方法,跟已有工作相比,具有什么优势。实验结果表明,达到了什么水准,解决了什么问题。

写引言。首先讲出本项工作的背景,这个问题的定义,它具有什么重要性。然后介绍对这个问题,现有的方法是什么,有什么优点。但是(注意但是)现有的方法仍然有很多缺陷或者挑战。比如(注意比如),有什么问题。本文针对这个问题,受什么方法(谁的工作)之启发,提出了什么新的方法并做了如下几个方面的研究。然后对每个方面分门别类加以叙述,最后说明实验的结论。再说本文有几条贡献,一般写三条足矣。然后说说文章的章节组织,以及本文的重点。有的时候东西太多,篇幅有限,只能介绍最重要的部分,不需要面面俱到。

相关工作。对相关工作做一个梳理,按照流派划分,对主要的最多三个流派做一个简单介绍。介绍其原理,然后说明其局限性。

然后可设立两个章节介绍自己的工作。第一个章节是算法描述。包括问题定义,数学符号,算法描述。文章的主要公式基本都在这里。有时候要给出简明的推导过程。如果借鉴了别人的理论和算法,要给出清晰的引文信息。在此基础上,由于一般是基于机器学习或者深度学习的方法,要介绍你的模型训练方法和解码方法。第二章就是实验环节。一般要给出实验的目的,要检验什么,实验的方法,数据从哪里来,多大规模。最好数据是用公开评测数据,便于别人重复你的工作。然后对每个实验给出所需的技术参数,并报告实验结果。同时为了与已有工作比较,需要引用已有工作的结果,必要的时候需要重现重要的工作并报告结果。用实验数据说话,说明你比人家的方法要好。要对实验结果好好分析你的工作与别人的工作的不同及各自利弊,并说明其原因。对于目前尚不太好的地方,要分析问题之所在,并将其列为未来的工作。

结论。对本文的贡献再一次总结。既要从理论、方法上加以总结和提炼,也要说明在实验上的贡献和结论。所做的结论,要让读者感到信服,同时指出未来的研究方向。

参考文献。给出所有重要相关工作的论文。记住,漏掉了一篇重要的参考文献(或者牛人的工作),基本上就没有被录取的希望了。

写完第一稿,然后就是再改三遍。

把文章交给同一个项目组的人士,请他们从算法新颖度、创新性和实验规模和结论方面,以挑剔的眼光,审核你的文章。自己针对薄弱环节,进一步改进,重点加强算法深度和工作创新性。

然后请不同项目组的人士审阅。如果他们看不明白,说明文章的可读性不够。你需要修改篇章结构、进行文字润色,增加文章可读性。

如投ACL等国际会议,最好再请英文专业或者母语人士提炼文字。





请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。

本文标签:

相关阅读

关键词不能为空
极力推荐
  • <em>word</em>2007如何制作<em>封面</em>(不要使

  • 在word里插入弄好的word封面步骤如下:1、首先我们找到相应的word文档2、然后紧接着打开知之后如图道3、然后紧接着我们将光标停留在要插入封面的位置4、之后选择功能区的插入选项5、

ppt怎么做_excel表格制作_office365_word文档_365办公网