博舍

自然语言处理(NLP)常用算法入门笔记 自然语言处理所涉及的领域包括哪些

自然语言处理(NLP)常用算法入门笔记

文章目录前言一、文本数据处理基础1.1、数字特征和分类特征1.2、文本处理步骤1.2.1、分割(Tokenization:文本—>单词/字母)1.2.2、one-hot编码1.2.3、词嵌入(wordembedding)1.2.4、使用网络模型学习:二、RNN(循环神经网络)2.1、SimpleRNN2.1.1、简介2.1.2、缺点2.2、LSTM(longshort-termmemory)2.2.1、遗忘门2.2.2、输入门2.2.3、NewValue2.2.4、输出门2.2.5、参数量2.3、多层RNN(StackedRNN)2.4、双向RNN(BiRNN)三、基于RNN做文本生成3.1、简介3.2、准备训练数据3.3、网络搭建3.4、网络预测四、机器翻译(仅使用Seq2Seq模型)4.1、创建词汇表(分割)4.2、模型搭建及训练4.3、网络改进4.3.1、双向LSTM4.3.2、使用attention模型五、Attention5.1、Seq2Seq+Attention5.2、Simple+self-Attention前言

​最近要使用NLP的知识,所以边学习边总结一下自然语言处理中常用的算法,本笔记主要来源于油管shusengwang的视频,链接在此:https://www.youtube.com/watch?v=NWcShtqr8kc&list=PLvOO0btloRnuTUGN4XqO85eKPeFSZsEqK

一、文本数据处理基础1.1、数字特征和分类特征

​  文字数据具有数字特征和分类特征,机器学习只能理解数字特征,而无法理解分类特征,为了让计算机能够处理带有分类特征信息的文字,就必须要讲其分类特征转换成数字特征。举个例子:​  在上面这张图中,“age”一栏中表示的是数字特征,不用处理。“gender”和“nationality”一栏中的数据具有分类特征。这时需要将其变为数字特征。我们使用one-hot向量来表示文字的分类特征,而不是使用简单的1,2,3…数字来表示,原因是1代表的文字和2代表的文字相加不得3代表的文字信息,而使用one-hot向量相加确比较合理

​使用one-hot方法我们可以表示:

​US为[1,0,0…];

​China为[0,1,0…];

​India为[0,0,1…]。

​  这样第一行文字信息可以使用向量[35,1,1,0,0…]表示,第三行信息可以使用向量[29,0,0,0,1…]表示。(如果“nationality”为空,我们可以使用全零向量表示)

1.2、文本处理步骤1.2.1、分割(Tokenization:文本—>单词/字母)

​  分割就是将一句话分解成一个个单词或者一个个字母,为了方便讲解我们以分割成单词讲述。

1.2.2、one-hot编码

​  此时是使用字典统计一下各个单词在整个文本中所出现过的次数,使用key记录文字,使用value记录单词出现的次数。​  然后按照词频递减的顺序排列,即表最前是出现频率最高的,表最后的单词是出现频率最低的。接着将字典的value部分按顺序从上到下使用索引1,2,3…填充,即每个单词可以使用一个数字表示(如下图)。整个字典的长度就是词汇量,也等于one-hot向量的长度。这样处理的目的就是保留常用词,去掉低频词,删除词汇量尾部的词可以排除拼写错误的单词或者人名等单词,最主要的原因还是降低one-hot向量的长度,以此加快计算速度。

​  删除词汇量中词频低的数据会造成有一部分单词在词汇量中找不到,在处理时可以把他们直接不处理或者使用全零向量填充。

1.2.3、词嵌入(wordembedding)

先统一长度(多删少补):一般文字信息处理后使用矩阵表示,这就要求文字长度必须对齐,所以如果待处理的文字长度大于指定长度,就省略前面或者后面;如果长度小于指定长度,就使用空格补全。

然后做词嵌入:将每个单词的高维one-hot向量映射到低维连续向量中,如

​cat:(-0.065,-0.035,0.019,-0.026,0.085,…)

**dog**:(-0.019,-0.076,0.044,0.021,0.095,…)

​词嵌入同时使相似词映射到相似方向(语义相似性被编码了)算是优点之一。  如上图所示,e为one-hot向量,P为参数矩阵,x为转换后的词向量,其实也可以看出P矩阵中每一列都是一个词向量,维度d为词嵌入的维度,由人工设定;维度v为词汇量

