相似度曲线(共7篇)
相似度曲线 篇1
0 引言
随着互联网的快速发展,网络成了人们获取信息的重要途径,HTML网页已经成为网络的重要载体。截至2006年11月,全球网站数量已经突破1亿,而据中国互联网络信息中心2007年1月发布的中国互联网络发展状况统计报告显示,全国网页数量已经达到了44.7亿页[1]。因此,网页的获取和分类日益成为研究的热点。作为获取即时信息重要途径的新闻网页分类更是受到更多研究者的关注。本文利用元搜索技术获取开源新闻网页,设计并实现了一个基于支持向量机的中文网页分类模型。
1 系统架构
此分类模型包括:①采集模块。利用元搜索技术,从Google,Baidu,Yahoo等新闻搜索网站根据输入的关键字,获取新闻信息。②预处理模块。本模块包括:网页清洗;建立正文DOM树,分段落;中文分词,建立VSM(向量空间模型);利用相似度曲线降维。③分类模块。此模块用SVM理论进行分类包括训练和分类过程。如图1所示。
2 具体实现
2.1 采集模块
信息采集是指根据特定的目标和要求,将分散蕴涵在不同时空域的有关信息通过特定的手段和措施,采掘和汇聚的过程。今天人们获取信息最重要的途径之一就是互联网。网页是构成互联网的基本元素,随着互联网的迅速发展,网页的数量也急剧增加,目前绝大多数网站依然使用HTML(Hypertext Markup Language,超文本标记语言)来编写网页。
网络信息采集是信息采集技术针对网络资源的具体应用,将用户指定的网络信息下载到本地的文件系统,建立某一时刻网络信息的快照的过程。目前出现的网络采集软件都是针对某一网站的特定的模版结构进行遍历分析和下载的,仅适用于已经指定网页样式信息的前提下,它们是以网站为中心实现的采集。其缺点是:信息来源单一,不能对主题相同的同一类信息进行采集,无法实现扩展信息的主题。
为提高网络信息采集的精度和宽度,本文采用元搜索技术从多个搜索引擎获得网页数据。另外为了提高数据采集的效率,采用了多线程和定时技术,对每个搜索引擎分配一定数量的搜索关键字,在每个搜索引擎完成时自动开始下次搜索,提高了搜索的实时性。
2.2 数据预处理模块
2.2.1 网页清洗
网页清洗就是去除噪声,提取网页主体。在一篇新闻报道网页中,仅有新闻主体信息是用户所关心的。对于新闻网页的特征分析就是要找出主体信息与网页中其他信息的差别以建立规则,对主体部分进行自动识别。新闻类网页中通常包含了:标题,时间,作者(信息来源),正文等几部分,还包括了导航区,超链接(相关链接),底部版权信息以及图片控件广告等等。其中标题,时间,作者(信息来源),正文为新闻网页的“主体信息”,其他为无关信息,称其为“噪声信息”。下面引入两个名词定义:
定义1:主体信息:新闻网页中的新闻事件主体,包括新闻标题、发布时间、作者和新闻正文。
定义2:噪声信息:新闻网页中除主体信息以外的信息。
根据新闻网页的视觉特征,新闻网页有如下特征:
①新闻主体中的链接数目远远少于其周围的噪声链接。
在新闻网页中,主体信息通常放在独一无二的结构中,且由特殊的样式修饰。其最显著的特征就是其包含大量连续的非链接字符,即使主体信息包含在重复出现的结构中,如〈p〉〈/p〉标签表示的多个段落,也可由其大量相邻的非连接字符与噪声信息区分开来。
②新闻主体的标题字体一般比正文的字体要大。
一篇新闻的标题作为新闻主要内容的概括和吸引读者的关键,通常由网页中全篇最大的字体来修饰,使标题醒目以此来吸引读者的注意力。而新闻标题总是放在与新闻正文相临的前面,因此,将新闻网页中被全篇最大字体修饰的文本作为参考点,能较好地定位新闻正文的位置。
除上述特征外,新闻正文前通常还包含新闻的发布时间。时间的格式相比网页中的其他文本较特别,也可作为区分新闻主体和噪声信息的参考。
通过对新闻网页的源文件得到整个网页的所有信息(包括标签和CSS等)。
利用模式匹配思想抽取文章的标题,发布时间,正文等信息。
2.2.2 建立正文DOM树
新闻网页正文有如下特点:
①标题即是文章主题。
②正文首段尤其是首句和末段包含更多信息。
从正文结构上看,正文中不同位置的携带的信息量是不同的,所以有必要区分每个段落和每一句话。段落之间有网页标签对〈p〉〈/p〉或〈table〉〈tr〉〈td〉〈/td〉〈/tr〉〈/table〉标识。句子之间的区别根据自然语言自身特点判定[2]:
大体上90%的句点是句子分界的标志,Riley、Reynar以及Mikheev[3]开发了一个分句的最大熵系统,在句子边界划分上达到99.25%的精确率。在分句上采用了此规则,达到了较好的分句效果。
DOM是处理XML和HTML的标准API之一。对操作一个文档对象的节点结构提供了实用的方法,它提供了像执行对象插入,更新,删除,克隆等这些常用的方法。
DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航以寻找特定信息。分析该结构通常需营加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。保存形式类似于数据结构中的树型结构,树型结构的节点对应着文档中的元素以及元素属性,同时节点还保存着元素或属性的值,即人们所关心的XML文档内容。W3C的DOM规范实际上是一组接口,这些接口指定了DOM API的各种元素应该做什么。然后使用特定的语言(如Java)实现接口以创建具体的实现。
对新闻正文建立如下DOM树。
2.2.3 分词与建立向量空间模型
分词在自然语言处理中占据重要位置,分词效果的好坏,直接影响到对文本语义分析的准确程度。
现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
本文采用了基于字符串匹配方法中的逆向最大匹配法与基于统计相结合的方法借用成熟开源包Lucene进行中文分词。
步骤如下:
①先制定一个停用词表,表中存放那些明显不能构成词的单虚字、助词等。
②分词时首先(第一遍扫描)将文档中含有的停用词表中的字、词去掉,以减少不必要的资源浪费。
③采用逆向最大匹配法,进行扫描。
④匹配法会遗漏一些生词(新词),用统计的方法进行处理,识别一些词典中不含有的新词。上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词,可以对文档中相邻出现的各个字的组合的频度进行统计, 计算它们的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可认为此字组可能构成了一个词。
不同行业或专业的新闻词句组织上有很大差异,针对这种情况,利用网络和人工两者结合的方法建立不同行业的专业词库。此方法有效提高了对专业词汇的识别率。
为了提高分词的速度和效率,同样采用了多线程的方式。
向量空间模型(Vector Space Model,VSM)[4]是由Salton G等于1975年提出的。是现今最常用的文本特征表示方法。其基本思想是以向量来表示文本,多个文本向量组成的文本集D的表示如下:
undefined
其中dn为第m个文本行向量,tn为第n个特征项列向量,wmn为第n个特征值在第m个文本中的权重。
2.2.4 构造相似度曲线
本文将正文中的每个句子作为一个行向量,句子中分词后的词作为特征列向量,每个词在正文中出现的频率作为权重。用余弦相似度计算句子之间的相似性。
undefined
最后用结果绘图。余弦相似度高处的出现波峰,余弦相似度低处出现波谷。如图3(注:横轴表示分词向量;纵轴表示相似度)。选择波谷处作为分界线,根据需要,选取一定数量的波谷之间的句子作为文本特征表示。此方法有效减少了特征文本数量,增加了文本段落之间的区分度。
2.3 分类模块
分类模块主要功能是将给定的新闻区分到指定的类别中。SVM(Supporting Vector Machine)是由VapniK[5]发明的一种相对较新的机器学习技术,其基于统计学习理论的坚实基础以及所具有的良好的推广性,防过学习能力,使其在许多应用领域获得了良好应用[6]。近年已被广泛地用于模式识别的多个领域,取得了非常好的效果。通过学习算法,SVM在训练样本中寻找具有最好区分能力的样本点集,称为支持向量(Support Vectors)。在分类阶段,SVM利用这些支持向量对未知类别样本的类别属性做出预测。本文采用流行的软件包LIBSVM做为核心的分类工具。
权重的计算方法常用的有布尔函数、开根号函数、对数函数和TF-IDF函数等[7]。如果一个词在某个问题类型中出现的次数越多,那么它与该问题主体的关联性越强;如果一个词在集合中很多问题类型中都出现多次,那么它对分类的贡献就小。基于以上两个特点,采用了TF-IDF函数进行权值处理。
很容易发现,如果一个关键词只在很少的网页中出现,通过它就容易锁定搜索目标,它的权重也就应该大。反之如果一个词在大量网页中出现,看到它仍然不很清楚要找什么内容,因此它应该小。概括地讲,假定一个关键词W在DW个网页中出现过,那么DW越大,W的权重越小,反之亦然。在信息检索中,使用最多的权重是“逆文本频率指数”(Inverse document frequency 缩写为IDF),它的公式为log D/DW其中D是全部网页数。权重通常是特征项频率的函数,用TF(Term Frequency)表示特征Term出现的频率,利用TF-IDF公式,是根据词条的重要性与词条的文档内频数成正比,与训练文档中出现该词条的文档频数成反比的原理构造的。
将每篇分词过后的正文的每个单词做为LIBSVM的输入属性。将每个单词的D-TF-IDF作为其属性权重。按照LIBSVM的规定格式,制作训练和分类样本。
3 实验结果
本文收集了3000篇国内国际新闻作为正例和1000篇娱乐或体育新闻作为反例,进行训练和学习,通过一系列的迭代调参,最后产生预测模型。对新的新闻进行预测分类,准确率为94%,达到了较好效果。
4 结束语
本文设计并实现了一个完整的网页分类模型。提出了基于相似度曲线的文本特征选择方法,此方法有效减少了文本数量,增加了文本段落之间的区分度。但是模型仍有很多不足和改进之处,尤其是没有考虑位置因素。另外改进方法有待和其它方法做比较,以显示其优越性,这些问题都是接下来的工作中需要改进或完善解决的。
摘要:随着互联网的快速发展,网络日益成为人们查找有用数据的重要手段。由于WWW上的信息很多存储在HTML页面上,网页分类就显得十分必要。利用各种开源软件,详细设计并实现了一个中文网页分类模型,同时利用元搜索技术实现数据采集,有效地提高了采集的广度和深度。在进行中文分词时利用了专业词库,此方法提高了分词的准确率,在建立VSM时提出了一种基于相似度曲线的网页特征抽取方法,此方法能有效解决特征提取的高维问题,并对提高特征区分度,缩小运算量具有良好的效果。
关键词:相似度曲线,VSM模型,特征抽取,TF-IDF公式
参考文献
[1]中国互联网络信息中心(CNNIC).第19次中国互联网络发展状况统计报告[R].2007.
[2][美]Christopher D Manning,[德]Hinrich Sch tze.统计自然语言处理基础[M].苑春法,等译.电子工业出版社,2007:82.
[3]Riley Michael D.Some Applications of tree-based modeling to speechand language indexing[J]//Proceedings of the DARPA Speech and Nat-ural Language Workshop.Morgan Kaufmann,Reynar and Tatnaparkhi,1997:339-352.
[4]Mikheev,Andrei.Feature lattices for maximum entropy modelling[J]//ACL 1998,36:848-854.
[5]Perkins C E,Royer E M,Das S R.IP Address Autoconfiguration forAd Hoc Networks[M].Internet Engineering Task Force,MANETWorking Group,July 2000.
[6]孙晋文,肖建国.基于SVM文本分类中的关键词学习研究[J].计算机科学,2006,33(11):183-184.
[7]邵华,高凤荣,邢春晓,等.基于VSM的分层网页推荐算法[J].计算机科学,2006,33(11):86-88.
疾病相似度方法研究 篇2
近年来, 相似度的研究在生物医学领域正受到各方的高度关注, 如:基因序列相似度[1]、生物本体术语的相似度[2]、药物相似度[3]等。而相似度就是指定量估算事物的相似性, 事物间的相似性则主要由事物之间的共同属性进行决定并确定。一个具体的事物, 总是有许许多多的性质与关系, 在此即将一个事物的性质与关系都称做该事物的属性。事物的形状、颜色、气味、美丑、善恶、优劣、用途等都是事物的性质;而包含、被包含、整体、部分、大于、小于、压迫、反抗、朋友、热爱、同盟、矛盾等, 则都是事物的关系。并且任何属性都是属于某种对象的。比较事物的相似度就是定量评估事物间的共同属性。
疾病相似度则是对疾病与疾病之间相似性的量化过程。疾病相似性是疾病与疾病之间的共同属性。疾病的属性包括:疾病与疾病之间的共同关系、疾病与疾病之间共同的关联因素。疾病与疾病之间的共同关系又包括:疾病与疾病之间的包含关系, 如:‘乳腺癌’包含‘男性乳腺癌’和‘女性乳腺癌’。‘乳腺癌’与‘男性乳腺癌’及‘女性乳腺癌’的关系是包含与被包含的关系。‘男性乳腺癌’与‘女性乳腺癌’即通过‘乳腺癌’得到了关联。疾病与疾病之间共同的关联因素包括:共同的致病基因、共同的治疗药物、共同的代谢产物等。例如, 基因‘NOS3’和‘AGTR2’是疾病‘乳腺癌’和‘糖尿病’的共同的致病基因;药物‘caffeine’和‘cisplatin’都是疾病‘乳腺癌’和‘卵巢癌’的治疗药物;代谢产物‘D-Glucose’和‘3-Methylhistidine’都是疾病‘类型2糖尿病’和‘阿尔茨海默氏病’共同相关的代谢产物。
1 疾病相似度发展现状
如图1所示, 计算疾病相似度的方法通常可以从两个角度考虑:基于语义关联计算疾病相似度、基于疾病相关的基因计算疾病相似度。生物医学领域经常利用本体计算术语的语义相似度, 如:基因本体[4]、人类表型本体[5]等。尽管如此, 这些方法中却只有很少一部分已用于计算疾病相似度。Resnik设计的方法即是其中最为常见的方法[6], 该方法更多是应用于基因本体计算基因功能、细胞构成、生物学过程术语的相似度, 而且若与其它多种方法 (union-intersection、longest shared path、JC) [7]相比, 则具有明显的优势[8]。Resnik的方法是利用本体中的‘is_a’关系计算术语相似度, 该方法计算疾病对之间的相似度主要依赖于疾病对信息量最大的共同祖先节点。而Lin的方法[9]则改进了Resnik的方法中对信息熵的比较方法, 从理论角度对Resnik的方法进行了一定的完善。Resnik和Lin的方法最近已由研究人员写入R包[10], 以方便计算疾病的相似度。Wang等人提出的方法对Resnik的方法进行了更深层的优化[11]。该方法在计算疾病对相似度时, 不仅考虑了疾病对的信息量最大的共同祖先节点, 还考虑了疾病对其它的共同祖先节点。该方法的优越性在基因本体中得到了更好的体现, 并且已用于计算医学主题词中的疾病术语语义相似度。
疾病的关联不仅体现在疾病相关的本体上, 而且体现在共同的致病基因上。因此, 研究人员同样关注如何基于疾病的致病基因计算疾病的相似度。目前存在两种基于基因计算疾病相似度的方法。第一种是基于共同的疾病基因 (based on overlapping gene set-BOG) 的方法[12]。该方法比较疾病之间共同相关的基因数目, 由此而获取疾病相似度。若与基于语义的角度计算相似度相比, 该法则从一个全新的角度发现相似的疾病对。因此, 该方法能发现新的未知疾病关联。尽管如此, 在计算疾病相似度时, 该方法却未考虑疾病基因之间的功能关联, 而显然可见的是这种关联对疾病相似度却有着一定影响。第二种方法即基于过程相似性 (process similarity based-PSB) 计算疾病相似度[13], 其中, 过程指的是致病基因相关的基因本体的生物学过程术语。该方法考虑了疾病基因的功能关联, 因此对BOG方法有了很大的提高。PSB与Resnik、Lin、LC和JC的方法相比, 也呈现了良好的性能。基因间的功能关联包含很多方面, 如:基因共表达、蛋白质相互作用、基因本体术语等。另外, 为了提高疾病相似度方法的性能, Fun Sim方法利用综合加权的人类基因关联网络[14]计算疾病相似度。
2 集成的疾病相似度算法
本文集成了疾病之间的基因关联和语义关联, 提出了集成的疾病相似度算法Fun Sim Wang, 计算公式如下:
其中, d1和d2是一对疾病, G1和G2分别是d1和d2相关的基因集, |G1|和|G2|则分别是G1和G2包含的基因数;GA1表示G1和G2信息量最小的共同祖先节点, GAi表示GA1的第i个祖先节点, Fun Sim (d1, d2) 表示了d1和d2之间的功能相似度, 而α表示的是‘is_a’关系表达的语义关联参数。基于Wang等人的研究, α=0.8。
3 验证过程
在图2中, 圆圈表示疾病本体[15]中的疾病术语, 圆圈之间的联系表示疾病术语之间的‘is_a’关系, 其中箭头指向为父节点, 另外一个则是子节点。相似的疾病基准集包括两个疾病集, 并分别来自于两篇文献。具体地, 一个疾病集来自于Suthram等人的研究[16]。该研究利用表达谱数据设计算法寻找到相似的疾病对, 再利用药物进行验证。另外一个疾病集则来自于Pakhomov等人的研究[15], 该数据集通过两个医学专家的联合验证而最终得到[17]。在此将这两部分疾病集合并为基准集, 共有47个疾病, 70个疾病对。以基准集作为正例, 同时从疾病本体中随机地抽取700个疾病对作为反例。更利用五种相似度算法计算相似度, 比较得到的相似度接受者操作特性曲线 (receiver operating characteristic curve–ROC curve) [18]。该验证方法共产生了100个随机的疾病对, 分别实验了100次, 以提高实验的真实可靠性。
4 实验结果与分析
图3 (a) 给出了通过每种方法得到的ROC曲线, 图的横坐标表示特异性, 图的纵坐标表示敏感性。由图可知, 通过每种方法得到的ROC曲线下方的面积分别为:Resnik (63.14%) 、Lin (66.17%) 、Wang (68.04%) 、BOG (78.10%) 、PSB (89.52%) 、Fun Sim (94.37) 、Fun Sim Wang (95.36%) 。对于每种方法而言, ROC曲线下方的面积 (AUC) 越大, 表明方法性能越好。而由图3中ROC曲线下方的面积清楚显示了Wang的方法比Resnik的方法有了一点提高, 且Wang的方法和Resnik方法得到的面积非常接近。显而易见, 在基于基因的方法中, BOG方法的性能是最差的。尽管通过PSB方法得到了很高的性能, Fun Sim仍然将PSB方法的性能提高了5%左右。在融合了基因功能和语义关联后, Fun Sim Wang方法已将性能提高到接近100%。
为了避免实现结果由于偶然的因素造成, 研究随机生成了100份疾病对集合, 并进行了100次实验。实验结果如图3 (b) 所示。图中横坐标是疾病相似度方法, 纵坐标是平均的AUC值。由该图可知, 平均的AUC值分别为:Resnik (63.45%) 、Wang (67.84%) 、BOG (76.57%) 、PSB (89.84%) 、Fun Sim (94.15%) 、Fun Sim Wang (95.56%) 。所得结果与图3 (a) 的结论亦保持了一致。
在七种疾病相似度方法中, Resnik的方法利用最大信息量共同祖先的信息熵识别疾病间的语义关联。在基准集中, 有一些疾病对仅存一个共同的祖先节点 (根节点) 。因此, 根据Resnik方法, 这些疾病对的疾病相似度即为0。例如:疾病对‘diabetes mellitus (DOID:9351) ’和‘Alzheimer’s disease (DOID:10652) ’的相似度为0, 因为在疾病本体中, 该疾病对的最大信息量共同祖先是根节点, 而根节点的信息量为0。为了避免错误地理解相似的疾病对, Sem Sim中就没有使用信息量。如此一来, 发生以上的情况时, 疾病相关的基因功能关联就能发挥应有作用。图3中的ROC曲线表明SemFun Sim方法取得了最高的AUC值, 这即充分验证了被集成进来的语义关联对识别真阳性率和减少假阴性率已获明显提高。
5 结束语
本文提出了一种新的疾病相似度算法。该算法融合了语义关联与基因功能关联。语义关联是指疾病与疾病之间通过疾病本体的‘is_a’关系建立的关联。基因功能关联指的是疾病相关的基因之间存在的功能关联, 包括:基因本体术语关联、蛋白质相互作用关联、共表达关联等。本文利用基准集 (70个相似的疾病对) 及100个来自疾病本体的随机集 (700个疾病对) , 对Fun Sim Wang方法进行了性能评估。而且, 在ROC曲线之下的面积已经达到了95.56%, 该结果表明Fun Sim Wang获得了一个非常高的真阳性率和非常低的假阴性率。
摘要:本文研究了集成语义与基因功能关联的疾病相似度方法。综合的加权的人类基因关联网络可用于衡量疾病相关的基因集之间的关联分值;疾病术语对以及其在疾病本体中的共同祖先相关的基因数可用于计算疾病术语的语义关联分值。这两类关联被用于计算集成的疾病相似度。通过从文献中搜集相似的疾病对作为基准集, 对疾病相似度算法的性能进行了有效的评价, 证实了集成的疾病相似度方法优于已有的其他方法。
相似度曲线 篇3
1)答疑是学生进行系统学习的有益补充,同时也是学生巩固知识的重要途径,无论学习的形式如何变化,答疑对于学习活动来说是必要且不可或缺的,在网络坏境下,及时、有效地获得解答是学生远程学习的基本需求。
2)通过对学生所提问题的记录分析,可以统计出学生普遍存在的知识薄弱环节,为教师进一步改进教学方法提供参考,成为辅助教学的有效工具。
3)在网络环境下的智能答疑系统采用了友好自然的自然语言接口,学生可以轻松自如地提问,及时解决学习过程中遇到的难题,使远程教学真正起到用户良师的作用,对于远程教学方式在我国的进一步普及,具有不可估量的重大意义。
4)将功能良好的智能答疑系统应用于国家大力发展的远程教学支撑平台中,具有很大的社会价值。
5)为自然语言理解以及信息检索技术的应用发展提供了一个方向,可以推动该技术领域的发展。
如何让计算机理解用户提出的自然语言描述的问题,检索到目标问题,并自动的返回答案,这是智能答疑系统的关键。本文讨论怎样根据用户问题去匹配目标问题的思想及其算法,这也是智能答疑系统的最终目的。
1 问题关键词匹配度计算
一个问题中含有一个或多个关键词,但是每个关键词在句子中的地位是不一样的,有的起决定性的作用。该类关键词就是要重点考虑的关键词,它与问题的匹配度为1。如:“编译原理是什么?”,含有关键词“编译原理”、“编译”,在这个问题中学生要问的是“编译原理是什么”,因而“编译原理”是要重点考虑的关键词。但是“编译”也属于《编译原理》这门课程的专业词,匹配时也可以考虑,因为这将有利于问题答案的检索。如果学生问的“编译是什么?”,若FAQ中没有该匹配对,不能检索到相同的问题则检索近似的问题。
例如:编译原理是什么?
起决定性作用的关键词,它与该问题的匹配度为1,不起决定性的关键词与问题的匹配度为0.5。
采用这种策略,可以实现简单的语义分析。
例如:“编译原理是什么?”与“什么是编译原理?”是同一个问题。如果用户输入的是这两个问题,则检索到的都是同一个问题。
如果问的是“编译是什么?”(假设FAQ中没有该问题与“编译”的匹配度为1的匹配对),则检索到近似的“编译原理是什么?”,然后返回其答案。这样系统用一个近似的问题及其答案来回答学生所问问题,从所返回的答案中学生能有所启发。
2 基于问题关键词匹配度的相似度计算
系统根据用户所问问题去检索相应的问题及其答案,即根据用户问题去匹配目标问题。匹配到的目标问题是否与用户问题对应,相似程度有多大?这将涉及到相似度问题。
句子相似度计算在自然语言处理中有着广泛的应用,例如,在基于实例的机器翻译中的源语言检索,面向常问问题集的自动问答系统中的问句检索等领域。在不同的具体应用中,相似度的含义也有所不同。例如,在基于实例的机器翻译中,相似度主要用于衡量文本中词语的可以相互替换使用而不改变文本的句法语义结构的程度;在信息检索中,相似度更多的是反映文本与用户查询在意义上的符合程度。
目前常见的两种句子相似度的计算方法:(1)基于词向量空间模型的TF-IDF相似度计算方法;(2)基于语义词典的相似度计算方法。
本文在这两种相似度计算方法的基础上提出了一种新的相似度计算——基于问题关键词匹配度的相似度计算:
当用户问题中的关键词与目标问题的匹配度为1且句子类别一致时,则认为目标问题与用户问题完全相似,相似度为1。
当用户问题中的关键词与目标问题的匹配度为0.5且句子类别一致时,则认为目标问题与用户问题近似相似,相似度为0.5。
当用户问题中的关键词与目标问题的匹配度为1或0.5但句子类别不一致时,则认为目标问题与用户问题低相似,相似度为0.25。
利用这种相似度计算方法,相似度在系统实现中不用单独计算,它的计算隐含在问题匹配中。
在实际的系统实现中,一般只要考虑前两种。这种方法是一种非常有效的相似度计算方法,在实际的系统中能大大提高系统的效率,减少了传统的相似度计算的复杂统计及计算。
3 问题匹配算法
利用本文中提出的相似度计算来完成问题的匹配——用户问题与目标问题的匹配。
利用FAQ库进行用户问题解答的基本计算流程如下图所示:
3.1算法程序代码
while(rsl1.next())//判断CutWord表是否为空即是否切到了关键词;AND判断是否遍历完;(技巧:只要能进入循环就不是空即切到了关键词;于是随即就可以进行遍历)
4 结束语
本文阐述了智能答疑系统的作用,介绍了一种基于问题关键词匹配度的相似度计算,然后利用该思想来完成问题匹配,并给出了问题匹配算法的流程图以及程序代码。
摘要:答疑是教学中不可或缺的环节,传统面对面的答疑浪费时间和精力,因而开发高效、准确、智能化的自动答疑系统是必要的。系统返回答案的准确性在一定程度取决于问题匹配的相似度。该文介绍了智能答疑系统中传统的相似度计算,然后在传统的相似度计算的基础上提出了一种新的相似度计算方法——基于问题关键词匹配度的相似度计算,同时给出了该思想在系统中的实现算法。
关键词:智能答疑系统,相似度,匹配度
参考文献
[1]侯丽敏.基于网络的智能答疑系统的研究与实现[D].河南:河南大学,2005.
本体相似度计算方法研究 篇4
本体映射算法以两个本体作为输入, 然后为这两个本体的各个元素 (概念、属性或者关系) 建立相应的语义关系。相似性提取是本体映射的一个重要步骤, 它主要是进行概念相似度的计算, 提高语义相似度计算精度成为提高语义信息检索质量的关键之一。语义相似度一般是指计算本体概念间的相似度, 多数方法所考虑的概念是基于一个本体的, 跨本体概念间的方法比较少。MD3模型是一种典型的计算跨本体概念间相似度的方法。
1 MD3模型
Triple Matching-Distance Model (MD3) 模型是一种跨本体概念间相似度计算框架。计算实体类a和b之间的相似度通过计算同义词集、特征属性和语义邻居之间的加权和, 公式如下:
其中w, u, v表示了各组成部分的重要性。特征属性细化为组成部分、功能以及其他属性。概念a和b的语义邻居及其特征属性 (即概念的部分、功能及其他属性) 也通过同义词集合描述, 每一个相似度的计算都通过Tversky公式:
其中A, B分别表示概念a和b的描述集合, A-B表示属于A但不属于B的术语集 (B-A相反) 。参数 (a, b) 由概念a和b和在各自层次结构中的深度确定。
2 EMD3模型
MD3模型的不足在于没有考虑对象实例对概念的影响, 同时其语义邻居只考虑语义关系中层次之间的相似度, 没有考虑非层次之间的相似度。本文在MD3模型的基础上, 参考了其概念名称相似度、特征属性, 对本体的结构以及概念描述两方面做了扩充, 重点讨论了跨本体概念间非层次关系的相似度的比较和实例对概念相似度的影响, 把MD3模型扩展到Extension of Triple Mapping Distance model (EMD3) 模型。
2.1 概念属性的相似度
属性有属性名称、属性数据类型、属性实例数据等要素, 因此判断两个属性是否相似主要从这三个要素来考虑。属性名称、属性类型本身是文本类型, 是字符串, 因此可以采用字符串相似度计算方法进行判定。例如用Humming distance来比较两字符串。设两字符串s和t, 则它们之间的相似度可由下式给出:
其中:若s[i]=t[i], 则f (i) =0;否则f (i) =1。由于每个概念的实例对该概念的每个属性都分配了一个相应的值, 对于其他类型的数据, 可以采用下面介绍的方法进行计算。
设概念A的属性为ai, 概念B的属性为bj, 两个属性之间的相似度的计算公式为:
其中wi是权重, 代表属性名称、数据类型、属性实例数据对属性相似度计算的重要程度, 且和为1。设概念A, B之间总共计算出m个sim (ai, bj) , 并设置相应的权值kl, 则概念之间基于属性的相似度为:
2.2 概念名称相似度
知网中概念的语义用义原来描述, 义原是描述概念语义的最小单位, 一共有1500多个义原。由于所有义原根据上下位关系构成了一个树状的层次体系, 所有可以用语义距离计算相似度。假设两个义原在该层次体系中的路径为d, 可以得到两个义原之间的语义相似度如下:式中a是一个可以调节大小的因子。在知网中一个概念由多个义原描述, 所以我们只要计算每个义原的相似度来考虑其重要性, 就可以得到概念之间的名称相似度。计算方法如下:, 其中m, n为概念c1, c2的义原数, wi为第i个义原所占的权重。
2.3 语义关系的相似度
语义关系包括层次语义关系和非层次语义关系, 层次语义关系具有有向传递性, 非层次关系不具有传递性 (如关联关系) 。
(1) 层次语义关系的计算
本文借鉴参考文献[1]中的方法来计算层次语义关系, 利用语义邻居的概念, 以实体为中心向周围辐射, 设定一个语义半径, 半径取值的大小反映与实体之间的亲疏关系。划定语义邻居的范围集合进行匹配, 取集合中的最大值作为语义邻居之间的相似度。语义邻居计算公式如下:
层次语义关系相似度计算:其中A, B分别代表实体a, b的语义邻居集合。
(2) 非层次语义关系的计算
上位词:定义概念的上位词为概念所有父类的集合, 公式如下:UC (Ci, H) ={CjC|H (Ci, Cj) }
基于概念上位词的定义, 定义概念的匹配公式:
与概念相关的非层次关系:如果关系的定义域或值域是概念c, 则称这些关系为与概念c相关的非层次关系, 公式如下:
还可以进一步把非层次关系细化为概念的In关系和Out关系 (可以认为非层次关系的方向是从定义域到值域, 凭此来定义In和Out的关系) , In关系指概念c是非层次关系的值域, 公式如下:。而Out关系指的是概念c是非层次关系的定义域, 公式如下:
比较概念的非层次关系, 首先应该找出两个本体中与这两个概念相关的同类非层次关系 (无需考虑不同类的非层次关系) , 进而比较这些同类非层次关系的另外一项之间的相似度 (如果要比较的概念是非层次关系的定义域, 分别找出这个关系的值域, 通过概念匹配公式对其进行比较, 反之亦然) 。
下面以In关系为例描述比较的过程:其中RaP-I表示本体p中与概念a相关的In关系, 而Rqb-I表示本体q中与概念b相关的In关系, 所以其交集RI表示本体p, q中与概念a, b相关的公共In关系集合。如果概念a, b没有公共的In关系, 则RI为空, 无需下面的计算。对于公共In关系集合, 公式如下:对In关系和Out关系进行加权综合, 得到非层次关系相似度的公式如下:
其中i, o为权值, 反映的是非层次关系的值域与定义域对概念相似度的影响程度。对层次关系和非层次关系计算结果进行综合, 得到概念语义环境的相似度计算公式如下:
其中t, u分别是层次关系和非层次关系的权重, 因为在本体中层次关系要比非层次关系的重要性高, 所以在计算中应该赋以较大的值, 即t>0.5>u, 且t+u=1。
2.4 概念实例特征的相似度
基于实例特征计算相似度的理论依据是, 如果概念所具有的实例全部都相同, 那么这两个概念是相同的;如果两个概念具有相同实例的比重是相同的, 那么这两个概念是相似的。对于概念A, B的具体实例, 可以用Jaccard系数来计算相似度:
其中P (A, B) 表示一个实例既属于概念A又属于概念B的概率, 表示一个实例属于概念A但不属于B的概率。
2.5 结论
由上面的分析, 综合了各个部分相似度的值, 得到跨本体概念间相似度的综合公式如下:
其中m, n, r, t为各个部分所占的权重, 根据各个部分重要性的不同m, n, r, t分别被赋以不同的值, 并且m+n+r+t=1。
3 结语
本文扩展的模型充分继承了MD3模型的优点, 并对MD3模型进行了优化。在选择了适当权重的前提下, EMD3模型能够确保语义相似度的计算更准确, 更全面。但是在语义相似度计算过程中存在着大量权重的设定问题, 对模型的性能有一定的影响。如何准确高效地设定权重是未来值得深入研究的问题。
摘要:MD3模型是一种系统的跨本体概念间相似度的计算方法, 这种方法无需建立一个集成的共享本体。本文在MD3模型的基础上, 充分利用本体对概念的描述信息, 重点讨论了跨本体概念间非层次关系相似度的计算, 把MD3模型扩展到EMD3模型, 使得概念间相似度的计算理论上更全面、更精确。
关键词:本体,元数据模型,语义相似度,MD3模型
参考文献
[1]Rodriguez M A, Egenhofer M J.Determining Semantic SimilarityAmong Entity Classes from Different Ontologies.IEEE Trans.onKnowledge and Data Engineering.2003.
[2]徐德智, 肖文芳, 王怀民.本体映射过程中的概念相似度计算[J].计算机工程与应用.2007.
[3]陈杰, 蒋祖华.领域本体的概念相似度计算[J].计算机工程与应用.2006.
[4]李鹏, 陶兰, 王弼佐.一种改进的本体语义相似度计算及其应用[J].计算机工程与设计.2007.
[5]Alexander Budanitsky, Graeme Hirst.Evaluating WordNet-basedMeasures of Lexical Semantic Relatedness[J].Computational Linguis2tics.2006.
一种综合概念相似度计算方法 篇5
关键词:异构,本体,映射,概念相似度
在当代知识集成的研究中, 无论是应用在普通知识系统中的本体, 还是应用于语义Web中的本体, 由于其表示形式和内在逻辑结构的多样性, 本体的数量也越来越多, 并且单个本体不能充分完成目标任务。因此, 必须联合多个本体来完成任务。由于本体的构造一直没有一个统一的规范和标准, 所以, 在同一个领域内会存在多个本体。这些本体的概念分类可能不同, 概念间的关系也可能不同, 并且相同的概念可能用不同的术语来表示。也就是说, 这些本体之间存在冲突, 它们是不匹配的, 是异构的。异构的本体之间不能进行互操作。要想达到信息交流的目的就必须在本体之间架起语义映射的桥梁。因此, 解决本体异构最有效的方法就是本体间进行映射。
本体映射的目的就是找到本体中概念之间的对应关系, 并制定出相应的映射规则。最初, 这些映射过程都是由人手工完成的。但随着语义Web的发展, 在Web上用本体表示的信息越来越多, 仅仅由人来完成这些工作已经力不从心, 因而迫切需要发展一些方法, 来自动地或半自动地完成这种映射过程, 以节省大量的人力劳动。当前有不少研究者致力于本体概念相似度的研究, 取得了一些成果, 但是还存在不少问题, 概括起来主要有如下两个: (1) 概念相似度的计算量大; (2) 概念相似度计算的片面性和计算方法的不完善。单纯从某一方面来计算概念相似度是片面的和不完善的, 概念相似度的计算应该充分考虑本体和概念的特点, 综合各个方面来进行计算。针对概念相似度计算中存在的问题, 提出了一种改进的计算方法, 先分别计算基于实例的概念相似度、基于概念名的相似度和基于属性的相似度, 然后进行加权合并形成新的综合相似度计算方法, 最后进行简单验证进而根据本体和本体中概念的特点, 设计了一种改进的相似度的计算方法。
1 本体映射及其过程
本体映射通过定义条件规则、函数、逻辑以及表与关系的集合来实现不同本体间的映射, 是完成本体集成的重要一步工作, 或者说, 本体映射是不同的本体在概念层语义相关联。源本体的实例根据语义关联的关系转换为目的本体。Ehrig给出了一个形式化的本体映射函数:
map:O1→O2;
如果sim (e1, e2) >s, map (e1) →e2, 其中e1和e2分别是两个本体中的实体, sim (e1, e2) 是这个实体的相似度, s是相似度阀值。
本体映射是指在两个本体中存在语义级的概念关联, 通过语义的联系, 实现将源本体的实体 (概念、实例、属性等) 映射到目标本体实体上的过程。本体的映射类型有概念-概念、属性-概念、属性-属性、情境和约束等。本体映射就是指给定两个本体A和B, 对于A 上的每一个实体, 设法在B上找到与其有相同或相近语义的实体, 这些实体包括本体中的类、属性以及类的实例。一个完整的映射框架应该包括整个映射过程:映射的发现、表达和执行。一个本体映射的过程, 如图1所示。
2 相似度及相似度计算
本体一般可理解为概念、属性和关系的集合。属性即概念的属性, 关系即概念间的关系, 因此, 本体映射主要是集中在概念间的相似度计算及相应的映射。在映射过程中, 本体映射的核心内容是计算两个概念间的相似度, 并求出本体中概念的相似矩阵。当其相似度大于某个阈值时就认为这两个概念间存在一定的映射关系 (这里只着重考虑1∶1的映射关系) 。
先定义相似度:Sim:w1×w2×O1×O2→[0, 1], 相似值在0和1之间。Sim (A, B) 表示A和B之间的相似度。w1和w2是两个本体所基于的术语集, O1和O2是需要映射的两个本体。
Sim (e, f) =1表示e和f是两个完全相同的概念;
Sim (e, f) =0表示e和f是两个完全不同的概念。相似度综合公式:
undefined, 其中undefined
wk为每种度量方法的权植。
3 改进的综合概念相似度计算方法
把概念相似度分成基于实例的概念相似度、基于概念名的概念相似度和基于属性的概念相似度。先分别计算相似度, 然后把基于实例的概念相似度、概念名的相似度和属性的相似度进行合并生成最终的综合概念相似度。
(1) 首先设实例相似度为Sims (a, b) , 利用概念具体实例对概念相似度进行计算。
一个概念的实例也是它祖先概念的实例。对于一个实例, 利用Jaccard系数来计算相似度。该系数的计算公式为:
undefined
根据本体中概念a和概念b的具体实例来计算undefined和undefined。其中P (a, b) 表示一个实例在某本体中即属于概念a, 又属于概念b的可能性。undefined表示一个实例在某本体中属于概念a, 但不属于概念b的可能性。undefined表示一个实例在某本体中不属于概念a但属于概念b的可能性。
undefined
其中H指实例个数, U指实例集合, H (Uundefined) 表示在U1中即属于a又属于b的实例个数。以P (a, b) 为例, 先对本体a中概念A的实例进行样本训练, U1是本体a的实例集合, 根据概念A把U1分成实例集Uundefined和实例集undefined, 由实例数据可计算可得undefined, 同理本体b中概念B的实例进行样本训练, U2是本体b的实例集合, 根据概念B把U2分成实例集Uundefined和实例集undefined, 由数据可以得到, undefined。然后把本体a和本体b位置调换。先对本体b中概念B的实例进行样本训练, 同样可以得到, undefined, 等值, 最后可以利用公式3-5算出以上的公式。
(2) 基于概念名计算概念相似度:
本体中的概念是分层的。本体也可以看成一棵概念树, 树中每个结点代表一个概念。所以, 概念间的关系也具有树的一些性质。树中有子结点、父结点和兄弟结点等一些特有概念, 所以, 概念树中也存在子概念、父概念和兄弟概念。这里按照 [Tversky1977]和集合论给出语义相似值的一般性计算公式作为两个本体间概念相似度计算的方法, 令计算所得的相似度记为Simr (a, b) :
undefined
这里的A、B分别是概念节点a, b描述元素的集合, 对于不同的匹配标准, a, b的描述元素是不同的;|A∩B|是共有描述元素的个数, 或者称共有描述元素集合的势;|A/B|也同集合论中的意义;depth () 函数计算概念节点在概念树中的深度。α (a, b) 系数是反映两个概念在各自本体层次中的位置, 以及本体描述的详细程度不同对语义上相似性评价产生的不对称的影响。这个公式符合上述的语义相似Simtree (a, b) 所具有的性质, 而且与信息论中的相似性定义相一致。
(3) 计算基于属性的概念相似度:
在本体中, 每个属性也是一个概念, 两个属性间的相似度记为Sima (a, b) , 属性的语义评价是对两个概念的属性集合进行评价, 因为属性表达为<属性名, 属性值的约束>这样一个二元组, 令a的属性集合的势为m, b的为n, 因此有公式 (5, 7) 的变形。
undefined
其中undefined, 即近似计算a, b 集合中相同语义属性的个数, 为了防止出现a, b的属性集合的势减去ao1∩bo2的差为负数, 有:
f (m, |ao1∩bo2|) =m-|ao1∩bo2|, m>|ao1∩bo2| (9)
(4) 最后综合概念相似度的计算:
Sim (a, b) =
wsSims (a, b) +wrSimr (a, b) +waSima (a, b) (10)
其中ws+wr+wa=1。
4 总结与展望
本体映射是本体融合领域的核心, 是一个非常复杂的过程, 在这个过程中, 包括本体与数据库, 本体与XML文档, 本体与网页上数据等的映射关系。在这里只列出来两个本体间的映射作为研究方法的探讨, 并详细阐述了异构本体映射的过程, 文中使用的是将多种相似度进行综合以体现实体在各个层次上的相似度的方法实现了本体的映射, 对于各种特征权值的确定可由本体专家根据各种特征在本体中出现的频率定义。提出的相似度计算方法有两个优点:一是根据本体语义树的特点和相似度计算的启发规则以及数据挖掘的思想, 合理设置侯选映射集, 降低了计算量;二是根据本体和概念的特点, 对概念相似度计算方法的改进。
参考文献
[1]Guus Schreiber, 史忠植.知识工程和知识管理[M].机械工业出版社, 2003.
[2]王志军, 郭学俊.基于本体的XML语义集成研究[J].计算机技术与发展, 2006 (8) .
[3]李玉华, 刘涛.基于混合本体方法的集成算法研究[J].计算机工程与科学, 2007, (07) 8 (9) :687-693.
[4]H Mihabi, Ana Simonet.Towards a Declarative Approachfor Reusing Domain Ontologies[J].Information Systems, 1998, 23 (6) :365-381.
[5]聂朝晖, 王英林.相似本体间属性映射方法的研究[J].计算机仿真, 2006 (9) .
[6]曹泽文, 钱杰, 张维明, 等.一种改进的本体映射方法[J].科学技术与工程, 2006 (19) .
[7]郑丽萍, 李光耀, 梁永全, 等.本体中概念相似度的计算[J].计算机工程与应用, 2006 (30) .
旅游本体的概念相似度算法改进 篇6
语义相似度是用来衡量文档或术语的语义内容或涵义间的相似程度的概念[1],目前相似度计算已广泛应用于本体学习与合并、语义标注、知识管理中的信息抽取及自然语言理解等相关领域。与依赖关键词的检索相比,基于语义的检索能大幅度提高信息检索的查准率和查全率[2]。而概念的相似度计算决定了语义匹配的精确度,是语义检索的基础,因此提高概念相似度计算的精确度成为本体应用的关键。
目前,国内外学者已经对概念相似度计算进行了广泛的探索和研究,提出了很多计算相似度的方法。根据所使用的数据源及数据源的使用方式,相似度算法大致可分为基于路径的方法、基于特征的方法、基于信息内容IC(Information Content)的方法。基于路径的方法把概念相似性度量建立在本体中分割两个概念的语义连接数目上[3,4]。基于特征的方法根据本体概念描述模型中相同和不同的概念属性来估计概念间的相似度[6]。基于信息内容的相似性度量方法把概念信息量与本体知识相结合[7,8,9]。传统的信息内容求解方法是基于统计方法,统计给定语料库中的概念出现的次数,求得其出现的概率,从而得到信息内容值。但是基于统计的方法会受语料库内容的影响,工作量较大。
本文结合Word Net词典本身结构,综合考虑概念在分类树中的子节点信息、深度信息、公共父节点信息,提出了一个新的基于信息内容的概念语义相似度算法,这种基于Word Net本身结构的求解方法不需要其他语料库的参与,简单易行。同时本文利用Word Net词典,构建了旅游领域本体,通过实例证明该算法有效地提高了概念间语义相似度计算的准确度。
1 信息内容
1.1 信息内容算法概述
用数学语言去描述Word Net中的概念的信息内容参数,P(c)表示遇到概念c的实例的概率。根据信息理论中的定义,信息内容表示为-log P(c),即IC(c)=-log P(c),含义是一个概念的出现的概率越大,则该概念的自信息量就越小。其中,c是指某一具体概念,IC(c)指概念c的信息内容值。在Resnik的实验中,求解P(c)的方法是统计布朗语料库中名词出现的频率,计算方法可以形式化表示为:
其中,count(w)表示单词w在语料库中的个数,N表示语料库中的名词个数。
由式(1)可以看出,对于不同的语料库,则有可能得到不同的IC(c)。这是因为语料库中的概念是有限的。不同的语料库概念的数量也不同,出现的频率也不一定相同。由此可见,基于语料库进行词频统计有着不足之处。
Seco的IC计算模型是基于Word Net自身分类树结构来求解[10]。Seco发现子节点越多的概念所包含的信息量越少,而那些叶子节点的信息量最大。Seco的计算模型形式化表示为:
其中,hypo(c)返回值为概念的所有子节点数,max_node是一个常量,表示存在于分类树的所有概念的数目。
然而,该模型只考虑了概念的子节点数。如果在本体树中两个概念的子节点个数相同,则IC值相同。为此,Zhou在此算法基础上加入了概念深度因素[11]:
其中,depth(c)是概念深度,max_depth是本体树的最大深度。虽然上述算法较之Seco算法有所改进,但该模型仍无法区分概念子节点数相同、深度相同时的IC值。
1.2 信息内容算法改进
通常我们用Sim(A,B)来表示概念A和B间的相似度。概念信息内容的精确与否直接影响到概念间相似度的比较。经过分析,本文认为影响概念信息内容及概念间相似度的因素有:
(1)被比较概念在本体树中的深度。根据Resnik[7]和Seco[10]理论,概念深度越小,说明出现频率越高,则该概念越抽象,所涵盖的信息内容也就越少。反之,底层概念更为具体,所继承的信息内容也越多,概念间所共享的上层信息概率越大,因此底层概念间的语义相似度一般大于高层概念间的相似度。如IC(水果)
(2)被比较概念在本体树中所在簇的密度(簇:在语义树中,从根节点分出的树枝[12])。簇中概念节点越多,密度越大,说明对该簇根节点概念的细化程度越大,所对应的子节点所代表的概念也就更为具体,信息内容也就越大,所共享信息的概率也就越大,因此相似度越高。如第2节的图1中Activity簇的细化程度比Accommodation簇高,IC(Relaxation)>IC(Hotel)。
(3)被比较概念在本体树中相隔的路径长度。在密度及路径类型相同的情况下,概念间路径长度越长,相似度越小。如图1中Sim(Luxury Hotel,Hotel)>Sim(Luxury Hotel,Accommodation)。
(4)被比较概念最近祖先节点LCS(Least Common Subsumer)的信息内容。在密度、深度及路径长度相同的情况下,被比较概念最近祖先节点的信息内容越大,概念的信息内容也就越大。如第2节的图1中,IC(Sports)>IC(Rural Area),则IC(Climbing)>IC(Countryside)。
基于以上分析,提出了基于信息内容特征参数求解的新模型,如式(4)所示:
其中,Cnode_max是概念C所在簇的概念节点总个数,Tnode_max是本体树所有概念节点的个数,AIC是概念C最近公共祖先节点的IC值,Hnode是概念C最近祖先节点拥有的与C深度相同的子节点个数,hypo(c)是概念C的所有子节点,depth(c)是概念C的深度,Tdepth_max是本体树的最大深度。
上述算式中的分母把信息内容值约束在[0,1]之间,本体树中顶层概念节点信息内容值为0,底层概念节点信息内容值为1,如此规律递增。概念节点越向上,说明概念出现的频率越高,所包含的信息内容越少,反之亦然。同样,概念节点所包含的子节点越多,则出现的频率越高,涵盖的信息内容也少。在深度、密度、子节点数都相同的情况下,如果父节点的信息内容值越大,则子节点的信息内容值也越大。
2 实例与仿真
2.1 实例
在研究与旅游有关的知识体系时,我们利用Word Net把有关的本体分成了Activity、Way、Accommodation和Destination四大类。图1为利用Protégé4.1创建的本体库片段。
2.2 实验仿真
为了验证旅游本体库的合理性,以及检验本文算法的实用性和有效性,我们使用MyEclipse 6.5、JDK 1.6.0等开发工具实现了本文中的算法。同时用基于路径的方法(Wu&Palmer[1])、基于特征的方法(David&Montserrat[6])、基于信息内容的方法(Resnik[7]、Jiang&Conrath[9]、Lin[8])对图1中部分本体概念进行了相似度求解并与人工打分进行了比较,结果见表1、表2。其中,基于信息内容的方法分别使用了Seco[10]、Zhou[11]及本文模型进行了结果对比。
本文采用皮尔森相关系数作为评价本文相似度计算公式的标准,如式(5)所示:
其中,xi表示相似度计算公式计算出来第i对概念的相似度值;yi表示由专家判定的第i对概念的相似度值;分别表示它们的平均值;σx和σy分别表示它们的方差。
不同相似度算法和不同信息内容算法对相同概念进行相似度求解的结果。其中,方法1为基于路径算法,方法2为基于特征算法,方法3-方法5为信息内容算法。所对应的具体算法名称详见表3。
从表2中的数据可以看出:本文的算法计算结果比较精确,更为接近人类专家的判断结果。
同时,为了更进一步验证本文算法的本体适用性,将该算法应用于文献[12]的基因本体中,对基因本体的部分概念节点进行了相似度求解,并把该结果与文献[13]中的算法结果进行对比,结果如表4所示。
3 结语
本文给出了概念的信息内容参数模型,该参数可以广泛应用到基于信息内容相似度算法当中。相对比其他模型,该模型不仅考虑了概念的子节点的个数,而且将概念所处于树中最近公共祖先节点、簇中同深度的节点数等纳入模型当中,使得概念的IC值更为精确。通过与其他相似度算法进行比较,结果表明本文算法求得与人工判别得到的相似度值的相关系数更高,同时把该算法用于基因本体,更进一步证明本文中新的IC模型的本体适用性。
摘要:传统的基于信息内容的概念相似度算法在计算信息内容值时过于依赖语料库,给出一个新的只通过WordNet结构计算概念语义相似度的信息内容模型。该模型以WordNet的is-a关系为基础,不仅考虑了概念所包含的子节点个数和所处深度,而且将该概念所处的簇及父节点的信息内容值引入到模型中,使得概念的信息内容值更为精确。实验结果显示将该模型应用到领域本体的概念相似度计算中,可以明显提高现有相似度算法的性能。
程序相似度判定算法研究与实现 篇7
当前的大学教育中学生作业抄袭现象比较普遍,尤其是程序设计类课程,作业是以电子文档方式存储的,学生可以直接将互联网上或其他同学的作业拷贝过来,作一些简单修改就直接交给老师,抄袭容易[1,2,3]。国外很多教育机构针对程序设计课程的源代码抄袭现象进行的调查显示,高达85.4% 的学生承认抄袭过别人的编程作业[4,5]。教师在大量的程序作业中人工判别抄袭将是一项繁重的工作,也无法确保考核的正确性和客观性。因此,检测程序代码的相似度具有重要的现实意义,可以帮助教师检查学生中的抄袭现象,还可以辅助实现作业批改或者试卷评阅的自动化[6,7]。
程序代码相似度检测早在20世纪70年代初就有学者对此进行了研究。1976年,Purdue大学的Ottenstein[8]首次提出了基于属性计数法度量相似度算法———An Algorithmic Approach to the Detection and Prevention of Plagiarism。Ottenstein首次使用Halstead程序度量方法进行程序相似度识 别,其开发的 某系统可 直接统计M.Halstead[9]提出的衡量程序 长度的4个基本软 件科学参数:n1,n2,N1,N2。Ottenstein认为两个程序具有相同的4个属性值的可能性是非常小的。这4个程序的参数,构成一个向量vi,设另一程序4个参数构成向量vj,则可通过计算这两个向量的夹角余弦作为其相似度。1992年,Komondoor和Horwitz提出使用 切片技术 进行检测[10],把语句完全相同的代码中间夹杂的不相关语句放到该部分代码的前面或后面,如此就会使两段相似的代码连成一体,形成一个更大规模的相似代码,进而能够识别出程序中的非连续完全相似代码。1996年,Verco和Wise[11]指出,对于仅仅使用属性计数法的检测算法,增加向量位数并不能改善错误率。改进属性计数法的措施就是加入程序的结构信息,结合结构 度量(structure metrics)来检测相似度。
本文在已有研究的基础上,基于属性度量与最长公共子序列算法,将属性度量的结构无关性与最长公共子序列算法的结构依赖性有机结合,巧妙避开了两个算法原有的缺点,取长补短,从而得到源代码较为可信的综合相似值。
1相似度判定算法分析
1.1最长公共子序列算法
最长公共子序列[12](Longest Common Subsequence,LCS)算法用于计算两个给定字符串分别删除零个或多个字符后得到的长度最长的相同字符序列。该算法的核心思想为动态规划[13],以LCS(A,B)表示A,B的最长公共子序列,其动态转移方程如下:
设LCS(Ai,Bj)表示长度为i、j的两字符串的最长公共子序列长度,ai、bj表示字符串中下标为i与j的字符,将动态转移方程改写成易于编程的数学表达式描述如下:
1.2相似代码分类
2001年,Edward L.Jones对程序相似代 码之间的 更改手段重新总结,在不影响程序结果的前提下,将相似代码分为10类情况[14],如表1所示。
这10种情况相对简单的解决策略如下:
(1)对于逐字拷贝产生的代码,由于源代码未作改动,或只有细微改动,对两部分代码使用最长公共子序列算法(以下简称LCS算法),将可以准确得出两代码的相似程度。
(2)对于更改注释语句后形成的代码,由于注释语句与程序功能无任何关联,只具有说明功能,去掉注释对程序的实际运行无任何影响。因此,将需要比对的两段程序去掉注释,即可得到类似于逐字拷贝产生的相似代码,对其使用LCS算法即可得出相似程度。
(3)更改空白区域与更改注释信息的行为类似,只需对源代码进行空格缩进处理,进而使用LCS算法得出相似程度。
(4)重新命名标识符后的源程序,经过编译后与修改之前的源程序产生同 样的可执 行程序,只对可读 性有影响,因此可以对用户自定义变量进行统一替换后使用LCS算法。
(5)通常数据类 型的修改 都会影响 到程序的 执行结果,但也有部分数据类型之间存在隐式转换,绝大多数情况下对此类数据类型的修改将不影响运行结果。因此,将所有可以隐式转换的数据类型统一替换成指定的数据类型后使用LCS算法。
(6)对于更改各类语句、语句块顺序的做法,可以通过Halstead属性统计的方法来计算相似程序,该方法只统计属性的数目而不讨论其出现的位置,因而得出的结果也不受语句顺序的影响。
(7)若用户增加无用语句与变量,则需使用程序切片技术处理,在此不作深入研究。
(8)若用户使用等价语句重新书写源程序,则单从对字符数据处理已无法解决,需对程序进行语法分析处理。若用户对整个源程序 重写,即使通过 语法分析 得出其相似,也很难将其归为抄袭,因为即使正常的代码书写,若逻辑过程一致,则其最终代码与等价重写代码也相似。
学生作业中最常见的相似代码类型为表1中的前8种,本文所研究算法将对后两种情况不予考虑,认可其中的改动部分为不相似。
由前面所述应对策略可以看出,Halstead程序度量法可有效识别出代码语句块顺序错乱的相似代码。而LCS算法则可有效识别出对于代码语句块顺序未发生改变的相似代码,若将两者优点结合,则可较为准确地识别出上述几类相似情况。
1.3解决相似的办法
目前,相似代码的检测所针对的对象主要分为两种:一种是源代码文件,另一种是将源代码进行某种形式的转换,将其转换成 某种内部 信息形式,例如:目标文件 (.obj),然后运用检测方法分别进行比较。已有的识别方法主要分为以下3类:基于String、基于Token和基于ParseTree[15]。
(1)String:源程序以字符串为单位划分,最典型的就是按照行来划分,将这些String相互比较来发现重复的字符串序列。
(2)Token:由词法分析程序将源文件转换成Token,查找相似的Token流。
(3)Parse-Tree:基于源程序文件或者目标文件,建立完整的语法树,搜索树中相似的子树。
三类识别方法特性如表2所示。
本文将Halstead与LCS结合,且算法实现用于编程教学,代码量不会过大,在教学过程中,偶尔也会穿插其它编程语言。因此,使用基于String的处理方式更加合理、更易于实施。
2算法改进
基于对代码相似判定算法进行的一系列研究,以及对各种编程风格进行分析,得出下列要素:
(1)不以行为单位对源码进行分解。在用户编码风格出现差异时,若行内语句过多,行内语句间并无任何内部关联。此种情况下,以行为单 位将可能 导致某种 极端情况,即所有语句都写在同一行上,此时,算法将退化为对整个程序进行相似分 析操作,达不到预 期的分块 目的。因而,本文算法采取以语句为单位对源码进行处理,各编程语言普遍以“;”为语句结束标志,算法将以分号对源码进行分割处理,此举有效避免了上述的极端情况。
(2)只度量属性个数。Halstead程序度量计算法在统计整个源程序文件时,获得的度量属性频度较高,而在采取基于字符串的子句分割处理条件下,度量属性的频度取值往往较低,通常为1。为简化子句的相似度计算,提高程序运行效率,算法将只对度量属性的种类进行考量。对于频度不为1的度量属性,在本算法的处理方法下亦可得到体现。
(3)对单条语 句使用LCS算法度量 其结构相 似度。Halstead程序度量法无法识别程序结构,但可以识别语句顺序发生改动的源码,LCS对程序相似长度进行统计,达到对结构的度量,但对于语句顺序发生变化的源码,LCS计算的相似长度将大为降低。
(4)抄袭程度计 算。由于在预 处理过程 中去掉了 注释、头文件信息,对用户变量进行统一替换,使得源程序丢失过多信息,导致判定算法对修改了此类信息的源码与未修改此类信息的源码进行同等处理。然而,对代码未作修改与稍作修改,这两种做法代表的抄袭心态有巨大差别。虽然都为抄袭,前者的行为更为恶劣。
综合以上结论,改进的算 法实现具 有以下特 性与功能:1对输入源码进行空格紧缩处理;2将源码中的头文件信息、注释信息按照指定格式及顺序移动到冗余信息链表上,供后续处理;3将获取的用户自定义变量及数据类型进行记录后再对其统一替换;4采用基于字符串的子句分割处理,以分号作为分割条件;5对度量属性种类进行权值计算,以方便比较;6各语句片段权值逐一比较,找出最匹配的相似语句;7对权值相似语句排序,计算排序后的最长公共子序列长度,得出单句语句的相似程度;8对所有相似语句进行数据统计,得出最终代码相似度;9对于相似度过高的代码,将继续对其冗余信息采用类似手段考核。
改进的算法能够综合解决相似种类及解释:1逐字拷贝:由于此类程序不论在整体上、局部上以及待度量属性上都未作修改,算法能够有效识别出,而最终得出的相似度必然接近100%;2更改注释语句:由于算法将注释信息添加到冗余队列,在对程序考核之后,若程序主体相似过高,则对注释信息亦会考量,进而得出代码注释部分的相似程度,其结果与程序相似结果独立;3更改空白区域:对于空白区域,算法不对其个数进行统计从而加以区分,多个连续空格将视为一个。因而,用户对空白区域的添加或删除将不对相似程度产生影响;4重新命名标识符:程序主体相似过高时,对标识符列表进行考量,结果与程序相似独立;5更改数据类型:若程序主体相似过高,将对数据类型列表进行考量,结果与程序相似独立;6更改代码块顺序:由于算法采用局部逐一比对,更改代码块顺序将对结果无影响;7改变表达式中的操作符和操作数顺序:Halstead属性只对表达式中的操作符种类统计数量,改变操作符顺序对此无影响;8改变代码块中语句的顺序:原理同6;9增加语句和变量:算法未进行相关的程序切片处理,该做法将降低程序的相似程度;10用等价语句替换原有语句:算法未涉及源程序的语法分析,该做法将降低程序的相似程度。
3改进后的算法流程
在对源码进行比较前,源程序将经过预处理,剔除源码中无用信息并将此信息附加到冗余信息列表中,将源码分解成符合处理要求的形式。
单条语句的权值由操作符与关键字构成,每个操作符与关键字都具有唯一权值,所有操作符与关键字进行逻辑或操作即可得出该条语句的最终权值。
预处理流程中使用的操作符权值计算索引如表3所示。
预处理流程如图1所示。
语句以分号或大括号作为分割符,分割后的语句块作为本算法的基本处理单元。关键字被记录在指定数组中,计算模块获得待计算字符串后,设置初始权值为1,将待计算字符串逐一与数组中关键字比较,同时权值进行左移1位运算,即等效的权值乘以2,找到匹配字符后返回权值,若无匹配,返回 -1表示该字符串非关键字。待判定源码与目标源码预处理结束后,程序将对两份源码的每条语句操作符权值与关键字权值逐一比较,计算出待判定源码与目标源码的关键字权值与操作符权值的最佳匹配。对于匹配值较高的源码,将语句中包含的自定义变量进行统一替换,对替换后的语句执行最长公共子序列算法,计算出公共子序列长度,然后将其值与待定源码和目标源码中长度较长的语句长度计算比值,最终获得待定源码与目标源码间的每条相似语句,程序根据代码量计算相似度,并根据用户需要,将详细结果以指定形式反馈给用户进行人工分析。流程如图2所示。
4算法实现
4.1程序相似度判定实现
4.1.1操作符权值计算
程序依据各类一元操作符的权值,与最终权值进行逻辑与,以获得单条语句的整体权值,代码如下:
4.1.2关键字权值计算
根据单词在关键字表中的位置,得出其相应的二进制位值,与最终结果进行或操作进行置位。
4.1.3权值比较
对权值采取二进制位个数统计,得出相同部分二进制位为1的个数,另取出两个权值中二进制数中1的个数较多的权值,将两数相除后作为权值的相似程度。关键字相似采用与此相同的方法,结果与操作数独立,参考优先级大于操作符相似。
4.1.4最长公共子序列长度计算
对权值相似度达到阈值的语句排序后,采用下列最长公共子序列长度算法计算两语句间的相似程度。
4.2程序相似度判定结果
算法首先以分号或大括号作为分隔符,将语句分割为基本处理单元,然后以多种方式对待测源码与目标源码进行相似度考量,如:目标原始代码考量,剔除无用信息后的考量,统一替换变量后的考量,统一替换可以隐式转换的数据类型等,最终得出 各类相似 值的集合。若用户有 需求,则将详细列表予以展示供人工检阅。在待测代码中,系统逐一对相似代码语句予以不同的颜色显示,并标明其具体的语句相似值,相似值极高的代码采用红色字体显示(如图3中编号为0、1、2、3、4、7的待测代码),相似值极低的代码采用绿色显示(如图3中编号为6的待测代码),对于中等相似予以黄色字体显示(如图3中编号为5的待测代码),其中的“NO”为待测代码的语句编号,“DesNO”为目标代码的语句编号,总体相似程度为各语句相似度的平均值。待测代码与目标代码的相似判定结果值如图3所示。
5结语
算法基于已有的属性度量与最长公共子序列算法,将属性度量的结构无关性与最长公共子序列算法的结构依赖性有机结合,得到程序源代码较为可信的综合相似值。实验结果表明,改进后的算法可以有效降低程序源代码的评测难度,提高评测结果的准确性,得到较为科学的总体相似度值,从而增强评测人员对抄袭现象的监测力度,据此对抄袭者给予警告。
摘要:有效检测程序设计类课程作业抄袭现象具有重要的现实意义。传统的代码相似度检测方法主要利用代码属性或结构信息判定代码之间的相似性。基于已有的属性度量与最长公共子序列算法,提出一种代码相似度检测算法,算法将属性度量的结构无关性与最长公共子序列算法的结构依赖性有机结合。实验结果表明,该算法可以有效降低程序源代码的评测难度,得到较为可信的综合相似度值,增强了评测人员对抄袭现象的监测力度。