使用 SMART 索引文本
虽然我在蒂尔堡大学的同事们可能认为我花在摆弄 PC 上的 Linux 的时间可以更好地利用,但他们错了。我在家“摆弄 Linux”;在工作中,我只做维持 Linux 正常运行的最低限度必要的事情。正如本杂志的大多数读者所知,这包括偶尔进行备份,仅此而已。
当我坐在我的 PC 前时,我是在工作(好吧,主要是)。Linux 使我的工作可以以最少的麻烦完成,这很大程度上要归功于 Jacques Gelinas,他编写了 UMSDOS:Unix 操作系统和原始 MS-DOS 文件分配表之间的层。这个程序使我可以从任何一个操作系统访问我硬盘的 DOS 分区。这是个好消息,因为我完全依赖于两个程序:SMART,一个索引和检索系统,以及 SPSS for Windows,它处理我从 SMART 获得的数据。SMART 只能在 Unix 下运行(并非所有 Unix 系统都可以),而 SPSS4Windows 显然在 MS Windows 下运行。无论这个操作系统有什么优点,你都绝对不想在任何类型的实验环境中使用它。
我想 Statistical Package for the Social Sciences (SPSS) 大多数 Linux 用户都很熟悉。如果不是——SPSS 不仅是一个“社会科学”的统计软件包,也适用于任何需要对其数据进行统计分析的人。
SMART 是一个用于文本的索引和检索程序。它不仅索引单词,还为它们添加权重。它允许用户在向量空间模型中比较索引文档,并计算文档之间或文档与查询之间的距离。要理解为什么这很特别,我们必须深入研究信息检索的典型问题,即书籍、文章等的存储,以及基于内容的检索。
在 60 年代末,文本的自动索引成为一种可行的选择,许多人认为信息检索的问题已经解决。像 STAIRS (IBM, 1972) 这样的程序使用户能够使用文本中的任何单词和布尔运算符(AND、OR、NOT)来归档和快速检索文档——谁还能要求更多呢?然后在 1985 年,两位该领域的研究人员发表了一篇著名的文章。脚注 1。在这篇文章中,他们报告了 STAIRS 在现实生活中的表现,并表明 STAIRS 和类似系统的效率实际上远低于假设。即使是经验丰富的用户也无法在 100,000 个文档的数据库中获得超过 20-40% 的相关文档的召回率,更糟糕的是,他们没有意识到这一事实。
这类所有检索系统的问题在于人类语言太模糊了。可能有十几个不同的术语和单词指向同一个对象,而一个单词可能有截然不同的含义。在信息检索中,这可能导致两种情况之一。一种是,您获得高精度,其中几乎所有检索到的文档都是相关的,但未知数量的其他相关文档未被包括在内。或者两种,您获得高召回率,其中包括大量不相关的文档。当检索到的文档集中不相关文档的比例很高时,用户很可能会在他或她找到所有相关文档之前停止查找。此时,他或她的“徒劳点”已经达到。在这种情况下,最终结果等同于那些相关的记录没有被检索到。因此,排序的概念,即基于相关性对检索到的文档进行排序,在信息检索中非常重要。
现代(以及不太现代的)研究已经为这个困境提供了一些可能的解决方案,其中包括加权关键词的概念。这意味着每个关键词-文档组合都有一个附加的权重,该权重(人们希望)指示该特定关键词对于该特定文档的相关性。SMART 正是这样做的:它为文档数据库创建索引并为它们附加权重。该方法可以直观地表达为“一个词在较少的文档中出现的次数越多,权重越高。”如果单词“dog”在给定文档中出现二十次,但在其他文档中没有出现,您可以相对确定该文档是关于狗的。像我这样的信息检索爱好者谈论tf.idf权重。
SMART 提供了几个计算选项(我通常更喜欢 atc 变体,因为它调整了各个文档的长度。)它分三个步骤计算tf.idf。第一步创建值

作为术语频率 (tf)

其中

是文档中频率最高的术语。这调整了文档长度和术语数量。然后权重


其中 N 仍然是文档数量,F 是术语t的文档频率(术语t出现的文档数量)。最后,通过以下方式应用余弦归一化

