1. 理解Embedding与Reranker的核心原理
1.1 Embedding模型的本质与应用
Embedding模型的核心是将离散的文本信息映射到连续的向量空间。这种映射不是简单的编码,而是通过深度学习模型(如BERT、GPT等)在大量文本数据上训练得到的语义表示。具体来说:
- 数学本质:给定一个文本序列x,Embedding模型f将其映射为d维向量f(x)∈R^d,其中相似语义的文本在向量空间中距离更近(通过余弦相似度或欧氏距离衡量)
- 训练目标:通常采用对比学习(Contrastive Learning),使正样本对(如"猫"-"猫咪")的向量距离更近,负样本对(如"猫"-"汽车")距离更远
- 典型架构:
python复制# 以Sentence-BERT为例的简化实现 from transformers import AutoModel, AutoTokenizer model = AutoModel.from_pretrained("sentence-transformers/all-mpnet-base-v2") tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-mpnet-base-v2") def get_embedding(text): inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) outputs = model(**inputs) # 使用mean pooling获取句子向量 return outputs.last_hidden_state.mean(dim=1).squeeze().detach().numpy()
实际应用中,选择Embedding模型需要考虑:
- 维度:常见有384维、768维、1024维等,更高维度能捕捉更细粒度语义但计算成本增加
- 多语言支持:如paraphrase-multilingual-MiniLM-L12-v2支持50+种语言
- 领域适配:专业领域(医疗、法律)可能需要领域特定的Embedding模型
注意:Embedding质量评估常用MTEB基准(Massive Text Embedding Benchmark),包含56个数据集、8种任务类型。2023年排名靠前的模型包括bge-large、e5-large-v2等。
1.2 Reranker模型的工作机制
Reranker属于交叉编码器(Cross-Encoder),与Embedding的双编码器(Bi-Encoder)有本质区别:
| 特性 | Bi-Encoder (Embedding) | Cross-Encoder (Reranker) |
|---|---|---|
| 计算方式 | 文本单独编码后计算相似度 | 文本对联合编码后直接打分 |
| 速度 | 快(适合召回阶段) | 慢(适合精排阶段) |
| 准确度 | 相对较低 | 更高 |
| 典型应用 | 海量数据初步筛选 | 小规模结果精细排序 |
Reranker的典型实现流程:
- 接收查询query和候选文档doc
- 拼接为[CLS] query [SEP] doc [SE
