1、基于特征向量的中文文献相似度评价杜薇薇(中国科学技术信息研究所 北京 100038)摘 要:在这个日新月异的时代,科技文献如潮水般不断涌现,为科学技术的发展提供了无限动力。但是,其中也存在着一些不和谐的声音。天下文章一大抄,科技文献抄袭的现象也时有发生,这严重损害了文献原作者,也给科技文献的严肃性提出了挑战。本文利用分词技术提取文献特征向量,并结合动态规划算法对文献的相似度给出具体评价,针对不同抄袭的现象,发现其中存在的规律,具体问题具体分析。最后,给出实际实验结果,为文献评审专家提供参考。关键词:特征向量;相似度;中文文献;中文分词;动态规划中图分类法:TP3Feature Vector-b
2、ased Similarity of Chinese LiteratureDu Weiwei(Institute of Scientific and Technical Information of China, Beijing 100038)Abstract: In this rapidly changing era, scientific and technical literature such as the flood continue to emerge, for the development of science and technology, unlimited power.
3、However, where there are some discordant voices. The world is a big copy articles, scientific literature the phenomenon of plagiarism have occurred from time to time, which severely damaged the original author of the literature, but also to the scientific literature of the seriousness of the challen
4、ges. In this paper, segmentation techniques extract feature vectors literature, combined with dynamic programming algorithm to the similarity of the literature is given a specific evaluation copy for different phenomena, found that there is the law of a concrete analysis of specific issues. Finally,
5、 the actual experimental results, in order to provide a reference literature evaluation experts.Key Words: Feature Vector; Similarity; Chinese Literature; Chinese Word Segmentation; Dynamic Programming0 引 言随着计算机的发展尤其是网络技术的空前应用,各类论文等文献的数量极具攀升。其间,由于各种原因,文献抄袭甚至拷贝的现象时有发生。伴随文献库的日益庞大,要评价一篇文献是否有抄袭之嫌,对文献评审专
6、家提出了新的挑战,也是自动化评审系统面临的新课题。本文旨在通过对文献中特征向量的相似度给出评价,帮助评审专家对一篇待评文献,与文献库的文献一一比较,并提取相似文献,供评审专家参考。对于一篇文献是否抄袭另外一篇文献,直观的看,就是两篇文献中重复的文字比率,如果有 50%以上重复,那必定有抄袭之嫌。但是逐字逐句的比较理论上是可行的,但是实际应该有很多问题。其一,是效率问题,一篇普通文献基本在一万字,如果两篇文章比较,就是一万字和一万字比较,显然复杂都很高,况且我们比较的是一个文献库,有几十万,甚至上百万篇文献,那么这样的比较效率是很低的,实际基本不可取。其二,论文抄袭现象本身很复杂,有的抄袭是简单
7、的复制,有的只改变文献的段落顺序,有的在文献中穿插其他内容,因此,逐字逐句的方式显然不能涵盖这些复杂的情况。那么,怎么办?受到文献检索和 WEB 搜索的启发,本文在两个方面展开对文献相似度评价的实践,其分析的内容组织如下:第一部分介绍文献特征的提取,这个是文献相似度评价的前提,是文献匹配的对象,没有比较对象,怎么比较就无从谈起;第二部分讨论特征向量动态规划匹配算法;第三部分实验和结果分析;第四部分结语。1 特征向量前面简单介绍了逐字逐句是不可取的,那么怎么办?关键字首当其冲,但是只是关键字显然是不够的,需要更多的信息。受到文献全文检索的启发,采用提取文献主体特征向量的办法,来丰富对于文献相关度
8、的评价。现在,难点就转移到了文献特征向量的提取。首先,摆在面前的问题是特征向量的粒度问题,就是向量的维度。一篇文献取多少合适,既满足相似度评价性能要求,又满足可靠性要求。对于中文文献而言,一万字的文献,字的粒度太小,段的粒度太大,这些是显然的。那么就剩句子和词组的粒度,基于文献检索经验的考虑,这里采用词组的粒度。那么现在就要提取特征向量,第一步需要完成文献的中文分词,把一篇文献转化为中文词组的组合。 ),.(21nxXX 是特征向量,n 是特征向量的维度。1.1 分词技术介绍中文分词技术,发展至今已经有很多种,有基于词库的 1,有基于统计的 2,有基于语义的 3,还有组合 4-7的,根据应用环
9、境的不同侧重点也不同。最成熟也是应用最广泛的是基于词库的分词,本文也是基于此。在基于词库的分词技术中,按匹配方向又分为正向匹配和反向匹配,按匹配尺度又分为最大匹配、最小匹配与最小切分。其实分词本身并不复杂,但是为什么有这么多分支呢?其核心是语义分歧,简称歧义。我们的老祖宗太有智慧了,中文一句话的语义,在不同的环境下有不同的理解。这也是基于词库的简单分词必然会带来歧义的原因。比如, “这个门把手弄坏了” ,就是这样一个句子,如果没有语境,怎么分呢?是“这个 门 把手 弄坏了” ,还是“这个 门把手 弄坏了” ,中文太奇妙了。基于语义的分词当然是要解决这个问题,但就目前而言,离实际应用还有一段时间
10、。下面重点介绍基于词库和词性的正向最大匹配分词的实现,因为对于相似度的判别,是大量特征词的判别,对分词歧义的敏感度不高,可以忽略。1.2 词库首先,是词库。要建立一个带有词性的词库,并且是便于分词的。快速分词是分词技术显著的一个特性,因为要在成千上万的文献中,把每篇文献切分成词组组合,如果没有速度,显然是没有效率的。基于此,需要完成以下几步。第一步把词汇表中的词建立在一棵查找树,词组中的字分布在不同的树枝层,树根在第 0 层,查找时从树根开始,查找树根子孩子是否还有查找的字,如果存在,就以查找到的子树为最新的查找树枝,在它的子孩子中查找下一个字,依次类推。如果子树的集合采用 Hash 表,那么
11、这样匹配一个词的时间复杂度基本是 O(n),n 是词的长度。但是, Hash 表占用的空间复杂度通常都比较大,另外,建立这样一棵树,也是很费时间的,因此,为了避免重复构建,首先把建立好的树保存到一个文件中重复利用。Hash 表本身也不适合保存,因此采用有序数组作为子树的集合,二分法进行查找,时间复杂度是 O(log n)。中 北国 华 京人 人民 民共和国图一 词库树分层结构先看树枝节点的 C+描述:struct NodeNode() throw() : ch_(-1), tag_(0) / 初始化Node(wchar_t ch) throw() : ch_(ch), tag_(0) bool
12、 operator / 正向或者反向文本读取器,用于正向或者反向文本的下一个字的读取int FindMax(const char * words) const throw() / words 待分词的文本F f(words, strlen(words); / 建立一个文本读取器,正向或者反向。int result = 0; / 分词个数for (const char * p; f;) / 是否还有未分词的文本,如果存在就继续;否则结束分词。p = f; / 分词词组的开始位置int offset = 1; / 树枝的子节点开始偏移, 1 是树根的子节点的开始偏移,因为第一个节点上树根。cons
13、t Node * node = root_; / 树根树枝根节点/ 二分法查找树枝节点的子节点是否存在当前的字if (node = Search(root_ + offset, node-offset_ - offset, (const wchar_t)f)int old = result; / 记录当前分词个数,用于比较是否找到新的词组。int tag, pos, len; / 词性、位置和长度doif (node-tag_ / 读取词性pos = f.Get(p, len); / 读取词在文本中的位置和长度+old;/ 找到节点的前一个节点,因为前一个节点的子节点偏移就是此节点的子节点偏移
14、。offset = (node - 1)-offset_;/ 如果存在下一个字,则取出,并在当前树枝子节点中查找这个字,如果存在就继续,否则推出循环。 while (bool)(+f, +f, f) if (result / 模板参数,这里就是 Hash 的值,一个整数类型int CommonSimilarity (const T * seq1, int len1, const T * seq2, int len2, int sub1, int sub2, int len, int size, Weight * weight, int length, int threshold = 16) /
15、 求相似度/ seq1 / len1 是特征向量 1,作为横坐标。/ seq2 / len2 是特征向量 2,作为纵坐标。/ sub1 / sub2 / len 是公共子向量分别在两个特征向量的位置/ threshold 承认是公告子向量的阀值/ weight / length 是环境,用于计算的空间缓存,存放维度,length 是特征向量的最大允许维度值。维度初值为 0,至少 x 或者 y 为 0,维度为 0。int result = 0;int skip = length - len1; /缓存空间长度和横坐标长度的差,Weight * k = weight, * w = k + leng
16、th + 1; / w 表示 i,j,而 k 则表示 i-1,j-1const T * p, * q, * end1 = seq1 + len1, * end2 = seq2 + len2; / end 监视向量结尾for (q = seq2; q wk_ = k-wk_ + 1; / 维度增加if (threshold wk_) / 维度大于阀值/ 取子向量索引,如果是第一次满足就分配新的。w-sub_ = k-sub_ sub_;sub1w-sub_ = int(p - seq1); / 子向量 1 位置sub2w-sub_ = int(q - seq2); / 子向量 2 位置elsew
17、-wk_ = 0; / 断了,重新开始记录。return result; / 公共子向量的个数00011 21 21图三 公共子向量集算法从图也可以清楚地看到公共子向量集必是图中有数字对角线,图中标识了三个公共子向量。因此,实际上求公共子向量集比求最长公共子序列的算法还要简单、直观。向量2向 量 12.3 评价有了特征向量的公共子向量集,就可以对两篇文献的相似度作出评价。这里有两个概念,其一是两个文献的相似度,其二是文献不在另外一个文献中的比例,简单称之为自有度,这里自有度的概念是待评文献和整个文献库的一个评价。判断一个文献是否抄袭,相似度是一个参数,但是文献的自有度更能反映文献的可靠性,一篇
18、文献,东抄一点,西抄一点,因此自有度是一个全局的概念。评价这两个度,概率首当其冲,直观的认识,相似度是公共子向量集在两个特征向量中的比例,而自有度是 1-公共子向量集在待检特征向量中的比例。公式表示如下: 特 征 向 量 维 度特 征 向 量 维 度公 共 子 向 量 集 维 度相 似 度 Y X2YP特 征 向 量 维 度公 共 子 向 量 集 维 度自 有 度 -1特征向量的维度是已知的,那么问题就集中在公共子向量集的维度上,简单的认为是各个子向量维度的和,而这显然是不正确的。看一下图三就知道了,子向量存在重合现象,直观认识就是一段子向量在多个地方出现。因此,需要把子向量集做一次展开,把所
19、有的公共子向量映射到待检特征向量上,看图三,如果待检的是向量 1,则映射到横坐标上,如果待检的是向量 2,则映射到纵坐标上。这样在待检向量上得到一个公共子向量的片段集,只要映射到的就证明是相似,把所有的映射相加就是相似维度。受图像腐蚀与膨胀启发,在求相似维度的时候,也采用类似算法加以优化。增加一个扰动参数,更进一步就是如果有两个公共子向量映射到待检向量上后,发现它们之间“紧”挨着,那么就把它们连起来,这里也简单称之为腐蚀与膨胀算法,而扰动参数控制两个公共子向量映射距离,一般取 1 或者 2。如此,就得到了优化后的相似维度,代入公式就可以简单的计算相似度和自有度了。3 实验结合以上算法,本文给出
20、相应实验数据。实验环境 IBM XERIES_3850M2,Intel (R) Xeon (TM) CPU 3.00GHz,32.00GB 的内存,Microsoft Windows Server 2003 Enterprise Edition Service Pack 2。文献集包括中文论文 117,293 篇。第一步,对所有论文进行分词建立特征向量,共采集特征向量 91,739,562,总共耗时 981 秒,平均每篇采集 782 个特征向量,每秒采集 120 篇。相似度的匹配,平均匹配一次,耗时 23 秒,每秒处理 5100 篇。系统提供待评文献的自有度,同时分别提供相关文献的相似度,以及
21、相似的文字。实验证明算法是有效的,基本正确的,有很强的实用性。4 结语问题发展总是有规律可循的,只要找到规律,解决问题的方法也就迎刃而解。而发现问题规律时,总是会受到一些相似领域的启发。中文文献相似度评价也是如此,本文受到中文搜索引擎、最大公共子序列、图像腐蚀与膨胀等算法的启发,结合中文分词、动态规划和腐蚀与膨胀算法完成了对两篇文献相似度的评价,或者说是文献只有度的评价,为文献评审专家提供了对文献评审的参考依据。这其中还有很多可以改进的地方,比如特征向量粒度的组合,减少特征向量维度,又比如相似度判别公式中可以加入某一个向量维度的重复次数的考量等。科学无止境,研究无止境。参 考 文 献1 李振星
22、, 徐泽平, 唐卫清, 唐荣锡. 全二分最大匹配快速分词算法J. 计算机工程与应用,2002 年 38卷.2 姜韶华, 党延忠. 基于长度递减与串频统计的文本切分算法J. 情报学报,2006 年 25 卷.3 钱兵, 王永成, 高凯. 面向搜索引擎的自然语言理解的设计与实现 J. 计算机应用研究,2006 年 23 卷.4 刘迁, 贾惠波. 中文信息处理中自动分词技术的研究与展望J. 计算机工程与应用,2006 年 42 卷.5 李晓明, 闫宏飞, 王继民著. 搜索引擎原理、技术与系统M. 中国:科学出版社,2004 年.6 欧振猛. 中文分词算法在搜索引擎应用中的研究J. 计算机工程与应用,
23、2000 年 36 卷.7 陈桂林, 王永成, 韩客松, 王刚. 一种改进的快速分词算法J. 计算机研究与发展,2000 年 37 卷.8 Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. 算法导论M. 中国:机械工业出版社,2006 年 9 月.9 Mark Allen Weiss. 数据结构与算法分析 C+描述. (第 2 版)(英文影印版) M. 中国:清华大学出版社,2002 年 9 月.10 SARTAJ SAHNI.数据结构、算法与应用C+语言描述M.中国:机械工业出版社,2006 年. 文章标题 基于特征向量的中文文献相似度评价作者单位 中国科学技术信息研究所作者姓名 杜薇薇 研究方向 电子技术;图情学E-mail 联系电话 010-58882058邮 编 100038 手 机 13910233556通信地址 北京市复兴路 15 号投稿栏目