Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
charles committed Nov 20, 2024
1 parent c26fd58 commit 317fe75
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 1 deletion.
Empty file added docs/other/rerank_llm.md
Empty file.
98 changes: 98 additions & 0 deletions docs/other/什么是召回.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
## 什么是召回率

召回率(Recall)是机器学习中的一个评价指标,用于衡量模型在识别正类样本方面的能力。具体来说,召回率是指模型正确识别的正类样本数占所有实际正类样本数的比例。它反映了模型对正类样本的敏感度。

召回率的计算公式如下:

\\[ \text{召回率} = \frac{\text{真正例(TP)}}{\text{真正例(TP)} + \text{假负例(FN)}} \\]

其中:

- 真正例(TP,True Positive):被模型正确预测为正类的样本数。
- 假负例(FN,False Negative):实际为正类但被模型错误预测为负类的样本数。

高召回率意味着模型能够识别出大多数的正类样本,但可能会带来更多的假正例(即错误地将负类样本预测为正类)。在某些应用中,如疾病检测或垃圾邮件过滤,高召回率是非常重要的,因为漏掉正类样本(如漏诊病人或漏掉垃圾邮件)可能会带来严重后果。

## 向量召回

### 向量表征

假设我们有以下三个句子:

1. "猫喜欢鱼"
2. "狗喜欢骨头"
3. "猫和狗是宠物"

我们将这些句子转换为向量。为了简单起见,我们使用词袋模型(Bag of Words),其中每个词在句子中出现的次数作为向量的元素。

首先,我们构建一个词汇表:

- "猫", "喜欢", "鱼", "狗", "骨头", "和", "是", "宠物"

然后,我们将每个句子转换为向量:

1. "猫喜欢鱼" -> [1, 1, 1, 0, 0, 0, 0, 0]
2. "狗喜欢骨头" -> [0, 1, 0, 1, 1, 0, 0, 0]
3. "猫和狗是宠物" -> [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)。余弦相似度用于衡量两个向量之间的相似度,计算公式如下:

\[
\text{余弦相似度} = \cos(\theta) = \frac{\mathbf{A} \cdot \mathbf{B}}{\|\mathbf{A}\| \|\mathbf{B}\|}
\]

其中:

- \(\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 作为一个高效的相似性搜索库,可以显著提高大规模数据集上的检索效率,从而影响召回率。
3 changes: 2 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,8 @@ nav:
- 🐦Projects:
- KnowledgeBrain:
- reference: projects/KnowledgeBrain/reference.md
- 🤗Other: none.md
- 🤗Other:
- Faiss召回: ./other/什么是召回.md

# 插件配置
plugins:
Expand Down

0 comments on commit 317fe75

Please sign in to comment.