向量空间搜索引擎基本理论
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步骤 1
→ 步骤 2
→ 步骤 3 → 步骤 4
拆解 HTML
去掉间歇字
词干化
生成项空间
生成文件项数
计算文件向量大小
步骤 1– 拆解 HTML 文件,诸如逗号,空格,回车键直到只留有单个词组成的项。
ห้องสมุดไป่ตู้
3
步骤 2– 将间歇字 (如’the’) 从正文中移出以降低项空间的维数。
步骤 3– 词 干 化 文 件 中 剩 余 的 项 (如’runner’ 和’running’) 以 简 化 项 空 间 并 保 持 语 义 。Porter Stemming Algorithm 的目的就是词干化。
向量空间搜索引擎基本理论
LA 2600 – January 2, 2004 – presented by Vidiot
概要
向量空间搜索引擎所运用的简单技术源自矩阵代数,它基于字符在文件中出现的频率来比 较文件。
向量空间搜索引擎中第一个重要的元素是项空间 (term space) 的概念。简而言之,一个项 空间由文件中出现的每个独立的词组成。
另外,严谨的读者会注意到即使对于不同的文件会有相同大小的文件向量。例如,对于两 个文件向量分别为 (1,2,3) 和 (3,2,1) 的文件来说,它们的文件向量大小均为 3.74165。这并不
1
项空间 \ 项数 猫 狗
老鼠
文件 1 3 1 4
文件 2 1 2 5
文件 3 2 3 0
矛盾。我们会看到,文件的关联值 (relevancy score) 是基于要查询的询问项的维数,因此,即 便是对于具有相同大小的文件向量的文件,它们的询问项会很不相同。也就是说,项空间中的 两条直线具有相同的长度并不一定意味它们指向同一方向。
一个简单的例子
假设我们有三个文件。每个文件分别是三个词猫,狗和老鼠的组合。这三个词猫,狗和老 鼠就是项空间。那么我们可以说每个文件分别沿猫维,狗维和老鼠维上有坐标。这些坐标取决 于每一项在文件中出现的次数。例如,以下表中的文件 1 就含有‘猫-狗-老鼠向量’的坐标 为 (3,1,4)。
我们用勾股定理来计算每个文件向量的大小,在该情况下向量维数高于二维,所以有以下 公式:
向量空间搜索引擎的局限
尽管向量空间搜索技术很酷,但它存在着严重的局限性。 首先,它需要海量计算,因此计算速度极慢。由于是浮点运算,因此需要极长的处理时 间,从而导致表现失常。高性能的表现需要在内存中执行优化过的代码。我们期望随着处理器 速度的提高,这将不再成为障碍。 其次,动态的文集对每一次文件的添加都需要再索引。这是由于当每次在项空间中引进一 个新项时,对应的新矩阵会增加一维从而所有的文件都要进行再索引使得文件向量与新维数相 对应。这样做使得实时查询变得几乎不可能,这可能是使该项技术被广泛采用的最严重障碍。 第三,为了能发觉有潜在语义索引 (Latent Semantic Indexing) 的文件之间的额外联系, 我们需对文件集做额外的数学变换。LSI 可使文件之间在语义层上找到彼此之间的额外联系。 它超出了本文的讨论范围,但对向量空间搜索技术的下一步研究具有重要意义,同时也为实时 查询增加了新的障碍。
Q ∗ V1 Q × V1
=
(0 × 3)
+ (0 × 1) + (1 × 4) 1 × 5.09901
=
0.78446
2
如果对其他两个文件做同样的计算,得到以下余旋值:
文件 1 = 0.78446 文件 2 = 0.91287 文件 3 = 0.00000
我们为文件按余旋值递减排序:
文件 2 = 0.91287 文件 1 = 0.78446 文件 3 = 0.00000
查询向量:
(0,
0,
1)
文件 1 向量: (3,
1,
4)
点积:
(0 × 3)+ (0 × 1)+ (1 × 4) = 4
现在将点积 4 除以查询向量大小与文件向量大小的乘积。前面已算出文件 1 向量的大小 为 5.09901, 查询向量大小为 1, 因此余旋值为 4/5.09901。
我们来试一下,查询项‘老鼠’与文件 1 的向量之间的余旋夹角为:
a2 + b2 + c2 = d2
V1 = V2 = V3 =
√ 32 + 12 + 42 = 9 + 1 + 16 = 5.09901
√ 12 + 22 + 52 = 1 + 4 + 25 = 5.47722
√ 22 + 32 + 02 = 4 + 9 + 0 = 3.87298
注意到无论是多少维向量,我们都将用勾股定理来计算文件向量的大小。例如,如果项空间 由 1000 个词组成,那么是 1000 维,从而我们的计算公式是 a2 + b2 + c2 + d2 + e2 + · · · 等等, 直至再加 995 项得到答案。
向量空间搜索引擎中第二个重要的元素是项数 (term counts)。项数就是文件中每个字符 出现的次数。通常可由表的形式列出。
通过将项空间作为坐标空间,项数作为项空间中的坐标,我们可为每个文件生成一个向 量。为了了解怎样生成这些向量,我们看一个简单例子。大家可能对笛卡尔坐标比较熟悉,点 的刻画沿 X,Y,Z 轴。类似的,在我们的例子中一个项空间由三个独立项组成,我们把它们分 别称作项 1 轴,项 2 轴,项 3 轴。(在向量空间搜索引擎理论中这些轴通常被称作维数。) 通 过计算文件中各项出现的次数,并沿各项轴画出坐标,我们就可确定出与文件所对应的项空间 中的点。由这些点则可生成该文件的向量。
查询
为查询文件的索引,我们把查询向量投影到向量空间上,并计算查询向量与文件集中向量 之间的余旋夹角。用英语表达就是,我们将查询向量投影到向量空间上,然后看它附近有没有 文件集中向量。
例如,查询项为‘老鼠’,那么‘猫-狗-老鼠向量’就是 (0,0,1)。查询向量的大小为
√ Q = 02 + 02 + 12 = 0 + 0 + 1 = 1
• http://www.chuggnutt.com/stemmer.php - Open source implementation of the Porter stemming algorithm in PHP
• http://www.nitle.org/semantic-search.php - Open source Latent Semantic Indexing package written in Perl. Very much in Beta, not yet suitable for production.
可以看出文件 2 是和查询项‘老鼠’最相关的,该结论可从上面的列表中得到快速验证。文 件 1 有些相关,文件 3 因其不含老鼠这一项,与查询项完全无关。
一个简单的考虑方法是越接近余旋值 1,文件与查询项越相关。如果余旋值为 0,那么文 件向量与查询向量正交且完全无关。
文件集索引处理
文件集的索引处理对于被索引的文件是很特殊的。向量空间搜索技术可用于任何有一定结 构的信息中,因此它对文字,图像,密码钥匙,甚至 DNA 同样有效。但是,用户必须对所处 理的信息做适当的构建,并可将其优化以提高索引处理效率。
相关文献
• http://www.perl.com/pub/a/2003/02/19/engine.html - Excellent article about building a vector space search engine including open source PERL code.
量大小与文件向量大小的乘积,即
Q ∗ V1 Q × V1
点积是文件向量的项数与相对应的查询向量的项数的乘积之和。例如,我们在查询‘老鼠’, 查询项的坐标为 (0,0,1),因为词‘猫’,‘狗’没有出现在查询项中,‘老鼠’出现了一次位 于项空间的第三维上。基于上述表中的项数, 我们例子中的文件 1 的文件向量为 (3,1,4)。如果 要计算查询向量与文件 1 的向量点积,我们有:
一旦在项空间中画出该文件的向量,我们就可计算向量的大小。我们把大小看作是原 点 (我们的例子中是坐标 (0,0,0) 点) 到当前文件点之间连线的距离。这样就可运用向量的长度 通过计算夹角的余旋来比较不同的文件。例如,相同的文件夹角余旋为 1,文件中含有类似项 的夹角余旋会是正小数,文件中含有截然不同项的夹角余旋会是 0。
• ”Enhancing Performance in Latent Semantic Indexing Retrieval” - Susan Dumais, TMARH-017527 Technical Report, Bellcore, 1990
5
4
• ”Indexing by latent semantic analysis.” Journal of the Society for Information Science, 41(6), 391-407. — first technical Latent Semantic Indexing paper; good background.
我们用检索一个小网站为例。 首先每个 HTML 文件必须先做预处理,然后索引为文件集合的一部分。(集合只能整体索 引。在索引后添加额外的文件会改变项空间的维数并且否定已存文件向量的大小。) 我们先拆解所有 HTML 文件的内容,诸如空格,回车键直到只留有单个词组成的项为 止。 然后,我们把间歇字 (stop word) 从正文中移出。间歇字是那些在英语中常用但总体上不 对正文产生任何语义的词。比如,’the’,’and’,’of’ 和’or’ 这些词和实际的语义没什么关系,如不 去掉它们会增加项空间的维数,从而加常处理时间。另外,象’quickly’(通常以’ly’ 结尾) 这样 的副词因和实际的语义没什么关系也可去掉。 下一步,我们词干化 (stem) 文件中剩余的项。词干化是将每项简化成词根的形式。例 如,词’runner’,’running’,’runs’ 都将被简化成’run’。Porter Stemming Algorithm 的目的就是词 干化。这进一步简化了项空间并保持了语义。 完成这三步后我们 (期望) 留下保持原文件语义的最少项。 我们现在可以开始通过建立项空间和计算每个文件向量的大小来索引文件集。
• http://lsi.argreenhouse.com/- Closed source online Latent Semantic Indexing demo by Telecordia Technologies
• ”Using Linear Algebra for Information Retrieval” - Berry, M. W.; Dumais, S. T.; and O’Brien, G. W. 1995.
注:一个简单方法是查看询问项是否属于项空间,如果是,那么 Q 总为 1。但这只对单项询
问有效。对于多个查询项,计算它们在项空间出现的次数,然后对次数取方根。由于查询项的
值总大于 1, Q 将会是某个整数的方根。但前提是每项在询问项中只出现一次。由于本文将
要讨论的词干问题,该假设未必是个好假设。
为计算查询向量与一文件向量的余旋夹角,我们用查询向量与文件向量的点积除以查询向
步骤 4A– 从文件集的每个文件中选出每项的一个代表,扩张成整个项空间,使所有可能的项都包 含在内。
步骤 4B– 计算和记录每一项在文件中出现的次数。
步骤 4C– 计算和记录每个文件的向量大小, Vn .
注:我们要注意的是剖析器如何分解信息将直接影响查询结果。例如,如果你索引的是一本 书,那么索引时间和查询结果将取决于如何对书进行分割,是按章,页还是段落。你需要对数 据进行一定的试验以找到最优的分割。