基于自然语言识别技术的装备财务信息管理系统应用研究
2015-03-11刘欣
刘 欣
(海军工程大学军队装备经济信息研究室 武汉 430033)
基于自然语言识别技术的装备财务信息管理系统应用研究
刘 欣
(海军工程大学军队装备经济信息研究室 武汉 430033)
论文采用自然语言识别技术对已经存在的不同装备财务信息管理系统中的单位名称进行分析,剖析其规律,并在此基础上对现有自然语言识别技术进行算法改进,提取不同系统的相同单位名称信息,以达到系统之间单位相关数据信息相互转换的要求。最后采用C#实现改进算法,并通过实验数据检验改进算法的效果。
自然语言识别; 装备财务; 信息管理
Class Number TP391
1 引言
军队财务信息管理所涉及的业务管理软件系统很多,这些系统相互分离,系统之间数据不能共享或转换,但在目前的管理体制下,集中开发统一的软件还没有可行性。每个软件系统都要重复录入大量数据,浪费了人力资源和物质资源,降低了军队财务管理工作效率,更重要的是制约了全军装备财务实现网络化、信息化的发展步伐。为进一步加强全军装备财务信息化建设,在现有软件及业务工作流程的基础上,研究不同软件系统数据和数据之间的关系,寻找其内部联系,进行智能的转换,是解决数据共享比较好的思想。
2 问题提出
在现有的装备财务业务管理所涉及许多软件系统中,都存在着彼此相关信息。特别是许多系统都是基于单位来进行数据的录入和汇总,也就是说系统中的数据是与单位相关的,要进行数据融合就必须进行单位的对应,如果希望把不同系统的数据进行融合,必须解决系统之间的单位信息匹配问题。由于不同的系统中单位的内码和层次码不同,按照编码对单位信息进行匹配识别是不现实的,目前通用做法是人工通过单位名称识别判别后进行关联标注。但在单位较多的情况下,通过人工对单位名称识别的方法工作量很大。按照传统的单纯通过单位编码和单位名称进行比对的方法进行判别是不能满足需要的。必须采用新技术新方法进行单位判别来实现数据转换要求。
装备财务软件系统中的单位信息包括识别码、层次码和名称。识别码是单位信息唯一标码。层次码是单位与单位之间的隶属关系信息,名称是单位的名称。从上述的信息中可以看出不同系统中名称是单位信息中关联性最大的要素,但由于不同的装备财务软件系统由不同财务人员录入,因录入的习惯不同,单位信息中名称的内容差距也很大。如同一个单位在不同的系统可能被录入成“163医院”、“一六三医院”、“163医院”、“陆军一六三医院”、“陆军第一六三医院”、“解放军陆军第一六三医院”等不同的名称。人工很容易判别,但对于计算机自动判别就是很困难的事。
自然语言处理是计算机科学领域与人工智能领域中的一个重要方向,自然语言处理可以认为是一种多学科交叉的语言文字的处理技术,运用自然语言处理技术可以发现语言文字所表达的“义”,通过分析这个“义”分析语句得到相关数据信息。
3 解决方法和算法实现
基于单位名称判别的思想,采用了基于多层次特征的语句相似度度量方法综合考察单位信息中名称在词形、句长及语序三个语言层次特征的相似度,合理扩展了语句相似度的度量尺度。不仅考虑词的局部相似性,还从单位名称语句的整体出发,宏观考察单位名称语句在整体上的相似情况,从而提高了相似度计算的性能,提高了单位信息自动、准确判别的能力。不同单位名称之间的贴近度高则判别为同单位的程度高。单位名称判别的算法主要包含三部分:预处理、分词过程和相似度计算过程[2]。
3.1 预处理
预处理是进行单位名称判别算法的第一步。它以国标码的存储构造作为区分汉字字符与非汉字字符的依据,对待处理的单位名称的文本进行扫描。根据“163医院”、“一六三医院”、“163医院”、“陆军一六三医院”、“陆军第一六三医院”、“解放军陆军第一六三医院”这些可能出现情况,首先对数字进行归一化,即把单位中的所有数字变成使用英文数字字符表示。如:“解放军陆军第一六三医院”可以转变为“解放军陆军第163医院”;“163医院”可以转变为“163医院”。
3.2 分词过程
目前中文词汇的切分技术主要有正向最大匹配算法与逆向最大匹配算法[1],都是根据中文词典的匹配算法。所谓匹配算法就是从待切分中文短句中顺序取出1~N字符来与已有的词典比较,看看是否是一个词,若是则匹配成功,将它放入词队列或数组中暂存,接着对中文短句中剩余的部分进行匹配,直到全部切分完毕。若按照从左到右的顺序进行匹配即称为正向最大匹配算法,而按照从右到左的顺序则是逆向最大匹配算法。最大匹配算法的关键是要确保已扫描出的词不是某个已存在词的前缀,即扫描过程的最大化原则。在中文分词技术方面,正向最大匹配算法与逆向最大匹配算法都是在分词过程中普遍使用的匹配算法,在实际应用中通常将两者结合起来使用,可提高分词结果的正确率。
单位名称内容相对简单,不存在上下文关系,所以选取了较为简单易实现的字符串匹配分词技术。专业词汇在单位名称中起着相当重要的作用,基本上构成了单位名称的判别点,所以在分词过程中专业词汇切分要非常准确。为满足算法在时间效率上,同时对专业词和非专业词切分准确性的要求,采用了逆向最大匹配的方法,根据专业词典抽取专业词。目前匹配分词算法都比较成熟,现成的产品也比较多,此不是本文讨论重点,在后面的算法实现中,采用了现有的产品完成分词过程。
3.3 短句相似度计算过程
单位名称在一定程度上可以看成是一个短句,短句的相似度由词形相似度、语句长度相似度、词序相似度三者共同决定,其中起着主要作用是词形相似度,其次是语句长度相似度,作用最小的是词序相似度,根据这种思路,对不同相似度给予不同的权值,以提高短句相似度判断的精度[3]。
(1)
式(1)中的SimWord(L,L′)表示单位名称L和L′中相同的词。由于任何单位名称词长度Len(L)和Len(L′)都大于等于单位名称L和L′中相同的词SimWord(L,L′),由此可知WordSim(L,L′)∈[0,1]。WordSim(L,L′)的值越大表示两个单位名称相同的词越多,说明两个单位越可能是相同单位。
根据专业知识可知,如果两个系统的录入单位名称相同,则其长度亦应相同。则单位名称间的语句长度相似度LenSim(L,L′)由下式决定:
(2)
由于存在|Len(L)-Len(L′)|≤MaxLen(Len(L),Len(L′))的等式存在,可以得出LenSim(L,L′)∈[0,1]。LenSim(L,L′)的值越大说明两个单位名称的语句长度越相近,两个单位越可能是相同单位。
词序相似度是为了提高单位名称尽可能一致性而设立的限制条件。假设单位名称L和L′中均出现一次且只出现一次的词的集合表示为OnceWord(L,L′);OnceWord(L,L′)中的词在句子L中的位置序号构成的向量表示Pfirst(L,L′),Pfirst(L,L′)中的分量对应的词在句子L′中的词序排序生成的向量表示为Psecond(L,L′),Psecond(L,L′)各相邻分量的逆序数表示为RevOrd(L,L′),则单位名称L和L′的词序相似度可表示如下:
(3)
式(3)中OnceWord(L,L′)>1,因此可以得出OrdernSim∈[0,1];当OnceWord(L,L′)的值越大,说明两个单位名称相同的词相对位置越靠近,即两个单位名称越相似。
通过对单位名称的词形相似度、语句长度相似度和词序相似度的描述,则单位名称L和L′之间的相似度Sim(L,L′)可表示为
Sim(L,L′)=A1WordSim(L,L′)+A2LenSim(L,L′)
+A3OrdernWord(L,L′)
(4)
其中A1,A2,A3为常数,存在A1+A2+A3=1,由于WordSim(L,L′)、LenSim(L,L′)、OrdernWord(L,L′)的范围都在0~1之间,所以Sim(L,L′)∈[0,1]。
虽然两个单位名称的相似度由词形相似度、语句长度相似度、词序相似度共同决定,但它们所起的作用是不同的。为了提高语句相似度,设定词形相似度起决定作用,语句长度相似度起主要作用,词序相似度起次要作用,所以有设定存在A1≥A2≥A3的关系,在实验中取A1=0.80,A1=0.15,A3=0.05。
4 实验结果
依据前面的算法描述,根据上述短语相似度的定义,用C#语言实现单位名称相似度计算中的主要函数,包括单位名称预处理Word_YCL函数、计算词形相似度WordSim函数、计算语句长度相似度LenSim函数、计算词序相似度OrdernWord函数和短语相似度Sim函数。
private void Sim(object sender, EventArgs e)
{
//定义初始化分词系统
Segment segment = new Segment();
//定义两个单位名称
String m_A = "解放军陆军一六三医院";String m_B = "163医院";
//单位名称预处理
m_A = Word_YCL(m_A);m_B = Word_YCL(m_B);
//单位名称分词过程
ICollection
ICollection
//定义词形相似度、语句长度相似度、词序相似度的影响参数
Single A1 = 0.8F;Single A2 = 0.15F;Single A3 = 0.05F;
//计算语句相似度
Single Sim = A1 * WordSim(m_words_A, m_words_B) + A2 * LenSim(m_words_A, m_words_B) + A3 * OrdernWord(m_words_A, m_words_B);
System.Windows.Forms.MessageBox.Show("单位[" + m_A + "]和单位[" + m_A + "]的相似度为"+Sim + "。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information );
}
//单位名称预处理
public static String Word_YCL(String m_A)
{
m_A = m_A.Replace("一", "1"); m_A = m_A.Replace("二", "2");
m_A = m_A.Replace("三", "3"); m_A = m_A.Replace("四", "4");
m_A = m_A.Replace("五", "5"); m_A = m_A.Replace("六", "6");
m_A = m_A.Replace("七", "7"); m_A = m_A.Replace("八", "8");
m_A = m_A.Replace("九", "9"); m_A = m_A.Replace("零", "0");
m_A = m_A.Replace("1", "1"); m_A = m_A.Replace("2", "2");
m_A = m_A.Replace("3", "3"); m_A = m_A.Replace("4", "4");
m_A = m_A.Replace("5", "5"); m_A = m_A.Replace("6", "6");
m_A = m_A.Replace("7", "7"); m_A = m_A.Replace("8", "8");
m_A = m_A.Replace("9", "9"); m_A = m_A.Replace("0", "0");
return m_A;
}
//计算词形相似度
public static Single WordSim(ICollection
{
int m_Mix_Len = words_A.Count;
int SimWord=0;
if (m_Mix_Len > words_B.Count) { m_Mix_Len = words_B.Count; }
foreach (WordInfo wordInfo_A in words_A)
{
foreach (WordInfo wordInfo_B in words_B)
{
if (wordInfo_A.Word == wordInfo_B.Word)
{
SimWord = SimWord + 1;break;
}
}
}
return 1F * SimWord / m_Mix_Len;
}
//计算语句长度相似度
public static Single LenSim(ICollection
{
int m_Max_Len = words_A.Count;
if (m_Max_Len < words_B.Count) { m_Max_Len = words_B.Count; }
return 1F - 1F * (2 * m_Max_Len - words_A.Count - words_B.Count) / m_Max_Len;
}
//计算词序相似度
public static Single OrdernWord(ICollection
{
int i=0;int j=0;
int SameWord_Count = 0;int Word_Ordern_Pos = 0;int OrdernWord_Count = 0;
int[] SameWord = new int[100];
foreach (WordInfo wordInfo_A in words_A)
{
Word_Ordern_Pos=0;
foreach (WordInfo wordInfo_B in words_B)
{
Word_Ordern_Pos=Word_Ordern_Pos+1;
if (wordInfo_A.Word == wordInfo_B.Word)
{
SameWord[SameWord_Count]=Word_Ordern_Pos;
SameWord_Count = SameWord_Count + 1;
break;
}
}
}
for (i=0;i if (SameWord[i] > SameWord[i+1]) { OrdernWord_Count = OrdernWord_Count + 1; } } switch (SameWord_Count) { case 0: return 0;break; case 1: return 1;break; default: return 1F-1F * OrdernWord_Count / (SameWord_Count-1); break; } } 通过对选取的“163医院”、“陆军第一六三医院”、“63医院”、“海军163医院”四个名称进行单位名称相似度计算,结果与人工判断的结果一致。“163医院”可能是“陆军第一六三医院”和“海军163医院”其中之一;“63医院”不可能是“163医院”、“陆军第一六三医院”和“海军163医院”其中之一;“陆军第一六三医院”和“海军163医院”不是同一家医院。 表1 单位名称相似度计算结果 短句相似度计算是单位名称识别的重要技术方法,本文在对单位名称特点分析的基础上,对中文分词技术中短句相似度计算方法进行了必要的改进,在计算短句相似度时综合考虑了短句的词形、语句长度、词序的相似度对单位名称识别的重要程度设置不同的权值,使短句相似度计算达到最优。经实验数据表明该算法能够很好地解决单位名称识别问题。虽然实验环境下取得了较好的识别率,但在实际系统应用中还有不足之处,在本算法的基础上如能考虑到同义词与近义词的识别问题会达到更好的处理效果。 [1] 李玉红,柴林燕,张琪.结合分词技术与语句相似度的主观题自动判分算法[J].计算机工程与设计,2010,(11):2663-2666. [2] 王常亮,滕至阳.语句相似度计算在FAQ中的应用[J].计算机时代,2006(2):24-26. [3] 杜刚,王超.句子相似度计算模型的改进[J].电脑知识与技术,2008(36):2817-2818. [4] 宗成庆.统计自然语言处理[M].北京:清华大学出版社,2008. [5] 耿焕同,毕硕本.范例推理在网络自动答疑系统中应用[J].计算机工程与应用,2008,44(3):31-33. [6] 陈黎明,王芳.网络远程教育中答疑系统的研究现状及发展趋势[J].现代远程教育研究,2006,48(6):42-44. [7] 汪耿豪.基于FAQ的自动答疑系统的设计与实现[J].计算机时代,2009(12):39-41. [8] 周法国,杨炳儒.句子相似度计算方法及其在问答系统中的应用[J].计算机工程与应用,2008,44(1):165-178. [9] 杨思春.一种改进的句子相似度计算模型[J].电子科技大学学报,2006,35(6):956-959. [10] 崔恒,蔡东风,苗雪雷.基于网络的中文问答系统及信息抽取算法研究[J].中文信息学报,2004,18(3):24-31. [11] 秦兵,刘挺,王洋,等.基于常见问题集的中文问答系统研究[J].哈尔滨工业大学学报,2003(10):1119-1182. Application of Equipment Financial Information Management System Based on Natural Language Recognition Technology LIU Xin (Military Equipment and Economic Information Research Room, Naval University of Engineering, Wuhan 430033) In this paper, the natural language recognition technology is proposed to analyse the department name in different equipment financial information management system. An improved algorithm based on the natural language recognition is presented to distill the similar department name from different system, for the purpose of information exchange between different system. The proposed algorithm is realized by C# in experimental evaluation, which demonstrate a remarkable improvement. natural language recognition, equipment finance, information management 2015年1月2日, 2015年2月25日 作者简介:刘欣,男,硕士,副教授,研究方向:国防经济信息管理和计算机应用。 TP391 10.3969/j.issn1672-9730.2015.07.0345 结语