巴别塔-自然语言处理概述

Posted 无名文字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了巴别塔-自然语言处理概述相关的知识,希望对你有一定的参考价值。


自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法(百度百科)。《圣经·旧约·创世记》第11章记载,当时人类联合起来兴建希望能通往天堂的高塔;为了阻止人类的计划,上帝让人类说不同的语言,使人类相互之间不能沟通,计划因此失败,人类自此各散东西。机器像人类一样理解语言,既是我们对AI的最初想望,也似乎是通往巴别塔的一条可能路径。语言是人类文明传承的基石,时而含糊不清,时而直达人心。对AI而言,打通自然语言的关卡,不仅能通向人类的文明,也在混沌中投射一束通向终极智能的微光。

NLP最典型的应用如机器翻译、自动问答已经或多或少的进入了我们的生活。翻译机、智能音箱。本文主要对自然语言处理的经典实现方法进行简单介绍。


一算法评价指标 (概念)

(一)基本评价指标

机器学习(ML),自然语言处理(NLP),信息检索(IR)等领域,对于算法性能的好坏(即模型的泛化能力),我们并不知道是怎样的,很可能这个模型就是一个差的模型,泛化能力弱,对测试集不能很好的预测或分类。那么如何知道这个模型是好是坏呢?我们必须有个评判的标准。为了了解模型的泛化能力,我们需要用某个指标来衡量,这就是性能度量的意义。有了一个指标,我们就可以对比不同模型了,从而知道哪个模型相对好,那个模型相对差,并通过这个指标来进一步调参逐步优化我们的模型。评估(Evaluation)是一个必要的工作,而其基本的评价指标往往有如下几点:准确率(Accuracy),精确率(Precision),召回率(Recall)和F1-Measure。

其中准确率和精确率很容易混淆。

精准率(Precision)又叫查准率,它是针对预测结果而言的,它的含义是在所有被预测为正的样本中实际为正的样本的概率,意思就是在预测为正样本的结果中,我们有多少把握可以预测正确。

准确率的定义是预测正确的结果占总样本的百分比。

召回率(Recall)又叫查全率,它是针对原样本而言的,它的含义是在实际为正的样本中被预测为正样本的概率,

精准率和准确率看上去有些类似,但是完全不同的两个概念。精准率代表对正样本结果中的预测准确程度,而准确率则代表整体的预测准确程度,既包括正样本,也包括负样本。

F1值就是精确值和召回率的调和均值。

信息检索、分类、识别、翻译等领域两个最基本指标是召回率(Recall Rate)和准确率(Precision Rate),召回率也叫查全率,准确率也叫查准率,概念公式:

召回率(Recall) =  系统检索到的相关文件 / 系统所有相关的文件总数

准确率(Precision) =  系统检索到的相关文件 / 系统所有检索到的文件总数

巴别塔-自然语言处理概述


A:(搜到的也想要的)

B:检索到的,但是不相关的(搜到的但没用的)

C:未检索到的,但却是相关的(没搜到,然而实际上想要的)

D:未检索到的,也不相关的(没搜到也没用的)

   

准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。如果是做搜索,那就是保证召回的情况下提升准确率;如果做疾病监测、反垃圾,则是保准确率的条件下,提升召回。

前面已经讲了,P和R指标有的时候是矛盾的,那么有没有办法综合考虑他们呢?我想方法肯定是有很多的,最常见的方法应该就是F-Measure了,有些地方也叫做F-Score,其实都是一样的。

F-Measure是Precision和Recall加权调和平均:

 F = frac{(a^2+1)P*R} {a^2(P+R)} hfill (3)

当参数a=1时,就是最常见的F1了:

 F1 = frac{2PR} {P+R} hfill (4)

很容易理解,F1综合了P和R的结果,当F1较高时则比较说明实验方法比较理想。

公式基本上就是这样,但是如何算图1中的A、B、C、D呢?这需要人工标注,人工标注数据需要较多时间且枯燥,如果仅仅是做实验可以用用现成的语料。当然,还有一个办法,找个一个比较成熟的算法作为基准,用该算法的结果作为样本来进行比照,这个方法也有点问题,如果有现成的很好的算法,就不用再研究了。

(二)AP和mAP(mean Average Precision)指标

mAP是为解决P,R,F-measure的单点值局限性的。为了得到 一个能够反映全局性能的指标,可以看考察下图,其中两条曲线(方块点与圆点)分布对应了两个检索系统的准确率-召回率曲线

 

巴别塔-自然语言处理概述

可以看出,虽然两个系统的性能曲线有所交叠但是以圆点标示的系统的性能在绝大多数情况下要远好于用方块标示的系统。

从中我们可以 发现一点,如果一个系统的性能较好,其曲线应当尽可能的向上突出。

更加具体的,曲线与坐标轴之间的面积应当越大。

最理想的系统, 其包含的面积应当是1,而所有系统的包含的面积都应当大于0。这就是用以评价信息检索系统的最常用性能指标,平均准确率mAP其规范的定义如下:(其中P,R分别为准确率与召回率)

(三)ROC和AUC

巴别塔-自然语言处理概述

ROC和AUC是评价分类器的指标,上面第一个图的ABCD仍然使用,只是需要稍微变换。

巴别塔-自然语言处理概述


回到ROC上来,ROC的全名叫做Receiver Operating Characteristic。

ROC关注两个指标

True Positive Rate ( TPR )  = TP / [ TP + FN] ,TPR代表能将正例分对的概率

False Positive Rate( FPR ) = FP / [ FP + TN] ,FPR代表将负例错分为正例的概率

在ROC 空间中,每个点的横坐标是FPR,纵坐标是TPR,这也就描绘了分类器在TP(真正的正例)和FP(错误的正例)间的trade-off。ROC的主要分 析工具是一个画在ROC空间的曲线——ROC curve。我们知道,对于二值分类问题,实例的值往往是连续值,我们通过设定一个阈值,将实例分类到正类或者负类(比如大于阈值划分为正类)。因此我们可以变化阈值,根据不同的阈值进行分类,根据分类结果计算得到ROC空间中相应的点,连接这些点就形成ROC curve。ROC curve经过(0,0)(1,1),实际上(0, 0)和(1, 1)连线形成的ROC curve实际上代表的是一个随机分类器。一般情况下,这个曲线都应该处于(0, 0)和(1, 1)连线的上方。如图所示。

巴别塔-自然语言处理概述


用ROC curve来表示分类器的performance很直观好用。可是,人们总是希望能有一个数值来标志分类器的好坏。

于是AreaUnder roc Curve(AUC)就出现了。顾名思义,AUC的值就是处于ROC curve下方的那部分面积的大小。通常,AUC的值介于0.5到1.0之间,较大的AUC代表了较好的Performance。

P/R和ROC是两个不同的评价指标和计算方式,一般情况下,检索用前者,分类、识别等用后者

二、自然语言处理技术

(一)依存句法分析

如何描述语法,有两种主流观点,其中一种是短语结构文法(也叫上下文无关文法)。简单来说是把词按照结构组成句子。比如一开始是简单的“the cat”或者“the dog”,可以加入修饰词"large",“in a crate”等,还可以加入动词"talk to"。

另一种是依存结构,通过找到句子当中每一个词所依赖的部分来描述句子结构。如果一个单词修饰另一个单词,则称该单词依赖于另一个单词。比如下面的例子,barking依赖于dog:

在依存句法中,共同的基本假设是:句法结构本质上包含词和词对之间的关系。这种关系就是依存关系(dependency relations)。其中一个依存关系连接两个词,一个是核心词(head)一个是修饰词(dependant)。

依存句法分析的任务是针对已经分词和词性标注完的句子,进行其依存句法结构的分析。给定输入为一个分词、词性标注完的句子,进行依存句法分析后,得到一个依存句法树。

依存句法树举例

巴别塔-自然语言处理概述


下面给出一个具体例子分析依存句法树,例子如下所示。

从上图可以分析得到,Root(核心词)和买(修饰词)之间存在依存关系HED(核心关系)

小王(修饰词)和买(核心词)之间存在依存关系SBV(主谓关系)

买(核心词)和电脑(修饰词)之间存在依存关系VOB(动宾关系)

(二)分析及词性标注

分词可能是自然语言处理中最基本的问题,在英文中,天然地使用空格来对句子做分词工作,而中文就不行了,没有特点符号来标志某个词的开始或者结尾,而分词通常对语义的理解是特别重要的。

