社区编辑申请
注册/登录
NLP技术预备——自然语言处理技术不是你老婆 原创 精选
人工智能 自然语言处理
在语言处理这块,自然语言处理是使其智能化的重要方式,是人工智能领域的一个重要分支。其利用计算机技术来分析、理解和处理自然语言, 建立起可供人与计算机之间能相互联系方式,下面就让我们一起来揭开它的面纱吧!

随着人工智能技术的发展,我们生活中的许多应用已经都与AI技术产生了关联,例如通过手机翻译软件实时给自己的语言进行翻译,利用图像识别技术对面容进行认证等等。其中,在语言处理这块,自然语言处理则是使其智能化的重要方式,是人工智能领域的一个重要分支。其利用计算机技术来分析、理解和处理自然语言, 建立起可供人与计算机之间能相互联系方式,下面就让我们一起来揭开它的面纱吧!

1.何为NLP?

NLP即natural language processing,中文也就是自然语言处理。顾名思义就是对自然界存在的人类能理解的语言进行处理。那么处理是为了什么,当然就是为了使得计算机能够理解人类使用的语言,并且能够和人类进行一些交互,也就是使得计算机具备人类语言的能力,从而实现人工智能化。对于人工智能领域的技术或者知识,我更倾向于使用通俗、易理解的方式去表达,我觉得这样更加有利于去学习这些知识的受众,使得受众更为广泛。所以,自然语言处理反过来就是该领域所作的事情——处理自然语言。

2.NLP领域与处理过程

NLP目前所用领域主要有语音助手、机器翻译、命名实体识别、情感识别、文本检索等,本人从事的NLP相关工作主要是情感识别和文本检索这两块。对于NLP的具体处理过程普遍较为一致,即三步走:文本预处理(表示、数据分析、文本增强)——处理模型——输出所需结果(目标语言、情感极性、检索结果等)。不难看出,这三个步骤中,最为核心的就是处理模型的选取,随着深度学习技术的不管发展与完善,每一年都会有新的处理技术被使用,这也是众多NLP研究者所关注并加以创新的关键。其次,较为重要的一步就是文本预处理,对于任何一种自然语言,使其更为规范化、更具备丰富语义、更为计算机所理解的目的出发,对于文本进行预处理的方法也是不断完善的过程。至于最后一步的输出结果则是没那么重要的一环,它的不同是基于不同的任务而改变,选定好研究的应用领域,最后一步的输出结果也就定了下来,所以很少的研究者会对这一块加以重视。当然,对于这一块也是不至于去重视的。因此,对于NLP重点需要理解掌握的就是处理模型的相关技术,而这些技术我也会在后续内容进行阐述,并且对于每一技术提出自己的想法与理解,来有助于相关工作者对于这些技术的提升与创新。不过在这之前,首先得提下文本预处理这块,因为它是整个处理过程的基础,俗话说:“巧妇难为无米之炊”,而这文本预处理就是去产生“米”的过程,下面我们一起来看下“米”所产生的过程。

3.文本预处理

文本预处理,是文本语料在输送给模型前一般需要做的一系列预处理工作,毕竟计算机不是人类,需要将自然语言处理成计算机能够识别、能够处理的数据,才能输入到计算机相关模型中去。因此,对于文本语料,需要进行预处理工作,才可以符合计算机模型输入的要求。例如:将自然语言文本转化为模型能够处理的张量(即多为数据向量),来规范张量的尺寸和维度等,对文本预料进行科学的预处理环节可以有效地指导后续计算模型的参数调整,从而更好的提升计算模型的评估指标。文本预处理包括文本处理的基本方法、文本张量的表示、文本语料的分析和文本数据的增强四个方面。

3.1.文本处理方法——分词、词性标注、命名实体识别

对于需要处理的文本语料,目前我们最为常见的是短文本和长文本,也就是一句话、一段话或者一篇文章。对于这些短文本和长文本的处理就需要去其进行分词处理,将短文本和长文本切分为一个个可以理解的单词、汉字或者词语。而如果基本的文本语料已经是某一单词、汉字或者词语的情况,那么也就没有必要进行分词处理的这一步了。其中对于分词的技术,目前最为常用的工具为jieba和hanlp,至于如何去用这两个工具就不去具体说明了,因为这是最为基本的分词工具,去IDE软件库中都有下载并且有使用教程。其实在后续开发中,对于这块的处理并不会去使用这些基本的工具,因为在后续的计算模型所用到的深度学习技术中基本都包含了这块,也就是用一个具体的方法就可以实现分词,没有必要再去分别下载相关的分析工具了。对于文本进行分词后,得到的是一个个词语或者单词,因此对于这些词语或者单词的属性就需要具体进行具体的分析,包括命名实体识别和词性标注。