1.2.4、使用网络模型学习:

​  神经网络输入的数据都是词向量,而不是单纯的one-hot表示的文本信息。所以接下来我们主要讲解主要的网络模型。

二、RNN(循环神经网络)2.1、SimpleRNN2.1.1、简介

​  循环神经网络类似人类阅读一样,一次输入一个单词,然后不停的循环输入单词,直到整个句子结束,适用于处理文本、语音等带有时序序列信息的数据。RNN的网络结构如下图所示:首先将一个文字经过词嵌入处理转换成向量x,然后传入给神经网络参数矩阵A,输出状态向量h。接着在输入下一个文字数据…,如此反复的循环处理文字便是RNN的主要思想。其中每个输出状态h仅包含前面所有单词的信息,最后的输出状态h则包含整个句子的信息。注意整个RNN只有一个参数矩阵A,右边的是将左边网络的展开。​  其中参数矩阵A的现状如下图所示,最后使用双曲正切函数tanh将参数规整到[-1,1]之间,使用该函数是为了避免矩阵参数过大或过小。​  矩阵参数的数量为:输出状态h和词向量x的维度均为人工设置。

​  SimpleRNN可以选择只输出最后一个状态向量ht,也可以选择输出所有的状态向量h。

2.1.2、缺点

​  SimpleRNN适合处理简短的文字信息,对于较长文字输入时,该模型在深层次求导(反向传播)时会遇到梯度消失,所以会遗忘之前的文字信息,就像鱼一样只要7秒记忆。

2.2、LSTM(longshort-termmemory)

​  该模型相比于SimpleRNN可以有效避免梯度消失,延长’‘记忆’’。它和SimpleRNN的结构区别如下图所示:LSTM使用"传输带C"的方法避免梯度消失从而避免过早遗忘的问题。

​  LSTM同时使用各种”门“来有选择的对数据进行处理;主要有”遗忘门“、”输入门“、”输出门“和一个”newvalue“。下面一一讲解:

2.2.1、遗忘门

​  如图所示,遗忘门使用上一个状态h和当前词向量x作为输入,处理过程和SimpleRNN一样,使用一个神经网络参数矩阵W记录信息,输出使用开关函数σ处理后输出f(f的参数在[0,1]之间);最后将输出f向量与传输带C矩阵做点乘,达到选择性记忆和遗忘的功能。

2.2.2、输入门

​  输入门将上一状态h和当前输入词向量x连接后经过σ开关函数后输出i

2.2.3、NewValue

  此外,将前一状态h和当前数据x链接后使用tanh函数处理输出向量c;

​  然后对传输带进行计算,传输带总输出为:f×C+i×c

2.2.4、输出门

  输出门使用σ开关函数连接上一状态输出h和当前输入x得到向量o​  然后对传送带向量C先做tanh处理再与输出门点乘得到最新的状态输出h。

2.2.5、参数量

​  一共有四个参数矩阵,每个矩阵的形状均一致,如下图所示:

2.3、多层RNN(StackedRNN)

​类似于搭建CNN,RNN的搭建也可以使用多层,值得注意的是:**只有最后一层可以选择不输出所有的状态h,只有当对整个句子处理完再输出即可;**而其他层均必须输出每次的状态h以传输给下一层网络。

2.4、双向RNN(BiRNN)

  无论是SimpleRNN还是LSTM,都会或多或少的产生遗忘的问题。为了再次降低过早遗忘,又诞生出了双向RNN,设计结构如下图所示:

三、基于RNN做文本生成3.1、简介

​  文本生成简单理解就是事先使用RNN对大量的文本信息进行学习,然后使用一小段固定长度的文本作为开头,循环输入进RNN中,使RNN能够持续预测下一个单词或字母,最后完成整段文本信息的输出。

​  文本生成的原理还属于监督学习,所以文本生成的风格完全取决于训练数据的风格。

3.2、准备训练数据

​  在给定的一段文本训练数据,可以将其按单词进行分割,也可以按字符进行分割,为了使词汇量较小,一般使用字符进行分割、使用两个列表分别存储文本片段(segment)和下一个字符(next_char)。举个例子如下图所示:其中步长为3。​接着使用第一章讲的方法将字符转成one-hot向量,注意这里不需要将one-hot向量再转为低维度的词向量,因为这里的词汇量本身不大(包括字符、空格、标点符号等最多一百左右)。接着上边的例子的参数数量如下图所示:词汇量为57,segment长度为60,取步长为3则总共的segment数量大概为20万左右。所以输入数据的格式为[60,57],输出数据格式为[57,1]。