中文是一种缺乏词形态变化的语言,词的类别不能像印欧语那样,直接从词的形态变化上来判别。常用词兼类现象严重。《现代汉语八百词》收取的常用词中,兼类词所占的比例高达22.5%,而且发现越是常用的词,不同的用法越多。由于兼类使用程度高,兼类现象涉及汉语中大部分词类,因而造成在汉语文本中词类歧义排除的任务量大。研究者主观原因造成的困难。语言学界在词性划分的目的、标准等问题上还存在分歧。目前还没有一个统的被广泛认可汉语词类划分标准,词类划分的粒度和标记符号都不统一。词类划分标准和标记符号集的差异,以及分词规范的含混性,给中文信息处理带来了极大的困难。

在使用向量模型表示文档时,首先要对文档进行词汇化处理。对于英语或者法语等语言来说,将文档转化成词的集合比较简单,但是对于汉语来说,不像英文文本的单词那样有空格来区分,这个处理过程要依赖于分词技术。从简单的查词典的方法,到后来的基于统计语言模型的分词方法,中文分词的技术已趋于成熟。但是,尽管现在分词软件的准确率已经比较高了,它对专业术语(称为未登录词识别)的识别率还不是很好。例如“来自星星的你”,分词可以成功切分为“来自星星的你”,但是怎样把“来自星星的你”作为一个完整的专有名词(电视剧名称)识别出来,还有很多技术要解决。为了进一步提高关键词抽取的准确率,通常需要在词库中添加专名词表来保证分词的质量。

在完成分词之后,我们对词语的位置信息做进一步的发掘,需要确定记录位置信息的方式以及各个位置的词在反映主题时的相对重要性。标题、摘要和结论、正文等文章各个部分的位置权重是各不相同的,当软件逐词扫描统计词频时,记录每个词的位置信息。

在计算文档的特征向量的值时,还需要对文本集进行一些处理,过滤掉无用的信息。滤除这些没有作用的词语可以减少文本特征向量的维数,减少不必要的运算。常见做法包括:去掉一些低频词,比如某些单词只在一两个文本中出现过,这样词留在集合中会导致大部分文本样本的该属性值为0。去掉停止词,一般这种词几乎不携带任何信息。例如:“的”、“地”、“得”之类的助词,以及像“然而”、“因此”等只能反映句子语法结构的词语,它们不但不能反映文献的主题,而且还会对关键词的抽取造成干扰,有必要将其滤除。去停用词确定为所有虚词以及标点符号。去掉一些标记信息,这主要针对网页文本或其他的标记语言文本。

词性标注常见方法基于规则的词性标注方法基于规则的词性标注方法是人们提出较早的一种词性标注方法,其基本思想是按兼类词搭配关系和上下文语境建造词类消歧规则。早期的词类标注规则一般由人工构建。随着标注语料库规模的增大,可利用的资源也变得越来越多,这时候以人工提取规则的方法显然变得不现实,于是,人们提出了基于机器学习的规则自动提出方法。

基于统计模型的词性标注方法统计方法将词性标注看作是一个序列标注问题。其基本思想是:给定带有各自标注的词的序列,我们可以确定下一个词最可能的词性。现在已经有隐马尔可夫模型(HMM)或条件随机域(CRF)等统计模型了,这些模型可以使用有标记数据的大型语料库进行训练,而有标记的数据则是指其中每一个词都分配了正确的词性标注的文本。

基于统计方法与规则方法相结合的词性标注方法理性主义方法与经验主义相结合的处理策略一直是自然语言处理领域的专家们不断研究和探索的问题,对于词性标注问题当然也不例外。这类方法的主要特点在于对统计标注结果的筛选,只对那些被认为可疑的标注结果,才采用规则方法进行歧义消解,而不是对所有情况都既使用统计方法又使用规则方法。

基于深度学习的词性标注方法可以当作序列标注的任务来做,目前深度学习解决序列标注任务常用方法包括LSTM+CRF、BiLSTM+CRF等。

(三)命名体识别named entity recognition (NER)

命名实体识别(NER)是在自然语言处理中的一个经典问题,其应用也极为广泛。比如从一句话中识别出人名、地名,从电商的搜索中识别出产品的名字,识别药物名称等等。传统的公认比较好的处理算法是条件随机场(CRF),它是一种判别式概率模型,是随机场的一种,常用于标注或分析序列资料,如自然语言文字或是生物序列。简单是说在NER中应用是,给定一系列的特征去预测每个词的标签。

学术上NER所涉及的命名实体一般包括3大类(实体类,时间类,数字类)和7小类(人名、地名、组织机构名、时间、日期、货币、百分比)。

实际应用中,NER模型通常只要识别出人名、地名、组织机构名、日期时间即可,一些系统还会给出专有名词结果(比如缩写、会议名、产品名等)。货币、百分比等数字类实体可通过正则搞定。另外,在一些应用场景下会给出特定领域内的实体,如书名、歌曲名、期刊名等。

NER是NLP中一项基础性关键任务。从自然语言处理的流程来看,NER可以看作词法分析中未登录词识别的一种,是未登录词中数量最多、识别难度最大、对分词效果影响最大问题。同时NER也是关系抽取、事件抽取、知识图谱、机器翻译、问答系统等诸多NLP任务的基础。

NER发展历程如下:

 

巴别塔-自然语言处理概述

(四)词向量

自然语言是符合语法、具有一定的信息、为人类所能理解并进行沟通的语言,比如你现在看到的文字,就是自然语言。但当我们需要计算机来处理自然语言时,计算机是无法直接理解这些符号的(汉字、字母、标点等)。这些符号需要数值化后才能输入计算机进行后续的处理。然而只用单个数字来表示单词是毫无意义的,它只是一个id,无法体现单词的属性(就好比单从座位号无法得知一个人的身高体重年龄等信息)。因此需要将单词进行向量化。

词向量是一种把词处理成向量的技术,并且保证向量间的相对相似度和语义相似度是相关的。这个技术是在无监督学习方面最成功的应用之一。传统上,自然语言处理(NLP)系统把词编码成字符串。这种方式是随意确定的,且对于获取词之间可能存在的关系并没有提供有用的信息。词向量是NLP领域的一个替代方案。它把词或短语映射成实数向量,把特征从词汇表大小的高维度空间降低到一个相对低的维度空间。

词向量的表示主要有两种方式:独热编码(One-hotRepresentation)和分布式表示(Distributed Representation)1、独热编码独热编码是最直观、也最常用的方法。是一种稀疏的表示方式。其思路为将每个词都表示成一个很长很长的向量,该向量的维度等于词表大小,其中只有一个维度的值为1(维度的位置等于词的id),其余维度都为0。举个栗子:假设我们从语料库中为每个词分配一个数字ID(从0开始分配),得到“话筒”这个词的ID为3,“麦克”为8,那么用独热编码为:话筒:[0 00 1 0 0 0 0 0 0 ...],麦克:[0 0 0 0 0 0 0 0 1 0 ...]

每个词都是茫茫0海中的一个1。如果要编程实现的话,用 Hash 表给每个词分配一个编号就可以了。这么简洁的表示方法配合上最大熵、SVM、CRF 等等算法已经很好地完成了 NLP 领域的各种主流任务。如此简洁的方法自然有它的缺点:1、向量维度会随着词表增大而增大:存储效率低若任务过程中词表扩容,则每个词维度也必须相应增加若某个词出现次数很少的话,则相应的权重会容易被错误估计;2、“词汇鸿沟”问题:每个维度彼此正交,即所有词彼此孤立。无法表示词与词之间的相关信息;3、分布式表示所有词都彼此孤立显然是不符合现实情况的。与独热编码不同,使用特定维度的低维实数向量来表示单词的方法称分布式表示。是一种稠密的表示方式。这种向量一般是这样的:[0.712 -0.05 -0.343 0.156 ...](数字是我随便编的)。

其最大的好处在于将语义信息融合进了词向量中,使得基于衡量向量距离的方法(如欧式距离、余弦距离等)可以用来度量单词间的相似度。直观上来说,就是语义上相近或相似的词,在向量空间上的距离会更接近,而语义相反的词距离会更远。3、为什么要用分布式表示前面介绍了词的分布式表示。但说到底,为什么需要用到分布式表示呢?从数据量的角度来考虑, 语料库的大小可以是无限的(26个英文字母可以排列组合出无穷多个单词等)。首先,我们不可能获取所有的单词;其次,语料库很大时,若还是采用one-hot方式,每个词将有茫茫多个维度,而只有一个维度为1,显然会造成存储空间的极度浪费。针对第一个问题,我们需要通过对有限样本的学习去推测无限样本的情况;对第二个问题,分布式表示将离散值连续化,可以用更少的、特定长度的维度来表示词向量,而不用每新来一个词就扩一个维度。从训练的角度来看,以神经网络训练为例,分布式表示由于将原始数据投射到了一个较低维度的空间,所需的参数也就变小了,对训练来说是很有好处的。(详情可以见YJango的Word Embedding--介绍)(另,有一个专门的术语来描述词向量的分布式表示技术——词嵌入【word embedding】。从名称上也可以看出来,独热编码相当于对词进行编码,而分布式表示则是将词从稀疏的大维度压缩嵌入到较低维度的向量空间中)4、为什么分布式表示能表示词向量前面介绍了使用word embedding的目的。那么为什么word embedding能表示词呢?换句话说,为什么映射到向量空间当中的词向量就能表示是确定的哪个词并且还能知道它们之间的相似度呢?关于为什么能表示词这个问题,在第3点里已经说明了,分布式实际上就是求一个映射函数,这个映射函数将每个词原始的one-hot表示压缩投射到一个较低维度的空间并一一对应。所以分布式可以表示确定的词。关于为什么分布式还能知道词之间的关系,就必须要了解分布式假设(distributional hypothesis)。竟然没人提分布式假设(distributionalhypothesis)。总的来说,word embedding就是一个词的低维向量表示(一般用的维度可以是几十到几千)。有了一个词的向量之后,各种基于向量的计算就可以实施,如用向量之间的相似度来度量词之间的语义相关性。其基于的分布式假设就是出现在相同上下文(context)下的词意思应该相近。所有学习word embedding的方法都是在用数学的方法建模词和context之间的关系。

