一文了解倒排表

1.前言

我们先回顾最简单的问答系统:就是给定一个问题,去语料库中匹配相似度最高的问题所对应的答案
语料库每个样本是:< 问题,答案 >
在这里插入图片描述
缺点: 假如我们语料库有 N 个 < 问题,答案> 对,那么,对于每个用户提出的问题,我们需要 计算 N 次相似度,才能返回最高相似度的。
所以他的复杂度为:O(N)* (每次相似度计算的复杂度)

解决的核心思路:层次过滤方法
复杂度:过滤器1 < 过滤器2 < 过滤器3 < 过滤器4 < … < 余弦相似度的复杂度

如图:通过第一层过滤,我们现在只有100个 < 问题,答案 >对,再经过一层过滤假设我们只有10个< 问题,答案 >对(蓝色圆柱体)
这个复杂度:2 x 过滤器复杂度 + 10 x 余弦相似度复杂度
一般过滤器复杂度很低,我们可以忽略,只考虑(10 x 余弦相似度复杂度)
在这里插入图片描述
那么这个过滤如何做呢???,那么就要用到经典的倒排序方法

2.倒排表

到排表是搜索引擎的核心架构

假设我们爬取了4个文档,里面的内容如下
基于4个文档,写出我们的词库 [我们,今天,运动,昨天,上,课,什么]
统计词库中的每个单词出现在哪些文档中,显然 我们 出现在[doc1,doc2] 中
在这里插入图片描述
这样我们就可以把文档以到排表的方式存储了,这样做有什么优点呢???
假如用户输入:我们 上课
如果没有到排表,则只能一篇一篇的去搜索文档中 是否既包含我们又包含上课,这样复杂度太高了
有了到排表:我们知道 我们[Doc1, Doc2], 上 [ Doc3,Doc4], 课[Doc3,Doc4], 如果有交集,我们可以直接返回交集,如果没有交集,那么直接返回
并集[ Doc1,Doc2, Doc3,Doc4]

3. 应用

在这里插入图片描述
词库: [ how do you like NLPCamp]
统计
How: [q1,q2,q6,q56,q89] # q1 指 question1
do : [q3,q11,q23,q34,…]

最后提取交集或者并集做过滤