3.3、网络搭建

​  基于keras使用LSTM模型搭建神经网络,网络的各项参数设置如下图所示:

3.4、网络预测

​  在网络预测下一个单词时可以使用不同的选择方案,这里主要说三个。

第一个是使用完全贪婪策略,每次直接选择softmax概率最大的预测单词作为输出,这中方案会缺少随机性,导致后续的输出完全取决于最开始的输入,所以效果不太好。第二种方案是使用依概率随机的方案进行选择下一个单词,这样导致随机性可能过大,如果使用字符分割的方案会导致输出很多错误的单词,所以也不是太推荐。第三种方案就是综合上面两种方案的思路,使预测在贪婪和随机之间取一个折中值,使用一个温度超参数([0,1])来设置折中程度。这样原本大的概率会变大,小的概率值会变的更小一些。具体方法是先对预测概率进行下图中得处理后再依概率随机选择。

四、机器翻译(仅使用Seq2Seq模型)

​  机器翻译的方法有很多种,我们这里只介绍sequence-to-sequence模型,做机器翻译和文本生成是不一样的,因为两种语言不管用字符分割(char_level)还是单词分割(word_level),他们的词汇表都是不一样的,所以必须使用两个词汇表分别存储各自的词汇表。(实际上机器翻译大多使用单词分割)

4.1、创建词汇表(分割)

​  为了方便讲述,使用字符分割(实际应用上却不是)。值得注意的是,目标语言(要翻译的语言)需要在字典中额外加入一个起始符号和一个终止符号(具体符号随意设置,不和词汇表中其他单词重复即可),以英语(源语言)翻译成德语(目标语言)为例,词汇表如下图所示:

​  然后使用one-hot向量表示各自词汇表中的字符,这样一个单词/句子使用一个one-hot矩阵表示。

4.2、模型搭建及训练

  该模型由一个编码器(encoder)和一个解码器(decoder)组成,网络结构如下图所示:其中encoder传给decoder的信息是最后的状态,即整个句子的完整信息。decoder其实就是上面讲的文本生成器,唯一不同的就是它使用encoder的输出最后文本生成的开头信息。decoder使用encoder的英语输入信息和当前的德语单词预测下一个德语的输出单词p,然后使用德语数据标签y计算二者的损失函数,不断重复这个过程以此完成监督学习。  使用源语言文本和目标语言文本作为训练数据完成训练后,即可使用相同过程进行预测完成机器翻译。

4.3、网络改进4.3.1、双向LSTM

​  如果文本信息过长,encoder在采集源语言文本时会产生一定的遗忘,这是decoder怎样改进都无法提高准确率的。为了降低遗忘,可以仅在encoder中使用双向LSTM模型。(decoder是无法使用双向LSTM的),但只能减少遗忘概率,而无法彻底避免。

4.3.2、使用attention模型

​  详细请见下一章

五、Attention

​  Attention模型可以用在所有的RNN上,下面将attention分别用在Seq2Seq和SimpleRNN上。

5.1、Seq2Seq+Attention

​  无论使用多层RNN还是双向RNN等或多或少都还是存在遗忘问题,为例避免遗忘,新的attention模型

诞生了。在Seq2Seq模型中,传统的encoder只将最后的输出h传给decoder,而新网络将每次输出加上权重c,让网络自己学习权重,进而避免遗忘问题。(可以理解为decoder输出时每次都会再看一遍encoder,并且知道关注encoder哪个状态输出)其网络结构中的权重如下图所示:​  关于α的计算方法有很多,方法一如下图所示:值得注意得是矩阵V和W均为网络参数,由网络训练得到。

​  方法二:使用两个参数矩阵单独对h和s处理,然后再做乘积,最后做softmax。

​  求完权重后,做下图所示处理:其中c包含encoder的全部完整信息,这样decoder就知道encoder全部信息了,就不存在遗忘的问题。

​  之后将c、s、和当前输入x连接后输出下一个状态s,注意:每次计算s时的α都需要重新计算的

缺点:参数巨大,耗时巨大。时间复杂度对比如下图:5.2、Simple+self-Attention