(五)情感分析

情感分析也称为意见挖掘( Opinion Mining),是自然语言处理(NLP)的一个领域,它构建的系统,用于在文本中识别和提取观点。通常,除了识别观点之外,这些系统还提取描述的特征,例如:极性:发言者表达积极或消极的意见;主题:正在谈论的事情;意见持有人:表达意见的个人或实体。

1、情感分析的重要性

据估计,世界上80%的数据都是非结构化的,没有以预先定义的方式组织。其中大部分来自文本数据,如电子邮件,票据,聊天,社交媒体,调查,文章和文档。 这些文本通常难以分析,理解和分类,既费时又费钱。在情感分析系统的帮助下,这种非结构化信息可以自动转换为,结构化数据,关于产品,服务,品牌,政治或人们可以表达意见的其他主题。这些数据对于商业应用非常有用,例如营销分析,公共关系,产品评论,网络发起人评分,产品反馈和客户服务。

情感分析系统能够让公司,通过自动化业务流程,获得可操作的洞察力,以及节省数小时的手动数据处理来理解这种非结构化文本,也就是说,通过提高团队效率。

2、情感分析的优点如下所示:

可扩展性:您能想象通过成千上万的推文,用户对话或用户评论手动排序吗? 手动处理的话,数据太多了。 情感分析允许以有效且低成本的方式大规模处理数据。

实时分析:我们可以使用情感分析来识别关键信息,以便在特定情景中实时提供态势感知。 社交媒体即将爆发公关危机吗?一个愤怒的客户即将流失? 情感分析系统可以帮助您立即识别这些情况并采取行动。

一致的标准:人类没有观察到评估一段文字情感的清晰标准。 据估计,在判断特定文本的情感时,不同的人仅仅在60-65%的情况下同意。 这是一项主观任务,深受个人经历,思想和信仰的影响。 通过使用集中情感分析系统,公司可以对所有数据应用相同的标准。这有助于减少错误并提高数据一致性。

3、情感分析的内容

情感分析可以用于不同级别的范围:文本级别:通过完整文档或段落来获取情绪;句子级别:获得单句的情绪;子句级别:获得句子中,子表达的情感。

因此情感分析的目标可以分为一下几种:初级:文章的整体感情是积极/消极的;进阶:对文章的态度从1-5打分;高级:检测态度的目标,持有者和类型

对态度的分析,考虑到态度可以具体分成一下内容:态度的持有者(source)态度的目标(aspect)态度的类型:一系列类型如喜欢(like),讨厌(hate),珍视(value),渴望(desire)等;或着简单的加权极性如积极(positive),消极(negative)和中性(neutral)并可用具体的权重修饰态度的范围:某句话/全文对观点的分析,观点分为两类:直接性的和比较性的。直接性观点:直接对实体提出意见,例如:“相机A的画质很差。”这个直接意见陈述了对相机A的负面看法。比较性的意见:通过比较实体与另一实体来表达意见,例如:“相机A的图像质量优于相机B的图像质量。”通常,比较性观点使用,形容词或副词的比较级或最高级形式表达两个或更多个实体之间的相似性或差异。在前面的例子中,对于摄像机A有一个积极的看法,相反,对摄像机B有一个负面看法。

明确的和含蓄的观点:关于主题的明确观点,是在主观句子中明确表达的意见。以下句子表达了明确的积极观点:“这款手机的音质令人惊叹。”对某一主题的含蓄的观点,是客观句中隐含的意见。以下句子表达了一种隐含的否定意见:“耳机在两天内坏了。”在隐含的意见中,我们可以包括隐喻,这些隐喻可能是最难分析的观点类型,因为它们包含大量的语义信息。

情感分析的情感分析有多种类型和风格,情感分析工具的范围从专注于极性(正面,负面,中立)的系统到检测情感和情绪(愤怒,快乐,悲伤等)或识别意图的系统(例如感兴趣和没兴趣)。

细粒度情感分析:有时人们可能想,更加准确地了解意见的极性水平,因此你可以考虑,以下类别而不仅仅是谈论积极,中立或消极的意见:非常积极;积极;中性;消极;非常消极.这通常被称为细粒度情感分析。 例如,这可以在评论中映射到5星评级,例如:非常正= 5星和非常负=1星。一些系统还通过识别积极或消极情感是否与特定感觉相关联,来提供不同的极性风格,例如愤怒,悲伤或忧虑(即负面情绪)或快乐,爱情或热情(即积极情绪)。

情绪检测旨在检测诸如快乐,沮丧,愤怒,悲伤等情绪。许多情绪检测系统采用词典(即单词列表和它们传达的情感)或复杂的机器学习算法。诉诸词典的一个缺点是,人们表达情感的方式变化很大,他们使用的词汇项目也是如此。一些词,像shit和kill,通常表达愤怒(eg.在你的产品中是狗屎,或者你的客户支持正在杀死我),也可能表达快乐。

基于方面的情感分析,通常,在分析目标(例如产品)的情感时,您可能不仅对人们是否正在谈论产品的极性(积极,中立或负面)感兴趣,而且对人们谈论的产品的哪些特定方面或特征感兴趣。这就是基于方面的情感分析。 在我们前面的例子中:“这款相机的电池续航时间太短。”这句话表达了对相机的负面看法,但更准确地说,关于电池寿命,这是相机的一个特殊功能。

意图分析基本上是为了检测人们通过文本做什么,而不仅仅是人们通过文本说了什么。请看以下示例:“你的客户支持是一场灾难。 我已被搁置20分钟“。“我想知道如何更换墨盒”。“你能帮我填一下这张表吗?”人们很容易在第一个文本中感觉出抱怨,第二个文本中的问题和第三个文本中的请求。但是,机器可能会遇到一些问题。 有时,可以从文本中推断出意图,但有时,推断它需要一些上下文知识。

多语言情感分析是一项艰巨的任务。 通常,需要进行大量预处理,并且预处理会使用大量资源。大多数这些资源可在线获得(例如情感词典),但必须创建许多其他资源(例如翻译的语料库或噪声检测算法)。 使用这些资源需要一定的编程能力,并且可能需要很长时间才能实现。另一种方法是自动检测文本中的语言,然后为您选择的语言训练自定义模型(如果文本不是用英语编写的),最后进行分析。

4、如何实现情感分析

实现情感分析系统的方法和算法有很多种,可分为:基于规则:基于一组手动制定的规则执行情绪分析;自动系统:依靠机器学习技术从数据中学习的;混合系统:结合了基于规则和自动方法。

基于规则的系统非常简单,计算文本中出现的积极词数计算文本中出现的否定词数。如果正面出现的数量大于否定单词出现的数量则返回正面情绪,相反,返回负面情绪。否则,返回中立。但是它没有考虑单词如何在一个序列中组合,虽然系统可以进行更高级的处理,但这些系统很快就会变得非常复杂。它们可能非常难以维护,因为可能需要新的规则来支持对新表达式和词汇表。此外,由于与先前规则的混合,添加新规则可能会产生不好的结果。 因此,这些系统需要在手动调整和维护规则方面占用很多精力。

与基于规则的系统相反,自动的方法不依赖于手工制作的规则,而是依赖于机器学习。 情感分析任务通常被建模为分类问题,文本喂给分类器,然后返回相应的类别,例如,正,负或中性(如果正在进行极性分析)。

5、关键词提取

关键词是指能反映文本主题或者意思的词语,如论文中的Keyword字段。大多数人写文章的时候,不会像写论文的那样明确的指出文章的关键词是什么,关键词自动标注任务正是在这种背景下产生的。

