自然语言处理(NLP)入门
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然语言处理(NLP)入门相关的知识,希望对你有一定的参考价值。
参考技术A NLP:计算机或系统真正理解人类语言并以与人类相同的方式处理它的能力。难度:理解话中的潜在意图;理解句子中的歧义。
歧义包括:单词、句子、语义中歧义。
在文本数据上执行的一些基本操作
正则表达式:对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
可以读取一个文本文件并根据需要将其转化为一列单词或句子。
方式:
1、将一个单词替换为另一个单词;
2、删除或添加某些特定类型的单词;
...
可以通过urllib包获取。
停止词:索引擎会忽略的常用词。例如:the
是SciKit-Learn库的一个工具,可以接收任何大量的文本,将每个独特的单词作为特征返回,并计算每个单词在文本中出现的 次数。
TF:术语频率。特定单词的计数与文档中单词总数的比率。
IDF:反向文档频率。文档总数与包含特定单词的文档数量的对数比率。
TF-IDF权重:二者的乘积。
作用: 衡量一个词对于一段文本的重要性
例如,文本可以被分为正面和负面。通调取TExtBlob包可以获取许多这样的架构。
神经网络的基本结构
基本原理:人工神经元或感知器的基本元素的集合。
采用多个二元输入x1, x2, x3....,如果总和大于激活电位,则产生单个二进制输出,神经元会执行称为"发射"的指令,发射的神经元沿着信号传递到与其他树突相连的神经元,如果超过了激活电位,其他神经元也会发射。
神经网络的类型
前馈神经网络:神经网络家族的基本单元
循环神经网络:处理 NLP 中普遍存在的动态输入序列的一个最佳的技术方案。但是很快被经典的LSTM取代
卷积神经网络:应用于文本的卷积神经网络只在两个维度上工作,其中滤波器(卷积核)只需要沿着时间维度移动。卷积也可以用来 加速 LSTM。
递归神经网络:将句子视为树而不是序列
词嵌入:利用所有个体单词 相邻 的单词,使用给定文本中的信息并将其传递给模型。这使得嵌入以密集向量的形式存在,在连续向量空间中表示个体单词的投影。 即将「不可计算」「非结构化」的词转化为「可计算」「结构化」的向量。
这一步解决的是”将现实问题转化为数学问题“ ,是人工智能非常关键的一步。
嵌入:单词在新学习的向量空间中的 坐标
词嵌入是无监督学习领域最重要的应用之一
2 神经语言模型
Bengio提出的前馈神经网络语言模型(FNNLM)引入了前馈神经网络,是为词嵌入模型奠定了基础。
该模型中仍然用于词嵌入模型的部分有:
1、 嵌入层:
作用:记录训练数据集中所有单词的表示。
初始化:由一组随机权重初始化
组成:词汇表的大小,词嵌入向量输出的大小、模型输入序列的长度
结果输出:二维向量,包含给定单词序列中所有单词的最终嵌入
2、隐藏层:
位置:位于初始层到最终层之间,可以一个或多个
作用:通过将神经网络中的 非线性函数 应用于先前n个词的词嵌入,来产生 输入文本数据的表示 。
3、Softmax层:
位置:神经网络体系结构的最后一层
作用:返回输入词汇表中存在的所用单词的 概率分布
该模型有助于实现当前词汇表中不存在的单词的泛化。
Word2vec 是 Word Embedding 的方法之一, Word Embedding 的模型本身并不重要,重要的是生成出来的结果——词向量。因为在后续的任务中会直接用到这个词向量。
包含两种模型:CBOW(连续词袋)和skip-gram
区别:执行预测的方式。
CBOW:利用上下文或周围的单词来预测中心词
skip-gram:使用中心词来预测上下文
优点:与单热编码相比,word2vec有利于减我码空间大小,并将单词的表示压缩到所需的向量长度。
word2vec创建单词表示的方式基于单词的上下文。
过程:使用序列中的当前单词来预测周围的单词
周围单词的分类 得分 基于 语法关系 和它们与中心词一起出现的 次数
CBOW模型
CBOW是一种基于窗口的语言模型。(窗口:句子中的一个固定长度的片段,窗口中间的词为中心词,其他词问中心词的上下文)
原理:通过三层神经网络接受上下文的特征向量,预测中心词是什么
结构:输入层、隐藏层、输出层
该模型的6个步骤:
NLP老司机带你入门自然语言处理
自然语言处理是一门用于理解人类语言、情感和思想的技术,被称为是人工智能皇冠上的明珠。
随着深度学习发展,自然语言处理技术近年来发展迅速,在技术上表现为BERT、GPT等表现极佳的模型;在应用中表现为chatbot、知识图谱、舆情监控等基于NLP技术的产品在市场上的大规模出现。
基于此,各类公司开始出现NLP算法工程师的需求,待遇在软件工程师岗位中处于相当上游的水平。
基于此,不少同学和工程师有学习NLP的愿望,本文对首先NLP做一个简单的介绍;然后,作为一个过来人,为初学NLP的同学提供一些必要的建议。
文末有我们的公众号的二维码,扫描关注,可以领取系统的NLP资料。
作者&编辑 | 小Dream哥
1 NLP简介
每次与行外之人谈起自然语言处理(Natural Language Process,NLP),对方往往都是一片茫然。因此,常常感到很苦恼,如何跟一个从未接触过NLP的人,解释NLP到底是什么?毕竟这是一门这么重要的技术(学科),它的发展与应用,会极大的影响这个世界上的每一个行业,每一个人。
那么,到底什么是NLP呢?所谓自然语言处理,就是用计算机(或者其他计算单元,以下类似)来处理人类的自然语言。那么要理解NLP,首先要理解什么是自然语言。所谓“自然语言”,是相对于计算机语言(计算机能够理解的语言,如汇编、C语言等)而言的,人类日常使用的语言,例如我们都讲的中文,国际语言英文,各地的方言。那么为什么会有NLP这样一个专门的学科(在各大高校都有专门的学科)来研究如何用计算机来处理自然语言呢?
因为计算机设计之初主要是用于计算,或者完成某一项有明确规则任务。所以计算机语言与人类日常使用的语言存在很大的差异,计算机不能直接理解人类语言的含义,即不能直接同人类进行沟通。长期以来,计算机都不能很好的理解人类的语言,通常是程序员写一些规则去笼统的对语句进行一些判断和处理。如何让计算机听懂人话,同人交谈,甚至理解人的情感和文化,这就是NLP要做的事情。
人类语言承载了人的思考、文化等,也是每个人对外交互和表达的最主要手段。NLP就是为了解决这样一个问题而出现的技术。他希望能够使得计算机理解人类的语言,甚至是语言背后的文化、意图与情感。例如说,当你说“我饿了”,计算机能够明白你肚子饿了,并且提出帮你定外卖;当一个女孩子说“我想要苹果”的时候,计算机能够结合当时的情境,明白女孩子说的苹果,到底是水果,还是手机。
2 NLP算法工程师必备技能
自然语言处理(NLP)是一门复杂而且艰难的学科,之前提过NLP要做的事情,就是让计算机听懂人话,同人交谈,甚至理解人的情感和文化。因此,NLP是一门交叉学科,它涉及语言学、计算机科学以及人工智能等学科。
那么,该如何从一个小白,入门成为一名合格的NLP算法工程师需要哪些技能呢?
笔者总结了一下,成为一名合格的NLP算法工程师,需要掌握如下的基本技能:
1)掌握必要的数学基础及熟练的编程能力;
2)熟练使用python进行数据处理;
3)了解深度学习的理论基础;
4)熟悉NLP中常用的深度学习模型;
5)熟练掌握至少一种深度学习平台框架,如tensorflow、pytorch或keras等;
6)熟悉朴素贝叶斯、HMM、CRF等NLP中常用的机器学习算法;
7)熟练掌握NLP中分词、NER,情感分析、语义匹配等几种基本任务常用的模型及方法。
有的同学看到如此多的内容和技能或许会退缩,但是正是这些都颇具难度的内容,构筑了这个行业的壁垒,一个一个啃下去,胜利就属于你。
4 入门指引
1)从深度学习理论开始,迅速切入
深入了解感知器与神经网络的基本理论,包括正向传播,反向传播,误差,损失函数,梯度等概念。这是深度学习理论最基础也是最重要的部分。通过这部分内容的学习,你可以检验你是否适合进一步深入AI领域;深入了解之后,也可以迅速建立起学习的信息,如果你有一种“原来所谓的人工智能,深度学习也不过如此”的感觉,学习的目标就达到了。
其中,可能有的同学需要补充学习一些数学微分方面的知识。
2)熟练掌握python
熟练掌握python,基本任务是能够用python自己实现一个简单的全连接前馈神经网络,实现正向传播,反向传播等。
如果没有编程基础,务必要好好学习基本的数据结构和算法。
3)熟悉深度学习中,几种常用的特征抽取器,机器在深度学习框架的使用
深入理解CNN,RNN,LSTM等NLP中常用的特征抽取器的原理及实现。
熟悉一种深度学习框架,并熟练掌握上述模型在该框架上的使用,推荐tensorflow。
4)了解几个较为基本的NLP任务的理论及实现
在NLP中,分词,词向量,NER,文本分类是最基本的几个概念和任务。熟练掌握这几个任务,就基本能够系统理解NLP的大部分概念和玩法。
分词对于中文自然语言处理来说,是最基本的步骤。需了解基本的分词理论及熟练掌握现在常用的分词工具用法。
稠密式词向量出现是NLP发展过程中非常重要的事件,需要深入理解词向量的理论,深入理解word2vec训练词向量的原理。熟悉gensim等制备词向量的工具。
NER及文本分类是非常重要的NLP基本任务,需要非常熟练的掌握一种常用的方法。以NER为例,如今比较流行的基于CNN或者LSTM的模型,是必须要熟练掌握的。
这期间,会涉及数据预处理等繁杂的事项,需要你能够熟练掌握用python进行数据处理。
5)查漏补缺,学习基本的机器学习算法
当你对整个NLP有一个基本的认识之后,这个时候再来看一些基本的机器学习算法,会更有效率,也更能看出门道,知轻重。面试常问的机器学习算法有HMM,CRF,SVM,朴素贝叶斯等。
6)掌握一种更复杂的NLP任务
更复杂的NLP任务包括对话机器人,机器翻译,知识图谱等,他们往往是多种NLP任务和软件系统的综合。通过掌握一种复杂的任务,你能够更能实际了解NLP这门技术的边界和实际应用场景。
通过这些复杂的任务,你可以了解到一些比较新的NLP技术,例如attention,seq2seq,transformer等。
7)逐渐了解现在NLP中最火爆的预训练模型
GPT,BERT,XLNET是现在NLP从业者必须要了解的东西,他们很可能是NLP的未来。甚至,BERT已经在产业界有了很多的实际应用。
必须要深入了解他们的历史,原理,实现以及实际应用。
8)选定你的研究方向,不断跟进,不断补充自己的不足
到这里,你基本掌握了作为一名NLP工程师应该掌握的东西,你可以根据你的实际情况,选择你要研究和跟进的方向。可以是最基础的NER,语义匹配等;也可以是复杂的聊天机器人,知识图谱等。
NLP是一门快速持续发展的学科和技术,你必须不断学习,才能跟上脚步。
还有一个建议,注重你的工程能力的提升,多刷一刷leetcode。
总结
自然语言处理是一门非常复杂的学科和技术,要掌握他不是一件轻松的事情,需要相当长一段时间的投入和努力。同时,他也是极具意义和前景的技术,相信在学习过程中,你能获得很多的成长和乐趣。
最后,想要学习的同学,可以扫描如下二维码,关注公众号“科学扬声器”,输入“NLP学习资料”获取系统的学习资料。
知识星球推荐
扫描上面的二维码,就可以加入我们的星球,助你成长为一名合格的自然语言处理算法工程师。
知识星球主要有以下内容:
(1) 聊天机器人
(2) 知识图谱
(3) NLP预训练模型
转载文章请后台联系
侵权必究
以上是关于自然语言处理(NLP)入门的主要内容,如果未能解决你的问题,请参考以下文章