​  加入self-Attention模型的SimpleRNN仅是将每次的连接矩阵由h变为c:如下图所示:

​  参数α的计算方法和上一节的一致,以此不停的循环即可完成左右的输出。

自然语言处理(NLP)的一般处理流程!

1.什么是NLP

自然语言处理(NaturalLanguageProcessing)是人工智能(AI)的一个子领域。自然语言处理是研究在人与人交互中以及在人与计算机交互中的语言问题的一门学科。为了建设和完善语言模型,自然语言处理建立计算框架,提出相应的方法来不断的完善设计各种实用系统,并探讨这些实用系统的评测方法。

2.NLP主要研究方向信息抽取:从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。文本生成:机器像人一样使用自然语言进行表达和写作。依据输入的不同,文本生成技术主要包括数据到文本生成和文本到文本生成。数据到文本生成是指将包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转化和处理从而产生新的文本。问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。文本挖掘:包括文本聚类、分类、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习的。语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称文语转换、语音合成,它是指将书面文本自动转换成对应的语音表征。信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。3.NLP的发展

1950年前:图灵测试1950年前阿兰·图灵图灵测试:人和机器进行交流,如果人无法判断自己交流的对象是人还是机器,就说明这个机器具有智能。

1950-1970:主流:基于规则形式语言理论

乔姆斯基,根据数学中的公理化方法研究自然语言,采用代数和集合论把形式语言定义为符号的序列。他试图使用有限的规则描述无限的语言现象,发现人类普遍的语言机制,建立所谓的普遍语法。

1970-至今:主流:基于统计谷歌、微软、IBM,20世纪70年代,弗里德里克·贾里尼克及其领导的IBM华生实验室将语音识别率从70%提升到90%。1988年,IBM的彼得·布朗提出了基于统计的机器翻译方法。2005年,Google机器翻译打败基于规则的SysTran。

2010年以后:逆袭:机器学习

AlphaGo先后战胜李世石、柯洁等,掀起人工智能热潮。深度学习、人工神经网络成为热词。领域:语音识别、图像识别、机器翻译、自动驾驶、智能家居。

4.NLP任务的一般步骤

下面图片看不清楚的,可以百度脑图查看,点击链接

5.我的NLP启蒙读本

《数学之美》--吴军

6.NLP、CV,选哪个?

NLP:自然语言处理,数据是文本。

CV:计算机视觉,数据是图像。

两者属于不同的领域,在遇到这个问题的时候,我也是犹豫了很久,想了很多,于是乎得出一个结论:都是利用深度学习去解决现实世界存在的问题,离开了CV,NLP存活不了;离开了NLP,CV存活不了。两者就像兄弟姐妹一样,整个“家庭”不能分割但个体又存在差异!

NLP/CV属于两个不同的研究领域,都是很好的领域,可以根据自己的爱好作出适合自己的选择,人工智能是一个多学科交叉的领域,需要的不仅仅是单方面的能力,而是多方面的能力。对于每个人来说都有自己的侧重点,毕竟人的精力是有限的。只要在自己擅长的领域里持续深耕,我相信都会有所成就!

这里提供一些参考资料给大家阅读阅读,做出适合自己的选择:

一文看尽2018全年AI技术大突破:NLP跨过分水岭、CV研究效果惊人《数学之美》--吴军BERT时代与后时代的NLP

【机器学习通俗易懂系列文章】

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

欢迎大家加入讨论!共同完善此项目!群号:【541954936】

什么是自然语言处理

Python和NaturalLanguageToolkit(NLTK)

Python编程语言提供广泛的工具和库,用于完成特定的NLP任务。其中许多工具和库都包含在NaturalLanguageToolkit(NLTK)中,这个工具包提供一系列开源的库、程序和教育资源,用于帮助构建NLP程序。

NLTK包含用于完成以上许多NLP任务的库,以及用于完成一些子任务的库,这些子任务包括句法分析、分词、词干提取和词形还原(提取单词词根的方法)和文本分词(将短语、句子、段落和篇章分解为有助于计算机更好地理解文本的"词")。它还包括一些库,用于实现各种功能,比如语义推理—根据从文本中提取的事实得出逻辑结论。

统计NLP、机器学习和深度学习

最早的NLP应用是人工编码、基于规则的系统,可以执行特定NLP任务,但无法轻松扩展以适应无穷无尽的异常流或不断增长的文本和语音数据量。