目前,关键词自动标注方法分为两类:1)关键词分配,预先定义一个关键词词库,对于一篇文章,从词库中选取若干词语作为文章的关键词;2)关键词抽取,从文章的内容中抽取一些词语作为关键词。

在文献检索初期,由于当时还不支持全文搜索,关键词就成为了搜索文献的重要途径。随着网络规模的增长,关键词成为了用户获取所需信息的重要工具,从而诞生了如Google、百度等基于关键词的搜索引擎公司。

关键词自动标注技术在推荐领域也有着广泛的应用。如图1所示,当用户阅读图中左边的新闻时,推荐系统可以给用户推荐包含关键词”Dropbox”、”云存储”的资讯,同时也可以根据文章关键词给用户推荐相关的广告。

关键词可以作为用户兴趣的特征,从而满足用户的长尾阅读兴趣。传统的信息订阅系统一般使用类别或者主题作为订阅的内容。如果用户想订阅更细粒度的内容,这类系统就无能为力了。关键词作为一种对文章更细粒度的描述,刚好可以满足上述需求。

除了这些以外,关键词还在文本聚类、分类、摘要等领域中有着重要的作用。比如在聚类时,将关键词相似的几篇文章看成一个类团可以大大提高K-means聚类的收敛速度。从某天所有新闻中提取出这些新闻的关键词,就可以大致知道那天发生了什么事情。或者将某段时间中几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论些什么话题。

文章的关键词通常具有以下三个特点:可读性。关键词本身应该是有意义的词或者短语。例如,“我们约会吧”是有意义的短语,而“我们”则不是。相关性。关键词必须与文章的主题相关。例如,一篇介绍巴萨在德比中输给皇马的新闻,其中可能顺带提到了“中超联赛”这个关短语,这时就不希望这个短语被选取作为该新闻的关键词。覆盖度。关键词集合能对文章的主题有较好的覆盖度,不能只集中在文章的某个主题而忽略了文章的其他主题。

从上述三个特点,可以看到关键词标注算法的要求以及面临的挑战:a.新词发现以及短语识别问题,怎样快速识别出网络上最新出现的词汇(人艰不拆、可行可珍惜…)?b.关键词候选集合的问题,并不是文章中所有的词语都可以作为候选;c.怎么计算候选词和文章之间的相关性?d.如何覆盖文章的各个主题?

关键词分配算法需要预先定义一个关键词词库,这就限定了关键词候选范围,算法的可扩展性较差,且耗时耗力;关键词抽取算法是从文章的内容中抽取一些词语作为标签词,当文章中没有质量较高的词语时,这类方法就无能为力了。为了解决上述这些问题和挑战,可以采用层次化关键词自动标注算法。

(六)文本分类

1、背景与基本概念

随着互联网技术的迅速发展与普及,如何对浩如烟海的数据进行分类、组织和管理,已经成为一个具有重要用途的研究课题。而在这些数据中,文本数据又是数量最大的一类。文本分类是指在给定分类体系下,根据文本内容自动确定文本类别的过程。文本分类有着广泛的应用场景,例如:新闻网站包含大量报道文章,基于文章内容,需要将这些文章按题材进行自动分类(例如自动划分成政治、经济、军事、体育、娱乐等);在电子商务网站,用户进行了交易行为后对商品进行评价分类,商家需要对用户的评价划分为正面评价和负面评价,来获取各个商品的用户反馈统计情况;电子邮箱频繁接收到垃圾广告信息,通过文本分类技术从众多的邮件中识别垃圾邮件并过滤,提高了邮箱用户的使用效率;媒体每日有大量投稿,依靠文本分类技术能够对文章进行自动审核,标记投稿中的色情、暴力、政治、垃圾广告等违规内容。

20世纪90年代以前,占主导地位的文本分类方法一直是基于知识工程的方法:借助专业人员的帮助,人工设计一些特征,从原始文档中提取特征,然后指定分类器如LR、SVM,训练模型对文章进行分类,比较经典的特征提取方法如频次法、tf-idf、互信息方法、N-Gram。如果一篇文档能满足这些推理规则,则可以判定属于该类别。但是这种方法有明显的缺点:分类的质量依赖于规则的好坏;需要大量的专业人员进行规则的制定;不具备可推广性,不同的领域需要构建完全不同的分类系统,造成开发资源和资金资源的巨大浪费。

而机器学习技术能很好地解决传统方式存在的问题问题,以统计理论为基础,利用算法让机器具有类似人类般的自动“学习”能力——对已知的训练数据做统计分析从而获得规律,再运用规律对未知数据做预测分析。机器学习方法运用在文本分类上的基本过程就是:标注——利用人工对一批文档进行了准确分类,以作为训练集(进行机器学习的材料);训练——计算机从这些文档肿挖掘出一些能够有效分类的规则,生成分类器(总结出的规则集合);分类——将生成的分类器应用在有待分类的文档集合中,获取文档的分类结果。由于机器学习方法在文本分类领域有着良好的实际表现,已经成为了该领域的主流。

2、文本分类流程

文本分类的流程如下图所示,包括训练、特征抽取、训练模型、分类预测等几个主要环节

图 1 文本分类流程图

巴别塔-自然语言处理概述


(1)文本预处理

文档建模

机器学习方法让计算机自己去学习已经分类好的训练集,然而计算机是很难按人类理解文章那样来学习文章,因此,要使计算机能够高效地处理真实文本,就必须找到一种理想的形式化表示方法,这个过程就是文档建模。文档建模一方面要能够真实地反映文档的内容另一方面又要对不同文档的区分能力。文档建模比较通用的方法包括布尔模型、向量空间模型(VSM)和概率模型。其中最为广泛使用的是向量空间模型。

经典的向量空间模型(VSM: Vector Space Model)由Salton等人于60年代提出,并成功地应用于著名的SMART文本检索系统。VSM概念非常直观——把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。文本处理中最常用的相似性度量方式是余弦距离。文本挖掘系统采用向量空间模型,用特征词条(T1,T2,…Tn)及其权值Wi代表目标信息,在进行信息匹配时,使用这些特征项评价未知文本与目标样本的相关程度。特征词条及其权值的选取称为目标样本的特征提取,特征提取算法的优劣将直接影响到系统的运行效果。

设D为一个包含m个文档的文档集合,Di为第i个文档的特征向量,则有D={D1,D2,…,Dm}, Di=(di1,di2,…,dij),i=1,2,…,mj=1,2,…,n。其中dij(i=1,2,…,m;j=1,2,…,n)为文档Di中第j个词条tj的权值,它一般被定义为tj在Di中出现的频率tij的函数,例如采用TF-IDF函数,即dij=tij*log(N/nj)。其中,N是文档数据库中文档总数,nj是文档数据库含有词条tj的文档数目。假设用户给定的文档向量为D2,未知的文档向量为q,两者的相似程度可用两向量的夹角余弦来度量,夹角越小说明相似度越高。相似度的计算公式如下:

巴别塔-自然语言处理概述


图 2 向量空间模型

通过上述的向量空间模型,文本数据就转换成了计算机可以处理的结构化数据,两个文档之间的相似性问题转变成了两个向量之间的相似性问题。

分词技术

在使用向量模型表示文档时,首先要对文档进行词汇化处理。对于英语或者法语等语言来说,将文档转化成词的集合比较简单,但是对于汉语来说,不像英文文本的单词那样有空格来区分,这个处理过程要依赖于分词技术。从简单的查词典的方法,到后来的基于统计语言模型的分词方法,中文分词的技术已趋于成熟。但是,尽管现在分词软件的准确率已经比较高了,它对专业术语(称为未登录词识别)的识别率还不是很好。例如“来自星星的你”,分词可以成功切分为“来自星星的你”,但是怎样把“来自星星的你”作为一个完整的专有名词(电视剧名称)识别出来,还有很多技术要解决。为了进一步提高关键词抽取的准确率,通常需要在词库中添加专名词表来保证分词的质量。

在完成分词之后,我们对词语的位置信息做进一步的发掘,需要确定记录位置信息的方式以及各个位置的词在反映主题时的相对重要性。标题、摘要和结论、正文等文章各个部分的位置权重是各不相同的,当软件逐词扫描统计词频时,记录每个词的位置信息。

在计算文档的特征向量的值时,还需要对文本集进行一些处理,过滤掉无用的信息。滤除这些没有作用的词语可以减少文本特征向量的维数,减少不必要的运算。常见做法包括:去掉一些低频词,比如某些单词只在一两个文本中出现过,这样词留在集合中会导致大部分文本样本的该属性值为0。去掉停止词,一般这种词几乎不携带任何信息。例如:“的”、“地”、“得”之类的助词,以及像“然而”、“因此”等只能反映句子语法结构的词语,它们不但不能反映文献的主题,而且还会对关键词的抽取造成干扰,有必要将其滤除。去停用词确定为所有虚词以及标点符号。去掉一些标记信息,这主要针对网页文本或其他的标记语言文本。