命名实体识别也就是对分词后的词语进行名词实体的标注,找到里面的人名、地名、机构名等专业名词。因为除了常见的词语以外,对于这些专有名词的识别,会使得计算机对于这些特殊的专有名词有个基础的识别,从而不会干扰到对于后续其他词语词性的识别,这也是解决NLP高阶任务的重要基础环节。再对文本词语进行命名实体识别,使得计算机掌握对于专有名词的识别后,就要对于最为常见的其他词语进行分析了,其中就包括了词性的标注,而这些词性就包括:名词、动词、形容词等等。通过标注每一段文本中的每一词汇的词性,使得计算机对于完整的文本语言有了一个基本的认识,在此基础上再进行处理,处理成计算机能够处理的张量形式了。

3.2.文本张量表示——one-hot\word2vec\ word Embedding

经过以上的分词和词性标注相关处理后,由于词语依旧是自然语言的形式,即中文或者英文(NLP实际的应用领域最为常见的语言是中文和英文,因此,本文对于文本语料的选取也是基于中文和英文两种。),而这种类型计算机依旧是无法处理的,所以需要对这些自然语言的形式进行类似数字向量的表示,也就是词向量(向量也就是张量的一种),使得文本中的每一个词语都对应向量矩阵中的一个向量。这也就是文本张量的表示。通过将文本表示为张量(矩阵)形式,从而使得语言文本可以作为计算机处理模型的输入,来进行接下来一系列的解析工作。目前文本张量的表示有三种:

(1) One-hot编码:即独热编码,这也是最为简单的词向量表示方法,具体就是根据词语的位置关系,将每个词语表示为具有n个元素的向量(n为词语的个数,也称维度),这个向量中只有一个元素为1,其他元素都是0。而1的位置也就是词语在所有词语中的顺序。如下所示:

[“我”,“喜欢”,“看”,“51”,“CTO”],“我”为第一个位置,以此类推,经过One-hot编码为:[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]]

(2) word2vec:基于One-hot方法,但是比One-hot方法更利于学习文本词语之间的相互关系,是一种将词汇表示成向量大的无监督的训练方式(即自主训练),通过构建神经网络模型,将网络参数来作为词汇的向量表示,包括CBOW和skipgram两种,这两种方法训练起来过程类似,知识文本词语的选取有所不同。对于CBOW方法,是通过对于训练的文本语料,选定某一长度(窗口)作为对象,扣除其中的某一个词汇,通过该单词的上下词汇来预测扣除的词汇。当然,这些词汇得先基于One-hot编码表示为能处理的向量的形式才行。而skipgram和CBOW正好相反,不是扣除某一个单词,而是扣除某一个单词的上下文,通过该单词来预测该单词的上下文。这两种方法所学习到的文本词语之间的关系大致相同,对于模型的最终指标和性能也基本一样,所以两种方法都可供选择,没有优劣之分。这两个方法的全过程如下图所示:

(3) word Embedding:与word2vec类似,都是基于神经网络模型的方法,都是在对神经网络模型进行训练的过程中来提取到文本的词向量,在这称为Embedding。不过该方法训练的Embedding比word2vec方法得到的词向量的维度会更高,特征会丰富。其中广义的word embedding是包括word2vec方法,即word2vec可认为是word embedding的一种;狭义的word embedding是指在神经网络中加入的embedding层,对整个网络进行训练的同时产生的embedding矩阵(embedding层的参数),这个embedding矩阵就是训练过程中所有输入词汇的向量表示组成的矩阵。由于不同的神经网络训练的模型不同,加入的embedding层的训练也会有所不同,学习到的word Embedding也会有好坏之分。因此这个word Embedding就是不同神经网络模型中的训练参数,网络模型选取的好坏也就影响了word Embedding的质量,我会在后续的不同训练网络模型中再对这块进行补充。

3.3. 文本语料的数据分析和特征处理