统计NLP将计算机算法与机器学习和深度学习模型相结合,自动提取、分类和标记文本和语音数据的元素,然后为这些元素的每个可能含义分配统计似然值。目前,基于卷积神经网络(CNN)和递归神经网络(RNN)的深度学习模型和学习方法使NLP系统能够一边工作一边“学习”,从海量的非结构化和未标记的原始文本和语音数据集中提取更准确的含义。 

有关这些技术及其学习方法之间细微差别的深入探讨,请参阅“AI、机器学习、深度学习与神经网络:有何区别?”

自然语言处理(NLP)的任务

1.什么是NLP

自然语言处理是人工智能的一个子领域,自然语言处理是研究人与人交互中以及在人与计算机交互中的语言问题的一门学科。人工智能应用的领域主要有:数据挖掘、推荐算法、智能搜索、广告推荐、自然语言处理、计算机视觉、自动驾驶等等。

2.NLP主要研究方向信息抽取:从给定文本中抽取重要的信息,比如时间、地点、任务、事件、原因、结果、数字、日期、货币、专有名词等等。通俗来说,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果。文本生成:机器像人一样使用自然语言处理进行表达和写作。依据输入的不同,文本生成技术包括书籍到文本生成和文本到文本生成。数据到文本生成是指包含键值对的数据转化为自然语言文本;文本到文本生成对输入文本进行转换和处理从而产生新的文本。问答系统:对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体连接、关系识别、形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳答案。对话系统:系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务。涉及到用户意图理解、通用聊天引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。文本挖掘:包括文本聚类、分类、情感分析以及对挖掘信息和知识的可视化、交互式的表达界面。目前主流的技术都是基于统计机器学习。语音识别和生成:语音识别是将输入计算机的语音符号识别转换成书面语表示。语音生成又称为文语转换、语音合成,它是将书面文本自动转换为对应的语音表征。信息过滤:通过计算机系统自动识别和过滤符合特定条件的文档信息。通常指网络有害信息的自动识别和过滤,主要用于信息安全和防护,网络内容管理等。舆情分析:是指收集和处理海量信息,自动化地对网络舆情进行分析,以实现及时应对网络舆情的目的。信息检索:对大规模的文档进行索引。可简单对文档中的词汇,赋之以不同的权重来建立索引,也可建立更加深层的索引。在查询的时候,对输入的查询表达式比如一个检索词或者一个句子进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。机器翻译:把输入的源语言文本通过自动翻译获得另外一种语言的文本。机器翻译从最早的基于规则的方法到二十年前的基于统计的方法,再到今天的基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。3.NLP算法工程师,需要实实在在掌握的技能正则表达式。除了简单的文本匹配场景外,各种文档结构化、信息抽取的冷启动,基本都是靠这个。因为在实际业务下,不可能马上就能获取高质量的标注数据,更别说各种sota模型训练了,所以你可能掌握各种正则表达式,无疑一马平川之大效果,比如xx前面不存在xx字符且后面存在xx字符,或者xx字符出现几次且后面必须出现xx字符的场景。(来自知乎:其实我一直想做一个根据人类语言自动提供正则表达式推荐的模型,调研了一阵子发现难度很大,从另一个角度也说明要写好正则表达式也非常难的)常用句法分析工具。这个一般主要会在关键短语抽取、信息抽取使用。由于缺少标注数据,不能使用sota模型,又因为单独使用正则表达式毕竟不能覆盖各种case,因此有时候需要与句法分析工具结合,配合对简单语法的使用,例如主谓结构、动宾结构、补语结构等等,找出我们所需的信息单元。不过从头训练一个句法工具通常来不及满足业务方的上线期限,因此通常会使用一些已有工具如哈工大的LTP,虽然有些问题,但是大多数情况下够用。性能优化的意识。这里并不特指某个性能优化的方法,而是在日常写代码的时候,要有这个意识,例如如何优化循环的效率、能够并行化操作的地方尽量并行化,模型读取数据的时候如何优化读取的效率,模型部署上线inference的时候是否满足业务的性能要求,如果不满足,能够找到性能优化的位置,例如模型设计的时候是否设计了冗余的层数、是否使用了过于复杂的模型,部署的时候是否使用一些高效的部署方式(如tensorflow-serving)、是否可以使用TensorRT优化部分op,是否可以针对部署平台上的硬件环境重新编译tensorflow。这些都需要在实际的工程中从坑里爬出来,哈哈。linux。这个技能也是刚需,但是并不需要你对linux的操作精通到什么程度,但至少懂得常用的操作命令,例如监控服务器的状态、防火墙策略的配置、docker的简单操作、常用数据库的操作(mysql、postgresql等)、压缩解压命令、ftp/sftp命令、chmod命令、vi、cat、ps等等。除了上述技能外,默认大家对NLP领域的技术都是符合条件的,所以就没额外说明。如果你对基础的统计机器学习、RNN、transformer、bert等不太了解的话,那实在是说不过去的。上述技能针对的是需要落地需求的算法工程,但如果你是专门做算法研究,对落地没有要求的,那就可以忽略上面的东西,此时你需要的就是拼论文、拼比赛、拼研究组、拼导师、拼学长学姐。。。4.基础任务