(2)特征抽取

文本特征抽取

目前大多数中文文本分类系统都采用词作为特征项,称作特征词。这些特征词作为文档的中间表示形式,用来实现文档与文档、文档与用户目标之间的相似度计算。如果把所有的词都作为特征项,那么特征向量的维数将过于巨大,会对分类系统的运算性能造成极大的压力。在这样的情况下,要完成文本分类几乎是不可能的。寻求一种有效的特征降维方法,不仅能降低运算复杂度,还能提高分类的效率和精度,因此是文本自动分类中一项重要技术。

特征抽取的主要功能就是在不损伤核心信息的情况下降低向量空间维数,简化计算,提高文本处理的速度和效率。相对于其他分类问题,文本特征抽取的方式常见的有4种:用映射或变换的方法把原始特征变换为较少的新特征;从原始特征中挑选出一些最具代表性的特征;根据专家的知识挑选最有影响的特征;基于数学方法进行选取,找出最具分类信息的特征。

其中基于数学方法进行特征选择比较精确,人为因素干扰少,尤其适合于文本应用。这种方法通过构造评估函数,对特征集合中的每个特征进行评估,并对每个特征打分,这样每个词语都获得一个评估值,又称为权值,然后将所有特征按权值大小排序,提取预定数目的最优特征作为提取结果的特征子集。

评估函数

对用数学方法进行特征选择的算法,决定文本特征提取效果的主要因素是评估函数的质量,常用评估函数包括:

频次法,顾名思义,十分简单,记录每篇文章的次数分布,然后将分布输入机器学习模型,训练一个合适的分类模型,对这类数据进行分类,需要指出的时,在统计次数分布时,可合理提出假设,频次比较小的词对文章分类的影响比较小,因此我们可合理地假设阈值,滤除频次小于阈值的词,减少特征空间维度。

TF-IDF相对于频次法,有更进一步的考量,词出现的次数能从一定程度反应文章的特点,即TF,而TF-IDF,增加了所谓的反文档频率,如果一个词在某个类别上出现的次数多,而在全部文本上出现的次数相对比较少,我们认为这个词有更强大的文档区分能力,TF-IDF就是综合考虑了频次和反文档频率两个因素。

互信息方法也是一种基于统计的方法,计算文档中出现词和文档类别的相关程度,即互信息

基于N-Gram的方法是把文章序列,通过大小为N的窗口,形成一个个Group,然后对这些Group做统计,滤除出现频次较低的Group,把这些Group组成特征空间,传入分类器,进行分类。

传统的特征选择方法大多采用以上各评估函数进行特征权重的计算,由于这些评估函数是基于统计学的,其中一个主要缺陷就是需要用一个很庞大的训练集才能获得几乎所有的对分类起关键作用的特征.这需要消耗大量的时间和空间资源,况且,构建这样一个庞大的训练集也是一项十分艰巨的工作。然而,在现实应用中,考虑到工作效率,不会也没有足够的资源去构建一个庞大的训练集,这样的结果就是:被选中的甚至是权重比较高的特征,可能对分类没有什么用处,反而会干涉到正确的分类;而真正有用的特征却因为出现的频率低而获得较低的权重,甚至在降低特征空间维数的时候被删除掉了。基于评估函数的特征提取方法是建立在特征独立的假设基础上,但在实际中这个假设是很难成立的,因此需要考虑特征相关条件下的文本特征提取方法。

词向量的应用

特征选择也可以通过用映射或变换的方法把原始特征变换为较少的新特征。上面提到的特征选择模块,在实际情况会碰到这样的问题:无论是采用文档频率、信息增益法、互信息法等得降维方法,都会损失了部分的文档信息。以文档频率为例,在特征选择过程中由于某些关键的词语低于了人为设定的阈值,所以会被直接忽视掉,而很多情况这部分词汇能包含较多的信息,对于分类的重要性比较大。怎么能够进一步理解这部分的信息,是急需要解决的问题。一个想法是找到这些使用频率比较低的词语相似的高频词,譬如在讨论“月亮”的古诗词中,包含了很多低频的同义词,如“玉兔”,“婵娟”等,如果我们能把这些低频的词语合并到一个维度,无疑是能够增强分类系统对文档的理解深度的。词向量这一概念能够有效地表示词语之间的相似性,适用于这种方法。

先介绍一下词向量的定义。一种最简单的词向量是one-hotrepresentation,就是用一个很长的向量来表示一个词,向量的长度是词典D的大小N,向量的分量只有一个为1,其他全为0,1的位置对应该词在词典中的索引。这种词向量表示有一些缺点:容易受维数灾难的困扰。另一种词向量是Distributed Representation,它最早是Hinton于1986年提出来的,可以克服one-hot representation的上述缺点。其基本想法是:通过训练将某种语言中的每个词映射成一个固定长度的短向量。所有这些向量构成一个词向量空间,每个向量是该空间中的一个点,在这个空间上引入距离,就可以根据词之间的距离来判断它们之间的(词法、语义上的)相似性了。如何获取Distributed Representation的词向量呢?有很多不同的模型可以用来估计词向量,包括有名的LSA、LDA和神经网络算法。Word2Vec就是使用度比较广的一个神经网络算法实现的词向量计算工具。

基于向量空间模型的文本分类方法是没有考虑到词的顺序的。基于卷积神经网络(CNN)来做文本分类,可以利用到词的顺序包含的信息。CNN模型把原始文本作为输入,不需要太多的人工特征。下图是CNN模型的一个实现,共分四层,第一层是词向量层,doc中的每个词,都将其映射到词向量空间,假设词向量为k维,则n个词映射后,相当于生成一张n*k维的图像;第二层是卷积层,多个滤波器作用于词向量层,不同滤波器生成不同的feature map;第三层是pooling层,取每个feature map的最大值,这样操作可以处理变长文档,因为第三层输出只依赖于滤波器的个数;第四层是一个全连接的softmax层,输出是每个类目的概率。除此之外,输入层可以有两个channel,其中一个channel采用预先利用word2vec训练好的词向量,另一个channel的词向量可以通过backpropagation在训练过程中调整。

巴别塔-自然语言处理概述

巴别塔-自然语言处理概述


图 3 基于卷积神经网络的文本分类算法

(3)特征向量权值计算

特征权重用于衡量某个特征项在文档表示中的重要程度或区分能力的强弱。选择合适的权重计算方法,对文本分类系统的分类效果能有较大的提升作用。影响特征词权值的因素包括以下几点:

词频和文档频度,

词频和文档频度,是特征项最重要的影响因素。文本内中的中频词往往具有代表性,高频词区分能力较小,而低频词或者示出现词也常常可以做为关键特征词。而对于文档频度这一角度,出现文档多的特征词,分类区分能力较差,出现文档少的特征词更能代表文本的不同主题。结合词频和文档频度来评估特征的重要性有较强的区分能力,它们在不同方法中有不同的应用公式,这些方法包括:绝对词频(TF)、倒排文档频度(IDF)、TF-IDF、TFC、ITC、TF-IWF,如下:

a) 绝对词频(TF):直接使用特征项在文本中出现的频度;

b) 倒排文档频度(IDF):稀有特征比常用特征含有更新的信息;

c) TF-IDF: 权重与特征项在文档中出现的频率成正比,与在整个语料中出现该特征项的文档书成反比;

d) TFC:对文本长度进行归一化处理后的TF-IDF;

e) ITC:在TFC基础上,用tf的对数值代替tf值;

f) TF-IWF:在TF-IDF算法的基础上,用特征项频率倒数的对数值IWF代替IDF,并且用IWF的平方平衡权重值对于特征项频率的倚重。

词性

汉语言中,能标识文本特性的往往是文本中的实词,如名词、动词、形容词等。而文本中的一些虚词,如感叹词、介词、连词等,对于标识文本的类别特性并没有贡献,也就是对确定文本类别没有意义的词。如果把这些对文本分类没有意思的虚词作为文本特征词,将会带来很大噪音,从而直接降低文本分类的效率和准确率。因此,在提取文本特征时,应首先考虑剔除这些对文本分类没有用处的虚词,而在实词中,又以名词和动词对于文本的类别特性的表现力最强,所以可以只提取文本中的名词和动词作为文本的一级特征词。

标题

标题是作者给出的提示文章内容的短语,特别在新闻领域,新闻报道的标题一般都要求要简练、醒目,有不少缩略语,与报道的主要内容有着重要的联系,对摘要内容的影响不可忽视。统计分析表明,小标题的识别有助于准确地把握文章的主题。主要体现在两个方面:正确识别小标题可以很好地把握文章的整体框架,理清文章的结构层次;同时,小标题本身是文章中心内容的高度概括。因此,小标题的正确识别能在一定程度上提高文摘的质量。

