一、向量空间模型
1.1 布尔模型与统计学模型
最早期的消息回溯模型是布尔模型(Boolean Model),这种模型将关键词用“与或非”连接成问答语句,譬如“DBMS AND Oracle AND NOT Sybase”,然后由系统返回Yes/No的回答。这种模型的构建和使用都相当简单,但它的缺点也很明显:
- 布尔语句一旦变长,就会有很多层括号,读起来也很不方便。
- 布尔模型很难控制回溯的文档数目。
- 布尔模型是命中模型,且没有对文档中的关键词设置权重,无法对文档进行排名。
- 布尔模型是完全匹配,不支持部分匹配,也很难进行复杂查询,如如“全球首富是谁?高考最难的省份?”等等。
不同于布尔模型,后来的科学家提出了统计学模型(Statistical Model)。统计学模型分析的对象是关键词,文档可以表示成一个由词组构成的向量,值的大小为词的权重,即词的重要程度。消息回溯基于查询语句和文档的向量相似度大小,决定回溯的文档以及排序。由于该模型将文档和查询转换为向量并用向量计算来处理文本内容,所以又被称作向量空间模型(Vector Space Model)
1.2 TF-IDF值
如何衡量一个词的重要性?我们可以将此问题分成两个部分看:
- 这个词在某篇文档中的重要性如何?
- 这个词在所有文档中的重要性如何?
TF
对于第一个问题,我们可以用词频Term Frequency来衡量一个单词在文档中的重要程度,如一篇关于经济学的文章,“Economic, money, trade, market”等词的词频肯定高。文档 中关键词 的 值的计算公式为
其中表示 文档的词数, 表示 在文档
IDF
对于第二个问题,一般不重要的词,例如“I”、“the”、“and”这种,在所有文章里面都会出现的词,它们的重要性一定很低。相反地,在很少文章中出现的词,对于搜索引擎来说价值更高。我们可以使用反向文档频率Inverse Document Frequency作为该特性的评价指标。文档频率Document Frequency是包含某单词的文档个数, 则是 的呈负相关的变式。对于单词来说,它的 值计算公式为
其中,为所有文档的总数。
TF-IDF
TF和IDF的积,可以作为某个词在某篇文档中的重要性衡量,既然如此,我们就可以用TF和IDF表征整个文本空间的所有单词重要性,因而可以用矩阵的方式表示整个文本空间:
如果一个词在所有文档中出现(如 “the”),它的 值为0,在 矩阵中值也将为0;如果一个词 在文档 中未出现,相应地,它的 值为0,
1.3 相似度计算
1.3.1 内积
在文档和查询中同时出现的词将获得更高的得分,因此文档 和 查询 的相似程度能够以内积方式表示
1.3.2 余弦相似(主流)
尽管内积某种程度上表示了文档相似程度大小,但是它对短查询/短文章并不公平,长文章有更多的单词,可能会产生更多的匹配,但相关程度却不一定有短文章高。因此我们不应只从内积角度,而应该从方向的角度去分析Query和Document的相似。余弦相似的公式如下:
这里举个例子,假设有两个文档 和查询 , 关键词为 , 满足
那么有
1.3.3 其他指标
- Jaccard 系数
- Dice 系数
二、倒排索引
2.1 基本概念
倒排索引在搜索引擎中有着举重若轻的地位。大名鼎鼎的elasticsearch,及其底层框架luncene就是基于倒排索引实现。与正向索引相对,倒排索引以关键词为索引,映射到某个单词在一个文档或者一组文档中存储的位置。可以根据单词快速获取包含整个单词的文档列表。如下图例子,computer一词在Document 1中的第23、97和104个位置以及Document 3 的第43个位置出现,graph一词在Document 2的第5个位置以及Docuemtn 3的第44个位置出现。
为了提高效率document index一般用排序树(如b树)的形式存储,访存时间复杂度可以从线性优化为对数级别。且存储的数据可以为前缀树,进一步节省非叶节点存储消耗。
2.2 how to work?
构建
- 构建文档时,先对文档进行编号,形成文档列表。
- 对每一个文档的数据进行分词,构建字典,并对字典进行编号,以关键词创建索引。然后记录包含该单词的所有文档编号以及位置信息。
使用
- 对查询分词
- 使用分词结果去倒排索引列表中进行匹配,返回包含词条的所有文档编号(及位置信息)。
- 根据文档编号和位置信息到文档列表中锁定原文信息。
2.3 好处
- 对布尔模型的消息回溯系统,倒排索引能快速锁定包含关键词的文档集合,效率非常高。锁定文档集合后直接进行与或非计算即可。
- 对概率模型来说,倒排索引方便了tf-idf值的计算,并且支持词组查询。
2.4 缺点
- 花费了存储开销在posting list上(或超过100%)
- 高昂的增、删、改费用。尽管对word index的查询很快,但是在posting list中修改的时间复杂度是线性级别,文档数目多的时候这个消耗是非常大的。
- 布尔模型中的花销随查询条件增加陡增
因为快考试就不水太多字了,如果读者有问题的可以在评论区提问,我有空会一一解答。