一种文本字串匹配方法及系统
技术领域
本发明涉及文本分析技术领域,具体涉及一种文本字串匹配方法及系统。
背景技术
文本字串匹配在搜索引擎、语音识别、实体识别等方向都有广泛的应用。传统文本字串匹配主要采用基于编辑距离的度量算法,即通过计算字符串对的各字符的编辑距离来计算字符串对的相似度或匹配度。其中,对任意两个字符串S、T,将S转换成T所需要的删除,插入,替换操作叫做S到T的编辑路径,而其中最短的编辑路径就叫做字符串S和T的编辑距离。
显然,这种基于字符编辑距离度量的算法从文本字串中字符异同来计算相似度,并没有考虑到字符本身音层面上的差别。比如,对文本字串“忘情水”和“忘清水”,利用字符编辑距离度量的方法去求二者的距离时,会得出这两个字符串有较大差距的结果。然而这两个字符串在发音上依然是一致的,具有较高的相似度。特别是当目标字符串是由语音转写而来时,目标字符串与其主观相似字符串在字符层面上有较大差别。
另外,随着互联网技术和语音技术的快速发展,传统基于字串匹配技术已经不能满足应用需求。特别是在互联网环境下,用户在输入过程中常会有意无意的用模糊音代替标准说法,比如用“神马”代替“什么”,用“肿么”代替“怎么”;此外当用户采用语音输入时,由于语音识别性能的限制,输入的文本结果中还会夹杂大量语音识别错误,比如“in”和“ing”的混用,“z”和“zh”不分等。显然,传统基于字符编辑距离的字串匹配度衡量方法已无法给出有效的匹配结果。
发明内容
为解决上述技术问题,本申请实施例提供一种文本字串匹配方法及系统,能够提高文本字串匹配结果的有效性,满足用户不同应用需求。
技术方案如下:
一种文本字串匹配方法,包括:
获得由待匹配的第一文本字串和第二文本字串形成的第一历史路径累积矩阵;
判断所述第一历史路径累积矩阵中待匹配的第一字符与第二字符是否相同;其中,所述第一字符为所述第一文本字串中的字符,所述第二字符为所述第二文本字串中的字符;
当所述第一字符与所述第二字符不同时,获取所述第一字符的第一音串序列和所述第二字符的第二音串序列;
计算所述第一音串序列与所述第二音串序列的音层面匹配代价;
根据所述音层面匹配代价更新所述第一历史路径累积矩阵;
将所述第一文本字串中的另一字符作为所述第一字符,将所述第二文本字串中的另一字符作为所述第二字符,重复执行所述判断所述第一历史路径累积矩阵中的第一字符与第二字符是否相同的步骤,直至所述第一历史路径累积矩阵更新完成,获得所述第一文本字串和所述第二文本字串的最终匹配代价。
优选地,所述计算所述第一音串序列与所述第二音串序列的音层面匹配代价,包括:
获得由所述第一音串序列和所述第二音串序列形成的第二历史路径累积矩阵;
依次获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵;
将所述第二历史路径累积矩阵更新完成时所依据的累积历史路径得分作为所述第一音串序列与所述第二音串序列的音层面匹配代价。
优选地,所述依次获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵,包括:
获得音层面元素匹配代价矩阵;
依次查找所述音层面元素匹配代价矩阵获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵。
优选地,所述获得所述音层面元素匹配代价矩阵,包括:
获取训练语料的音串序列;
对所述训练语料的音串序列进行语料对齐;
统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
根据统计的所述一个音层面元素错为另一个音层面元素的次数生成音层面元素匹配代价矩阵。
优选地,在根据统计的所述一个音层面元素错为另一个音层面元素的次数生成音层面元素匹配代价矩阵之后,还包括:
对所述音层面元素匹配代价矩阵进行迭代优化;
当迭代优化后的音层面元素匹配代价矩阵满足收敛条件时,将最后一次迭代生成的音层面元素匹配代价矩阵作为最终的音层面元素匹配代价矩阵。
优选地,所述对所述音层面元素匹配代价矩阵进行迭代优化,包括:
利用上一次迭代生成的音层面元素匹配代价矩阵对所述训练语料的音串序列进行语料对齐;
统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
根据统计的所述一个音层面元素错为另一个音层面元素的次数生成本次迭代的音层面元素匹配代价矩阵。
优选地,所述收敛条件包括:
相邻两次迭代生成的音层面元素匹配代价矩阵之间的差值小于差值阈值;或者,
相邻两次迭代生成的音层面元素匹配代价矩阵之间满足预设的收敛函数;或者,
迭代次数达到预设次数阈值。
一种文本字串匹配系统,包括:
矩阵生成单元,用于获得由待匹配的第一文本字串和第二文本字串形成的第一历史路径累积矩阵;
判定单元,用于判断所述第一历史路径累积矩阵中待匹配的第一字符与第二字符是否相同;其中,所述第一字符为所述第一文本字串中的字符,所述第二字符为第二文本字串中的字符;
序列获取单元,用于当所述第一字符与所述第二字符不同时,获取所述第一字符的第一音串序列和所述第二字符的第二音串序列;
代价计算单元,用于计算所述第一音串序列与所述第二音串序列的音层面匹配代价;
矩阵更新单元,用于根据所述音层面匹配代价更新所述第一历史路径累积矩阵;
匹配代价确定单元,用于将所述第一文本字串中的另一字符作为所述第一字符,将所述第二文本字串中的另一字符作为所述第二字符,然后发送至所述判断单元重复执行所述判断所述第一历史路径累积矩阵中的第一字符与第二字符是否相同的步骤,直至所述第一历史路径累积矩阵更新完成,获得所述第一文本字串和所述第二文本字串的最终匹配代价。
优选地,所述代价计算单元包括:
矩阵生成子单元,用于获得由所述第一音串序列和所述第二音串序列形成的第二历史路径累积矩阵;
矩阵更新子单元,用于依次获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵;
代价确定子单元,用于将所述第二历史路径累积矩阵更新完成时所依据的累积历史路径得分作为所述第一音串序列与所述第二音串序列的音层面匹配代价。
优选地,所述矩阵更新子单元包括:
代价表生成子单元,用于获得音层面元素匹配代价矩阵;
查找更新子单元,用于依次查找所述音层面元素匹配代价矩阵获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵。
优选地,所述代价表生成子单元包括:
序列获取子单元,用于获取训练语料的音串序列;
对齐子单元,用于对所述训练语料的音串序列进行语料对齐;
统计子单元,用于统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
生成子单元,用于根据统计的所述一个音层面元素错为另一个音层面元素的次数生成音层面元素匹配代价矩阵。
优选地,所述代价表生成子单元还包括:
迭代优化子单元,用于对所述音层面元素匹配代价矩阵进行迭代优化;
代价表确定子单元,用于当迭代优化后的音层面元素匹配代价矩阵满足收敛条件时,将最后一次迭代生成的音层面元素匹配代价矩阵作为最终的音层面元素匹配代价矩阵。
优选地,所述迭代优化子单元包括:
重对齐字单元,用于利用上一次迭代生成的音层面元素匹配代价矩阵对所述训练语料的音串序列进行语料对齐;
重统计子单元,用于统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
迭代生成子单元,用于根据统计的所述一个音层面元素错为另一个音层面元素的次数生成本次迭代的音层面元素匹配代价矩阵。
优选地,所述收敛条件包括:
相邻两次迭代生成的音层面元素匹配代价矩阵之间的差值小于差值阈值;或者,
相邻两次迭代生成的音层面元素匹配代价矩阵之间满足预设的收敛函数;或者,
迭代次数达到预设次数阈值。
本申请实施例至少具有以下有益效果:
本发明实施例通过在计算文本字串之间的匹配代价时,对不完全匹配的字符对进行发音层面匹配代价的计算,并据此修整文本字串对匹配的历史路径,克服了传统字串匹配中仅依靠字面度量的缺点,本申请通过对字串音层面相似度的度量,提高了文本字串匹配的有效性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种文本字串匹配方法的流程图;
图2为本发明实施例中一种计算音层面匹配代价的方法流程图;
图3为本发明实施例中一种计算并更新第二历史路径累积矩阵的方法流程图;
图4为本发明实施例中一种获得音层面元素匹配代价矩阵的方法流程图;
图5为本发明实施例中对音层面元素匹配代价矩阵进行迭代优化的方法流程图;
图6为本发明实施例一种文本字串匹配系统的结构示意图;
图7为本发明实施例中代价计算单元的结构示意图;
图8为本发明实施例中矩阵更新子单元的结构示意图;
图9为本发明实施例中代价表生成子单元的结构示意图;
图10为本发明实施例中迭代优化子单元的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参见图1,为本发明实施例一种文本字串匹配方法的流程图。该方法可以包括:
步骤101,获得由待匹配的第一文本字串和第二文本字串形成的第一历史路径累积矩阵。
假设待匹配的第一文本字串A包含N个基本语义单元也即N个字符(x1,x2,…xi,…,xN),第二文本字串B包含M个基本语义单元也即M个字符(y1,y2,…yj,…yM)。则由第一文本字串和第二文本字串形成的第一历史路径累积矩阵为一(N+1)*(M+1)的矩阵,其中,矩阵单元p(i,j)用于描述第一文本字串中从第1个字符到第i个字符即x1~xi,和第二文本字串中从第1个字符到第j个字符即y1~yj的匹配代价,该匹配代价可以是编辑距离代价。
对第一历史路径累积矩阵进行初始化,例如,假设该第一历史路径累积矩阵的行和列分别代表为第一文本字串到第二文本字串的相应字符(或待匹配字符)的插入、删除代价,现设插入、删除、替换代价为固定值INSERT_COST、DELETE_COST、REPLACE_COST,则矩阵的第一行初始化为INSERT_COST*i,第一列为DELETE_COST*j,其中0≤i<N+1,0≤j<M+1。
在第一历史路径累积矩阵初始化完成后,开始执行以下步骤计算该矩阵中的矩阵单元p(i,j)。
其中,矩阵单元的计算一般采用动态规划算法,从矩阵左上角的矩阵单元一直计算到右下角的矩阵单元,获得最短历史路径,从而确定第一文本字串与第二文本字串的匹配代价。
步骤102,判断第一历史路径累积矩阵中待匹配的第一字符与第二字符是否相同。其中,第一字符为第一文本字串中的字符,第二字符为第二文本字串中的字符。
执行本步骤之前首先确定第一历史路径累积矩阵中当前要计算的矩阵单元p(i,j)对应的字符对,第一文本字串中的第一字符xi和第二文本字串中的第二字符yj。然后判断该第一字符与第二字符在字层面上是否相同,若相同,转入步骤105;若不同,转入步骤103。
步骤103,获取第一字符的第一音串序列和第二字符的第二音串序列。
步骤104,计算第一音串序列与第二音串序列的音层面匹配代价。
具体的,可以形成由第一音串序列和第二音串序列形成的累积矩阵,进而计算两音串序列的匹配代价,例如,第一字符xi和第二字符yj在音层面的替换代价,xi在音层面的插入代价,yi在音层面的删除代价,具体计算过程请参照后续实施例的描述。此处也可以采用其他方式计算两音串序列之间的匹配代价。
步骤105,更新第一历史路径累积矩阵。
在本步骤中,如果步骤102中第一字符xi与第二字符yj在字层面上相同,则可以直接按照下述公式更新第一历史路径累积矩阵;如果第一字符xi与第二字符yj在字层面上不同,并获得步骤104中的音层面匹配代价,则可以根据该音层面匹配代价更新该第一历史路径累积矩阵,然后利用下述公式更新第一历史路径累积矩阵。
其中,
cost=min(p[i][j-1]+cost_covert(INSERT_PHONE_COST),p[i-1][j]+
cost_covert(DELETE_PHONE_COST),p[i-1][j-1]+
cost_covert(REPLACE_PHONE_COST))
cost_covert(PHONE_COST)=固定代价*(PHONE_COST+极小值),如果PHONE_COST为插入代价INSERT_PHONE_COST,则固定代价为INSERT_COST;如果PHONE_COST为删除代价DELETE_PHONE_COST,则固定代价为DELETE_COST;如果PHONE_COST为替换代价REPLACE_PHONE_COST,则固定代价为REPLACE_COST。
在另一种根据音层面匹配代价更新第一历史路径累积矩阵的方法中还可以是首先计算第一字符xi与第二字符yj的编辑距离代价,然后用该音层面匹配代价对该编辑距离代价进行修正,例如针对两个代价采用不同权重合并等,再将修正后的匹配代价作为该矩阵单元。具体可以根据需要确定更新的方法。
对于第一字符xi和第二字符yj相同的情况,可以计算第一字符xi与第二字符yj的编辑距离代价作为字层面匹配代价,然后直接将该字层面匹配代价作为第一字符xi和第二字符yj对应的矩阵单元更新该第一历史路径累积矩阵。该过程与现有技术类似,此处不再赘述。
更新历史路径累积矩阵后执行步骤106。
步骤106,判断第一历史路径累积矩阵是否更新完成。
当更新到该矩阵的最后一个单元时,该第一历史路径累积矩阵更新完毕,转入步骤107;若没有更新完成,则对其它矩阵单元采用前述方法计算,具体的,将第一文本字串中的另一字符作为第一字符,将第二文本字串中的另一字符作为第二字符,也即选取需要计算的另一矩阵单元,然后重复执行步骤102~106,直至第一历史路径累积矩阵更新完成。
步骤107,获得第一文本字串和第二文本字串的最终匹配代价。
该第一历史路径累积矩阵的最后一个矩阵单元即为第一文本字串和第二文本字串的最终匹配代价。进一步的还可以对该匹配代价通过函数映射成0到1之间的值,作为第一文本字串和第二文本字串的相似度。
本发明实施例通过在计算文本字串之间的匹配代价时,对不完全匹配的字符对进行发音层面匹配代价的计算,并据此修整文本字串对匹配的历史路径,克服了传统字串匹配中仅依靠字面度量的缺点,本申请通过对字串音层面相似度的度量,提高了文本字串匹配的有效性。
本申请中可以采用多种方法计算第一字符的第一音串序列与第二字符的第二音串序列的音层面匹配代价,其中一种方法可以如图2所示,该方法包括:
步骤201,获得由第一音串序列和第二音串序列形成的第二历史路径累积矩阵。
该第二历史路径累积矩阵与第一历史路径累积矩阵类似,由第一音串序列包含的U个音层面元素单元和第二音串序列包含的V个音层面元素单元形成第二历史路径累积矩阵,该矩阵为一(U+1)*(V+1)的矩阵,其中,矩阵单元p′(m,n)用于描述第一音串序列中第m个音层面元素到第二音串序列中第n个音层面元素的匹配代价,该匹配代价可以是编辑距离代价。其中0≤m<U+1,0≤n<V+1。
该矩阵的横向和纵向分代表音层面元素的插入、删除操作。
步骤202,依次获得第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据待匹配音层面元素的累积历史路径得分更新第二历史路径累积矩阵。
计算第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分即计算第二历史路径累积矩阵中的各矩阵单元,具体可以通过动态规划算法计算,包括以下步骤:
首先,对矩阵进行初始化,矩阵的第一行初始化为对应音层面元素插入的累计代价,第一列初始化为对应音层面元素删除的累计代价。其中插入和删除代价,均通过查代价表获得。
然后,用标准编辑距离算法,对矩阵进行更新计算。和标准编辑距离算法的区别在于,此时的插入、删除和替换代价,均为查代价表获得,而不是固定值。
最后,选择矩阵右下角的值,作为第二历史路径累积矩阵的代价,用于更新第一历史路径累计矩阵。
由于本申请中文本字串匹配的结果和音串序列匹配效果有关,而音串序列匹配计算主要由音层面元素匹配得分确定,因此合理计算音层面元素匹配得分对提高文本匹配效果有重要影响。对此本步骤还提出了另一种计算方法,该方法可以克服传统的采用简单删除,插入,替换等编辑距离度量方法带来的评估不合理的问题,优化匹配效果。该方法具体可以通过如图3所示的方法进行:
步骤301,获得音层面元素匹配代价矩阵。
该音层面元素匹配代价矩阵表明了多对音层面元素对之间的匹配代价,具体可以通过训练语料训练获得,具体请参见后续实施例的描述。
步骤302,依次查找音层面元素匹配代价矩阵获得第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵。
在获得音层面元素匹配代价矩阵后,即可在第二历史路径累积矩阵中首先获得当前需要计算的音层面元素对对应的矩阵单元,然后通过查找音层面元素匹配代价矩阵获得该音层面元素对的最小匹配代价,然后将该最小匹配代价作为该矩阵单元更新第二历史路径累积矩阵。从该第二历史路径累积矩阵中的左上角的矩阵单元,依次计算,直至获得最右下角的矩阵单元,完成该第二历史路径累积矩阵的更新。
步骤203,将第二历史路径累积矩阵更新完成时所依据的累积历史路径得分作为第一音串序列与第二音串序列的音层面匹配代价。
也即将最后获得的第二历史路径累积矩阵的最右小角的矩阵单元作为该第一音串序列与第二音串序列的音层面匹配代价。
本发明实施例中获得音层面元素匹配代价矩阵的方法可以如图4所示,包括:
步骤401,获取训练语料的音串序列。
训练语料包括语音识别结果及对应的人工纠错标注。具体系统在获取语音识别结果后,对语音转文本的识别结果进行人工标注,以音素为例,如识别结果为“碗清水”,而对应的人工标注结果为“忘情水”。
将识别结果和人工标注结果分别音层面元素化,获取连续的音串序列。在中文系统中通常使用声韵母单元,则对识别结果“碗清水”音层面元素化为“w an q ing sh ui”,而人工标注结果“忘情水”为“w ang q ing sh ui”。
其中获得训练语料的方式有多种,不一定采用上述人工纠错标注的方式。
步骤402,对训练语料的音串序列进行语料对齐。
语料对齐可以根据传统的编辑距离计算方法,计算每对识别和标注结果的匹配结果,并获取他们的对应方式。如对识别结果“碗清水”的“w an q ing sh ui”音串序列以及人工标注结果“忘情水”的“w ang q ing sh ui”音串序列,获取音层面元素对“w&w”,“an&ang”等。
步骤403,统计语料对齐后的训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数。
对所有训练语料的音层面元素对进行统计得到一个音层面元素错为另一个音层面元素的count(计数)矩阵。如统计“en”错为“eng”的次数为N次,“en”错为“n”的次数为M次等。
步骤404,根据统计的一个音层面元素错为另一个音层面元素的次数生成音层面元素匹配代价矩阵。
在获得上述统计次数后,可以首先将其转化为概率,然后对转化后的矩阵进行平滑,获得音层面元素匹配代价矩阵。
具体的,根据某一音层面元素a错为所有音的概率和为1,更新count矩阵,获得一个音层面元素错为另外一个音层面元素的概率。进一步的考虑到语料覆盖问题,从训练语料所得的count数存在偏差进而得到的代价矩阵数据倾斜较大,因此可以对该转化为概率的矩阵进行平滑:
其中∑pi=1,pi表示一个音层面元素变成另外一个音层面元素的概率,λ表示平滑参数,其值为0~1。经过平滑后,概率分布会趋于平缓。λ越小,概率分布越平滑;λ越大,概率分布越趋向于语料表现的真实分布。
本步骤中获得的音层面元素匹配代价矩阵可以直接应用与前述实施例,也还可以继续后续步骤对该矩阵进行优化。
步骤405,对音层面元素匹配代价矩阵进行迭代优化。
在一实施例中,该对音层面元素匹配代价矩阵的迭代优化过程,如图5所示,可以包括以下步骤:
步骤501,利用上一次迭代生成的音层面元素匹配代价矩阵对训练语料的音串序列进行语料对齐。
本步骤利用上一次迭代生成的音层面元素匹配代价矩阵获取训练语料的音层面元素对,也即对训练语料进行语料对齐。
步骤502,统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数。
本步骤与步骤403类似,在利用音层面元素匹配代价矩阵进行语料对齐后的训练语料中,统计音串序列中一个音层面元素错为另一个音层面元素的次数。
步骤503,根据统计的一个音层面元素错为另一个音层面元素的次数生成本次迭代的音层面元素匹配代价矩阵。
然后根据统计的次数,采用与前述步骤404类似的方法生成本次迭代的音层面元素匹配代价矩阵。
在每一次对音层面元素匹配代价矩阵进行迭代优化之后,均需执行步骤406。
步骤406,判断本次迭代获得的音层面元素匹配代价矩阵是否满足收敛条件。
该收敛条件可以根据需要设置,例如:
相邻两次迭代生成的音层面元素匹配代价矩阵之间的差值小于差值阈值;或者,相邻两次迭代生成的音层面元素匹配代价矩阵之间满足预设的收敛函数,比如两音层面元素匹配代价矩阵之间的比值是否小于某一阈值;或者,迭代次数达到预设次数阈值。
当满足收敛条件时,执行步骤407,当不满足收敛条件时,重复步骤405。
步骤407,将最后一次迭代生成的音层面元素匹配代价矩阵作为最终的音层面元素匹配代价矩阵。
通过对音层面元素匹配代价矩阵的多次迭代优化可以获取更加符合真实分布的代价矩阵。
本实施例在标注训练数据上训练得到音层面元素匹配代价表,明确各单独音层面元素之间的发音相似性,由于该音层面元素匹配代价矩阵是从客观数据上分析获得,其代价得分计算客观合理。应用该音层面元素匹配代价矩阵计算获得的第一音串序列与第二音串序列的音层面匹配代价更为准确。
下面以第一文本字串“忘情水”与第二文本字串“碗清水”的匹配为例进行说明:
1)首先获得第一历史路径累积矩阵,并将该矩阵初始化,为了方便以下表(一)示出:
2)然后开始由该第一历史路径累积矩阵的左上角的矩阵单元开始计算,“忘”和“碗”字不同,音相似,则获得“忘”的音串序列“wang”,“碗”的音串序列“wan”,计算两音串序列的音层面匹配代价。
a)获得第二历史路径累积矩阵,如下表(二)所示:
b)如果按照现有动态规划算法,通过计算最优编辑路径来获得音层面匹配代价,则可以获得如下表(三)所示的第二历史路径累积矩阵:
该第二历史路径累积矩阵最右下角的矩阵单元即为“忘”和“碗”的音层面匹配代价。
如果按照本申请提出的通过训练语料获得音层面元素匹配代价矩阵,然后通过查找该音层面元素匹配代价矩阵,也可以获得音层面匹配代价。
3)在获得上述“忘”和“碗”音层面匹配代价后,继续计算下一矩阵单元。对于其他矩阵单元,如果待匹配的字符对的字相同,则可以直接按照现有编辑距离算法计算匹配代价,如果字不同,音相似,则采用类似“忘”和“碗”音层面匹配代价的算法计算匹配代价,最终更新获得的第一历史路径累积矩阵如下表(四)所示:
其中音层面变换代价的计算公式为:
cost_covert(PHONE_COST)=固定代价*(PHONE_COST+极小值),如果PHONE_COST为插入代价INSERT_PHONE_COST,即音层面插入代价,如表3中“碗”和“忘”的插入代价为w的插入代价+ang的插入代价,则固定代价为INSERT_COST,即字层面插入固定代价;如果PHONE_COST为删除代价DELETE_PHONE_COST,即音层面删除代价,则固定代价为DELETE_COST,即字层面删除固定代价;如果PHONE_COST为替换代价REPLACE_PHONE_COST,即音层面替换代价,则固定代价为REPLACE_COST,即字层面替换固定代价。
相应地,本发明实施例还提供了一种文本字串匹配系统,参见图6,为本发明实施例一种文本字串匹配系统的结构示意图。
该系统可以包括:
矩阵生成单元601,用于获得由待匹配的第一文本字串和第二文本字串形成的第一历史路径累积矩阵。
判定单元602,用于判断所述第一历史路径累积矩阵中待匹配的第一字符与第二字符是否相同;其中,所述第一字符为所述第一文本字串中的字符,所述第二字符为第二文本字串中的字符。
序列获取单元603,用于当所述第一字符与所述第二字符不同时,获取所述第一字符的第一音串序列和所述第二字符的第二音串序列。
代价计算单元604,用于计算所述第一音串序列与所述第二音串序列的音层面匹配代价。
矩阵更新单元605,用于根据所述音层面匹配代价更新所述第一历史路径累积矩阵;
匹配代价确定单元606,用于将所述第一文本字串中的另一字符作为所述第一字符,将所述第二文本字串中的另一字符作为所述第二字符,然后发送至所述判断单元602重复执行所述判断所述第一历史路径累积矩阵中的第一字符与第二字符是否相同的步骤,直至所述第一历史路径累积矩阵更新完成,获得所述第一文本字串和所述第二文本字串的最终匹配代价。
该系统通过上述单元在计算文本字串之间的匹配代价时,对不完全匹配的字符对进行发音层面匹配代价的计算,并据此修整文本字串对匹配的历史路径,克服了传统字串匹配中仅依靠字面度量的缺点,本申请通过对字串音层面相似度的度量,提高了文本字串匹配的有效性。
在本发明的另一实施例中,如图7所示,该代价计算单元604可以进一步包括:
矩阵生成子单元701,用于获得由所述第一音串序列和所述第二音串序列形成的第二历史路径累积矩阵;
矩阵更新子单元702,用于依次获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵;
代价确定子单元703,用于将所述第二历史路径累积矩阵更新完成时所依据的累积历史路径得分作为所述第一音串序列与所述第二音串序列的音层面匹配代价。
其中,如图8所示,该矩阵更新子单元702又可以进一步包括:
代价表生成子单元801,用于获得音层面元素匹配代价矩阵;
查找更新子单元802,用于依次查找所述音层面元素匹配代价矩阵获得所述第二历史路径累积矩阵中待匹配音层面元素的累积历史路径得分,并根据所述待匹配音层面元素的累积历史路径得分更新所述第二历史路径累积矩阵。
如图9所示,该代价表生成子单元801又可以进一步包括:
序列获取子单元901,用于获取训练语料的音串序列;
对齐子单元902,用于对所述训练语料的音串序列进行语料对齐;
统计子单元903,用于统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
生成子单元904,用于根据统计的所述一个音层面元素错为另一个音层面元素的次数生成音层面元素匹配代价矩阵。
代价表生成子单元801还可以进一步包括:
迭代优化子单元905,用于对所述音层面元素匹配代价矩阵进行迭代优化;
代价表确定子单元906,用于当迭代优化后的音层面元素匹配代价矩阵满足收敛条件时,将最后一次迭代生成的音层面元素匹配代价矩阵作为最终的音层面元素匹配代价矩阵。其中,收敛条件可以包括:相邻两次迭代生成的音层面元素匹配代价矩阵之间的差值小于差值阈值;或者,相邻两次迭代生成的音层面元素匹配代价矩阵之间满足预设的收敛函数;或者,迭代次数达到预设次数阈值。
如图10所示,迭代优化子单元905可以包括:
重对齐字单元1001,用于利用上一次迭代生成的音层面元素匹配代价矩阵对所述训练语料的音串序列进行语料对齐;
重统计子单元1002,用于统计语料对齐后的所述训练语料的音串序列中一个音层面元素错为另一个音层面元素的次数;
迭代生成子单元1003,用于根据统计的所述一个音层面元素错为另一个音层面元素的次数生成本次迭代的音层面元素匹配代价矩阵。
本实施例通过上述单元在标注训练数据上训练得到音层面元素匹配代价表,明确各单独音层面元素之间的发音相似性,由于该音层面元素匹配代价矩阵是从客观数据上分析获得,其代价得分计算客观合理。应用该音层面元素匹配代价矩阵计算获得的第一音串序列与第二音串序列的音层面匹配代价更为准确。
上述系统中各单元的具体实现过程请参照前述方法实施例的描述,此处不再赘述。
为了描述的方便,描述以上系统时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
以上所述仅是本申请的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。