位置

美国的EE.Baxendale的调查结果显示:段落的论题是段落首句的概率为85%,是段落末句的概率为7%。而且新闻报道性文章的形式特征决定了第一段一般是揭示文章主要内容的。因此,有必要提高处于特殊位置的句子权重,特别是报道的首旬和末句。但是这种现象又不是绝对的,所以,我们不能认为首句和末句就一定是所要摘要的内容,因此可以考虑一个折衷的办法,即首句和末句的权重上可通过统计数字扩大一个常数倍。首段、末段、段首、段尾、标题和副标题、子标题等处的句子往往在较大程度上概述了文章的内容。对于出现在这些位置的句子应该加大权重。Internet上的文本信息大多是html结构的,对于处于Web文本结构中不同位置的单词,其相应的表示文本内容或区别文本类别的能力是不同的,所以在单词权值中应该体现出该词的位置信息。

句法结构

句式与句子的重要性之间存在着某种联系,比如摘要中的句子大多是陈述句,而疑问句、感叹句等则不具内容代表性。而通常“总之”、“综上所述”等一些概括性语义后的句子,包含了文本的中心内容。

专业词库

通用词库包含了大量不会成为特征项的常用词汇,为了提高系统运行效率,系统根据挖掘目标建立专业的分词表,这样可以在保证特征提取准确性的前提下,显著提高系统的运行效率。用户并不在乎具体的哪一个词出现得多,而在乎泛化的哪一类词出现得多。真正起决定作用的是某一类词出现的总频率。基于这一原理,我们可以先将词通过一些方法依主题领域划分为多个类,然后为文本提取各个词类的词频特征,以完成对文本的分类。可以通过人工确定领域内的关键词集。

信息熵

熵(Entropy)在信息论中是一个非常重要的概念,它是不确定性的一种度量。信息熵方法的基本目的是找出某种符号系统的信息量和多余度之间的关系,以便能用最小的成本和消耗来实现最高效率的数据储存、管理和传递。我们将可以将信息论中的熵原理引入到特征词权重的计算中。

文档、词语长度

一般情况下,词的长度越短,其语义越泛。一般来说,中文中词长较长的词往往反映比较具体、下位的概念,而短的词常常表示相对抽象、上位的概念一般说来,短词具有较高的频率和更多的含义,是面向功能的;而长词的频率较低,是面向内容的,增加长词的权重,有利于词汇进行分割,从而更准确地反映出特征词在文章中的重要程度。词语长度通常不被研究者重视。但是本文在实际应用中发现,关键词通常是一些专业学术组合词汇,长度较一般词汇长。考虑候选词的长度,会突出长词的作用。长度项也可以使用对数函数来平滑词汇间长度的剧烈差异。通常来说,长词汇含义更明确,更能反映文本主题,适合作为关键词,因此将包含在长词汇中低于一定过滤阈值的短词汇进行了过滤。所谓过滤阈值,就是指进行过滤短词汇的后处理时,短词汇的权重和长词汇的权重的比的最大值。如果低于过滤阈值,则过滤短词汇,否则保留短词汇。根据统计,二字词汇多是常用词,不适合作为关键词,因此对实际得到的二字关键词可以做出限制。比如,抽取5个关键词,本文最多允许3个二字关键词存在。这样的后处理无疑会降低关键词抽取的准确度和召回率,但是同候选词长度项的运用一样,人工评价效果将会提高。

词语间关联

词汇间的关联关系对提升文本理解的深度有非常重要的影响,例如中文中存在大量的同义词,近义词,中文简称,指代等。在前文中计算词频、出现位置时,如果没有很好的考虑词语间关联,则很容易错误的识别文章的核心关键词,影响文本分类精度。

单词的区分能力

在TF*IDF公式的基础上,又扩展了一项单词的类区分能力。新扩展的项用于描述单词与各个类别之间的相关程度。

特征权重计算方法没有最好的选择,往往要依据现实的具体场景来选取适合的方法。在进行特征权重的计算之后,已经可以把测试集数据采用机器学习方法进行分类训练。但是实际操作会遇到一些问题。单词并不都包含相同的信息。如果在一部分文件中有些单词频繁地出现,那将扰乱分类系统的分析。

(4)样本训练

文本分类算法

由于文本分类本身是一个分类问题,所以一般的模式分类方法都可以用于文本分类应用中。常用的分类算法包括:

a.Rocchio分类器

Rocchio分类器的基本思想是,首先为每一个训练文本C建立一个特征向量,然后使用训练文本的特征向量为每个类建立一个原型向量(类向量)。当给定一个待分类文本时,计算待分类文本与各个类别的原型向量之间的距离,然后根据计算出来的距离值决定待分类文本属于哪一类别。一个基本的实现方法就是把一个类别里的样本文档各项取个平均值,作为原型变量。

b.朴素贝叶斯分类器

利用特征项和类别的列和概率来估计给定文档的类别概率。假设文本是基于词的一元模型,即文本中当前词的出现依赖于文本类别,但不依赖于其他词及文本的长度,也就是说,词与词之间是独立的。根据贝叶斯公式,文档Doc属于Ci类别的概率为P(Ci|Doc)=P(Doc|Ci)*P(Ci)/P(Doc)。

c.基于支持向量机的分类器

基于支持向量机(SVM)的分类方法主要用于解决二元模式分类问题。SVM的基本思想是在向量空间中找到一个决策平面,这个平面能够“最好”地分割两个分类中的数据点。支持向量机分类法就是要在训练集中找到具有最大类间界限的决策平面,如图4。

 

巴别塔-自然语言处理概述


图 4 基于支持向量机分类器原理图

(4)k-最近邻法

k-最近邻方法的基本思想是:给定一个测试文档,系统在训练集中查找离它最近的k个邻近文档,并且根据这些邻近文档的分类来给该文档的候选类别评分。把邻近文档和测试文档的相似度作为邻近文档所在类别的权重,如果这k个邻近文档中的部分文档属于同一个类别,那么将该类别中每个邻近文档的权重求和,并作为该类别和测试文档的相似度。然后,通过对候选分类评分的排序,给出一个阈值。

d.基于神经网络的分类器

神经网络是人工智能中比较成熟的技术之一,基于该技术的分类器的基本思想是:给每一类文档简历一个神经网络,输入通常是单词或者更加复杂的特征向量,通过机器学习方法获得从输入到分类的非线性映射。

e.决策树

决策树分类器把文本处理过程看作是一个等级分层分解完成的复杂任务。如图5,决策树是一棵树,树的根节点是整个数据集合空间,每个分结点是对一个单一变量的测试,改测试将数据集合空间分割成两个或更多个类别,及决策树可以是二叉树也可以是多叉树。每个叶结点是属于单一类别的记录。构造决策树分类器时,首先要通过训练生成决策树,然后再通过测试集对决策树进行修剪。一般可通过递归分割的过程构建决策树,其生成过程通常是自上而下的,选择分割的方法有很多种,但是目标都是一致的,就是对目标文档进行最佳分割。

图 5 决策树实例

巴别塔-自然语言处理概述

巴别塔-自然语言处理概述


Ensemble方法

我们使用上述的经典分类算法的过程中,很自然的想到一点,我们是否能够整合多个算法优势到解决某一个特定分类问题中去?答案是肯定的。通过聚合多个分类器的预测来提高分类的准确率。这种技术称为Ensemble方法。Ensemble方法是提升机器学习精度的有效手段。它的基本思想,充分利用不同分类器的优势,取长补短,最后综合多个分类器的结果。Ensemble可以设定一个目标函数(组合多个分类器),通过训练得到多个分类器的组合参数(而不是简单的累加或者多数)。 在Ensemble框架下将分类器分为两个Level: L1层和L2层。L1层是基础分类器,前面提到的分类器均可以作为L1层分类器来使用;L2层基于L1层,将L1层的分类结果形成特征向量,再组合一些其他的特征后,形成L2层分类器(如SVM,AdaBoost等)的输入。这里需要特别留意的是用于L2层的训练的样本必须没有在训练L1层时使用过。

巴别塔-自然语言处理概述

巴别塔-自然语言处理概述


图 6 Ensemble框架

文本分类评估

针对不同的目的,多种文本分类器性能评价方法被提出,包括召回率、正确率和F-测度值。设定a表示分类器将输入文本正确分类到某个类别的个数;b表示分类器将输入文本错误分类到某个类别的个数;c表示分类器将输入文本错误地排除在某个类别之外的个数;d表示分类器将输入文本正确地排除在某个类别之外的个数。

该分类器的召回率、正确率和F-测度值分别采用以下公式计算:

召回率 r = a / (a + c) * 100%

正确率 p = a / (a + b) * 100%

F-测度值 F = (2 * p * r) /(p + r)

