发明名称 一种基于语义的本地文档检索方法
摘要 一种基于语义的本地文档检索方法,属于信息检索的技术领域。传统的LSA方法,基于词袋模型,很难在概念层次上进行扩展,在语义层面上存在很多的信息丢失。本发明采用的检索方法是:首先按照传统的LSA方法对本地文档进行索引,然后根据本体对查询语句中出现的概念进行语义扩展,再根据查询及其扩展概念生成查询向量,向量的值会考虑查询概念和扩展概念的相似度,所以在一定程度上弥补了传统的LSA方法在语义上的缺失。本发明的重要意义是:对非结构化的文档信息科学的索引和有效的检索;实现对非结构化信息的随时随地的检索,帮助用户方便及时地获得自己需要的信息。
申请公布号 CN100517330C 申请公布日期 2009.07.22
申请号 CN200710041649.8 申请日期 2007.06.06
申请人 华东师范大学 发明人 顾君忠;杨静;李子成;张伟;孙双;刘峰;黄文蓓;董晓春;王锋
分类号 G06F17/30(2006.01)I;G06F17/27(2006.01)I 主分类号 G06F17/30(2006.01)I
代理机构 上海德昭知识产权代理有限公司 代理人 程宗德;石 昭
主权项 1、一种基于语义的本地文档检索方法,需要在以下的硬件环境中实现:该硬件环境含有客户端、服务器和有线网络或客户端、服务器和无线网络,客户端和服务器连接在有线网络或无线网络上,其特征在于,该方法包括两个过程:一、在进行检索前需要做准备工作,即需要根据传统的LSA算法对文档建立索引以及建立领域本体和计算本体中概念的相似度:第1步,对本地需要检索的非格式化文档,根据传统的LSA方法建立索引,过程如下:第1.1步:对于本地的文档集,通过分词工具对文档集合的每篇文档内容进行分词,同时对于每篇文档中的名词、代词、处所词、人名、地名、机构团体、其它专名进行词频统计,即计算出tf<sub>ij</sub>,tf<sub>ij</sub>表示第i个关键词在第j篇文本中出现的频率,分词工具是海量集团的中文分词工具,该分词工具可从网站<u>http://www.hylanda.com/</u>下载得到;第1.2步:根据第1.1步的结果,可以形成关键词-文档词频矩阵,矩阵的行表示的是关键词在不同文档中的词频特征,矩阵的列表示的是文档中所有词的词频特征,矩阵中第i行第j列的值表示的是第i个关键词在第j篇文档中的词频;第1.3步:根据第1.2步的结果,计算出每个词在整个文档集中出现该词的文档的个数,即n<sub>i</sub>,1≤n<sub>i</sub>≤N;第1.4步:根据第1.3步的结果,同时根据log<sub>2</sub>(N/n<sub>i</sub>)计算出每个词的全局权重,即idf<sub>i</sub>,对数的真数由1+N/n<sub>i</sub>变为N/n<sub>i</sub>,这种变化的意义基于以下假设:当所搜索的整个文本集中每一篇文本都出现第i个关键词,第i个关键词在区分这些文本所能贡献的力量将趋近于0,表现在公式中就是对于所有的i都有w<sub>ij</sub>=0,w<sub>ij</sub>表示第i个关键词在第j篇文本中的权重;第1.5步:由第1.1步和第1.4步,根据公式w<sub>ij</sub>=tf<sub>ij</sub>*idf<sub>i</sub>=tf<sub>ij</sub>*log<sub>2</sub>(N/n<sub>i</sub>)计算出每个关键词在每篇文本中的权重;第1.6步:索引过程到第1.5步结束,将第1.5步得到的关键词-文档权重矩阵A<sub>t×d</sub>作为特征矩阵保存,该矩阵的行表示的是关键词在不同文档中的权重特征,矩阵的列表示的是文档中所有词的权重特征,矩阵中第i行第j列的值表示的是第i个关键词在第j篇文档中的权重;第2步,根据人类对世界的认识,对概念的基本分类,利用建立本体的工具,建立一个知识本体,它是对概念在语义层次上的理解,本体的建立可以找专家建立;第3步,计算出本体中所有概念之间的语义相似度,计算的方法是:第3.1步,计算本体概念树每个概念的深度,深度的计算方法是:对于本体概念树中概念N’,它的深度定义为:Depth(N’)=Depth(parent Of(N’))+1,其中,根节点的深度为0,即root表示本体概念树的根,Depth(root)=0;parent Of(N’)表示N’的父亲概念或父亲节点;第3.2步,根据第3.1步计算本体中任意两个概念之间的长度,计算方法是:对于本体概念树中任意两个节点N’1、N’2,则它们之间的长度定义为:Length(N’1,N’2)=Depth(N’1)+Depth(N’2)-2×Depth(com_parent(N’1,N’2)),com_parent(N’1,N’2)表示N’1和N’2的公共父亲概念或公共父亲节点;第3.3步,根据第3.1步计算本体中任意节点的高度,计算方法是:对于本体概念树中任意节点N’,它的高度定义为:Height(N’)=Max(Depth(child Of(N’))),其中Max表示求最大值,child Of(N’)表示N’的所有子孙,即:N’的高度应该是其所有子孙的深度的最大值,也就是从N’的任意一个子孙到N’距离的最大值;第3.4步,根据第3.1步、第3.2步、第3.3步计算本体中任意两个节点之间的语义相似度,计算方法是:对本体概念树中任意两个节点N’1,N’2之间的语义相似度的定义为SN(N’1,N’2):<maths num="0001"><![CDATA[<math><mrow><mi>SN</mi><mrow><mo>(</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>1</mn><mo>,</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>2</mn><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><mi>Depth</mi><mrow><mo>(</mo><mi>com</mi><mo>_</mo><mi>parent</mi><mrow><mo>(</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>1</mn><mo>,</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>2</mn><mo>)</mo></mrow><mo>)</mo></mrow></mrow><mrow><mi>Height</mi><mrow><mo>(</mo><mi>root</mi><mo>)</mo></mrow><mo>&times;</mo><mrow><mo>(</mo><mi>length</mi><mrow><mo>(</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>1</mn><mo>,</mo><msup><mi>N</mi><mo>&prime;</mo></msup><mn>2</mn><mo>)</mo></mrow><mo>+</mo><mn>1</mn><mo>)</mo></mrow></mrow></mfrac><mo>;</mo></mrow></math>]]></maths>第3.5步,根据第3.4步计算结果,将所有概念两两之间的相似度保存;二、基于语义的本地文档检索的操作步骤:第一步,用户通过便携式设备通过设计的界面向服务器提出查询请求,便携式设备是PDA或个人电脑,即PC,查询请求是一个以自然语言形式描述的语句,PDA或PC将该语句以XML文件的形式传送给服务器,服务器接收到该XML文件后,解析XML文件内容,获得查询请求;第二步,服务器利用分词工具对查询请求即查询语句分词,提取其中的名词、代词、处所词、人名、地名、机构团体名、其它专名,将它们作为查询概念;第三步,根据本体和第二步,对查询概念进行扩展,得到查询概念的扩展概念以及它们的相似度,扩展的方法如下:根据准备工作第3步得到的概念之间的相似度对由第二步获得的查询概念进行扩展,扩展的方法是定义一个阈值θ,凡是和查询概念之间相似度大于θ的概念都作为查询概念的扩展概念;第四步,根据第三步和准备工作中准备的关键词-文档权重矩阵对应的关键词生成查询向量q,如果关键词是查询概念则其值取1,如果关键词是查询概念的扩展概念,则其值是查询概念和该概念之间的相似度;除此之外,向量中对应分量的值取0;第五步,对关键词-文档权重矩阵进行奇异值分解(SVD),即<maths num="0002"><![CDATA[<math><mrow><msub><mi>A</mi><mrow><mi>t</mi><mo>&times;</mo><mi>d</mi></mrow></msub><mo>=</mo><msub><mi>T</mi><mrow><mi>t</mi><mo>&times;</mo><mi>t</mi></mrow></msub><mo>&CenterDot;</mo><msub><mi>S</mi><mrow><mi>t</mi><mo>&times;</mo><mi>d</mi></mrow></msub><mo>&CenterDot;</mo><msubsup><mi>D</mi><mrow><mi>d</mi><mo>&times;</mo><mi>d</mi></mrow><mi>T</mi></msubsup><mo>,</mo></mrow></math>]]></maths>然后A将分解后的矩阵降维到K维,即<maths num="0003"><![CDATA[<math><mrow><msub><mi>A</mi><mi>k</mi></msub><mo>=</mo><msub><mi>T</mi><mrow><mi>t</mi><mo>&times;</mo><mi>t</mi></mrow></msub><mo>&CenterDot;</mo><mi>diag</mi><mrow><mo>(</mo><msub><mi>&sigma;</mi><mn>1</mn></msub><mo>,</mo><msub><mi>&sigma;</mi><mn>2</mn></msub><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><msub><mi>&sigma;</mi><mi>k</mi></msub><mo>,</mo><mn>0</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mn>0</mn><mo>)</mo></mrow><mo>&CenterDot;</mo><msubsup><mi>D</mi><mrow><mi>d</mi><mo>&times;</mo><mi>d</mi></mrow><mi>T</mi></msubsup><mo>,</mo></mrow></math>]]></maths>降维的方法是:如果<maths num="0004"><![CDATA[<math><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>j</mi></msubsup><msub><mi>&sigma;</mi><mi>i</mi></msub><mo>&GreaterEqual;</mo><mi>&alpha;</mi><mo>&times;</mo><msubsup><mi>&Sigma;</mi><mrow><mi>i</mi><mo>=</mo><mn>0</mn></mrow><mi>r</mi></msubsup><msub><mi>&sigma;</mi><mi>i</mi></msub></mrow></math>]]></maths>则k=j,其中0<α≤1;σ<sub>i</sub>是非0的奇异值,r为关键词-文档权重矩阵分解后,中间矩阵的秩,α反映了对原始矩阵信息量的保持程度,当α=0.7时,就是保留了原始矩阵70%的信息而去除了30%的信息,去除的信息可能是噪声;第六步,根据第四步和第五步,将查询向量q变化到K维空间,向量变化空间的方法是:<maths num="0005"><![CDATA[<math><mrow><mi>q</mi><mo>*</mo><mo>=</mo><msup><mi>q</mi><mi>T</mi></msup><msub><mi>T</mi><mi>K</mi></msub><msubsup><mi>S</mi><mi>K</mi><mrow><mo>-</mo><mn>1</mn></mrow></msubsup></mrow></math>]]></maths>其中q*是变化后的K维空间向量,q是原始查询向量,T<sub>k</sub>是降维后A的左奇异向量矩阵,即T<sub>t×t</sub>的前t行K列,S<sub>K</sub>是降维后A的奇异值矩阵,即S<sub>t×d</sub>的前K行K列;第七步,根据第六步,计算降维后的查询向量和每一篇文档对应向量,即D的每一个K维行向量的相似度,并根据向量相似度大小排序,向量相似度越大排的越靠前,向量相似度的计算方法是经典的Cos夹角的计算方法,具体是:<maths num="0006"><![CDATA[<math><mrow><mi>sim</mi><mrow><mo>(</mo><mi>q</mi><mo>*</mo><mo>,</mo><msub><mi>d</mi><mi>j</mi></msub><mo>)</mo></mrow><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>m</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><msub><mi>w</mi><mi>im</mi></msub><mo>&times;</mo><msub><mi>w</mi><mi>jm</mi></msub></mrow><msqrt><mrow><mo>(</mo><msubsup><mi>&Sigma;</mi><mrow><mi>m</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><msubsup><mi>w</mi><mi>im</mi><mn>2</mn></msubsup><mo>)</mo></mrow><mo>&CenterDot;</mo><mrow><mo>(</mo><msubsup><mi>&Sigma;</mi><mrow><mi>m</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></msubsup><msubsup><mi>w</mi><mi>jm</mi><mn>2</mn></msubsup><mo>)</mo></mrow></msqrt></mfrac></mrow></math>]]></maths>其中,d<sub>j</sub>为第j个文本向量,k为语义空间的维数,w<sub>im</sub>为q*的第m维权值,w<sub>jm</sub>为d<sub>j</sub>的第m维的权值,这样就可以计算q*与每篇文本的向量相似度,把向量相似度高于阈值的文本按向量相似度大小从高到低排列文本,再将该检索结果返回给用户。
地址 200062上海市中山北路3663号