搜索引擎(一)-- Vector Space Model 和 倒排索引

一、向量空间模型

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”等词的词频肯定高。文档 i i i 中关键词 j j j t f tf tf 值的计算公式为 t f i , j = f i , j ∣ D i ∣ tf_{i,j}=\dfrac{f_{i,j}}{|D_i|} tfi,j=Difi,j

其中 ∣ D i ∣ |D_i| Di表示 i i i 文档的词数, f i , j f_{i,j} fi,j 表示 j j j 在文档 i i i 中出现的次数。

IDF

对于第二个问题,一般不重要的词,例如“I”、“the”、“and”这种,在所有文章里面都会出现的词,它们的重要性一定很低。相反地,在很少文章中出现的词,对于搜索引擎来说价值更高。我们可以使用反向文档频率Inverse Document Frequency作为该特性的评价指标。文档频率Document Frequency是包含某单词的文档个数, i d f idf idf 则是 d f df df 的呈负相关的变式。对于单词 j j j来说,它的 i d f idf idf 值计算公式为 d f j = ∣ i : t j ∈ D i ∣ df_j=|i:t_j\in D_i| dfj=i:tjDi i d f j = log ⁡ 2 ( ∣ D ∣ d f j ) idf_j=\log_2(\dfrac{|D|}{df_j}) idfj=log2(dfjD)
其中, ∣ D ∣ |D| D为所有文档的总数。

TF-IDF

TF和IDF的积,可以作为某个词在某篇文档中的重要性衡量,既然如此,我们就可以用TF和IDF表征整个文本空间的所有单词重要性,因而可以用 t f i d f tfidf tfidf矩阵的方式表示整个文本空间: t f i d f i , j = t f i , j × i d f j tfidf_{i,j}=tf_{i,j} \times idf_j tfidfi,j=tfi,j×idfj
如果一个词在所有文档中出现(如 “the”),它的 i d f idf idf 值为0,在 t f i d f tfidf tfidf 矩阵中值也将为0;如果一个词 j j j 在文档 i i i 中未出现,相应地,它的 t f tf tf 值为0, t f i d f tfidf tfidf 矩阵中对应的值也将为0。

1.3 相似度计算

1.3.1 内积

在文档和查询中同时出现的词将获得更高的得分,因此文档 D i D_i Di 和 查询 Q Q Q 的相似程度能够以内积方式表示 s i m ( D i , Q ) = ∑ k = 1 t d i k q k sim(D_i,Q)=\sum_{k=1}^t d_{ik}q_k sim(Di,Q)=k=1tdikqk

1.3.2 余弦相似(主流)

尽管内积某种程度上表示了文档相似程度大小,但是它对短查询/短文章并不公平,长文章有更多的单词,可能会产生更多的匹配,但相关程度却不一定有短文章高。因此我们不应只从内积角度,而应该从方向的角度去分析Query和Document的相似。余弦相似的公式如下: C o s S i m ( D i , Q ) = D ∘ Q ∣ D ∣ ∣ Q ∣ = ∑ k = 1 t d i k q k ∑ k = 1 t d i k 2 ∑ k = 1 t q k t 2 CosSim(D_i,Q)=\dfrac{D\circ Q}{|D||Q|}=\dfrac{\sum_{k=1}^t d_{ik}q_k}{\sqrt{\sum_{k=1}^t}d_{ik}^2\sqrt{\sum_{k=1}^tq_{k_t}^2}} CosSim(Di,Q)=DQDQ=k=1t dik2k=1tqkt2 k=1tdikqk
这里举个例子,假设有两个文档 D 1 D_1 D1 D 2 D_2 D2 和查询 Q Q Q, 关键词为 T 1 T_1 T1 T 2 T_2 T2 T 3 T_3 T3, 满足 D 1 = 2 T 1 + 3 T 2 + 5 T 3 D 2 = 3 T 1 + 7 T 2 + T 3 Q = 0 T 1 + 0 T 2 + 2 T 3 \begin{aligned}D_1 &= 2T_1+3T_2+5T_3\\D_2&=3T_1+7T_2+T_3\\Q&=0T_1+0T_2+2T_3\end{aligned} D1D2Q=2T1+3T2+5T3=3T1+7T2+T3=0T1+0T2+2T3
那么有 C o s S i m ( D 1 , Q ) = 5 ∗ 2 / 38 4 = 0.81 CosSim(D_1,Q)=5*2/{\sqrt{38}\sqrt{4}}=0.81 CosSim(D1,Q)=52/38 4 =0.81
C o s S i m ( D 1 , Q ) = 1 ∗ 2 / 59 4 = 0.13 CosSim(D_1,Q)=1*2/{\sqrt{59}\sqrt{4}}=0.13 CosSim(D1,Q)=12/59 4 =0.13

1.3.3 其他指标

  • Jaccard 系数 ∑ k = 1 t d i k q k ∑ k = 1 t d i k 2 + ∑ k = 1 t q k 2 − ∑ k = 1 t d i k q k \dfrac{\sum_{k=1}^{t}d_{ik}q_k}{\sum_{k=1}^td_{ik}^2+\sum_{k=1}^tq_k^2-\sum_{k=1}^{t}d_{ik}q_k} k=1tdik2+k=1tqk2k=1tdikqkk=1tdikqk
  • Dice 系数 ∑ k = 1 t d i k q k ∑ k = 1 t d i k 2 + ∑ k = 1 t q k 2 − ∑ k = 1 t d i k q k \dfrac{\sum_{k=1}^{t}d_{ik}q_k}{\sum_{k=1}^td_{ik}^2+\sum_{k=1}^tq_k^2-\sum_{k=1}^{t}d_{ik}q_k} k=1tdik2+k=1tqk2k=1tdikqkk=1tdikqk

二、倒排索引

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 好处

  1. 对布尔模型的消息回溯系统,倒排索引能快速锁定包含关键词的文档集合,效率非常高。锁定文档集合后直接进行与或非计算即可。
  2. 对概率模型来说,倒排索引方便了tf-idf值的计算,并且支持词组查询。
    在这里插入图片描述

2.4 缺点

  • 花费了存储开销在posting list上(或超过100%)
  • 高昂的增、删、改费用。尽管对word index的查询很快,但是在posting list中修改的时间复杂度是线性级别,文档数目多的时候这个消耗是非常大的。
  • 布尔模型中的花销随查询条件增加陡增

因为快考试就不水太多字了,如果读者有问题的可以在评论区提问,我有空会一一解答。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值