检索战略讨论Fusion HyDE布置上 含代码 RAG初级优化

  • 电脑网络维修
  • 2024-11-15

传统的检索方法通常依赖于对query启动语义了解(基于向量)或关键字婚配(BM25),这两种方法都有其好处和缺陷。融合检索、HyDE和RAG-Fusion可以创立一个更强健和准确的检索系统。本文将引见三种优化方法:

初级 RAG 技术引见

Fusion Retrieval

融合检索是一种弱小的文档搜查方法,它联合了语义了解和关键字婚配的好处。经过应用基于向量和BM25的检索方法,它为消息检索义务提供了更片面、更灵敏的处置打算。这种方法在概念相似性和关键字关系性都很关键的各个畛域都有潜在的运行,例如学术钻研、法律文档搜查或通用搜查引擎。

成功方法:

好处:

提高检索品质: 经过联合语义搜查和基于关键字的搜查,系统可以捕捉概念相似度和准确的关键字婚配。 灵敏性: alpha参数准许依据特定用例或查问类型调整矢量和关键字搜查之间的平衡。 强健性: 组合方法可以有效地处置更大范围的查问,减轻单个方法的弱点。 可定制性: 该系统可以很容易地顺应经常使用不同的矢量存储或基于关键字的检索方法。

成功图

上方的图表说明了流程(最后一局部给出了实现代码):

HyDE 是什么?

HyDE 是一种翻新方法,可增强密集检索,尤其是在零样本场景中。其上班原理如下:

成功图

上方的图表说明了 HyDE 流程:

RAG-Fusion

什么是 RAG-Fusion?

RAG-Fusion 是一种先进的技术,它将检索增强生成 (RAG) 与互易秩融合 (RRF) 相联合,以提高检索消息的品质和关系性。其上班原理如下:

与传统 RAG 相比,这种方法有助于捕捉更宽泛的背景和潜在的更多关系消息。

成功图

上方是说明 RAG-Fusion 上班流程的图表:

对RAG技术感兴味,可以经过这本书片面学习。据了解这是目前第一本对于rag的书籍,很不错:

加载依赖

import osimport sysfrom dotenv import load_dotenvfrom langchain.docstore.document import Documentfrom typing import Listfrom rank_bm25 import BM25Okapiimport numpy as np

bm25召回

def create_bm25_index(documents: List[Document]) -> BM25Okapi:"""Create a BM25 index from the given documents.BM25 (Best Matching 25) is a ranking function used in information retrieval.It's based on the probabilistic retrieval framework and is an improvement over TF-IDF.Args:documents (List[Document]): List of documents to index.Returns:BM25Okapi: An index that can be used for BM25 scoring."""# Tokenize each document by splitting on whitespace# This is a simple approach and could be improved with more sophisticated tokenizationtokenized_docs = [doc.page_content.split() for doc in documents]return BM25Okapi(tokenized_docs)

混合召回

def fusion_retrieval(vectorstore, bm25, query: str, k: int = 5, alpha: float = 0.5) -> List[Document]:"""Perform fusion retrieval combining keyword-based (BM25) and vector-based search.Args:vectorstore (VectorStore): The vectorstore containing the documents.bm25 (BM25Okapi): Pre-computed BM25 index.query (str): The query string.k (int): The number of documents to retrieve.alpha (float): The weight for vector search scores (1-alpha will be the weight for BM25 scores).Returns:List[Document]: The top k documents based on the combined scores."""# Step 1: Get all documents from the vectorstoreall_docs = vectorstore.similarity_search("", k=vectorstore.index.ntotal)# Step 2: Perform BM25 searchbm25_scores = bm25.get_scores(query.split())# Step 3: Perform vector searchvector_results = vectorstore.similarity_search_with_score(query, k=len(all_docs))# Step 4: Normalize scoresvector_scores = np.array([score for _, score in vector_results])vector_scores = 1 - (vector_scores - np.min(vector_scores)) / (np.max(vector_scores) - np.min(vector_scores))bm25_scores = (bm25_scores - np.min(bm25_scores)) / (np.max(bm25_scores) - np.min(bm25_scores))# Step 5: Combine scorescombined_scores = alpha * vector_scores + (1 - alpha) * bm25_scores# Step 6: Rank documentssorted_indices = np.argsort(combined_scores)[::-1]# Step 7: Return top k documentsreturn [all_docs[i] for i in sorted_indices[:k]]

原文链接:​ ​​ ​

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:http://www.duobeib.com/diannaowangluoweixiu/5578.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号