Faiss召回
什么是召回率¶
召回率(Recall)是机器学习中的一个评价指标,用于衡量模型在识别正类样本方面的能力。具体来说,召回率是指模型正确识别的正类样本数占所有实际正类样本数的比例。它反映了模型对正类样本的敏感度。
召回率的计算公式如下:
\[ \text{召回率} = \frac{\text{真正例(TP)}}{\text{真正例(TP)} + \text{假负例(FN)}} \]
其中:
- 真正例(TP,True Positive):被模型正确预测为正类的样本数。
- 假负例(FN,False Negative):实际为正类但被模型错误预测为负类的样本数。
高召回率意味着模型能够识别出大多数的正类样本,但可能会带来更多的假正例(即错误地将负类样本预测为正类)。在某些应用中,如疾病检测或垃圾邮件过滤,高召回率是非常重要的,因为漏掉正类样本(如漏诊病人或漏掉垃圾邮件)可能会带来严重后果。
向量召回¶
向量表征¶
假设我们有以下三个句子:
- "猫喜欢鱼"
- "狗喜欢骨头"
- "猫和狗是宠物"
我们将这些句子转换为向量。为了简单起见,我们使用词袋模型(Bag of Words),其中每个词在句子中出现的次数作为向量的元素。
首先,我们构建一个词汇表:
- "猫", "喜欢", "鱼", "狗", "骨头", "和", "是", "宠物"
然后,我们将每个句子转换为向量:
- "猫喜欢鱼" -> [1, 1, 1, 0, 0, 0, 0, 0]
- "狗喜欢骨头" -> [0, 1, 0, 1, 1, 0, 0, 0]
- "猫和狗是宠物" -> [1, 0, 0, 1, 0, 1, 1, 1]
向量召回¶
现在,我们有一个向量数据库,包含以下向量:
- 向量A: [1, 1, 1, 0, 0, 0, 0, 0] (代表句子 "猫喜欢鱼")
- 向量B: [0, 1, 0, 1, 1, 0, 0, 0] (代表句子 "狗喜欢骨头")
- 向量C: [1, 0, 0, 1, 0, 1, 1, 1] (代表句子 "猫和狗是宠物")
假设我们有一个新句子 "猫喜欢骨头",我们想找到与这个句子最相似的句子。首先,我们将新句子转换为向量:
- "猫喜欢骨头" -> [1, 1, 0, 0, 1, 0, 0, 0]
接下来,我们计算新句子向量与数据库中每个向量的相似度。我们可以使用余弦相似度来计算:
相似度计算¶
相似度的计算公式通常使用余弦相似度(Cosine Similarity)。余弦相似度用于衡量两个向量之间的相似度,计算公式如下:
其中:
- \(\mathbf{A} \cdot \mathbf{B}\) 表示向量 \(\mathbf{A}\) 和向量 \(\mathbf{B}\) 的点积。
- \(\|\mathbf{A}\|\) 表示向量 \(\mathbf{A}\) 的范数(即向量的长度)。
- \(\|\mathbf{B}\|\) 表示向量 \(\mathbf{B}\) 的范数(即向量的长度)。
向量A 与 新向量的相似度
\[ \text{相似度} = \frac{1 \cdot 1 + 1 \cdot 1 + 1 \cdot 0 + 0 \cdot 0 + 0 \cdot 1 + 0 \cdot 0 + 0 \cdot 0 + 0 \cdot 0}{\sqrt{1^2 + 1^2 + 1^2 + 0^2 + 0^2 + 0^2 + 0^2 + 0^2} \cdot \sqrt{1^2 + 1^2 + 0^2 + 0^2 + 1^2 + 0^2 + 0^2 + 0^2}} = \frac{2}{\sqrt{3} \cdot \sqrt{3}} = \frac{2}{3} \approx 0.67 \]
向量B 与 新向量的相似度
\[ \text{相似度} = \frac{0 \cdot 1 + 1 \cdot 1 + 0 \cdot 0 + 1 \cdot 0 + 1 \cdot 1 + 0 \cdot 0 + 0 \cdot 0 + 0 \cdot 0}{\sqrt{0^2 + 1^2 + 0^2 + 1^2 + 1^2 + 0^2 + 0^2 + 0^2} \cdot \sqrt{1^2 + 1^2 + 0^2 + 0^2 + 1^2 + 0^2 + 0^2 + 0^2}} = \frac{2}{\sqrt{3} \cdot \sqrt{3}} = \frac{2}{3} \approx 0.67 \]
向量C 与 新向量的相似度
\[ \text{相似度} = \frac{1 \cdot 1 + 0 \cdot 1 + 0 \cdot 0 + 1 \cdot 0 + 0 \cdot 1 + 1 \cdot 0 + 1 \cdot 0 + 1 \cdot 0}{\sqrt{1^2 + 0^2 + 0^2 + 1^2 + 0^2 + 1^2 + 1^2 + 1^2} \cdot \sqrt{1^2 + 1^2 + 0^2 + 0^2 + 1^2 + 0^2 + 0^2 + 0^2}} = \frac{1}{\sqrt{5} \cdot \sqrt{3}} \approx 0.26 \]
因此,向量 [1, 1, 0, 0, 1, 0, 0, 0] 最相似的向量是向量A和向量B,它们的相似度都是 0.67。
Faiss¶
Faiss (Facebook AI Similarity Search) 是一个由 Facebook AI Research 开发的库,用于高效的相似性搜索和密集向量聚类。它特别适用于处理大规模数据集,能够快速地找到与查询向量最相似的向量。Faiss 提供了多种索引类型和优化技术,以提高搜索速度和内存效率。
主要功能包括:
- 支持多种索引类型,如平面索引、分层聚类索引、倒排文件索引等。
- 支持 GPU 加速,以提高搜索性能。
- 提供多种距离度量方法,如欧氏距离、内积等。
- 支持大规模数据集的处理和索引构建。
Faiss 常用于推荐系统、图像检索、自然语言处理等领域中的相似性搜索任务。 在信息检索和推荐系统中,召回率(Recall)是一个重要的评估指标,用于衡量系统在所有相关项中成功检索到的比例。Faiss 作为一个高效的相似性搜索库,可以显著提高大规模数据集上的检索效率,从而影响召回率。
BM25 召回¶
IF-IDF 召回¶
TF-IDF(Term Frequency-Inverse Document Frequency)是一种用于文本检索和文本挖掘的统计方法,用来评估一个词语在一个文档集或一个语料库中的重要程度。TF-IDF 召回指的是使用 TF-IDF 算法从文档集合中召回与查询相关的文档。