高效率的字、词或句子的向量表示方法,大大减轻了我们对人工特征工程的依赖。在此基础上,自然语言处理有一系列的基础任务。如果把一段文本理解为一个序列,把各种标签理解为不同类别,那么NLP基础任务根据问题本质的不同可以分为以下几种。

从类别生成序列:包括文本生成、图像描述生成等任务。从序列生成类别:包括文本分类、情感分析、关系提取等任务从序列到同步生成序列:包括分词、词性标注、语义角色标注、实体识别等任务。从系列异步生成序列:包括机器翻译、自动摘要、拼音输入等任务

什么是自然语言处理,自然语言处理能做什么,主要有哪些哪点

NLP是人工智能的一个子领域,作为AI产品经理,我们至少要知道NLP是什么,它能做什么事,这样我们就能获得一种解决问题的思维,将遇到的问题和方法连接起来。接下来我从“NLP是什么、能做什么、目前遇到的难题”三个方面来简单介绍下NLP。一.什么是NLP

NLP,中文叫自然语言处理,简单来说,是一门让计算机理解、分析以及生成自然语言的学科,大概的研究过程是:研制出可以表示语言能力的模型——提出各种方法来不断提高语言模型的能力——根据语言模型来设计各种应用系统——不断地完善语言模型。

NLP理解自然语言目前有两种处理方式:

1.基于规则来理解自然语言,即通过制定一些系列的规则来设计一个程序,然后通过这个程序来解决自然语言问题。输入是规则,输出是程序;

2.基于统计机器学习来理解自然语言,即用大量的数据通过机器学习算法来训练一个模型,然后通过这个模型来解决自然语言问题。输入是数据和想要的结果,输出是模型。

接下来简单介绍NLP常见的任务或应用。

二.NLP能做什么:

1.分词

中文可以分为字、词、短语、句子、段落、文档这几个层面,如果要表达一个意思,很多时候通过一个字是无法表达的一个含义的,至少一个词才能更好表达一个含义,所以一般情况是以“词”为基本单位,用“词”组合来表示“短语、、句子、段落、文档”,至于计算机的输入是短语或句子或段落还是文档就要看具体的场景。由于中文不像英文那样词与词之间用空格隔开,计算机无法用区分一个文本有哪些词,所以要进行分词。目前分词常用的方法有两种:

(1)基于规则:Heuristic(启发式)、关键字表

(2)基于机器学习/统计方法:HMM(隐马尔科夫模型)、CRF(条件随机场)

(注:在这里就不具体介绍方法的原理和实现过程了,大家感兴趣,可以自行百度了解)

现状分词这项技术非常成熟了,分词的准确率已经达到了可用的程度,也有很多第三方的库供我们使用,比如jieba,所以一般在实际运用中我们会采用“jieba+自定义词典”的方式进行分词。

2.词编码

现在把“我喜欢你”这个文本通过分词分成“我”、“喜欢”、“你”三个词,此时把这三词作为计算机的输入,计算机是无法理解的,所以我们把这些词转换成计算机能理解的方式,即词编码,现在普遍是将词表示为词向量,来作为机器学习的输入和表示空间。目前有两种表示空间:

(1)离散表示:

A.One-hot表示

假设我们的语料库是:

我喜欢你你对我有感觉吗

词典{“我”:1,“喜欢”:2,“你”:3,“对“:4,“有”:5,“感觉”:6,“吗”:7}。一共有七个维度。

