具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实施本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
在本申请实施例中,针对电子商务文本的特点,可以将句子中的词区分为骨干词和非骨干词两种。其中,骨干词指的是所有的产品词、动词和交易意图词(例如产品标题中出现的出售或者转让等),而非骨干词指的是除了骨干词外的其他所有词,包括修饰词、标点符号、型号词、品牌词、机构词、地点词、时间日期词和数字词,等等。而在一般情况下,依存句法分析树中非骨干词离根节点的距离一般都比骨干词离根节点的距离远,并且骨干词之间的弧基本上占据了整棵依存句法分析树的骨架。
因此,在本申请实施例中,可以屏蔽目标语句中所有的标点符号,通过对句子中所有词进行人工标注、推导动作历史、特征抽取等一系列处理,利用最大熵分类算法训练出一个动作预测完整模型,用来预测句子的完整依存树。并且,屏蔽句子中所有的非骨干词,使用同样的方法对该句子剩下的骨干词进行处理,利用最大熵分类算法训练出一个动作预测骨干模型,用来预测句子的骨架依存树。针对待分析的句子转换而成的词序列,可以使用动作预测完整模型和动作预测骨干模型交织进行的方式进行依存分析,在使用动作预测骨干模型预测出骨架依存树的同时,同步并受限地使用动作预测完整模型预测出剩余部分。
具体的,为了方便本领域技术人员更理解本发明的实现,首先对训练动作预测骨干模型和动作预测完整模型的过程进行详细介绍。
参考图1所示,为训练动作预测骨干模型的流程图,训练动作预测骨干模型具体可以包括:
步骤101:提取样本语句中的骨干词序列。
针对给定的样本语句,首先将该样本语句中的骨干词提取出来,得到骨干词序列。
步骤102:获取针对所述骨干词序列进行依存句法树标注得到的骨干依存树。
接着针对步骤101得到的骨干词序列采用依存句法分析方法进行人工标注,得到样本语句的骨干依存树。其中,人工标注可以得出当前骨干节点的父节点编号,以及两者的依存关系,从而得到一个骨干词项Term序列。
步骤103:将获取到的骨干依存树转换成一系列的骨干动作序列。
在本步骤再将人工标注结果的骨干Term序列转换成一系列的骨干动作序列Actions。具体的,即是利用规则对人工标注好的骨干依存句法分析树,结合依存分析算法反向推导出基于转移的依存分析方法的分析过程和动作历史。
步骤104:针对所述骨干动作序列中的每个当前骨干动作,从所述当前骨干动作涉及的骨干目标词的上下文和所述当前骨干动作前所有骨干动作中抽取当前骨干特征。
针对骨干动作序列中的每个骨干动作,使用特征抽取方法从当前骨干动作涉及的骨干目标词的上下文和当前骨干动作前的所有骨干动作中抽取出当前骨干特征。其中,特征抽取方法,即是对历史中的每一个动作a,利用特征抽取算法从当前动作a、至当前动作为止的动作历史A中已知的动作、当前待处理的左侧节点L和右侧节点R、以及处于L和R附近的上下文中抽取特征。其中,所述骨干目标词的上下文为:所述骨干目标词本身及其前后的部分目标词以及所述部分目标词的属性信息。
步骤105:将当前骨干动作的动作内容确定为与所述当前骨干特征对应的当前骨干类。
在得到当前骨干特征后,把当前骨干动作的动作内容,即是画弧方向和弧类型(“SHIFT”看做特殊方向,弧类型为“NOT”)作为为当前骨干特征对应的当前骨干类。
步骤106:针对大量的样本语句,依据所述骨干动作序列中所有骨干动作的骨干特征和骨干类的映射,利用特定的机器学习算法训练得到动作预测骨干模型。
因为训练动作预测骨干模型需要大量的样本语句,所以针对大量的样本语句,都使用最大熵工具包分别训练得到骨干特征和骨干类(画弧方向和弧类型)的映射函数,即是动作预测骨干模型。具体在训练时可以使用gis迭代方法,迭代次数可以设置为80次。
参考图2所示,为训练动作预测完整模型的流程图,训练动作预测完整模型具体可以包括:
步骤201:获取针对样本语句的完整词序列进行依存句法树标注得到的完整依存树。
针对样本语句,对样本语句进行人工标注,得到完整依存树。其中,人工标注可以得出当前完整节点的父节点编号,以及两者的依存关系,从而得到一个完整词项Term序列。
步骤202:将获取到的完整依存树转换成一系列的完整动作序列。
在本步骤将人工标注结果的完整Term序列转换成一系列的完整动作序列Actions。具体的,即是利用规则对人工标注好的完整依存句法分析树,结合依存分析算法反向推导出基于转移的依存分析方法的分析过程和动作历史。
步骤203:针对所述完整动作序列中的每个当前完整动作,从所述当前完整动作涉及的完整目标词的上下文和所述当前完整动作前所有完整动作中抽取当前完整特征。
针对完整动作序列中的每个完整动作,使用特征抽取方法从当前完整动作涉及的完整目标词的上下文和当前完整动作前的所有完整动作中抽取出当前完整特征。其中,特征抽取方法,即是对历史中的每一个动作a,利用特征抽取算法从当前动作a、至当前动作为止的动作历史A中已知的动作、当前待处理的左侧节点L和右侧节点R、以及处于L和R附近的上下文中抽取特征。其中,所述完整目标词的上下文为:所述完整目标词前后的部分目标词以及所述部分目标词的属性信息。
步骤204:将当前完整动作的动作内容确定为与所述当前完整特征对应的当前完整类。
在得到当前完整特征后,把当前完整动作的动作内容,即是画弧方向和弧类型(“SHIFT”看做特殊方向,弧类型为“NOT”)作为为当前完整特征对应的当前完整类。
步骤205:针对大量的样本语句,依据所述完整动作序列中所有完整动作的完整特征和完整类的映射,利用特定的机器学习算法训练得到动作预测完整模型。
接着使用最大熵工具包分别训练得到完整特征和完整类(画弧方向和弧类型)的映射函数,即是动作预测完整模型。具体在训练时可以使用gis迭代方法,迭代次数也可以设置为80次。
在介绍完动作预测骨干模型和动作预测完整模型的训练过程之后,参考图3,示出了本申请一种目标语句的依存句法分析方法实施例的流程图,本实施例可以包括以下步骤:
步骤301:获取待分析的目标语句的目标词序列。
首先,获取待分析的目标语句,并将该目标语句转换成一系列的目标词序列。
步骤302:将所述目标词序列中的前两个目标词确定为当前目标词。
将该目标词序列的前两个目标词确定为当前待处理的当前目标词。
步骤303:判断所述当前目标词是否都是骨干词,如果都是,则进入步骤304;如果有一个不是或者两个都不是,则进入步骤305。
利用骨干词与非骨干词的划分方式,判断这两个当前目标词是否都属于骨干词,例如是产品词,或者交易意图词等。
步骤304:采用预置的动作预测骨干模型确定所述两个目标词之间的依存关系。
如果这两个当前目标词都是骨干词,则采用预先训练好的动作预测骨干模型确定这两个当前目标词之间的依存关系。具体的,可以参考该两个目标词的上下文和目标语句的骨干历史动作,结合动作预测骨干模型预测出两个目标词之间的依存关系。
可以理解的是,在本申请实施例中,确定两个目标词之间的依存关系即是模型预测过程,给定动作历史A、节点L和R以及它们的上下文,利用前述的特征抽取算法抽取特征,并利用最大熵分类器预测出对应的类。
步骤305:采用预置的动作预测完整模型确定所述两个目标词之间的依存关系。
如果两个当前目标词只有一个是骨干词,或者两个当前目标词都不是骨干词,则采用预置的动作预测完整模型来预测这两个目标词之间的依存关系。具体的,可以参考所述两个目标词的上下文和目标语句的完整历史动作,采用动作预测完整模型确定所述两个目标词之间的依存关系。
步骤306:参考目标词序列组成语句的顺序和确定的依存关系获取下两个待处理的目标词作为当前目标词,进入步骤303。
接着参考目标词序列组成语句的顺序以及确定的依存关系,来获取下两个待处理的目标词作为当前目标词,并执行步骤303的判断步骤,直至所有的目标词都已经分析完整,或者仅剩下一个目标词的时候,将其挂在根节点ROOT上,从而生成依存句法分析树。
可以理解的,在实际应用中,因为在步骤304或者305中预测出的动作有可能是不作任何处理,因此在实际应用中并不是仅仅按照目标词组成语句的顺序来处理目标词的,而是结合了之前确定目标词之间的依存关系时所采取的动作来确定下两个待处理的目标词。
为了方便本领域技术人员更清楚的了解本申请的实现过程,下面介绍一个具体实施例。
步骤A1:构造一个骨干模型动作历史列表H1,存放所有骨架依存树上的历史动作,初始为空,即H1={}。
步骤A2:构造一个完整模型动作历史列表H2,存放所有完整依存树上的历史动作,初始为空,即H2={}。
在对句子进行依存句法分析之前,先构造骨干模型动作历史列表和完整模型动作历史列表。
步骤A3:对目标语句的目标词序列进行编号。
本步骤针对待分析的句子转换成的词序列进行编号。范围为[0,N),其中,N为句子的总词数,对ROOT编号为-1。
步骤A4:构建一个栈S。
在本步骤中构建的栈S用来存放处理过的(弧的左侧)节点。初始时,栈中存放根节点,记为S={-1}。
步骤A5:构建一个队列Q。
在本步骤中构建的Q存放当前还没有处理的(弧的右侧)节点。初始时,队列中存放目标词序列的所有节点,Q={0,1,...,N-1}。
步骤A5:判断栈和队列是否都不空,如果是,则进入步骤A6,如果队列为空,则结束流程。
步骤A6:取出栈顶节点作为左节点L,以及取出队首节点作为右节点R。
步骤A7:判断右节点R是否为标点符号,如果是,则进入步骤A8,如果不是,则进入步骤A9。
步骤A8:标记右节点R的parent为-2,relate为WP,删除队首元素,进入步骤A5。
步骤A9:判断左节点L和右节点R是否都是骨干词,如果是,则进入步骤A10,如果仅L是骨干词,则进入步骤A11,如果仅R是骨干词,则进入步骤A12,如果L和R都不是骨干词,则进入步骤A13。
步骤A10:使用动作预测骨干模型、根据骨干动作历史A1、节点L和R以及它们的上下文从以下3种动作中决策出一个动作a,并进入步骤A14。
第一个动作为“LEFT_X”,表示画一条由R指向L的左弧,左弧类型“X”可以是{ATT,ADV,SBV}中的任意一种,并在栈中删除栈顶元素,标记L的parent为R,relate为左弧类型“X”的取值。第二个动作为“RIGHT_Y”,表示画一条由L指向R的右弧,右弧类型“Y”可以是{ATT,COO,VOB,HED,DC}中的任意一种,并在队列中删除队首元素,同时将栈顶元素从栈中删除的同时将其放入队首,标记R的parent为L,relate对应为右弧类型“Y”的取值。第三个动作为“SHIFT”,表示不画弧,暂时将右节点R压入栈中,同时在队列中删除队首元素。
步骤A11:使用动作预测完整模型、根据完整动作历史A2、节点L和R以及它们的上下文从以下2种动作中决策出一个动作a,并进入步骤A15。
第一种动作为“RIGHT_Y”,表示画一条由L指向R的右弧,“Y”为右弧类型,可以是{ATT,VOB,HED,DC}中的同时将其放入队首,标记R的parent为L,relate为右弧类型“Y”的取值。第二种动作为“SHIFT”,表示不画弧,暂时将右节点R压入栈中,同时在队列中删除队首元素。
步骤A12:使用动作预测完整模型、根据完整动作历史A2、节点L和R以及它们的上下文从以下2种动作中决策出一个动作a,并进入步骤A15。
第一种动作为“LEFT_X”,表示画一条由R指向L的左弧,“X”为左弧类型,可以是{ATT,ADV,SBV}中的任意一种,在栈中删除栈顶元素,标记L的parent为R,relate为左弧类型“X”的取值。第二种动作为“SHIFT”,表示不画弧,暂时将右节点R压入栈中,同时在队列中删除队首元素。
步骤A13:使用动作预测完整模型、根据完整动作历史A2、节点L和R以及它们的上下文从以下3种动作中决策出一个动作a,并进入步骤A15。
第一种动作为“LEFT_X”,画一条由R指向L的左弧,“X”为左弧类型,可以是“ATT”,在栈中删除栈顶元素,标记L的parent为R,relate为左弧类型“X”的取值。第二种动作为“RIGHT_Y”,表示画一条由L指向R的右弧,“Y”为右弧类型,可以是{ATT,COO,DC}之一,在队列中删除队首元素,将栈顶元素从栈中删除的同时放入队首,标记R的parent为L,relate为右弧类型“Y”的取值。第三种动作为“SHIFT”,不画弧,暂时将右节点R压入栈中,同时在队列中删除队首元素。
步骤A14:将采取的动作a加入到骨干动作历史列表A1,返回步骤A5。
步骤A15:将采取的动作a加入到完整动作历史列表A2,返回步骤A5。
当所有的节点的父节点和依存关系都已经分析出来了,则结束流程。
介绍完具体的实施例之后,接着返回图3,在步骤306之后,在不同的实施例中,还可以包括:
步骤307:依据所述目标语句的各个目标词之间的依存关系,提取所述目标语句的目标核心产品词。
在分析得到目标语句的各个目标词之间的依存关系之后,根据各个目标词之间的依存关系可以提取出目标语句的目标核心产品词,进而可以将该目标核心产品词作为该目标语句对应的搜索关键词。
步骤308:响应于用户输入的关键词,搜索其包含的核心产品词与所述关键词匹配的目标语句。
后续如果用户输入了某个关键词希望搜索相关产品,那么核心产品词与该用户输入的关键词相匹配的那些产品标题就会被搜索到。
步骤309:将所述匹配的目标语句所对应的产品信息发送至客户端进行展现。
进而服务器可以将匹配的目标语句对应的产品信息发送至客户端展现给用户。
可见,在本申请实施例中,基于将词语区分为骨干词和非骨干词的方式,从而可以在针对两个待分析的目标词都是骨干词的情况下,采用动作预测骨干模型进行预测。因为骨干词只是目标语句中相对较少的一部分词,这样将句子骨架结构的选择缩小到一个更小的骨干词集合,避免了不必要且容易出错的非骨干节点处理,通过减少了关键节点的个数来缓解“错误级联”现象的影响,因此就可以大大降低错误级联给准确率带来的影响,从而提升了依存句法分析结果的准确率。进一步的,得到句子的目标核心产品词的准确率也相应地得到了提高,从而可以在用户搜索相关产品的时候,能为用户提供更为匹配的产品信息,从而也提升了用户的产品搜索体验。
为了方便本领域技术人员对本申请在实际应用中的实现过程的理解,下面介绍一个具体的例子。
以电子商务场景下的文本“迷你磁力搅拌器,配置1个磁力搅拌子”为目标语句,本申请中的依存句法分析的过程如下:
步骤B1:经过对句子进行分词得到初始词序列,插入虚拟节点ROOT,对每个词编号,构建栈和队列。
在本步骤中构建的栈顶要对应当前要处理的左词,队列的首部即是队首要对应当前要处理的右词。参考图4所示,为本步骤中目标语句的初始状态示意图。
步骤B2:执行第1个动作:由于在当前情况下,仅左词“ROOT”是骨干词,使用动作预测完整模型预测出当前应该采取的动作为:<Action|-1(#ROOT#)---SHIFT---0(迷你)>,从而将队首的“迷你”移入栈顶。
参考图5所示,为本步骤中目标语句执行完第1个动作的状态示意图。
步骤B3:执行第2个动作:在当前情况下,左右词都不是骨干词,使用动作预测完整模型预测出当前应该采取的动作为<Action|0(迷你)---SHIFT---1(磁力)>,从而将队首的“磁力”移入栈顶。
参考图6所示,为本步骤中目标语句执行完第2个动作的状态示意图。
步骤B4:执行第3个动作:在当前情况下,仅右词“搅拌器”是骨干词,使用完整模型预测出当前应该采取的动作为<Action|1(磁力)<--ATT---2(搅拌器)>,画一条左弧,同时删除节点“磁力”。
参考图7所示,为本步骤中目标语句执行完第3个动作的状态示意图。
步骤B5:执行第4个动作:在当前情况下,仅右词“搅拌器”是骨干词,使用完整模型预测出当前应该采取的动作为<Action|0(迷你)<--ATT---2(搅拌器)>,画一条左弧,同时删除节点“迷你”。
参考图8所示,为本步骤中目标语句执行完第4个动作的状态示意图。
步骤B6:执行第5个动作:在当前情况下,仅左词“ROOT”是骨干词,使用完整模型预测出当前应该采取的动作为<Action|-1(#ROOT#)---SHIFT---2(搅拌器)>,将队首的“搅拌器”移入栈顶。
参考图9所示,为本步骤中目标语句执行完第5个动作的状态示意图。可以理解的是,对于目标语句中出现的标点符号,例如图9中的第3个目标词“,”本申请实施例不会对其进行分析,即将目标语句中的标点符号屏蔽,最终得到的依存树中的也不会包含该标点符号的相关弧。
步骤B7:执行第6个动作:在当前情况下,左词“搅拌器”和右词“配置”均是骨干词,调用依存分析的骨干模型,预测出当前应该采取的动作为<Action|2(搅拌器)---SHIFT---4(配置)>,将队首的“配置”移入栈顶。
参考图10所示,为本步骤中目标语句执行完第6个动作的状态示意图。
步骤B8:执行第7个动作:在当前情况下,仅左词“配置”是骨干词,使用完整模型预测出当前应该采取的动作为<Action|4(配置)---SHIFT---5(1)>,将队首的“1”移入栈顶。
参考图11所示,为本步骤中目标语句执行完第7个动作的状态示意图。
步骤B9:执行第8个动作:在当前情况下,左词和右词都不是骨干词,使用完整模型预测出当前应该采取的动作为<Action|5(1)<--ATT---6(个)>,画一条左弧,同时删除栈顶节点“1”。
参考图12所示,为本步骤中目标语句执行完第8个动作的状态示意图。
步骤B10:执行第9个动作:在当前情况下,仅左词是骨干词,使用完整模型预测出当前应该采取的动作为<Action|4(配置)---SHIFT---6(个)>,将队首的“个”移入栈顶。
参考图13所示,为本步骤中目标语句执行完第9个动作的状态示意图。
步骤B11:执行第10个动作:在当前情况下,左词和右词都不是骨干词,使用完整模型预测出当前应该采取的动作为<Action|6(个)---SHIFT---7(磁力)>,将队首的“磁力”移入栈顶。
参考图14所示,为本步骤中目标语句执行完第10个动作的状态示意图。
步骤B12:执行第11个动作:在当前情况下,仅右词是骨干词,使用完整模型预测出当前应该采取的动作为<Action|7(磁力)<--ATT---8(搅拌子)>,画一条左弧,同时删除栈顶节点“磁力”。
参考图15所示,为本步骤中目标语句执行完第11个动作的状态示意图。
步骤B13:执行第12个动作:在当前情况下,仅右词是骨干词,使用完整模型预测出当前应该采取的动作为<Action|6(个)<--ATT---8(搅拌子)>,画一条左弧,同时删除栈顶节点“个”。
参考图16所示,为本步骤中目标语句执行完第12个动作的状态示意图。
步骤B14:执行第13个动作:在当前情况下,左词“配置”和右词“搅拌子”均是骨干词,调用依存分析的骨干模型,预测出当前应该采取的动作为<Action|4(配置)---VOB-->8(搅拌子)>,画一条右弧,删除队首节点“搅拌子”,同时将栈顶节点“配置”移入队首。
参考图17所示,为本步骤中目标语句执行完第13个动作的状态示意图。
步骤B15:执行第14个动作:在当前情况下,左词“搅拌器”和右词“配置”均是骨干词,调用依存分析的骨干模型,预测出当前应该采取的动作为<Action|2(搅拌器)---DC-->4(配置)>,画一条右弧,删除队首节点“配置”,同时将栈顶节点“搅拌器”移入队首。
参考图18所示,为本步骤中目标语句执行完第14个动作的状态示意图。
步骤B16:执行第15个动作:在当前情况下,左词“ROOT”和右词“搅拌器”均是骨干词,且队列中仅剩1词,栈中仅剩ROOT,直接采取动作<Action|-1(#ROOT#)---HED-->2(搅拌器)>,画上最后一条右弧。
执行完步骤B16之后,依存句法分析过程结束,分析好的依存树可以参考图19所示。
上述算法的本质是将句子中的3个骨干词“搅拌器、配置和搅拌子”提取出来利用一个单独的动作预测骨干模型进行依存分析,其他的非骨干词则使用动作预测完整模型进行处理,使非骨干词直接或间接地挂在骨干词上,并使用规则加以约束,以保证三个骨干词最终成为依存句法分析树的骨架。使用这种方法的好处有:(1)和直接处理所有词相比,骨干词的个数较少,单独处理避免了动作预测骨干模型的错误级联问题的放大效应;(2)当左右词中仅有1个骨干词时,由于非骨干词在采取动作时受到了约束,避免了骨干词节点被删除,因此动作预测完整模型的前期可能的错误也不会影响后期动作预测骨干模型的预测结果。
根据本申请的实施方式,在实际应用中以200句小规模的人工标注依存树的集合上,对现有技术和本申请的实施效果进行了评测,结果如表1所示:
表1
可以从表1中看出,使用本申请的实施方式,与现有技术相比大幅提高了依存分析结果的正确率。
此外需要说明的是,图4~图19的示例仅仅是本申请在实际应用中的一个针对特定样本的特定例子,其中所显示的内容都为了本领域技术人员理解本申请之便,不应将其理解为对本申请的限定。
对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
与上述本申请一种目标语句的依存句法分析方法实施例所提供的方法相对应,参见图20,本申请还提供了一种目标语句的依存句法分析装置实施例,在本实施例中,该装置可以包括:
第一获取模块2001,用于获取待分析的目标语句的目标词序列。
第一确定模块2002,用于将所述目标词序列中的前两个目标词确定为当前目标词。
判断模块2003,用于判断所述当前目标词是否都是骨干词。
第二确定模块2004,用于在所述判断模块的结果为都是的情况下,采用预置的动作预测骨干模型确定所述两个目标词之间的依存关系。
所述第二确定模块具体2004具体可以用于:参考所述两个目标词的上下文和所述目标语句的骨干历史动作,采用动作预测骨干模型确定所述两个目标词之间的依存关系。
第三确定模块2005,用于在所述判断模块的结果为有一个不是或者两个都不是的情况下,采用预置的动作预测完整模型确定所述两个目标词之间的依存关系。
所述第三确定模块2005具体可以用于:参考所述两个目标词的上下文和所述目标语句的骨干词历史动作,采用动作预测骨干模型确定所述两个目标词之间的依存关系。第二获取模块,用于参考目标词序列组成语句的顺序和确定的依存关系获取下两个待处理的目标词作为当前目标词。
触发模块2006,用于触发所述判断模块,直至所述目标词序列中的所有目标词都分析完毕为止。
在实际应用中,本申请实施例的装置还可以包括:
提取模块2007,用于依据所述目标语句的各个目标词之间的依存关系,提取所述目标语句的目标核心产品词。
以及,搜索模块2008,用于响应于用户输入的搜索关键词,搜索关键词中所包含的核心产品词与所述搜索关键词匹配的目标语句;
发送模块2009,用于将所述匹配的目标语句所对应的产品信息发送至客户端进行展现。
参考图21所示,所述装置还可以包括:骨干模型训练模块210,所述骨干模型训练模块210具体可以包括:
提取子模块2101,用于提取样本语句中的骨干词序列。
第一获取子模块2102,用于获取针对所述骨干词序列进行依存句法树标注得到的骨干依存树。
第一转换子模块2103,用于将获取到的骨干依存树转换成一系列的骨干动作序列。
第一抽取子模块2104,用于针对所述骨干动作序列中的每个当前骨干动作,从所述当前骨干动作涉及的骨干目标词的上下文和所述当前骨干动作前所有骨干动作中抽取当前骨干特征。
第一确定子模块2105,用于将当前骨干动作的动作内容确定为与所述当前骨干特征对应的当前骨干类,其中,所述骨干目标词的上下文为:所述骨干目标词本身及其前后的部分目标词以及所述部分目标词的属性信息。
第一训练子模块2106,用于针对大量的样本语句,依据所述骨干动作序列中所有骨干动作的骨干特征和骨干类的映射,利用特定的机器学习算法训练得到动作预测骨干模型。
参考图22所示,所述装置具体还可以包括:完整模型训练模块220,所述完整模型训练模块220具体可以包括:
第二获取子模块2201,用于获取针对样本语句的完整词序列进行依存句法树标注得到的完整依存树。
第二转换子模块2202,用于将获取到的完整依存树转换成一系列的完整动作序列。
第二抽取子模块2203,用于针对所述完整动作序列中的每个当前完整动作,从所述当前完整动作涉及的完整目标词的上下文和所述当前完整动作前所有完整动作中抽取当前完整特征。
第二确定子模块2204,用于将当前完整动作的动作内容确定为与所述当前完整特征对应的当前完整类。
第二训练子模块2205,用于针对大量的样本语句,依据所述完整动作序列中所有完整动作的完整特征和完整类的映射,利用特定的机器学习算法训练得到动作预测完整模型。
可以理解的是,骨干模型训练模块210和完整模型训练模块220与图20所示的装置可以相互独立,图20所示的装置只需要可以触发骨干模型训练模块210和完整模型训练模块220进行模型预测即可。
在本申请实施例中,依存句法分析装置基于将词语区分为骨干词和非骨干词的方式,从而可以在针对两个待分析的目标词都是骨干词的情况下,采用动作预测骨干模型进行预测。因为骨干词只是目标语句中相对较少的一部分词,这样将句子骨架结构的选择缩小到一个更小的骨干词集合,避免了不必要且容易出错的非骨干节点处理,通过减少了关键节点的个数来缓解“错误级联”现象的影响,因此就可以大大降低错误级联给准确率带来的影响,从而提升了依存句法分析结果的准确率。进一步的,得到句子的目标核心产品词的准确率也相应地得到了提高,从而可以在用户搜索相关产品的时候,能为用户提供更为匹配的产品信息,从而也提升了用户的产品搜索体验。
本申请实施例还提供了一种服务器,该服务器的CPU上可以集成前述的依存句法分析装置,从而实现前述的依存句法分析装置的功能。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本申请所提供的目标语句的依存句法分析方法、装置及服务器进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。