掌握NLP自然语言处理不再难,大神带你来入门


入门自然语言处理,你首先需要知道以下几点:

  • NLP是什么,其经典任务有哪些
  • 文本的预处理方法
  • 语言模型
  • 文本分类


1 NLP是什么,其经典任务有哪些

自然语言处理是计算机科学领域与人工智能领域中的一个重要方向,它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。其经典任务主要可分为五个方向:词法分析(Lexical Analysis)、句子分析(Sentence Analysis)、语义分析(Semantic Analysis)、信息抽取(Information Extraction)及顶层任务(High-level Tasks)。


2 文本的预处理方法

标点符号处理——正则表达式。

繁简体互相转换——可以参考CSDN上的代码:

https://blog.csdn.net/wds2006sdo/article/details/53583367

分词——将句子、段落分解为字词单位,方便后续的处理的分析,其常用工具中Jieba最简单,适配的环境也比较多。

分词常用工具:

Jieba分词 https://github.com/fxsjy/jieba

SnowNLP https://github.com/isnowfy/snownlp

LTP http://www.ltp-cloud.com/


3 语言模型

首先是词袋模型,较常见的有one-hot和TF-IDF,难度不高。

One-hot表示在一个语料库中,给每个字或词编码一个索引,根据索引进行one-hot表示。当语料库非常大时,需要建立一个很大的字典对所有单词进行索引编码。

TF-IDF基于频率统计。TF-IDF的分数代表了词语在文档和语料库中的相对重要性。TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。

TF-IDF = TF * IDF

IDF = log(\frac{N}{N(w)})

其中:

N: 文档总数

N(w): 词语w出现在文档的个数,出现的次数越多则越不重要


接着学习word2vector,是将词表征为实数值向量的一种高效的算法模型,其利用深度学习的思想,可以通过训练,把对文本内容的处理简化为K维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似性。

学习word2vector首先得明白理论,可以看看word2vector的源码,也可以看看相关的论文:

《word2vec Parameter Learning Explained》:Xin Rong博士的这篇文章可以作为了解word2vec基本算法的入门介绍,详细地讲解了构造模型的所有细节。

《word2vec Parameter Learning Explained》论文学习笔记:配合论文笔记吸收效果更佳。

https://blog.csdn.net/lanyu_01/article/details/80097350


4 文本分类

这块比较简单,可用的文本分类工具也有很多,如TextBlob、FastText、TextGrocery,这里推荐FastTxt。FastText是一个能用浅层网络取得和深度网络相媲美的精度且分类速度快的算法,在标准的多核CPU上,能够在10分钟之内训练10亿词级别语料库的词向量,能够在1分钟之内分类有着30万多类别的50多万句子。

安装: pip install fasttext

文档: https://fasttext.cc/docs/en/python-module.html#text-classification-model


他山之石,可以攻玉。

在对NLP有了基本了解后,接下来可以借助一些NLP学习资料,如书籍、课程等,利用前人累积的经验进行进阶。


1 书籍推荐

选择阅读书籍的方式学习入门是一个不错的选择,当然不能从头到尾只啃书,正确的做法是把书籍当作工具,在进阶的过程中遇到遗忘的知识时在书中翻找。


机器学习、深度学习篇

首先打好深度学习的基础,推荐复旦大学副教授邱锡鹏的开源书《神经网络与深度学习》,主要介绍神经网络与深度学习中的基础知识、主要模型(前馈网络、卷积网络、循环网络等)以及在计算机视觉、自然语言处理等领域的应用,全书共15章。

还有配套的讲义、练习题和部分代码,在这里附上Github链接。

GitHub地址https://nndl.github.io/

课后练习 https://github.com/nndl/exercise

自然语言处理篇

入门推荐的是宗成庆的《统计自然语言处理(第2版)》,看完能对NLP各项任务以及经典的算法有一定了解。

入门后的进阶书籍推荐HanLP作者何晗写的《自然语言处理入门》,豆瓣评分8.2,从基本概念出发,逐步介绍热门问题的算法原理与工程实现,同时详细演示生产级成熟代码,帮助将自然语言处理应用在生产环境中。截至目前,作者的HanLP项目在GitHub上已经有了23.2k收藏。

2 视频教程推荐

吴恩达的机器学习——机器学习经典课程之一,课程广泛介绍机器学习、数据挖掘和模式识别等内容,在Coursera上16w人打出了4.9/5.0的超高分。这门课的特点,是它侧重于概念理解而不是数学,重点放在让初学者理解背后的思路,另外十分重视联系实际和经验总结。

课程主页:https://www.coursera.org/learn/machine-learning


CS224n——斯坦福深度学习自然语言处理课程。通过讲座、作业和最终项目,学生将学习设计神经网络模型所需的技能。

每年的课程内容会有一定调整,课程过于经典不必多赘述,相关的学习资料也非常多,直接上链接:

课程主页:http://web.stanford.edu/class/cs224n/index.html

CS224n-2019国内课程视频:https://www.bilibili.com/video/BV1mb411e769?p=1

CS224n-2019资料整合: https://github.com/LooperXX/CS224n-Resource

优秀作业笔记参考:https://looperxx.github.io/CS224n-2019-Assignment/


贪心科技的NLP高级课程——贪心科技作为教育科技独角兽公司,最近在知乎等论坛也有一定的讨论度,它们的NLP高级课,全称自然语言处理高级魔鬼训练营,适合用来挑战NLP学习上限。

课程链接:https://uai.greedyai.com/details/15