所以用One-hot表示:

“我”:[1,0,0,0,0,0,0]

“喜欢”:[0,1,0,0,0,0,0]

········

“吗”:[0,0,0,0,0,0,1]

即一个词用一个维度表示

B.bagofword:即将所有词的向量直接加和作为一个文档的向量。

所以“我喜欢你”就表示为:“[1,1,1,0,0,0,0]”。

C.Bi-gram和N-gram(语言模型):考虑了词的顺序,用词组合表示一个词向量。

这三种方式背后的思想是:不同的词都代表着不同的维度,即一个“单位”(词或词组合等)为一个维度。

(2)分布式表示:word2vec,表示一个共现矩阵向量。其背后的思想是“一个词可以用其附近的词来表示”。

离散式或分布式的表示空间都有它们各自的优缺点,感兴趣的读者可以自行查资料了解,在这里不阐述了。这里有一个问题,当语料库越大时,包含的词就越多,那词向量的维度就越大,这样在空间储存和计算量都会指数增大,所以工程师在处理词向量时,一般都会进行降维,降维就意味着部分信息会丢失,从而影响最终的效果,所以作为产品经理,跟进项目开发时,也需要了解工程师降维的合理性。

3.自动文摘

自动文摘是指在原始文本中自动摘要出关键的文本或知识。为什么需要自动文摘?有两个主要的原因:(1)信息过载,我们需要在大量的文本中抽出最有用、最有价值的文本;(2)人工摘要的成本非常高。目前自动文摘有两种解决思路:第一种是extractive(抽取式),从原始文本中找到一些关键的句子,组成一篇摘要;另一种方式是abstractive(摘要式),计算机先理解原始文本的内容,再用自己的意思将其表达出来。自动文摘技术目前在新闻领域运用的最广,在信息过载的时代,用该技术帮助用户用最短的时间了解最多、最有价值的新闻。此外,如何在非结构的数据中提取结构化的知识也将是问答机器人的一大方向。

4.实体识别

实体识别是指在一个文本中,识别出具体特定类别的实体,例如人名、地名、数值、专有名词等。它在信息检索、自动问答、知识图谱等领域运用的比较多。实体识别的目的就是告诉计算机这个词是属于某类实体,有助于识别出用户意图。比如百度的知识图谱:

“周星驰多大了”识别出的实体是“周星驰”(明星实体),关系是“年龄”,搜索系统可以知道用户提问的是某个明星的年龄,然后结合数据“周星驰出生时间1962年6月22日”以及当前日期来推算出周星驰的年龄,并把结果直接把这个结果显示给用户,而不是显示候选答案的链接。

此外,NLP常见的任务还有:主题识别、机器翻译、文本分类、文本生成、情感分析、关键字提取、文本相似度等,以后有时间再为大家做简单介绍。

三.NLP目前存在的难点

1.语言不规范,灵活性高

自然语言并不规范,虽然可以找一些基本规则,但是自然语言太灵活了,同一个意思可以用多种方式来表达,不管是基于规则来理解自然语言还是通过机器学习来学习数据内在的特征都显得比较困难。

2.错别字

在处理文本时,我们会发现有大量的错别字,怎么样让计算机理解这些错别字想表达的真正含义,也是NLP的一大难点

3.新词

我们处在互联网高速发展的时代,网上每天都会产生大量的新词,我们如何快速地发现这些新词,并让计算机理解也是NLP的难点

4.用词向量来表示词依然存在不足

上述,我们讲到,我们是通过词向量来让计算机理解词,但是词向量所表示的空间,它是离散,而不是连续,比如表示一些正面的词:好,很好,棒,厉害等,在“好”到“很好”的词向量空间中,你是不能找到一些词,从“好”连续到“很好”,所以它是离散、不连续的,不连续最大的问题就是不可导.计算机是处理可导的函数非常容易,不可导的话,计算量就上来了。当然现在也有一些算法是计算词向量做了连续近似化,但这肯定伴随着信息的损失。总之,词向量并不是最好的表示词的方式,需要一种更好的数学语言来表示词,当然可能我们人类的自然语言本身就是不连续的,或者人类无法创建出“连续”的自然语言。

如何快速入门NLP自然语言处理概述人工智能与自然语言处理概述:AI三大阶段、NLP关键应用领域NLP自然语言处理技术,在人工智能法官中的应用是什么?

