RAG 之 Embedding 模型
时间: 2025-05-20 07:48:04 浏览: 27
### RAG 架构中的 Embedding 模型
RAG(Retrieval-Augmented Generation)架构是一种结合检索和生成的混合方法,其核心在于通过外部知识库增强生成模型的能力。在该架构中,Embedding 模型主要用于表示查询和文档的内容,以便于高效地进行相似度计算和检索。
#### 查询嵌入与文档嵌入
为了支持高效的检索操作,RAG 使用两个主要类型的 Embedding 模型:
1. **Query Encoder**: 将用户的输入查询转换为固定维度的向量表示。这种编码器通常基于预训练的语言模型(如 BERT 或 RoBERTa),能够捕捉语义信息并将其映射到高维空间[^1]。
2. **Document Encoder**: 对存储的知识库中的每个文档片段进行编码,同样生成固定维度的向量表示。这些向量会被预先计算好并存放在索引结构中(例如 FAISS 或 Annoy),用于加速最近邻搜索过程[^2]。
#### 实现细节
以下是关于如何实现 RAG 中的 Embedding 部分的一些具体技术要点:
- **Pre-trained Models**: Query 和 Document Encoders 均可以采用相同的预训练语言模型作为基础组件。这有助于减少参数数量,并提高跨模态匹配的效果。例如,在原始论文中,DPR (Dual Passage Retrieval) 被用来构建这两个部分[^3]。
```python
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
def encode(texts, max_length=512):
inputs = tokenizer(
texts,
padding=True,
truncation=True,
return_tensors="pt",
max_length=max_length
)
outputs = model(**inputs)
embeddings = outputs.last_hidden_state[:, 0, :] # CLS token representation
return embeddings.detach().numpy()
```
- **Index Construction**: 文档嵌入的结果需要被保存在一个专门设计的数据结构里以供快速查找。常用的工具包有 Facebook 的 FAISS 库或者 Spotify 开发的 Annoy 库。它们允许我们执行近似最近邻搜索来找到最相关的几个候选文档[^4]。
```python
import faiss
import numpy as np
dimension = 768 # Assuming we use bert-base with this output size.
index = faiss.IndexFlatIP(dimension) # Inner Product similarity measure.
doc_embeddings = ... # Array of shape [num_docs, dim].
index.add(doc_embeddings.astype('float32'))
```
- **Training Strategy**: 如果目标领域内的数据充足,则可以通过微调的方式进一步优化 Query 和 Document Encoders 的性能;如果缺乏足够的标注样本,则可能考虑使用无监督对比学习框架来进行调整[^5]。
#### 总结
综上所述,RAG 架构下的 Embedding 模型实现了从自然语言文本到稠密向量空间的有效映射,从而促进了后续阶段的信息检索效率以及最终响应的质量提升。
阅读全文
相关推荐


