贪心NLP高级课程为线上授课模式,直播+平台学习双管齐下,大部分核心知识点通过平台来学习,直播则以项目讲解、答疑为主,具体学习进度自我安排,自由度高。平台学习全程在线环境下操作,无需再下载任何软件。

课程从机器学习、NLP基础到图神经网络内容全面,且针对每一个核心技术有系统讲解,有来自不同领域、配备综合性的项目作为检验作业。完成学习后可以深入理解每一个技术背后的算法细节和全部推导过程,通过大量案例的实战达到学以致用的目的,最终让自己的实力满足绝大部分NLP岗位的要求。

主讲老师李文哲——曾任金融科技独角兽公司的首席科学家、美国亚马逊的高级工程师,并在AAAI、KDD、AISTATS等顶会上发表过15篇以上论文,获得过IAAI、IPDPS最佳论文奖,多次出席行业峰会发表演讲,称得上人工智能和知识图谱领域的专家。

课程前期的设计遵循NLP基础知识的基本学习路径:NLP概述-->分词、词的标准化、过滤--> 文本的表示--> 词向量技术-->语言模型。


学习完NLP基本理论后,就要对NLP的众多模型与方法进行学习。不同的任务场景需要不同的模型和策略来解决,比较基础的模型有基于神经网络的语言模型NNLM;更进一步,基于CNN的模型有用于句子语义建模的动态卷积网络DCNN;而基于RNN,又有编码器LSTM;加入Attention机制,又产生了用于aspect级别情感分类的ATAE-LSTM;最后还有基于Transformer的跨语言模型XLM……想要逐个掌握它们要下一番苦功。

在教学的中后期,贪心的NLP高级课程对每一个深度学习模型与方法都以长达一整个章节的篇幅进行了极其深层次的详尽的介绍,并配以丰富的案例进行教学检验,确保针对每一个核心技术都讲透其背后细节和推导。

如第十四章——Linear-CRF模型

相比于较为繁琐的,从隐马尔科夫模型HMM讲起,结合PGM转到CRF的教学方法,课程的讲解路径更加自然,选择了从早期语言模型Log-Linear模型入手,展开介绍Linear-CRF。对于给定输入序列x,y,以及模型参数w,Log-Linear模型如下:

而在Log-Linear模型的基础上,只需要对特征函数做一些限制,就可以得到CRF模型:

  • Fj(x,y)把整个x输入;
  • 新增一个x序列中的词的位置编码信息i;
  • 当前词/字的对应的标签yi;
  • 上一个词/字的标签yi-1;

为了巩固所学模型,课程设计了一个传统的经典项目——基于CRF的词性标注,以及一个新兴领域的热门应用项目——基于Linear-CRF的医疗实体识别。


基于CRF的词性标注:词性标注是NLP中很重要的基础任务,可用于很多的应用如机器翻译、文本分类、文本生成等等。词性标注(POS)属于序列标注任务之一,需要借助于序列模型来解决。在这个案例中,将使用Linear-CRF模型来解决词性标注的问题。

基于Linear-CRF的医疗实体识别:AI+医疗已经成为行业的热点,而且这块人才的需求量也逐步激增。为了分析疾病和辅助诊断,其中有一个关键的环节——从这些病例和诊断报告中提取实体。在这个项目中,需要根据历史数据来搭建医疗实体识别程序。在识别过程中,也会结合医疗词库。整个项目将会使用CRF模型,但会涉及到很多特征工程相关的工作。


又如第十九章——Seq2Seq模型与注意力机制

第十九章的线索是利用优化Seq2Seq模型引出注意力机制。在Seq2Seq结构中,编码器把所有输入序列编码为了一个统一的语义向量Context,然后再由解码器解码。但是因为原始序列的所有信息都包含在了Context中,导致长度过于冗长,限制了模型性能。除此之外,如果只用到了编码器的最后一个隐藏层状态,会导致信息利用率低。所以,便引出了改进Seq2Seq结构的最好方法:利用解码器的所有隐藏层状态解决Context的长度问题。

在讲解完Seq2Seq模型与注意力机制后,课程提供了基于闲聊的对话系统搭建、基于Seq2Seq的机器翻译、利用蒸馏算法压缩Seq2Seq模型等项目供学生进行练手。

3 项目实践

学以致用非常重要。如果报名了贪心科技的NLP高级课程,就可以跟着教学做项目,除了上述提到的Linear-CRF、Seq2Seq,各种流行的模型项目课程内都有涉及,且一个项目内覆盖的知识要点众多,帮助将机器学习、NLP基础、图神经网络等不同方面的知识融会贯通。

贪心科技有一套完整的上课系统,视频、文字、图片、编程、项目相结合,案例和项目都可以在云端平台上完成,快速上手,节省了课后搭建环境、调试的时间。完成项目的互动性也高,有助教在线提供答疑和项目帮助。

除了在课程中实践,也要善于抓住身边任何一个做项目机会,如果研究生组内有相关的项目可以跟着做,有大厂的实习机会也能学到很多与工作相关的经验,或者是参加一些NLP竞赛平台,如kaggle。除了国外平台,国内竞赛平台还有如Biendata、天池、DataFunction,以及国内每年会举办的腾讯广告算法大赛、百度语言与智能技术竞赛等。

这里有一篇新手入门Kaggle NLP类比赛总结,可供起步参考:https://zhuanlan.zhihu.com/p/109992475

最后附上一个很全的竞赛时间统计网站,注意多多关注,积极参与。

https://iphysresearch.github.io/DataSciComp?sub=PF,AC,DM,CV,NLP,RL,SP

举报
评论 0