由于在分类结果中,对应每个类别都会有一个召回率和正确率,因此,可以根据每个类别的分类结果评价分类器的整体性能,通常方法有两种:微平均和宏平均。微平均是根据正确率和召回率计算公式直接计算出总得正确率和召回率值。宏平均是指首先计算出每个类别的正确率和召回率,然后对正确率和召回率分别取平均得到总的正确率和召回率。不难看出,宏平均平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均平等考虑文档集中的每一个文档,所以它的值受到常见类别的影响比较大。

(六)文本相似度检验

1、基本概念及应用

在生活中,信息检索、文档复制检测等领域都应用到“文本相似度”。可能有人觉得文本是文字,其实不尽然,文本相似度的应用更广,除了文字的匹配,还可以是图片,音频等,因为他们的实质都是在计算机中都是以二进制的方式存在的。

我们在比较事物时,往往会用到“不同”,“一样”,“相似”等词语,这些词语背后都涉及到一个动作——双方的比较。只有通过比较才能得出结论,究竟是相同还是不同。生活中通过“相似度”这词来描述可能会更加准确。比如男人和女人,虽然生理器官和可能思想有些不同,但也有相同的地方,那就是都是人,就是说相似度不为0;比如石头与小草,它们对于虚拟类都是一种实体类,相似度也不为0;两个句子词和词的顺序都一致,相似度就是1。一个概念可以应用到不同于相同的两个方面的定义。

相似度,实质就是计算个体间相程度。什么是个体?对于语句,个体就是语句,对于图片,个体就是图片。两篇文本,如何计算相似度?相似度是数学上的概念,自然语言肯定无法完成,所有要把文本转化为向量。两个向量计算相似度就很简单了,欧式距离、余弦相似度等等各种方法,只需要中学水平的数学知识。那么如何将文本表示成向量呢?

2、常用算法

最简单的表示方法是词袋模型。把一篇文本想象成一个个词构成的,所有词放入一个袋子里,没有先后顺序、没有语义。词袋模型简单易懂,但是存在问题。中文文本里最常见的词是“的”、“是”、“有”这样的没有实际含义的词。一篇关于足球的中文文本,“的”出现的数量肯定多于“足球”。所以,要对文本中出现的词赋予权重。一个词的权重由TF * IDF 表示,其中TF表示词频,即一个词在这篇文本中出现的频率;IDF表示逆文档频率,即一个词在所有文本中出现的频率倒数。因此,一个词在某文本中出现的越多,在其他文本中出现的越少,则这个词能很好地反映这篇文本的内容,权重就越大。回过头看词袋模型,只考虑了文本的词频,而TF-IDF模型则包含了词的权重,更加准确。文本向量与词袋模型中的维数相同,只是每个词的对应分量值换成了该词的TF-IDF值

TF-IDF模型足够胜任普通的文本分析任务,用TF-IDF模型计算文本相似度已经比较靠谱了,但是细究的话还存在不足之处。实际的中文文本,用TF-IDF表示的向量维数可能是几百、几千,不易分析计算。此外,一些文本的主题或者说中心思想,并不能很好地通过文本中的词来表示,能真正概括这篇文本内容的词可能没有直接出现在文本中。因此,这里引入了Latent Semantic Indexing(LSI)从文本潜在的主题来进行分析。LSI是概率主题模型的一种,另一种常见的是LDA,核心思想是:每篇文本中有多个概率分布不同的主题;每个主题中都包含所有已知词,但是这些词在不同主题中的概率分布不同。LSI通过奇异值分解的方法计算出文本中各个主题的概率分布,严格的数学证明需要看相关论文。假设有5个主题,那么通过LSI模型,文本向量就可以降到5维,每个分量表示对应主题的权重。

余弦相似性,余弦(余弦函数),三角函数的一种。在Rt△ABC(直角三角形)中,∠C=90°,角A的余弦是它的邻边比三角形的斜边,即cosA=b/c,也可写为cosA=AC/AB。余弦函数:f(x)=cosx(x∈R)。这是一个非常常见的算法,简单来说这个算法就是通过计算两个向量的夹角余弦值来评估他们的相似度。

比如我们要判断两句话

A=你是个坏人 B=小明是个坏人

① 先进行分词

A=你 / 是 / 个 / 坏人 B=小明 / 是 / 个 / 坏人

② 列出所有的词

{ 你 小明是 个 坏人 }

③计算词频(出现次数)

A={1 0 1 1} (每个数字对应上面的字) B={0 1 1 1}

然后把词频带入公式

最终=0.667(只余3位),可以百度"2除以(根号3乘以根号3)"看到计算结果。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。简单来说上面计算出的值代表两个句子大概六成相似,越接近1就越相似。

简单共有词,通过计算两篇文档共有的词的总字符数除以最长文档字符数来评估他们的相似度。假设有A、B两句话,先取出这两句话的共同都有的词的字数然后看哪句话更长就除以哪句话的字数。同样是A、B两句话,共有词的字符长度为4,最长句子长度为6,那么4/6,≈0.667。

编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。由俄罗斯科学家Vladimir Levenshtein(找不到他照片233333)在1965年提出这个概念。

例如将“BABAY是个好人”转成“BABY是个帅哥”,编辑举例就是2~~(好人变帅哥只要2就好...)~~: BABY是个帅人(好→帅) BABY是个帅哥(人→哥)。然后拿编辑距离去除以两者之间的最大长度,2/6≈0.333,意味着只要变动这么多就可以从A变成B,所以不用变动的字符便代表了相似度,1-0.333=0.667。

Simhash是谷歌发明的算法,可以将一个文档转换成64位的字节,然后我们可以通过判断两个字节的汉明距离就知道是否相似了。

汉明距离是以理查德·卫斯里·汉明的名字命名的。在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:1011101 与 1001001 之间的汉明距离是 2。"toned" 与 "roses" 之间的汉明距离是 3。

首先我们来计算SimHash:

① 提取文档关键词得到[word,weight]这个一个数组。(举例 [美国,4])

② 用hash算法将word转为固定长度的二进制值的字符串[hash(word),weight]。(举例 [100101,4])

③ word的hash从左到右与权重相乘,如果为1则乘以1 ,如果是0则曾以-1。(举例4,-4,-4,4,-4,4)

④ 接着计算下个数,直到将所有分词得出的词计算完,然后将每个词第三步得出的数组中的每一个值相加。(举例美国和51区,[4,-4,-4,4,-4,4]和[5 -5 5 -5 5 5]得到[9 -9 1 -1 1 9])

⑤ 对第四步得到的数组中每一个值进行判断,如果>0记为1,如果<0记为0。(举例[101011])

第四步得出的就是这个文档的SimHash。

这样我们就能将两个不同长度的文档转换为同样长度的SimHash值,so,我们现在可以计算第一个文档的值和第二个文档的汉明距离(一般<3就是相似度高的)。SimHash本质上是局部敏感性的hash(如果是两个相似的句子,那么只会有部分不同),和md5之类的不一样。正因为它的局部敏感性,所以我们可以使用海明距离来衡量SimHash值的相似度。如果想要小数形式的可以这么做:1 - 汉明距离 / 最长关键词数组长度。

5、Jaccard相似性系数

Jaccard 系数,又叫Jaccard相似性系数,用来比较样本集中的相似性和分散性的一个概率。Jaccard系数等于样本集交集与样本集合集的比值,即J = |A∩B| ÷ |A∪B|。

说白了就是交集除以并集,两个文档的共同都有的词除以两个文档所有的词。

(七)文本摘要提取

随着近几年文本信息的爆发式增长,人们每天能接触到海量的文本信息,如新闻、博客、聊天、报告、论文、微博等。从大量文本信息中提取重要的内容,已成为我们的一个迫切需求,而自动文本摘要(automatic text summarization)则提供了一个高效的解决方案,是目前NLP的热门研究方向之一。

摘要是“一段从一份或多份文本中提取出来的文字,它包含了原文本中的重要信息,其长度不超过或远少于原文本的一半”。自动文本摘要旨在通过机器自动输出简洁、流畅、保留关键信息的摘要。

自动文本摘要有非常多的应用场景,如自动报告生成、新闻标题生成、搜索结果预览等。此外,自动文本摘要也可以为下游任务提供支持。

尽管对自动文本摘要有庞大的需求,这个领域的发展却比较缓慢。对计算机而言,生成摘要是一件很有挑战性的任务。从一份或多份文本生成一份合格摘要,要求计算机在阅读原文本后理解其内容,并根据轻重缓急对内容进行取舍,裁剪和拼接内容,最后生成流畅的短文本。因此,自动文本摘要需要依靠自然语言处理/理解的相关理论,是近几年来的重要研究方向之一。

