发信人: walt@ncicbbs (瓦尔特), 信区: chinese 标 题: ◎ 隐性语义索引 发信站: 国家智能机中心曙光站 (Thu Apr 11 12:02:51 1996) 转信站: ncicbbs 隐性语义索引 .Walt. 1. 引言 自然语言文本中的词汇(术语)具有一词多义(polysemy)和一义多词(synonymy)的特点. 由于一词多义, 基于精确匹配的检索算法会报告许多用户不要的东西; 由于一义多词, 基于精确匹配的检索算法又会遗漏许多用户想要的东西. 下面是一个例子: 设Doc1, Doc2, Doc3是三个文件. 一些术语在这三个文件中的出现情况如下表: Doc1 Doc2 Doc3 -------------------------------------------------- access X document X retrieval X X information X* X* theory X database X indexing X computer X* X* -------------------------------------------------- 这里, 假定用"information" 和"computer"作为主题词进行检索, 那么Doc2和Doc3与之 精确匹配, 因而中选. 然而, Doc2是用户并不想要的文件, Doc1才是想要的查不出来, 不想要的倒查了出来. 这说明精确匹配不能很好地反映用户的意图. 那么有没有更好的 办法呢? 当然, 如果能基于自然语言理解来做这件事, 那一切问题就都没有了. 问题是: (1) 自然语言理解的目前水平还是有限度的; (2) 即使用自然语言理解, 效率也会很低. 我们希望找到一种办法, 既能反映术语之间内在的相关性, 又具有较高的效率. Bellcore以Dumais为首的研究小组提出了一种称为"隐性语义索引"的方法, 试图绕过 自然语言理解, 用统计的办法达到同样的目标. "隐性语义索引"的英文名字为 "Latent Semantic Indexing", 简称LSI. 2. LSI的做法 首先, 以术语(terms)为行, 文件(documents)为列做一个大矩阵(matrix). 设一共有 t行d列, 矩阵名为X. 矩阵的元素为术语在文件中的出现频度. 数学上可以证明: X可以分解为三个矩阵T0, S0, D0'(D0的转置)的积. 其中T0和D0的 列向量都是正交归一化的, S0是对角矩阵. T0是t*m矩阵, S0是m*m矩阵,D0是d*m矩阵, m是X的秩. 这种分解叫做单值分解(singlar value decomposition,简称SVD). X=T0*S0*D0' 一般要求T0, S0, D0都是满秩的. 不难做到把S0的元素沿对角线从大到小排列. 现在, 把S0的m个对角元素的前k个保留, 后m-k个置0, 我们可以得到一个新的近似的 分解: Xhat=T*S*D' 奇妙的是, Xhat在最小二乘意义下是X的最佳近似! 这样, 我们实际上有了一个"降维"的 途径. 下面要说明, T, S, D三个矩阵在文件检索中有重要的应用价值. 一个遗留问题是k到底取多大. k越大失真越小, 但开销越大. k的选择是按实际问题的 要求进行平衡的结果. 给定矩阵X, 基于X可以问三类同文件检索密切有关的问题: (1) 术语i和j有多相似? (2) 文件i和j有多相似? (3) 术语i和文件j有多相关? 第一类问题是术语的类比和聚类问题; 第二类问题是文件的类比和聚类问题; 第三类问题是术语和文件的关联问题. 下面我们用Xhat来进行这三类比较. 3.1 比较两个术语 做"正向"乘法: Xhat*Xhat'=T*S*D'*D*S*T'=T*S^2*T' (D'*D=I, 因为D已经是正交归一的). 它的第i行第j列表明了术语i和j的相似程度. 3.2 比较两个文件 做"逆向"乘法: Xhat'*Xhat=D*S*T'*T*S*D'=D*S^2*D' (T'*T=I, 因为T已经是正交归一的). 它的第i行第j列表明了文件i和j的相似程度. 3.3 比较一个文件和一个术语 恰巧就是Xhat本身. 它的第i行第j列表明了术语i和文件j的相关联程度. 3.4 查询 可以把主题词的集合认为是一个虚拟的文件. 查询的任务说白了是把这个虚拟的文 件和其他文件做相似性比较, 挑选最相似的出来(挑选到什么程度打住, 要看实际问题 的要求) ********************* 以上极简略地介绍了LSI的做法. 实验表明, 这一做法可以收到很好的效果, 在基于 内容的查询和信息过滤等方面有很好的前景.
2012年12月1日星期六
隐性语义索引
订阅:
博文评论 (Atom)
没有评论:
发表评论