多智时代-人工智能和大数据学习入门网站|人工智能、大数据、物联网、云计算的学习交流网站

什么是 NLP (自然语言处理)

NLP(自然语言处理)到底是做什么?

NLP的全称是NaturalLanguageProcessing,翻译成中文称作:自然语言处理。它是计算机和人工智能的一个重要领域。顾名思义,该领域研究如何处理自然语言。

自然语言就是我们人类市场交流所使用的语音和字符系统。就目前而言,NLP所研究的对象,以字符系统——也就是我们通常说的“文字”——为主。

为什么要处理自然语言?

为什么要处理文字呢?因为有需求啊!

我们用文字描述事物、经历和思想。形成的文献资料,除了被阅读,往往还需要进行很多其他操作。

比如,被翻译成其他语种;对内容进行摘要;在其中查找某个问题的答案;或者,了解其中提到了哪些人事物,以及它们之间的关系如何,等等。

虽然所有这些需求,都可以通过人工阅读文献来解决,但“浩如烟海”的文献量导致人工文字处理的产能严重不足。

NLP的发展历程

上世纪40年代计算机被发明,用机器而非人力来处理信息成为可能。早在1950年代,自然语言处理就已经成为了计算机科学的一个研究领域。

不过一直到1980年代,NLP系统是以一套复杂的人工订制规则为基础,计算机只是机械地执行这些规则,或者做一些诸如字符匹配,词频统计之类的简单计算。

1980年代末期,机器学习的崛起为NLP引入了新的思路。刚性的文字处理人工规则日益被柔性的、以概率为基础的统计模型所替代。

近些年来,随着深度学习的发展,各类神经网络也被引入NLP领域,成为了解决问题的技术。

这里要注意了:自然语言处理(NLP)指以计算机为工具解决一系列现实中和自然语言相关的问题,机器学习、深度学习是解决这些问题的具体手段。

当我们关注NLP这一领域时,要分清本末,要做的事情是本,做事的方式方法是末。如果神经网络能够解决我们的问题,我们当然应该采用,但并不是只要去解决问题,就一定要用神经网络。

常见的NLP任务

NLP要处理的问题纷繁复杂,而且每一个问题都要结合相应场景和具体需求才好讨论。

不过这些问题也有相当多的共性,基于这些共性,我们将千奇百怪的待解决NLP问题抽象为若干任务。

例如:分词、词嵌入、新词发现、拼写提示、词性标注、实体抽取、关系抽取、事件抽取、实体消歧、公指消解、文本分类、机器翻译、自动摘要、阅读理解等等,都是常见的NLP任务。

从NLP任务到技术实现

针对这些任务,NLP研究人员探索出了很多方法,这些方法又对应于不同类型的技术。

在工作中,当我们遇到问题的时候,往往需要先将其对应到一个或多个任务,再在该任务的常用实现方法中选取一种适合我们使用的来执行任务。

【举个例子】:我们要基于若干文献构建一个知识图谱,知识图谱的两大核心要素是实体和关系,那么当然首先我们面临的任务就是从这些文献中抽取实体和关系。

实体抽取是一项非常常见的NLP任务,实现它的方法有多种,大体而言分为两个方向:

   i)基于实体名字典进行字符匹配抽取;

  ii)用序列预测模型进行抽取。

      序列预测模型又可以选用机器学习模型,比如条件随机场(CRF);或选用神经网络,比如CRF+LSTM,或CRF+BERT等。

具体选哪种方法呢?那就要看我们需要抽取的实体类型、文献类型和文献量了。

如果现在是从少量专业文献(例如论文、说明书、研究报告等)中抽取一些列专业名词表示的实体,那么用字典匹配方便直接代价小,可以一试。

如果是要从海量的各类文献中抽取一些通用的实体,那么借助模型则可能效果更佳。

具体用机器学习模型还是神经网络呢?这又和我们拥有的标注数据与计算资源有关,如果不差钱,想标多少数据,想训练多大模型都不在乎,上神经网络自然可以追求高准确率,但如果资源捉襟见肘,可能机器学习模型更加实用。

“众智汇”愿景

尽职尽才,允公允能 —— 本社群不定期举行线上分享,组织群友分享知识、经验、资源,以达到让我们每个人的职业生涯得到最大程度的发展的目的。

欢迎扫面下列二维码关注“悦思悦读”公众微信号

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