自动文本摘要通常可分为两类,分别是抽取式(extractive)和生成式(abstractive)。抽取式摘要判断原文本中重要的句子,抽取这些句子成为一篇摘要。

而生成式方法则应用先进的自然语言处理的算法,通过转述、同义替换、句子缩写等技术,生成更凝练简洁的摘要。比起抽取式,生成式更接近人进行摘要的过程。历史上,抽取式的效果通常优于生成式。伴随深度神经网络的兴起和研究,基于神经网络的生成式文本摘要得到快速发展,并取得了不错的成绩。

生成式文本摘要以一种更接近于人的方式生成摘要,这就要求生成式模型有更强的表征、理解、生成文本的能力。传统方法很难实现这些能力,而近几年来快速发展的深度神经网络因其强大的表征(representation)能力,提供了更多的可能性,在图像分类、机器翻译等领域不断推进机器智能的极限。借助深度神经网络,生成式自动文本摘要也有了令人瞩目的发展,不少生成式神经网络模型(neural-network-based abstractive summarization model)在DUC-2004测试集上已经超越了最好的抽取式模型。

生成式神经网络模型的基本结构主要由编码器(encoder)和解码器(decoder)组成,编码和解码都由神经网络实现。

巴别塔-自然语言处理概述

编码器负责将输入的原文本编码成一个向量(context),该向量是原文本的一个表征,包含了文本背景。而解码器负责从这个向量提取重要信息、加工剪辑,生成文本摘要。这套架构被称作Sequence-to-Sequence(以下简称Seq2Seq),被广泛应用于存在输入序列和输出序列的场景,比如机器翻译(一种语言序列到另一种语言序列)、image captioning(图片像素序列到语言序列)、对话机器人(如问题到回答)等。

Seq2Seq架构中的编码器和解码器通常由递归神经网络(RNN)或卷积神经网络(CNN)实现。

基于递归神经网络的模型

RNN被称为递归神经网络,是因为它的输出不仅依赖于输入,还依赖上一时刻输出。

巴别塔-自然语言处理概述

如上图所示,t时刻的输出h不仅依赖t时刻的输入x,还依赖t-1时刻的输出,而t-1的输出又依赖t-1的输入和t-2输出,如此递归,时序上的依赖使RNN在理论上能在某时刻输出时,考虑到所有过去时刻的输入信息,特别适合时序数据,如文本、语音、金融数据等。因此,基于RNN实现Seq2Seq架构处理文本任务是一个自然的想法。

典型的基于RNN的Seq2Seq架构如下图所示:

巴别塔-自然语言处理概述

图中展示的是一个用于自动回复邮件的模型,它的编码器和解码器分别由四层RNN的变种LSTM[5]组成。图中的向量thought vector编码了输入文本信息(Are you freetomorrow?),解码器获得这个向量依次解码生成目标文本(Yes, what's up?)。上述模型也可以自然地用于自动文本摘要任务,这时的输入为原文本(如新闻),输出为摘要(如新闻标题)。

目前最好的基于RNN的Seq2Seq生成式文本摘要模型之一来自Salesforce,在基本的模型架构上,使用了注意力机制(attention mechanism)和强化学习(reinforcementlearning)。

基于卷积神经网络的模型

Seq2Seq同样也可以通过CNN实现。不同于递归神经网络可以直观地应用到时序数据,CNN最初只被用于图像任务。

巴别塔-自然语言处理概述

CNN通过卷积核(上图的A和B)从图像中提取特征(features),间隔地对特征作用max pooling,得到不同阶层的、由简单到复杂的特征,如线、面、复杂图形模式等,如下图所示。

巴别塔-自然语言处理概述

CNN的优势是能提取出hierarchical的特征,并且能并行高效地进行卷积操作,那么是否能将CNN应用到文本任务中呢?原生的字符串文本并不能提供这种可能性,然而,一旦将文本表现成分布式向量(distributed representation/word embedding),我们就可以用一个实数矩阵/向量表示一句话/一个词。这样的分布式向量使我们能够在文本任务中应用CNN。

如上图所示,原文本(waitfor the video and do n't rent it)由一个实数矩阵表示,这个矩阵可以类比成一张图像的像素矩阵,CNN可以像“阅读”图像一样“阅读”文本,学习并提取特征。虽然CNN提取的文本特征并不像图像特征有显然的可解释性并能够被可视化,CNN抽取的文本特征可以类比自然语言处理中的分析树(syntactic parsingtree),代表一句话的语法层级结构。

基于卷积神经网络的自动文本摘要模型中最具代表性的是由Facebook提出的ConvS2S模型,它的编码器和解码器都由CNN实现,同时也加入了注意力机制,下文将详细介绍。

当然,我们不仅可以用同一种神经网络实现编码器和解码器,也可以用不同的网络,如编码器基于CNN,解码器基于RNN。

尽管如此,评估一篇摘要的质量是一件比较困难的任务。对于一篇摘要而言,很难说有标准答案。不同于很多拥有客观评判标准的任务,摘要的评判一定程度上依赖主观判断。即使在摘要任务中,有关于语法正确性、语言流畅性、关键信息完整度等标准,摘要的评价还是如同”一千个人眼里有一千个哈姆雷特“一样,每个人对摘要的优劣都有自己的准绳。

自上世纪九十年代末开始,一些会议或组织开始致力于制定摘要评价的标准,他们也会参与评价一些自动文本摘要。比较著名的会议或组织包括SUMMAC,DUC(DocumentUnderstanding Conference),TAC(TextAnalysis Conference)等。其中DUC的摘要任务被广泛研究,大多数abstractive摘要模型在DUC-2004数据集上进行测试。

目前,评估自动文本摘要质量主要有两种方法:人工评价方法和自动评价方法。这两类评价方法都需要完成以下三点:决定原始文本最重要的、需要保留的部分;在自动文本摘要中识别出1中的部分;基于语法和连贯性(coherence)评价摘要的可读性(readability)。

人工评价方法:评估一篇摘要的好坏,最简单的方法就是邀请若干专家根据标准进行人工评定。这种方法比较接近人的阅读感受,但是耗时耗力,无法用于对大规模自动文本摘要数据的评价,和自动文本摘要的应用场景并不符合。因此,文本摘要研究团队积极地研究自动评价方法。

自动评价方法:为了更高效地评估自动文本摘要,可以选定一个或若干指标(metrics),基于这些指标比较生成的摘要和参考摘要(人工撰写,被认为是正确的摘要)进行自动评价。目前最常用、也最受到认可的指标是ROUGE(Recall-Oriented Understudy for GistingEvaluation)。ROUGE是Lin提出的一个指标集合,包括一些衍生的指标,最常用的有ROUGE-n,ROUGE-L,ROUGE-SU:

ROUGE-n:该指标旨在通过比较生成的摘要和参考摘要的n-grams(连续的n个词)评价摘要的质量。常用的有ROUGE-1,ROUGE-2,ROUGE-3。

ROUGE-L:不同于ROUGE-n,该指标基于最长公共子序列(LCS)评价摘要。如果生成的摘要和参考摘要的LCS越长,那么认为生成的摘要质量越高。该指标的不足之处在于,它要求n-grams一定是连续的。

ROUGE-SU:该指标综合考虑uni-grams(n = 1)和bi-grams(n = 2),允许bi-grams的第一个字和第二个字之间插入其他词,因此比ROUGE-L更灵活。

作为自动评价指标,ROUGE和人工评定的相关度较高,在自动评价摘要中能给出有效的参考。但另一方面,从以上对ROUGE指标的描述可以看出,ROUGE基于字的对应而非语义的对应,生成的摘要在字词上与参考摘要越接近,那么它的ROUGE值将越高。但是,如果字词有区别,即使语义上类似,得到的ROUGE值就会变低。换句话说,如果一篇生成的摘要恰好是在参考摘要的基础上进行同义词替换,改写成字词完全不同的摘要,虽然这仍是一篇质量较高的摘要,但ROUGE值会呈现相反的结论。从这个极端但可能发生的例子可以看出,自动评价方法所需的指标仍然存在一些不足。目前,为了避免上述情况的发生,在evaluation时,通常会使用几篇摘要作为参考和基准,这有效地增加了ROUGE的可信度,也考虑到了摘要的不唯一性。对自动评价摘要方法的研究和探索也是目前自动文本摘要领域一个热门的研究方向。

非商业用途,资料均收集整理自知乎答案。


以上是关于巴别塔-自然语言处理概述的主要内容,如果未能解决你的问题,请参考以下文章

AI产品经理必须了解自然语言处理基础知识

几种编程语言的优缺点

编程语言年度观赏大戏,来看看内部撕X,你站谁?

编程语言年度观赏大戏,来看看内部撕X,你站谁?

华为 HarmonyOS 的野心比你想象中更大

HarmonyOS 并不想替代 Android,它的野心比你想象中更大