发明内容
本申请的主要目的在于提供一种用于命名实体识别的处理方法及装置,以解决缺少可用于命名实体识别规则的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种用于命名实体识别的处理方法,用于生成命名实体识别的规则,。
根据本申请的用于命名实体识别的处理方法包括:训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板;获取命名实体自身正则表达式,并和所述模板构建综合正则表达式;根据所述综合正则表达式,识别命名实体。
进一步地,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:确定业务场景;根据所述业务场景,收集文本数据;定义需要抽取的实体,标注所述文本数据并按照标准数据格式存放。
进一步地,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板还包括:如下任意一种或多种过滤掉复杂文本的处理方式:过滤文本以实体开头;过滤文本以实体结尾;过滤文本中有两个实体相邻在一起;过滤文本中的某个实体类别含有两个以上的实体值;过滤文本中不含任何实体。
进一步地,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:获取文本的已标注语料,将所述已标注语料中标注的实体值作为槽;将所述槽替换上相应的实体类别,生成新的文本。
进一步地,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:将实体值泛化为实体类别之后剩下的框架作为模板的步骤,所述步骤具体包括:将模板中实体类别替换为与其对应的正则表达式,生成批量正则表达式;在训练集上测试所述批量正则表达式是否满足预设条件;如果在训练集上测试批量所述正则表达式满足预设条件,则保存所述正则表达式对应的模板。
为了实现上述目的,根据本申请的另一方面,提供了一种用于命名实体识别的处理装置。
根据本申请的用于命名实体识别的处理装置包括:训练模块,用于训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板;构建模块,用于获取命名实体自身正则表达式,并和所述模板构建综合正则表达式;识别模块,用于根据综合正则表达式,识别命名实体。
进一步地,所述训练模块包括:收集标注模块,所述收集标注模块包括:确定单元,用于确定业务场景;收集单元,用于根据所述业务场景,收集文本数据;标注处理单元,用于定义需要抽取的实体,标注所述文本数据并按照标准数据格式存放。
进一步地,所述训练模块包括:过滤模块,所述过滤模块用于执行如下任意一种或多种过滤掉复杂文本的处理:过滤文本以实体开头;过滤文本以实体结尾;过滤文本中有两个实体相邻在一起;过滤文本中的某个实体类别含有两个以上的实体值;过滤文本中不含任何实体。
进一步地,所述训练模块包括:实体替换模块,所述实体替换模块包括:处理单元,用于获取文本的已标注语料,将所述已标注语料中标注的实体值作为槽;替换单元,用于将所述槽替换上相应的实体类别,生成新的文本。
进一步地,所述训练模块包括:模板生成模块,所述模板生成模块包括:生成单元,用于将模板中实体类别替换为与其对应的正则表达式,生成批量正则表达式;测试单元,用于在训练集上测试所述批量正则表达式是否满足预设条件;保存单元,用于在训练集上测试批量所述正则表达式满足预设条件时,保存所述正则表达式对应的模板。
在本申请实施例中,采用训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板的方式,通过获取命名实体自身正则表达式,并和所述模板构建综合正则表达式,达到了根据所述综合正则表达式,识别命名实体的目的,从而实现了保证命名实体识别的效果和效率,同时也减少公司的人力和时间成本的技术效果,进而解决了缺少可用于命名实体识别规则的技术问题。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请的实施例中命名实体(简称:实体)是指,文本中具有特定意义的词语,主要包括人名、地名、机构名、专有名词,以及任何业务场景下所关心的具有特定意义的词语(比如餐馆名、酒店名、电影名等);
在本申请的实施例中命名实体识别是指,是指从文本中识别出命名实体的任务或者技术。
在本申请的实施例中正则表达式是指,描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
使用正则表达式识别命名实体,具有精确率和召回率高、可扩展性强、内存占用少、识别速度快等优点。但由于实际业务场景等需求,所需要编写和维护的正则表达式往往很多,而且单个正则表达式可能会很长很复杂,如果全用人工来编写和维护,那么就会非常耗时耗力。在这个背景下,在本申请中的方法提出一种半自动生成正则表达式的方法,结合人工编写的实体自身的正则表达式,以及计算机自动生成的模板,生成综合的正则表达式,用于命名实体识识别,既保证识别效果和效率,同时也大大减少公司的人力和时间成本。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
如图1所示,该方法包括如下的步骤S102至步骤S104:
步骤S102,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板;
训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板是指,训练出可具有正则表达式的模板。
在本申请中的模板指的是将实体值泛化为实体类别之后剩下的框架。模板可以作为生成命名实体识别的规则的基础。
步骤S104,获取命名实体自身正则表达式,并和所述模板构建综合正则表达式;
通过获取的命名实体自身正则表达式,和上述步骤中得到的模板构成综合正则表达式。命名实体自身正则表达式可以采用人工的方式进行。模板则可以直接通过计算机生成。
步骤S106,根据所述综合正则表达式,识别命名实体。
根据得到的综合正则表达式的构造结果,可以用来识别命名实体。
从以上的描述中,可以看出,本申请实现了如下技术效果:
在本申请实施例中,采用训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板的方式,通过获取命名实体自身正则表达式,并和所述模板构建综合正则表达式,达到了根据所述综合正则表达式,识别命名实体的目的,从而实现了保证命名实体识别的效果和效率,同时也减少公司的人力和时间成本的技术效果,进而解决了缺少可用于命名实体识别规则的技术问题。
根据本申请实施例,作为本实施例中的优选,如图2所示,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:
步骤S202,确定业务场景;
在确定出业务场景后确定需要收集哪些文本数据。
步骤S204,根据所述业务场景,收集文本数据;
对于相关的业务场景,首先需要收集得到真实的文本数据。
步骤S206,定义需要抽取的实体,标注所述文本数据并按照标准数据格式存放。
定义出需要抽取的实体,并进行手动标注。
具体地,比如,确定业务场景是会议相关的文本进行实体抽取,具体地还希望抽取包括:会议主题、会议时间和会议地点等实体类别,在定义好需要需要抽取的实体类别之后,就可以对所收集的会议相关的文本进行逐条标注。对每条文本,去文本中查找有没有上述关心的实体,如果有的话,就进行标记出来。比如,假设有一条文本为“各位员工,请于下午15:00到二楼会议室参加公司年度表彰大会,请大家准时参加。”,则就可以标注出:
会议时间为:“下午15:00”,
会议地点为:“二楼会议室”,
会议主题为:“公司年度表彰大会”。
在标注完成之后,就可以用标注的数据来训练模型。
需要说明的是,上述步骤中还包括了按照标准数据格式存放。具体地,数据预处理标注的数据,可能有不同的原始格式,需要将这些不同的原始格式统一转换为一种标准数据格式,方便之后统一处理。
根据本申请实施例,作为本实施例中的优选,如图3所示,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板还包括:如下任意一种或多种过滤掉复杂文本的处理方式:过滤文本以实体开头;过滤文本以实体结尾;过滤文本中有两个实体相邻在一起;过滤文本中的某个实体类别含有两个以上的实体值;过滤文本中不含任何实体。具体地,可以先将一些不太好处理的文本先过滤掉,从而可以从先处理比较简单的文本开始。在能比较好的处理简单文本之后,可以再尝试处理复杂的文本。
根据本申请实施例,作为本实施例中的优选,如图4所示,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:
步骤S402,获取文本的已标注语料,将所述已标注语料中标注的实体值作为槽;
根据标注语料,将原文本中标注的实体值抠出来,成为一个槽。
步骤S404,将所述槽替换上相应的实体类别,生成新的文本。
通过填充上对应的实体类别,可以生成新的文本。
根据本申请实施例,作为本实施例中的优选,如图5所示,训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板包括:将实体值泛化为实体类别之后剩下的框架作为模板的步骤,所述步骤具体包括:
步骤S502,将模板中实体类别替换为与其对应的正则表达式,生成批量正则表达式;
步骤S504,在训练集上测试所述批量正则表达式是否满足预设条件;
步骤S506,如果在训练集上测试批量所述正则表达式满足预设条件,则保存所述正则表达式对应的模板。
具体地,将实体值泛化为实体类别之后剩下的框架作为模板可以包括:首先以考虑的实体为中心逐渐往两侧扩展,每次扩展一个单词生成一个新的模板,每扩展出来一个模板,都在所有训练集上进行测试。如果满足要求,就保存该模板,然后打断,再跳到下一个实体继续以同样的方法生成模板。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
根据本申请实施例,还提供了一种用于实施上述用于命名实体识别的处理方法的装置,用于生成命名实体识别的规则,如图6所示,该装置包括:训练模块10,用于训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板;构建模块20,用于获取命名实体自身正则表达式,并和所述模板构建综合正则表达式;识别模块30,用于根据综合正则表达式,识别命名实体。
本申请实施例的训练模块10中训练可用于从命名实体的字符串中获取符合预设条件的子字符串的模板是指,训练出可具有正则表达式的模板。
在本申请中的模板指的是将实体值泛化为实体类别之后剩下的框架。模板可以作为生成命名实体识别的规则的基础。
本申请实施例的构建模块20中通过获取的命名实体自身正则表达式,和上述步骤中得到的模板构成综合正则表达式。命名实体自身正则表达式可以采用人工的方式进行。模板则可以直接通过计算机生成。
本申请实施例的识别模块30中根据得到的综合正则表达式的构造结果,可以用来识别命名实体。
根据本申请实施例,作为本实施例中的优选,如图7所示,所述训练模块包括:收集标注模块101,所述收集标注模块包括:确定单元1011,用于确定业务场景;收集单元1012,用于根据所述业务场景,收集文本数据;标注处理单元1013,用于定义需要抽取的实体,标注所述文本数据并按照标准数据格式存放。
本申请实施例的确定单元1011中在确定出业务场景后确定需要收集哪些文本数据。
本申请实施例的收集单元1012中对于相关的业务场景,首先需要收集得到真实的文本数据。
本申请实施例的标注处理单元1013中定义出需要抽取的实体,并进行手动标注。
具体地,比如,确定业务场景是会议相关的文本进行实体抽取,具体地还希望抽取包括:会议主题、会议时间和会议地点等实体类别,在定义好需要需要抽取的实体类别之后,就可以对所收集的会议相关的文本进行逐条标注。对每条文本,去文本中查找有没有上述关心的实体,如果有的话,就进行标记出来。比如,假设有一条文本为“各位员工,请于下午15:00到二楼会议室参加公司年度表彰大会,请大家准时参加。”,则就可以标注出:
会议时间为:“下午15:00”,
会议地点为:“二楼会议室”,
会议主题为:“公司年度表彰大会”。
在标注完成之后,就可以用标注的数据来训练模型。
需要说明的是,上述步骤中还包括了按照标准数据格式存放。具体地,数据预处理标注的数据,可能有不同的原始格式,需要将这些不同的原始格式统一转换为一种标准数据格式,方便之后统一处理。
根据本申请实施例,作为本实施例中的优选,如图8所示,所述训练模块包括:过滤模块104,所述过滤模块用于执行如下任意一种或多种过滤掉复杂文本的处理:过滤文本以实体开头;过滤文本以实体结尾;过滤文本中有两个实体相邻在一起;过滤文本中的某个实体类别含有两个以上的实体值;过滤文本中不含任何实体。
需要注意的是,本申请的实施例的实现方式中并不限于上述的过滤掉复杂文本的处理方式。
根据本申请实施例,作为本实施例中的优选,如图9所示,所述训练模块10包括:实体替换模块102,所述实体替换模块102包括:处理单元1021,用于获取文本的已标注语料,将所述已标注语料中标注的实体值作为槽;替换单元1022,用于将所述槽替换上相应的实体类别,生成新的文本。
本申请实施例的处理单元1021中根据标注语料,将原文本中标注的实体值抠出来,成为一个槽。
本申请实施例的替换单元1022中通过填充上对应的实体类别,可以生成新的文本。
根据本申请实施例,作为本实施例中的优选,如图10所示,所述训练模块10包括:模板生成模块103,所述模板生成模块103包括:生成单元1031,用于将模板中实体类别替换为与其对应的正则表达式,生成批量正则表达式;测试单元1032,用于在训练集上测试所述批量正则表达式是否满足预设条件;保存单元1033,用于在训练集上测试批量所述正则表达式满足预设条件时,保存所述正则表达式对应的模板。
本申请实施例的生成单元1031、测试单元1032中以及保存单元1033中中具体地,将实体值泛化为实体类别之后剩下的框架作为模板可以包括:首先以考虑的实体为中心逐渐往两侧扩展,每次扩展一个单词生成一个新的模板,每扩展出来一个模板,都在所有训练集上进行测试。如果满足要求,就保存该模板,然后打断,再跳到下一个实体继续以同样的方法生成模板。
如图11所示,是本申请的实现原理示意图。
(1)收集和标注数据
如图11所示,对于所关心的业务场景,首先要收集真实的文本数据,其次要定义我们关心和希望抽取哪些实体,最后进行人工标注。具体地,假设现在希望对会议相关的文本进行实体抽取,而希望抽取的有会议主题、会议时间和会议地点等实体类别,在定义好需要需要抽取的实体类别之后,就可以对所收集的会议相关的文本进行逐条标注,对每条文本,都人工的去文本中查找有没有上述我们关心的实体,如果有的话,就标记出来。
假设有一条文本为“各位员工,请于下午15:00到二楼会议室参加公司年度表彰大会,请大家准时参加。”,就可以标注出会议时间为“下午15:00”,会议地点为“二楼会议室”,会议主题为“公司年度表彰大会”。在标注完成之后,就可以用标注的数据来训练模型。
(2)数据预处理
如图11所示标注的数据,可能有不同的原始格式,我们需要将这些不同的原始格式统一转换为一种标准数据格式,方便之后统一处理。具体地,在本申请实施例中定义的标准数据格式如图12所示。
如图13所示,如果某个实体类别有多个实体值,则多个实体值之间用“@@@”分隔。
以上述定义为例,具体的格式总结如下:
原始文本与实体类别、不同实体类别之间用Tab键分隔;
实体类别与实体值之间用“###”分隔;
多个实体值之间用“@@@”分隔。
此外,还需要针对各个领域的实体类别定义了相应的英文名称,每个领域的实体类别,都用一个enum类来定义。在标准数据格式里的实体类别,均用英文表示。
(3)过滤掉复杂文本
如图11所示,为了将问题简化,我们决定将一些不太好处理的文本先过滤掉,先处理比较简单的文本。主要过滤掉以下几种文本:
-文本以实体开头;
-文本以实体结尾;
-文本中有两个实体紧挨在一起;
-文本中的某个实体类别含有两个以上的实体值;
-文本中不含任何实体。
以上述会议识别为例,4000条的原始标注数据,经过上述过滤之后,大约还剩下3400条左右。在能比较好的处理简单文本之后,可以再尝试处理复杂的文本。
(4)实体替换
如图11所示,根据标注语料,将原文本中标注的实体值抠出来,成为一个槽,然后再填充上对应的实体类别,生成新的文本。假设标注语料为:如图14所示,则经过替换后新生成的文本为:如图15所示。
(5)分词
进一步的优化处理包括,需要将上述新生成的文本进行分词,结果如图16所示。
(6)人工编写实体自身的正则表达式
实体自身的正则表达式,是指的可以刚好完全匹配上某个实体类别的正则表达式。举个例子,比如会议时间,它自身的正则表达式集合中有一条为“[0-9]{4}年(?:0[1-9]|1[0-2])月(?:[0-2][1-9]|3[0-1]|)日”,可以刚好完全匹配上“2018年01月03日”这样的时间。
需要注意的是,人工编写实体自身的正则表达式可以刚好完全匹配上某个实体类别的正则表达式。相比较而言,工作量和所花费的时间都较少。
编写完所有实体自身的正则表达式之后,就可以结合标注数据自动生成整体的正则表达式:即包含实体环境词和实体自身正则表达式的综合正则表达式。
(7)生成综合正则表达式
模板指的是将实体值泛化为实体类别之后剩下的框架。比如,原始的文本为“在***开会”,则将对于的实体类别为会议地点(英文为LOCATION),相应的实体值为“***”,那么将实体泛化之后,就可以得到“在LOCATION开会”,即为一个模板。
再比如,“去(.*蹄花汤)吃饭”这个正则表达式,其中“(.*蹄花汤)”称为实体自身的正则表达式,“去(.*蹄花汤)吃饭”则称为综合的正则表达式,而“去RESTAURANT吃饭”则称为模板。
在得到模板之后,再将LOCATION替换为它自身的正则表达式,就可以得到最终综合的正则表达式了。比如假设LOCATION自身的正则表达式为“(.+会议室)”,那么结合模板生成的综合正则表达式就为“在(.+会议室)开会”,用这个综合的正则表达式,就可以对一句新来的会议文本进行匹配,如果能匹配上,就能提取出其中的会议地点的实体。
自动生成模板的方法具体为:
首先以考虑的实体为中心逐渐往两侧扩展,每次扩展一个单词生成一个新的模板,每扩展出来一个模板,都在所有训练集上进行测试,如果满足要求比如精确率P=100%,就保存该模板。然后打断break,跳到下一个实体继续以同样的方法生成模板。
以上述例子为例,假设考虑的实体为TIME,则就以TIME为中心,逐渐往两侧扩展,可以生成如下一些候选模板(实体左右两侧单词数的不平衡度以及上下文范围都可以调节,这里考虑不平衡度为1,上下文范围为3),如图17所示。
对于每个模板,在训练集上进行测试的时候,将实体类别替换为对应的一批自身的正则表达式,生成一批综合的正则表达式,然后再进行测试,只要有一个正则表达式符合要求,则将对应的模板保存下来,然后打断break,跳到下一个实体继续生成模板。直到遍历完整个训练集。最终就可以得到一批模板。再结合实体自身的正则表达式,就可以得到最终想要的综合正则表达式了。
需要注意的是,这里实体自身的正则表达式是需要人工编写的。也就是说,最终生成的规则包含两部分,一部分是模板,一部分是实体自身的正则表达式,两部分结合起来才是可以实际使用的综合正则表达式。实体自身的正则表达式是需要人工编写,但是模板是可以采用本申请实施例中的提供的计算机自动生成。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。