其中 T 是文档向量中术语的数量。现在我们有一个介于零和一之间的数字,它可能与单词作为该文档的关键词的重要性相关。有关这些和类似技术的详细讨论,请参阅 Salton 和 McGill。脚注 2。你会喜欢的。
当 SMART 以各种可用方式之一构建索引后,它还可以为您检索文档。这是根据称为“向量空间模型”的东西完成的。这个模型最好用向量空间的三维示例来解释;您可以在自己的想象中添加几千个维度。
想象一下,您想根据三个关键词——“猫”、“狗”和“马”——索引您的文档,这些关键词可能出现在您的文档中,也可能不出现。所以你画出三个轴来得到一个普通的三维坐标系。一个维度可以用来指示每个文档的“猫性”,另一个维度指示其“狗性”,第三个维度指示“马性”。为了简单起见,我们只使用二进制值 0 和 1,尽管 SMART 可以处理浮点数(例如,前面提到的“权重”)。因此,如果一个文档是关于猫的,它在相应的轴上得分为 1,否则得分为 0。现在,任何文档都可以根据关键词的出现情况绘制在该空间中,因此我们有一种相对简单的方法来计算文档之间的差异。此外,由一个或多个关键词组成的查询可以绘制在同一空间中,并且可以根据与该查询的距离对文档进行排名。当然,典型的文档数据库有数千个关键词,因此也有数千个维度,但多维距离中涉及的算术对于现代计算机来说无关紧要。
因此,SMART 接受查询,根据与该查询的“接近程度”对文档进行排名,并按该顺序将它们返回给您。这种能力使其成为有史以来编写的最好的检索系统之一,即使它缺乏其更昂贵的同行的花哨功能。虽然它并没有真正针对速度进行优化,但它通常比我尝试过的最快的 MS Windows 索引程序快 10-30 倍。
我不使用 SMART 进行日常检索,而是使用它计算的权重和创建的索引。在这一点上,我通常想对数据进行其他操作。我感谢 Unix 的开发者,特别是 Linux 的开发者,他们创建了一系列越来越复杂和精密的 shell 脚本、标准 Unix 工具以及一些“我自己的”实用程序,这些程序足以处理 SMART 输出到可以导入 SPSS 的文件。
现在我必须退出 Linux 并启动 MS-DOS,启动 MS Windows,最后进入 SPSS 进行统计并创建一些图表。我是 Unix 的新手(事实上,正是 Linux 提供了一种使用 SMART 的方法,这在两年前把我拉到了这条线上)。虽然 MS Windows 不是我最喜欢的操作系统,但 SPSS 可以完成工作。当输出写入磁盘后,我立即逃回 Linux,用 LaTeX 编写最终的文章、报告或任何东西。
在这一点上,我有两条消息——一条坏消息。好消息是,SMART 可以通过康奈尔大学的匿名 ftp 获得,并且可以免费用于科学和实验目的。更好的是,它可以在 Linux 下编译,而无需太多调整和摆弄。还有一个相当活跃的邮件列表供使用 SMART 的人使用 (smart-people@cs.cornell.edu)。
坏消息:手册——什么手册?SMART 不适合胆小的人;解包和编译后,你会发现一些非常晦涩的注释和示例,仅此而已。然而,如果您有超过几兆字节的文本要管理 并且 有毅力学习 SMART,那么它肯定是满足您信息检索需求的最佳解决方案。我真希望有人能写一本全面的手册。与此同时,您可能会从我在 http://pi0959.kub.nl:2080/Paai/Onderw/Smart/hands.html 上找到的“新手教程”中获得帮助。
本文之前发表于 Linux Gazette 第 13 期。
Hans “Paai” Paijmans (paai@kub.nl) 是蒂尔堡大学的讲师和研究员,也是几家荷兰杂志的定期撰稿人。他与 E. Maryniak 合着了第一本关于 Linux 的荷兰语书籍——已经是两年前的事了。我的天,时间过得真快?他的主页是 http://pi0959.kub.nl:2080/paai.html 。