自然语言处理(NLP)语义分析
文章目录第一部分:文本分类一、文本预处理(解决特征空间高维性、语义相关性和特征分布稀疏)二、文本特征提取三、分类模型第二部分:情感分析一、概述二、基于情感词典的情感分类方法三、基于机器学习的情感分类方法第三部分:意图识别一、概述二、意图识别的基本方法三、意图识别的难点转载来源:https://blog.csdn.net/weixin_41657760/article/details/93163519第一部分:文本分类训练文本分类器过程见下图:文本分类问题:给定文档p(可能含有标题t),将文档分类为n个类别中的一个或多个文本分类应用:常见的有垃圾邮件识别,情感分析文本分类方向:主要有二分类,多分类,多标签分类文本分类方法:传统机器学习方法(贝叶斯,svm等),深度学习方法(fastText,TextCNN等)文本分类的处理大致分为文本预处理、文本特征提取、分类模型构建等。和英文文本处理分类相比,中文文本的预处理是关键技术。
一、文本预处理(解决特征空间高维性、语义相关性和特征分布稀疏)1、中文分词技术为什么分词处理?因为研究表明特征粒度为词粒度远远好于字粒度,其大部分分类算法不考虑词序信息,基于字粒度的损失了过多的n-gram信息。
中文分词主要分为两类方法:基于词典的中文分词和基于统计的中文分词。
基于词典的中文分词核心是首先建立统一的词典表,当需要对一个句子进行分词时,首先将句子拆分成多个部分,将每一个部分与字典一一对应,如果该词语在词典中,分词成功,否则继续拆分匹配直到成功。所以字典,切分规则和匹配顺序是核心。基于统计的中文分词方法统计学认为分词是一个概率最大化问题,即拆分句子,基于语料库,统计相邻的字组成的词语出现的概率,相邻的词出现的次数多,就出现的概率大,按照概率值进行分词,所以一个完整的语料库很重要。基于理解的分词方法基于理解的分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。2、去除停用词建立停用词字典,停用词主要包括一些副词、形容词及其一些连接词。通过维护一个停用词表,实际上是一个特征提取的过程,本质上是特征选择的一部分。
二、文本特征提取1、词袋模型
思想:建立一个词典库,该词典库包含训练语料库的所有词语,每个词语对应一个唯一识别的编号,利用one-hot文本表示。文档的词向量维度与单词向量的维度相同,每个位置的值是对应位置词语在文档中出现的次数,即词袋模型(BOW))
问题:
(1)容易引起维度灾难问题,语料库太大,字典的大小为每个词的维度,高维度导致计算困难,每个文档包含的词语数少于词典的总词语数,导致文档稀疏。(2)仅仅考虑词语出现的次数,没有考虑句子词语之间的顺序信息,即语义信息未考虑2、TF-IDF文本特征提取
利用TF和IDF两个参数来表示词语在文本中的重要程度。
TF是词频:指的是一个词语在一个文档中出现的频率,一般情况下,每一个文档中出现的词语的次数越多词语的重要性更大,例如BOW模型一样用出现次数来表示特征值,即出现文档中的词语次数越多,其权重就越大,问题就是在长文档中的词语次数普遍比短文档中的次数多,导致特征值偏向差异情况。
TF体现的是词语在文档内部的重要性。
IDF是体现词语在文档间的重要性
即如果某个词语出现在极少数的文档中,说明该词语对于文档的区别性强,对应的特征值高,IDF值高,IDFi=log(|D|/Ni),D指的是文档总数,Ni指的是出现词语i的文档个数,很明显Ni越小,IDF的值越大。最终TF-IDF的特征值的表达式为:TF-IDF(i,j)=TFij*IDFi
3、基于词向量的特征提取模型
想基于大量的文本语料库,通过类似神经网络模型训练,将每个词语映射成一个定维度的向量,维度在几十到化百维之间,每个向量就代表着这个词语,词语的语义和语法相似性和通过向量之间的相似度来判断。
常用的word2vec主要是CBOW和skip-gram两种模型,由于这两个模型实际上就是一个三层的深度神经网络,其实NNLM的升级,去掉了隐藏层,由输入层、投影层、输出层三层构成,简化了模型和提升了模型的训练速度,其在时间效率上、语法语义表达上效果明显都变好。word2vec通过训练大量的语料最终用定维度的向量来表示每个词语,词语之间语义和语法相似度都可以通过向量的相似度来表示。
三、分类模型1、传统机器学习方法:传统机器学习算法中能用来分类的模型都可以用,常见的有:NB模型,随机森林模型(RF),SVM分类模型,KNN分类模型模型。
2、深度学习文本分类模型
fastText模型原理:句子中所有的词向量进行平均(某种意义上可以理解为只有一个avgpooling特殊CNN),然后直接连接一个softmax层进行分类。
TextCNN:利用CNN来提取句子中类似n-gram的关键信息
模型结构[4]:改进:fastText中的网络结果是完全没有考虑词序信息的,而TextCNN提取句子中类似n-gram的关键信息。
TextRNN
模型:Bi-directionalRNN(实际使用的是双向LSTM)从某种意义上可以理解为可以捕获变长且双向的的“n-gram”信息。改进:CNN有个最大问题是固定filter_size的视野,一方面无法建模更长的序列信息,另一方面filter_size的超参调节也很繁琐。
TextRNN+Attention
模型结构:改进:注意力(Attention)机制是自然语言处理领域一个常用的建模长时间记忆机制,能够很直观的给出每个词对结果的贡献,基本成了Seq2Seq模型的标配了。实际上文本分类从某种意义上也可以理解为一种特殊的Seq2Seq,所以考虑把Attention机制引入近来。
TextRCNN(TextRNN+CNN)
模型结构:过程:利用前向和后向RNN得到每个词的前向和后向上下文的表示:词的表示变成词向量和前向后向上下文向量连接起来的形式:再接跟TextCNN相同卷积层,pooling层即可,唯一不同的是卷积层filter_size=1就可以了,不再需要更大filter_size获得更大视野。
第二部分:情感分析一、概述情感分析是自然语言处理中常见的场景,比如淘宝商品评价,饿了么外卖评价等,对于指导产品更新迭代具有关键性作用。通过情感分析,可以挖掘产品在各个维度的优劣,从而明确如何改进产品。比如对外卖评价,可以分析菜品口味、送达时间、送餐态度、菜品丰富度等多个维度的用户情感指数,从而从各个维度上改进外卖服务。
情感分析可以采用基于情感词典的传统方法,也可以采用基于机器学习的方法。
二、基于情感词典的情感分类方法1、基于词典的情感分类步骤
基于情感词典的方法,先对文本进行分词和停用词处理等预处理,再利用先构建好的情感词典,对文本进行字符串匹配,从而挖掘正面和负面信息。如图:2、情感词典情感词典包含正面词语词典、负面词语词典、否定词语词典、程度副词词典等四部分。一般词典包含两部分,词语和权重。情感词典在整个情感分析中至关重要,所幸现在有很多开源的情感词典,如BosonNLP情感词典,它是基于微博、新闻、论坛等数据来源构建的情感词典,以及知网情感词典等。当然也可以通过语料来自己训练情感词典。
3、情感词典文本匹配算法基于词典的文本匹配算法相对简单。逐个遍历分词后的语句中的词语,如果词语命中词典,则进行相应权重的处理。正面词权重为加法,负面词权重为减法,否定词权重取相反数,程度副词权重则和它修饰的词语权重相乘。如图:利用最终输出的权重值,就可以区分是正面、负面还是中性情感了。4、缺点基于词典的情感分类,简单易行,而且通用性也能够得到保障。但仍然有很多不足:
精度不高,语言是一个高度复杂的东西,采用简单的线性叠加显然会造成很大的精度损失。词语权重同样不是一成不变的,而且也难以做到准确。新词发现,对于新的情感词,比如给力,牛逼等等,词典不一定能够覆盖。词典构建难,基于词典的情感分类,核心在于情感词典。而情感词典的构建需要有较强的背景知识,需要对语言有较深刻的理解,在分析外语方面会有很大限制。三、基于机器学习的情感分类方法即为分类问题,文本分类中的各方法均可采用。
第三部分:意图识别一、概述意图识别是通过分类的办法将句子或者我们常说的query分到相应的意图种类。
举一个简单的例子,我想听周杰伦的歌,这个query的意图便是属于音乐意图,我想听郭德纲的相声便是属于电台意图。做好了意图识别以后对于很多nlp的应用都有很重要的提升,比如在搜索引擎领域使用意图识别来获取与用户输入的query最相关的信息。举个例子,用户在查询"生化危机"时,我们知道"生化危机"既有游戏还有电影,歌曲等等,如果我们通过意图识别发现该用户是想玩"生化危机"的游戏时,那我们直接将游戏的查询结果返回给用户,就会节省用户的搜索点击次数,缩短搜索时间,大幅提高用户的体验。
再举一个目前最火热的聊天机器人来说明一下意图识别的重要性。目前各式各样的聊天机器人,智能客服,智能音箱所能处理的问题种类都是有限制的。比如某聊天机器人目前只有30个技能,那么用户向聊天机器人发出一个指令,聊天机器人首先得根据意图识别将用户的query分到某一个或者某几个技能上去,然后再进行后续的处理。做好了意图识别以后,那种类似于电影场景里面人机交互就有了实现的可能,用户向机器发来的每一个query,机器都能准确的理解用户的意图,然后准确的给予回复。人与机器连续,多轮自然的对话就可以借此实现了。
二、意图识别的基本方法1、基于词典以及模版的规则方法:不同的意图会有的不同的领域词典,比如书名,歌曲名,商品名等等。当一个用户的意图来了以后我们根据意图和词典的匹配程度或者重合程度来进行判断,最简单一个规则是哪个domain的词典重合程度高,就将该query判别给这个领域。
2、基于查询点击日志:如果是搜索引擎等类型业务场景,那么我们可以通过点击日志得到用户的意图。
3、基于分类模型来对用户的意图进行判别:因为意图识别本身也是一个分类问题,其实方法和分类模型的方法大同小异。
三、意图识别的难点意图识别工作最大的难点其实是在于标注数据的获取。目前标注数据的获取主要来自两方面,一方面是专门的数据标注团队对数据进行标注,一方面是通过半监督的方式自动生成标注数据。
自然语言处理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)——词法分析
在这一部分中,我们介绍了语义分析的基本知识,包括格文法以及语义角色标注的相关内容。在下一部分中,我们将会介绍篇章分析相关的内容。
如果本文中某些表述或理解有误,欢迎各位大神批评指正。
谢谢!