RAG(检索增强生成)系统-ScoreThreshold

张开发
2026/5/3 23:16:30 15 分钟阅读
RAG(检索增强生成)系统-ScoreThreshold
在RAG检索增强生成系统中ScoreThreshold分数阈值是一个关键参数用于控制检索结果的质量和相关性。ScoreThreshold的作用1.过滤低质量结果当检索返回多个相关文档/片段时ScoreThreshold用于过滤掉相关性较低的检索结果通常基于余弦相似度、点积等向量相似度分数2.控制检索质量只返回相似度分数高于阈值的文档避免将不相关的信息传递给大模型常见的阈值设置# 示例基于向量相似度的检索过滤 import numpy as np def retrieve_with_threshold(query_vector, documents, threshold0.7): query_vector: 查询的向量表示 documents: 文档向量列表 threshold: 相似度阈值 relevant_docs [] for doc_vector, doc_text in documents: # 计算余弦相似度 similarity np.dot(query_vector, doc_vector) / ( np.linalg.norm(query_vector) * np.linalg.norm(doc_vector) ) # 应用阈值过滤 if similarity threshold: relevant_docs.append({ text: doc_text, score: similarity }) return sorted(relevant_docs, keylambda x: x[score], reverseTrue)典型的阈值范围相似度度量常用阈值范围说明余弦相似度0.6-0.8最常见取决于语料库和embedding模型点积取决于向量标准化需经验调整L2距离0.2-0.5距离越小越相似如何选择合适的阈值1.基于数据分布# 分析相似度分数分布 def analyze_score_distribution(query_vectors, document_vectors): all_scores [] for q_vec in query_vectors: for d_vec in document_vectors: similarity np.dot(q_vec, d_vec) / ( np.linalg.norm(q_vec) * np.linalg.norm(d_vec) ) all_scores.append(similarity) # 分析统计信息 mean_score np.mean(all_scores) std_score np.std(all_scores) # 设置阈值例如平均值标准差 threshold mean_score 0.5 * std_score return threshold2.考虑的因素准确性要求高精度场景用较高阈值覆盖率要求高召回场景用较低阈值应用场景QA系统0.7-0.8语义搜索0.6-0.7文档推荐0.5-0.6在RAG中的实际应用检索阶段class RAGRetriever: def __init__(self, threshold0.7): self.score_threshold threshold def retrieve(self, query, top_k5): # 1. 获取查询向量 query_embedding get_embedding(query) # 2. 检索相似文档 all_results vector_db.search( query_embedding, top_ntop_k*2 # 检索更多然后过滤 ) # 3. 应用阈值过滤 filtered_results [ result for result in all_results if result[score] self.score_threshold ] # 4. 返回top-k return filtered_results[:top_k]动态阈值调整策略def adaptive_threshold_retrieval(query, vector_db, initial_threshold0.7): # 尝试不同阈值 thresholds [0.6, 0.7, 0.8] best_results [] for threshold in thresholds: results vector_db.similarity_search_with_score( query, k3, score_thresholdthreshold ) if results: # 如果有结果 best_results results break return best_results实际建议开始时从0.7开始调整评估指标通过准确率、召回率、F1分数评估AB测试不同阈值下的效果对比监控在生产环境中监控阈值效果ScoreThreshold是平衡检索精度和召回率的关键参数需要根据具体应用场景和数据特点进行调整。在实际部署中可能需要为不同类型的查询设置不同的阈值。

更多文章