【简单理解】自然语言处理
【简单理解】自然语言处理-平滑方法(Smoothing)简单介绍平滑策略平滑策略的引入,主要使为了解决语言模型计算过程中出现的零概率问题。零概率问题又会对语言模型中N-gram模型的Perplexity评估带来困难。
零概率问题,就是在计算实例的概率时,如果某个量x,在观察样本库(训练集)中没有出现过,那么该量概率为0,进而会导致整个实例的概率结果是0。
举例:在文本分类的问题中,在计算一句话的概率时,的当一个词语没有在训练样本中出现,该词语的概率为0,使用连乘计算文本出现概率时也为0。这是不合理的,不能因为一个事件没有观察到就武断的认为该事件的概率是0。
主流平滑方法AdditivesmoothingGood-TuringestimateJelinek-Mercersmoothing(interpolation)AdditivesmoothingAdd-onesmoothing也叫拉普拉斯平滑,下面以bigrammodel为例给出加1平滑的模型。MLEestimate:
Add-1estimate:
加1平滑通常情况下是一种不算很好的算法,与其他平滑方法相比显得非常差,然而我们可以把加1平滑用在其他任务中,如文本分类,或者非零计数没那么多的情况下。
Additivesmoothing对加1平滑的改进就是把1改成 δ,且 0
自然语言处理之数据平滑方法
在自然语言处理中,经常要计算单词序列(句子)出现的概率估计。但是,算法训练的时候,预料库中不可能包含所有可能出现的序列,因此为了防止对训练样本中为出现的新序列概率估计值为零,人们发明了不少可以改善估计新序列出现的概率算法,即数据的平滑。最常见的数据平滑算法包括如下几种:
Add-one(Laplace)smoothing
Add-ksmoothing
Backoff回退法
Interpolation插值法
Absolutediscounting
Kneser-Neysmoothing
ModifiedKneser-neysmoothing
这几个方法实际上可以简单的理解为三种不同的方法:第一种类型为政府给大家每人一笔或者几笔钱(如1和2),第二种为找父母要(如3和4),最后一种就是劫富济贫(如5-7)。下面依次简单介绍上面的方法,具体详细的介绍,大家可以参阅相应的论文和书籍。
数据预处理在介绍上面几种平滑的方法之前,这里先给出一个简单的的数据预处理的方法,特别是对于OOV(需要训练的词不在词袋里面)的情况特别有效,而且如果训练的时候,如果有几十万的词汇,一般不会对这几十万的词汇进行全部训练,而是需要预先做下面的处理后再进行数据的平滑和训练。
假设训练数据集中出现了|N|个不同的词汇,那么可以根据词频对这些词汇进行排序,可以选择词频最高的M个词汇作为我们的词汇集合,这样在训练和测试数据集中,将不属于V的词汇都替换成特殊的词汇UNK,这样可以大大减少计算量,也可以提高计算的精度。
Add-one(Laplace)smoothingAdd-one是最简单、最直观的一种平滑算法,既然希望没有出现过的N-gram的概率不再是0,那就直接规定在训练时任何一个N-gram在训练预料至少出现一次(即规定没有出现的,在语料中也出现一次),因此:Countnew(n-gram)=countold(n-gram)+1;
于是对于n-gram的模型而言,假设V是所有可能的不同的N-gram的类型个数,那么根据贝叶斯公式有
当然这里的n-gram的可以相应的改成uingram和bigram表达式,并不影响。其中C(x)为x在训练中出现的次数,wi为给定的训练数据中第i个单词。
这样一来,训练语料库中出现的n-gram的概率不再为0,而是一个大于0的较小的概率值,Add-one平滑算法确实解决了我们的问题,但是显然它也并不完美,由于训练语料中未出现的n-gram数量太多,平滑后,所有未出现的占据了整个概率分布的一个很大的比例,因此,在自然语言处理中,Add-one给语料库中没有出现的n-gram分配了太多的概率空间。此外所有没有出现的概率相等是不是合理,这也是需要考虑的。
Add-ksmoothing由Add-one衍生出来的另一种算法就是Add-k,既然我们认为加1有点过了,那么我们可以选择一个小于1的正数k,概率计算公式就可以变成如下表达式:
它的效果通常会比Add-one好,但是依旧没有办法解决问题,至少在实践中,k必须认为的给定,而这个值到底多少该取多少都没有办法确定。
Backoff回退法
回退模型,思路实际上是:如果你自己有钱,那么就自己出钱,如果你自己没有钱,那么就你爸爸出,如果你爸爸没有钱,就你爷爷出,举一个例子,当使用Trigram的时候,如果Count(trigram)满足条件就使用,否则使用Bigram,再不然就使用Unigram.
它也被称为:Katzsmoothing,具体的可以去查看相应的书籍。
它的表达式为:
其中d,a和k分别为参数。k一般选择为0,但是也可以选其它的值。
Interpolation插值法插值法和回退法的思想非常相似,设想对于一个trigram的模型,我们要统计语料库中“”“Ilikechinesefood”出现的次数,结果发现它没有出现,则计数为0,在回退策略中们将会试着用低阶的gram来进行替代,也就是用“likechinesefood”出现的次数来替代。在使用插值的时候,我们把不同阶层的n-gram的模型线性叠加组合起来之后再使用,简单的如trigram的模型,按照如下的方式进行叠加:
参数可以凭借经验进行设定,也可以通过特定的算法来进行确定,比如EM算法。对于数据一般可以分为:traningset,developmentset,testingset.那么P的概率使用trainingset进行训练得出,lamda参数使用developmentset得到。
Absolutediscounting插值法使用的参数实际上没有特定的选择,如果将lamda参数根据上下文进行选择的话就会演变成Absolutediscounting。对于这个算法的基本想法是,有钱的,每个人交固定的税D,建立一个基金,没有钱的根据自己的爸爸有多少钱分这个基金。比如对于bigram的模型来说,有如下公式。
D为参数,可以通过测试优化设定。
Kneser-Neysmoothing这种算法是目前一种标准的而且是非常先进的平滑算法,它其实相当于前面讲过的几种算法的综合。它的思想实际上是:有钱的人,每个人交一个固定的税D,大家一起建立一个基金,没有钱的呢,根据自己的的爸爸的“交际的广泛”的程度来分了这个基金。这里交际的广泛实际上是指它爸爸会有多少种不同的类型,类型越多,这说明越好。其定义式为:
其中max(c(X)-D,0)的意思是要保证最后的计数在减去一个D后不会变成一个负数,D一般大于0小于1。这个公式递归的进行,直到对于Unigram的时候停止。而lamda是一个正则化的常量,用于分配之前的概率值(也就是从高频词汇中减去的准备分配给哪些未出现的低频词的概率值(分基金池里面的基金))。其表达是为:
PKN是在wi固定的情况下,unigram和bigram数目的比值,这里需要注意的是PKN是一个分布,它是一个非负的值,求和的话为1。
ModifiedKneser-neysmoothing这一种方法是上一种方法的改进版,而且也是现在最优的方法。上一个方法,每一个有钱的人都交一个固定的锐,这个必然会出现问题,就像国家收税一样,你有100万和你有1个亿交税的量肯定不一样这样才是比较合理的,因此将上一种方法改进就是:有钱的每个人根据自己的收入不同交不同的税D,建立一个基金,没有钱的,根据自己的爸爸交际的广泛程度来分配基金。
这里D根据c来设定不同的值,比如c为unigram,则使用D1,c位bigram,则使用D2,如果是大于等于3阶的使用D3.
转自:微信公众号:自然语言处理技术
参考书籍:
[1]Speechandlanguageprocessing,DanielJurafsky,etla.
[2]语音识别实践,俞栋等人。
自然语言处理简介及主要研究方向
百度词条:自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。
自然语言处理(NLP)是计算机科学,人工智能,语言学关注计算机和人类(自然)语言之间的相互作用的领域。
Naturallanguageprocessing(NLP)isafieldofcomputerscience,artificialintelligenceandcomputationallinguisticsconcernedwiththeinteractionsbetweencomputersandhuman(natural)languages,and,inparticular,concernedwithprogrammingcomputerstofruitfullyprocesslargenaturallanguagecorpora.Challengesinnaturallanguageprocessingfrequentlyinvolvenaturallanguageunderstanding(NLU),naturallanguagegeneration(frequentlyfromformal,machine-readablelogicalforms),connectinglanguageandmachineperception,dialogsystems,orsomecombinationthereof.
随着深度学习的发展,LSTM的应用取得的突破,极大地促进了NLP的发展。
自然语言处理的主要范畴有以下:
文本朗读(Texttospeech)/语音合成(Speechsynthesis) 语音识别(Speechrecognition) 中文自动分词(Chinesewordsegmentation) 词性标注(Part-of-speechtagging) 句法分析(Parsing) 自然语言生成(Naturallanguagegeneration) 文本分类(Textcategorization) 信息检索(Informationretrieval) 信息抽取(Informationextraction) 文字校对(Text-proofing) 问答系统(Questionanswering)给一句人类语言的问定,决定其答案。典型问题有特定答案(像是加拿大的首都叫什么?),但也考虑些开放式问句(像是人生的意义是是什么?)
机器翻译(Machinetranslation)将某种人类语言自动翻译至另一种语言
自动摘要(Automaticsummarization)产生一段文字的大意,通常用于提供已知领域的文章摘要,例如产生报纸上某篇文章之摘要
文字蕴涵(Textualentailment)自然语言处理目前研究的难点
单词的边界界定在口语中,词与词之间通常是连贯的,而界定字词边界通常使用的办法是取用能让给定的上下文最为通顺且在文法上无误的一种最佳组合。在书写上,汉语也没有词与词之间的边界。
词义的消歧许多字词不单只有一个意思,因而我们必须选出使句意最为通顺的解释。
句法的模糊性自然语言的文法通常是模棱两可的,针对一个句子通常可能会剖析(Parse)出多棵剖析树(ParseTree),而我们必须要仰赖语意及前后文的资讯才能在其中选择一棵最为适合的剖析树。
有瑕疵的或不规范的输入例如语音处理时遇到外国口音或地方口音,或者在文本的处理中处理拼写,语法或者光学字元识别(OCR)的错误。
语言行为与计划句子常常并不只是字面的意思;例如,“你能把盐递过来吗”,一个好的回答应当是动手把盐递过去;在大多数上下文环境中,“能”将是糟糕的回答,虽说回答“不”或者“太远了我拿不到”也是可以接受的。再者,如果一门课程去年没开设,对于提问“这门课程去年有多少学生没通过?”回答“去年没开这门课”要比回答“没人没通过”好。 当前自然语言处理研究的发展趋势:
第一,传统的基于句法-语义规则的理性主义方法受到质疑,随着语料库建设和语料库语言学的崛起,大规模真实文本的处理成为自然语言处理的主要战略目标。 第二,统计数学方法越来越受到重视,自然语言处理中越来越多地使用机器自动学习的方法来获取语言知识。 第三,浅层处理与深层处理并重,统计与规则方法并重,形成混合式的系统。 第四,自然语言处理中越来越重视词汇的作用,出现了强烈的“词汇主义”的倾向。词汇知识库的建造成为了普遍关注的问题。 第五,统计自然语言处理统计自然语言处理运用了推测学、机率、统计的方法来解决上述,尤其是针对容易高度模糊的长串句子,当套用实际文法进行分析产生出成千上万笔可能性时所引发之难题。处理这些高度模糊句子所采用消歧的方法通常运用到语料库以及马可夫模型(Markovmodels)。统计自然语言处理的技术主要由同样自人工智能下与学习行为相关的子领域:机器学习及资料采掘所演进而成。——转自维基百科。
自然语言处理NLP(10)——语义分析
在上一部分中,我们介绍了句法分析中的局部句法分析以及依存关系分析(自然语言处理NLP(9)——句法分析c:局部句法分析、依存关系分析),至此,繁复冗长的句法分析部分就结束了。在这一部分中,我们将要介绍NLP领域的一个重要问题:语义分析。语义分析分为两个部分:词汇级语义分析以及句子级语义分析。这也就是为什么在词法分析和句法分析之后,我们要介绍的是语义分析而不是篇章分析的原因。
【一】词汇级语义分析首先,我们来介绍词汇级语义分析。词汇级语义分析的内容主要分为两块:1.词义消歧2.词语相似度二者的字面意思都很好理解。其中,词义消歧是自然语言处理中的基本问题之一,在机器翻译、文本分类、信息检索、语音识别、语义网络构建等方面都具有重要意义;而词语语义相似度计算在信息检索、信息抽取、词义排歧、机器翻译、句法分析等处理中有很重要的作用。
词义消歧自然语言中一个词具有多种含义的现象非常普遍。如何自动获悉某个词的多种含义;或者已知某个词有多种含义,如何根据上下文确认其含义,是词义消歧研究的内容。在英语中,bank这个词可能表示银行,也可能表示河岸;而在汉语中,这样的例子就更可怕了,比如:于是,基于这样的现状,词义消歧的任务就是给定输入,根据词语的上下文对词语的意思进行判断,例如:给定输入:他善与外界打交道我们期望的输出是可以确定这句话中的“打”和上图中的义项(5)相同。
语义消歧的方法大概分为四类:1.基于背景知识的语义消歧2.监督的语义消歧方法3.半监督的学习方法4.无监督的学习方法其中,第一种方法是基于规则的方法(也称为词典方法),后三种都是机器学习方法。在这里我们主要介绍前两种方法。
基于背景知识的语义消歧基于背景知识的语义消歧方法基本思想是这样的:通过词典中词条本身的定义作为判断其语义的条件。举个例子,cone这个词在词典中有两个定义:一个是指“松树的球果”,另一个是指“用于盛放其他东西的锥形物,比如,盛放冰激凌的锥形薄饼”。如果在文本中,“树(tree)”或者“冰(ice)”与cone出现在相同的上下文中,那么,cone的语义就可以确定了,tree对应cone的语义1,ice对应cone的语义2。可以看出,这种方法完全是基于规则的。
监督的语义消歧方法监督学习的方法就是,数据的类别在学习之前已经知道。在语义消歧的问题上,每个词所有可能的义项都是已知的。有监督的语义消歧方法是通过一个已标注的语料库学习得到一个分类模型。常用的方法有:1.基于贝叶斯分类器的词义消歧方法2.基于最大熵的词义消歧方法3.基于互信息的消歧方法在这里我们只介绍第二种方法,对其他两种方法感兴趣的朋友们可以自行查阅相关资料。基于最大熵的词义消歧方法基本思路是这样的:每个词表达不同含意时其上下文(语境)往往不同,即不同的词义对应不同的上下文。因此,可以将词的上下文作为特征信息利用最大熵模型对词的语义进行分类。这个思路是不是很熟悉?因为在NLP领域,几乎所有的机器学习方法利用的都是上下文特征这一套东西。
大家一定还记得最大熵模型是个什么东西(不了解的朋友们可以参考博客:自然语言处理NLP(5)——序列标注b:条件随机场(CRF)、RNN+CRF),在最大熵模型中,最最重要的部分就是如何选取特征,特征的质量直接影响着模型的效果。在传统机器学习领域(非深度学习),特征选取往往是人们手工进行的。
在词义消歧中,最大熵模型的建模与训练如下图所示:由于最大熵模型在之前的博客中曾详细讨论过,在这里就不再赘述,有疑问的朋友可以私信,我们一同讨论。
训练过后,我们将新的句子输入模型中,模型会给出一个概率分布(其实最大熵模型的输出就是一个概率分布),我们选取其中概率最大的结果作为模型输出,整个过程如下图所示:
词语相似度词语相似度的意思大家很容易理解,在这里我们用一种复杂但是稍微正式的方式说明词语相似度的含义,就是:两个词语在不同的上下文中可以互相替换使用而不改变文本的句法语义结构的程度。在不同的上下文中可以互相替换且不改变文本句法语义结构的可能性越大,二者的相似度就越高,否则相似度就越低。相似度以一个数值表示,一般取值范围在[0,1]之间。一个词语与其本身的语义相似度为1;如果两个词语在任何上下文中都不可替换,那么其相似度为0。值得注意的是,相似度涉及到词语的词法、句法、语义甚至语用等方面的特点。其中,对词语相似度影响最大的应该是词的语义。词语距离是度量两个词语关系的另一个重要指标,用一个[0,∞)之间的实数表示。大家可以想象,词语距离和词语相似度之间一定是存在某种关系的:1.两个词语距离为0时,其相似度为1。即,一个词语与其本身的距离为0;2.两个词语距离为无穷大时,其相似度为0;3.两个词语的距离越大,其相似度越小(单调下降)。如果将词语相似度记为sim(w1,w2)sim(w_1,w_2)sim(w1,w2),而将词语距离记为dis(w1,w2)dis(w_1,w_2)dis(w1,w2),我们有:sim(w1,w2)=αdis(w1,w2)+αsim(w_1,w_2)=frac{alpha}{dis(w_1,w_2)+alpha}sim(w1,w2)=dis(w1,w2)+αα其中,αalphaα是一个可调节的参数,表示相似度为0.5时的词语距离值(上式简单移项带入值既可)。到这里,大家可能有个问题:为什么有了词语相似度了,还要多此一举定义词语距离呢?这是为了当直接计算词语的相似度比较困难时,可以先计算词语距离,再转换成词语的相似度。
然后我们再来介绍一个概念:词语相关性。词语相关性反映的是两个词语互相关联的程度,可以用这两个词语在同一个语境中共现的可能性来衡量。一开始看见整个概念的时候可能会有种“这和词语相似度不是差不多么”这样的感觉,其实不然。举个例子,“医生”和“疾病”这两个词之间的相似度很低,但是相关性很高(因为这两个词经常在同一语境中出现)。用一句高深的话来讲,词语相似性反映的是词语之间的聚合特点,而词语相关性反映的是词语之间的组合特点。词语相关性也以一个数值表示,一般取范围在[0,1]之间的实数。虽然相关性与相似性并不相同,但实际上,词语相关性和词语相似性有着密切的联系。如果两个词语非常相似,那么这两个词语与其他词语的相关性也会非常接近。反之,如果两个词语与其他词语的相关性特点很接近,那么这两个词一般相似程度也很高。
利用词典方法(规则法)计算词语语义相似度的方法很多,这里不再赘述,有兴趣的朋友们可以自行查阅相关资料。
提到语义相似度这个概念,相信大家很容易想到词向量这个概念(对词向量不了解的朋友们可以参考博客:自然语言处理NLP(3)——神经网络语言模型、词向量)。根据词向量的性质,语义相似的词其词向量空间距离更相近,训练出的词向量具有词义相近的词在向量空间聚簇的语言学特性。词向量的相关工作就太多了,部分模型还对词向量进行k-means聚类,聚类后再次训练,得到多原型神经网络语言模型,考虑一词多义的情况。有兴趣的朋友们可以自行查阅相关资料或者私信讨论,在这里就不再进行介绍。
【二】句子级语义分析句子级语义分析主要分为两个部分:浅层语义分析和深层语义分析,在这里我们主要介绍浅层语义分析。提到浅层语义分析,就离不开语义角色标注(SemanticRoleLabeling,SRL)这个概念。语义角色标注主要围绕着句子中的谓词来分析各成分与其之间的结构关系,并用语义角色来描述这些结构关系。那么问题来了,为什么要围绕谓词来分析句子呢?我们暂且把这个问题放下,先来介绍格文法,在这里我们会找到这个问题的答案。
格文法格文法是从语义的角度出发,即从句子的深层结构来研究句子的结构,着重探讨句法结构与语义之间关系的文法理论。
在分析句子的过程中,我们有一种很常见的方法是找出句子中的主语、宾语等语法关系。大家可以联想一下初高中的英语阅读题,特别是完形填空,就是类似的套路。然而,格文法认为,这些都只是句子表层结构上的概念。在语言的底层,所需要的不是这些表层的语法关系,而是用施事、受事、工具、受益等概念所表示的句法语义关系,这些句法语义关系经过各种变换之后才在表层结构中成为主语或宾语。在传统语法中,“格”是指某些曲折语中特有的用于表示词语间语法关系的名词和代词的形态变化,例如主格、宾格等。
然而在格文法中,格是深层格,是指句子中的体词(名词、代词等)和谓词(动词、形容词等)之间的及物性关系。如,动作和施事者的关系、动作和受事者的关系等,这些关系是语义的,是一切语言中普遍存在的。深层格由底层结构中名词与动词之间的句法语义关系来确定,不管表层句法结构如何变化,底层格语法不变;底层的“格”与任何具体语言中的表层结构上的语法概念,如主语,宾语等,没有对应关系。这个概念有些难懂,我们举个例子:其表层结构与深层语义是有区别的,具体如下:由这个例子我们可以看出,在格文法中,无论具体的句子的主语、宾语等等怎么改变,其深层语义是完全相同的。
在格文法中,不同“格”(上图中所提到的施事格、受事格等等)的概念、格文法的组成等内容十分丰富,在这里不一一进行介绍,有兴趣的朋友们可以自行查阅相关资料或者私信进行讨论~
利用格文法分析的结果可用格框架表示。一个格框架由一个主要概念和一组辅助概念组成,这些辅助概念以一种适当定义的方式与主要概念相联系。在实际应用中,主要概念一般是动词,辅助概念为施事格、方位格、工具格等语义深层格。这样描述可能有些抽象,具体而言,把格框架中的格映射到输入句子中的短语上,识别一句话所表达的含义,即要弄清楚“干了什么”、“谁干的”、“行为结果是什么”以及发生行为的时间、地点和所用工具等。下面我们举个利用格文法进行语义分析的例子:大家不要过于在意上图中的具体格式,其表示的含义很容易理解。
语义角色标注(SRL)基于格文法,提出了一种语义分析的方法——语义角色标注。正如句法分析需要基于词法分析的结果进行一样,语义角色标注需要依赖句法分析的结果进行。因此,语义角色标注方法分为如下三种:1.基于完全句法分析的语义角色标注2.基于局部句法分析的语义角色标注3.基于依存句法分析的语义角色标注刚好是句法分析的三种方法,对句法分析不熟悉的朋友们可以参考博客:自然语言处理NLP(7)——句法分析a:Chomsky(乔姆斯基)形式文法自然语言处理NLP(8)——句法分析b:完全句法分析自然语言处理NLP(9)——句法分析c:局部句法分析、依存关系分析但是无论那种方法,语义角色标注的过程都如下图所示:其中,论元识别既可以单独称为一个步骤,也可以与论元剪除或者论元标注合并。上图中,大家想一想就会发现,语义角色标注的核心就是对论元进行语义标签的分类(第二步分类),语义角色标注的不同方法,其实就是针对这个问题设计不同的更加高效的分类器。句法分析是语义角色标注的基础,在统计方法中后续步骤常常会构造的一些人工特征,这些特征往往也来自句法分析;在神经网络方法中可以用神经网络自动提取特征来实现分类(标注)任务——神经网络在NLP领域,一大重要的作用就是代替了人工构建特征。到了这里我们发现,其实语义角色标注任务和我们之前所介绍的分类标注任务可以用相同的套路来解决(例如最大熵模型、隐马尔科夫模型、条件随机场等等)。
在这里多说一句,其实对NLP介绍到这里,给定具体的任务并将其进行形式化之后,很多问题都可以利用之前提到过的方法和套路来解决。
下面,我们对上文提到的SRL方法进行介绍,主要介绍基于完全句法分析和依存句法分析的语义角色标注方法,针对依存方法,我们还将进一步介绍当下比较热门的神经网络方法。
基于完全句法分析的统计SRL方法举个例子,我们原始的输入句子是:“警察已到现场,正在详细调查事故原因”那么我们的任务如下:值得注意的是,我们SRL任务的输入是已经完成句法分析的句子(通常为句法树)。图中右侧的表格是标注的label。
我们再来回忆一下SRL的过程,这个过程很重要(下图中句法分析已经结束),我们接下来会一步步进行介绍:
候选论元剪除对于完全句法分析而言,论元剪除规则分为如下两步(基于不同的句法分析方法,论元剪除规则有所不同):1.将谓词作为当前节点,依次考察它的兄弟节点:如果一个兄弟节点和当前节点在句法结构上不是并列的(coordinated)关系,则将它作为候选项。如果该兄弟节点的句法标签是PP,在将它的所有子节点也都作为候选项。2.将当前节点的父节点设为当前节点,重复第1步的操作,直至当前节点是句法树的根节点。这样的描述有些晦涩,我们还是以上面的句子为例:于是,我们就有了谓词“调查”的候选论元集合:{警方、正在、详细、事故原因}
论元识别正如我们上面所提到的,该步骤可以与论元剪除合并,也可以与接下来的论元标注合并,当然,也可以单独作为一步。论元识别顾名思义,就是识别上一步得到的候选论元集合中的论元是不是真的是论元。所以,很明显,这是个二分类序列标注问题,方法在之前章节中也有过很多介绍(例如最大熵模型、CRF、HMM等等),这里就不再赘述。假设在这一步中,我们认为上面的集合中所有的元素都是论元(即,模型没有判断出负类)。
论元标注顾名思义,该步的任务就是将上面一步中所识别出(为正类)的论元进行标注,标注的label是之前所提到的绿色表格中的内容。很明显,这是个多分类序列标注问题,方法在之前章节中有过很多介绍(方法依然是最大熵、CRF、HMM等)。在这里,我们回忆一下,最重要的部分是什么?特征构建。在上一步中也是相同的,特征构建是序列标注任务中最重要的一环。值得注意的是这一步中的特征构建可以与上一步不同,而且往往不同(因为这是两个不同的分类器)。于是,我们得到了如下的结果:
后处理后处理一步就是将标注之后的论元进行处理或者加上一些更加丰富(简单易懂)的信息,这部分不是我们所讨论的重点,因此只稍微提两句。后处理部分的内容主要包括:1.每个词只能标为一种标签(包括NULL)2.一种角色(NULL除外)通常在句子中只出现一次,因此在角色标注序列中,应无重复角色出现。
经过了上述步骤,我们就可以通过训练得到SRL模型了,训练过程与其他任务类似,在这里就不进行介绍了。值得注意的是,我们得到的是两个模型:论元识别模型、论元标注模型。前者是二分类模型,后者是多分类模型。然后,我们来了一个新句子,其标注过程如下:
基于依存句法分析的统计SRL方法同样以“警察已到现场,正在详细调查事故原因”为例。由于句法分析方法发生了改变,所以与上述方法不同的是SRL的输入:可以看出,输入由完全句法树改变为了依存分析树。与完全句法分析SRL相同的是右边的表格(论元标注label)。大家想一下整个SRL过程就能够发现,除了第一步候选论元剪除之外,其他步骤都与上述方法中的对应步骤相同,所以我们在这部分中仅讨论这一步骤。
候选论元剪除该步骤同样分为两部:1.将谓词作为当前节点,将它所有的孩子都作为候选项。2.将当前节点设为它的父节点,重复第1步的操作,直到当前节点是依存句法树的根节点。过程如下:谓词“调查”的所有孩子{正在,详细,原因,警察}都加入到候选项中,这些孩子节点恰好是该谓词的所有论元。
基于依存句法分析的神经网络SRL方法介绍了以上两种SRL方法之后,我们需要着重注意的有两点:1.上述两种方法都是通过概率统计法进行SRL的方法(在我们之前章节中多次提到的那张图中既不是规则法,也不是神经网络法,而属于概率统计法)。(之前的两种方法属于左下角的概率统计方法)
2.我们知道,特征构建是标注问题的重中之重,然而在传统概率统计方法中,只能由人工构建特征,这就为模型的性能打上了一个大大的问号。因此,为了解决这个问题,我们在这一部分中介绍基于依存关系分析的神经网络SRL方法。
我们之前提到,神经网络法的主要目的是为了利用神经网络自动构建特征,那么我们很自然就可以想到,该种方法与概率统计法的主要区别就在于模型,神经网络模型架构如下:上图中,我们的输入是原始句子(图片正上方)以及依存关系树(图片右下角),经过了神经网络之后的输出为某词的标注结果。其中,输入的依存关系树部分主要是节点信息和边信息。值得注意的是,神经网络的具体架构可以自行设计,图片中利用的是双向LSTM架构。模型训练过程就不再赘述,有兴趣的朋友可以自行查阅相关资料或者私聊讨论~
评价指标如何评价一个语义角色标注模型的好坏呢?一般情况下,我们通常使用常见的P、R、F1值进行评测,对该评测指标不了解的朋友们可以参考博客:自然语言处理NLP(6)——词法分析
在这一部分中,我们介绍了语义分析的基本知识,包括格文法以及语义角色标注的相关内容。在下一部分中,我们将会介绍篇章分析相关的内容。
如果本文中某些表述或理解有误,欢迎各位大神批评指正。
谢谢!