文章目录
- 1、向量 = 多维数组
- 2、延伸思考:如何向量化,比较和搜索?
- 3、详细解答
- 3.1、总体流程
- 3.2、常用算法对比
- 文本分块算法
- 向量化算法(Embedding Models)
- 相似度计算算法
- 向量搜索算法
- 3.3、向量化算法详细对比
1、向量 = 多维数组
RAG 中一般提到的向量,就是由多个浮点数组成的多维数组。
通过一定的方法,文本可以转化为对应的多维数组。
不同的文本对应不同的多维数组。
通过一定的方法,不同多维数据可以比较相似度,一般会变为 -1到1 之间的一个值。
2、延伸思考:如何向量化,比较和搜索?
一段字符串如何拆为指定长度数组,还有数组的每一个位置的值如何确定?
数组之间如何比较?
以及最后表示为-1到1之间,涉及几个什么算法?
拆分和比较的算法分别是什么?
向量如何搜索?
3、详细解答
3.1、总体流程
3.2、常用算法对比
文本分块算法
| 算法 | 特点 | 适用场景 |
|---|
| RecursiveCharacterTextSplitter | 递归分割,保持语义 | 通用文本 |
| TokenTextSplitter | 按token分割 | 精确控制 |
| SemanticChunker | 语义感知分割 | 高质量要求 |
向量化算法(Embedding Models)
| 算法/模型 | 维度 | 特点 | 适用场景 |
|---|
| text-embedding-3-small | 1536 | 轻量级,速度快 | 通用文本,成本敏感 |
| text-embedding-3-large | 3072 | 高精度,效果好 | 高质量要求 |
| text-embedding-ada-002 | 1536 | 经典模型,稳定 | 生产环境 |
| sentence-transformers | 384-768 | 开源,可定制 | 特定领域 |
| Cohere Embed | 1024-4096 | 多语言支持 | 国际化应用 |
| OpenAI Embedding | 1536 | 商业级,稳定 | 企业应用 |
相似度计算算法
| 算法 | 公式 | 特点 | 值域 |
|---|
| COSINE | `A·B / ( | A | × |
| L2距离 | √Σ(ai-bi)² | 欧几里得距离 | [0,∞) |
| 点积 | A·B | 简单快速,无界 | (-∞,∞) |
| 曼哈顿距离 | `Σ | ai-bi | ` |
| Jaccard相似度 | ` | A∩B | / |
向量搜索算法
| 算法 | 特点 | 时间复杂度 | 内存使用 |
|---|
| HNSW | 分层图结构,近似搜索 | O(log n) | 中等 |
| IVF | 倒排文件,聚类搜索 | O(k) | 低 |
| 暴力搜索 | 精确搜索,全量比较 | O(n) | 低 |
| LSH | 局部敏感哈希 | O(1) | 高 |
| PQ | 乘积量化,压缩存储 | O(log n) | 极低 |
3.3、向量化算法详细对比
OpenAI系列
- 维度: 1536
- 成本: 低 ($0.00002/1K tokens)
- 速度: 快
- 精度: 中等
- 适用: 通用场景,成本敏感
- 维度: 3072
- 成本: 高 ($0.00013/1K tokens)
- 速度: 慢
- 精度: 高
- 适用: 高质量要求场景
开源替代方案
- 维度: 384-768
- 成本: 免费
- 速度: 中等
- 精度: 中等
- 适用: 自部署,定制需求
- 维度: 1024-4096
- 成本: 中等
- 速度: 中等
- 精度: 高
- 适用: 多语言,企业级
何时考虑其他模型
- text-embedding-3-large:需要更高精度时
- sentence-transformers:需要自部署或定制时
- Cohere Embed:需要多语言支持时