文本语料的数据分析是对计算机理解文本内容起到辅助的作用,在实际应用中其实很少会使用到。对文本数据进行分析可以有效的帮助理解数据语料,找到语料中可能纯在的问题,从而来辅助指导后续模型训练中的超参数的选择。其中数据分析方法都是以统计为主,例如统计文本中词语的标签数量、句子的长度、某一词汇出现的频率等等。由于这块是以基本的统计计数功能为主,并且使用不多,就不再赘叙。

而对于特征的处理,也是对于词向量提取方法的一个补充或者延申,通过添加n-gram特征或者限定文本长度来规范和丰富语料信息。其中n-gram的n是可以选择的,目前大多取2和3,也就是除了对单一的词语进行分析以外,还考虑了两个词语甚至三个词语合并为一个词语进行分析的情况,从而使得学习到的特征更为广泛、丰富。而文本长度限制就是对输入模型的向量长度进行了一个规范化处理,对句子的长度分布选取一个能够覆盖绝大数多数文本的合理长度,对超长的文本进行一个截取,对不足的文本进行补齐(一般采用补0操作),经过向量长度规范化处理以后,有利于后续模型训练的性能。

3.4数据增强处理

数据增强其实就是对文本数据加入一些其他的语义特征,使得基本的语料携带的特征更为丰富。这类增强方法在计算机视觉领域应用更为广发,在NLP领域使用较少,但是具有一定的辅助功能。目前采用的增强办法是回译数据增强法,通俗来讲就是讲基本的语料的语言不断转化为替他国家的语言,从而也就得到对于其他国家语言的内部特征信息。操作起来比较简便,学习到的辅助信息质量也较高。但是在这也存在一个问题,就是对于语言的转换不能进行过多的操作,太多的转换操作会造成原有语义的丢失,造成语义失真,并且使得最终数据的产生效率低下。所以需要谨慎选取转换的次数,根据以往的工作经验,一般建议最多进行3次的语言转换操作。具体次数依据具体模型以及最终的参数提高为准。

4.总结

在这篇文章中,主要对自然语言处理的预备技术——即文本语料的预处理进行了阐述与分析,其中最为核心的是其中的文本张量的表示,通过上述的技术框架可以对基本的文本张量表示技术流程有个更为清晰的认知。除此之外,对于文本数据增强技术的了解也将有利于今后对自然语料进行分析,从而提取更为丰富而潜在的语义特征。当然,这只是自然语言处理的预备技术,同时对于文本张量的表示也会有其他更为优越的网络模型,由于篇幅缘故,这些我会在后续文稿中一一阐述。

作者介绍

稀饭,51CTO社区编辑,曾任职某电商人工智能研发中心大数据技术部门,做推荐算法。目前攻读智能网络与大数据方向的研究生,主要擅长领域有推荐算法、NLP、CV,使用代码语言有Java、Python、Scala。


责任编辑:华轩 来源: 51CTO
相关推荐

2022-06-05 21:09:47

Python办公自动化

2022-05-10 14:11:05

网络安全网络犯罪

2022-06-29 09:19:09

静态代码C语言c代码

2022-06-17 18:49:25

pythonexcel

2022-06-24 10:16:59

Python精选库

2022-05-27 15:06:22

攻击面管理(ASM)网络安全运营

2022-04-22 09:00:00

自然语言处理HMMCRF

2022-06-27 08:07:13

Go语言互斥锁

2022-06-07 11:01:56

人工智能AI技术大会

2022-06-25 21:22:30

编程Rust代码

2022-05-25 14:10:51

学术数据

2022-05-06 16:31:27

人工智能自然语言生物特征识别

2022-06-30 09:07:52

2022-06-21 09:02:49

python技巧

2022-06-15 09:07:33

2022-06-27 09:54:38

编程语言JavaC++

2022-06-27 12:44:34

RustLinux

2022-06-13 14:58:19

系统案例

2022-06-17 09:08:27

代码Python内置库

2022-06-21 09:26:21

Shell脚本JavaScript

编辑推荐

最全面的百度NLP自然语言处理技术解析自然语言处理(nlp)比计算机视觉(cv)发展缓慢,而且更难!除了自然语言处理,你还可以用词嵌入(Word2Vec)做这个号称世界最快句法分析器,Python高级自然语言处理库spaCy!用于自然语言处理的12大开源工具
我收藏的内容
点赞
收藏

51CTO技术栈公众号