山东搜点网站建设,如何创建自己的网址,四川成都网站优化,网站建设中敬请期待 图片1.问题#xff1a;向量检索也易混淆#xff0c;而关键字会更精准 
在实际生产中#xff0c;传统的关键字检索#xff08;稀疏表示#xff09;与向量检索#xff08;稠密表示#xff09;各有利弊。 
举个具体例子#xff0c;比如文档中包含很长的专有名词#xff0c; 关…1.问题向量检索也易混淆而关键字会更精准 
在实际生产中传统的关键字检索稀疏表示与向量检索稠密表示各有利弊。 
举个具体例子比如文档中包含很长的专有名词 关键字检索往往更精准 而向量检索容易引入概念混淆。 
# 背景说明在医学中“小细胞肺癌”和“非小细胞肺癌”是两种不同的癌症query  非小细胞肺癌的患者documents  [玛丽患有肺癌癌细胞已转移,刘某肺癌I期,张某经诊断为非小细胞肺癌III期,小细胞肺癌是肺癌的一种
]query_vec  get_embeddings([query])[0]
doc_vecs  get_embeddings(documents)print(Cosine distance:)
for vec in doc_vecs:print(cos_sim(query_vec, vec))#### 输出Cosine distance:
0.8915268056308027
0.8895478505819983
0.9039165614288258
0.91314416459026852.解决混合检索结合不同检索算法 
所以有时候我们需要结合不同的检索算法来达到比单一检索算法更优的效果。这就是混合检索。 
混合检索的核心是综合文档  d d d 在不同检索算法下的排序名次rank为其生成最终排序。 
一个最常用的算法叫 Reciprocal Rank FusionRRF r r f ( d )  ∑ a ∈ A 1 k  r a n k a ( d ) rrf(d)\sum_{a\in A}\frac{1}{krank_a(d)} rrf(d)∑a∈Akranka(d)1 
其中  A A A 表示所有使用的检索算法的集合 r a n k a ( d ) rank_a(d) ranka(d) 表示使用算法  a a a 检索时文档  d d d 的排序 k k k 是个常数。 
很多向量数据库都支持混合检索比如 Weaviate、Pinecone 等。也可以根据上述原理自己实现。 
3.简单示例 
3.1 基于关键字检索的排序 
import timeclass MyEsConnector:def __init__(self, es_client, index_name, keyword_fn):self.es_client  es_clientself.index_name  index_nameself.keyword_fn  keyword_fndef add_documents(self, documents):文档灌库if self.es_client.indices.exists(indexself.index_name):self.es_client.indices.delete(indexself.index_name)self.es_client.indices.create(indexself.index_name)actions  [{_index: self.index_name,_source: {keywords: self.keyword_fn(doc),text: doc,id: fdoc_{i}}}for i, doc in enumerate(documents)]helpers.bulk(self.es_client, actions)time.sleep(1)def search(self, query_string, top_n3):检索search_query  {match: {keywords: self.keyword_fn(query_string)}}res  self.es_client.search(indexself.index_name, querysearch_query, sizetop_n)return {hit[_source][id]: {text: hit[_source][text],rank: i,}for i, hit in enumerate(res[hits][hits])}from chinese_utils import to_keywords  # 使用中文的关键字提取函数# 引入配置文件
ELASTICSEARCH_BASE_URL  os.getenv(ELASTICSEARCH_BASE_URL)
ELASTICSEARCH_PASSWORD  os.getenv(ELASTICSEARCH_PASSWORD)
ELASTICSEARCH_NAME os.getenv(ELASTICSEARCH_NAME)es  Elasticsearch(hosts[ELASTICSEARCH_BASE_URL],  # 服务地址与端口http_auth(ELASTICSEARCH_NAME, ELASTICSEARCH_PASSWORD),  # 用户名密码
)# 创建 ES 连接器
es_connector  MyEsConnector(es, demo_es_rrf, to_keywords)# 文档灌库
es_connector.add_documents(documents)# 关键字检索
keyword_search_results  es_connector.search(query, 3)print(json.dumps(keyword_search_results, indent4, ensure_asciiFalse)){doc_2: {text: 张某经诊断为非小细胞肺癌III期,rank: 0},doc_0: {text: 玛丽患有肺癌癌细胞已转移,rank: 1},doc_3: {text: 小细胞肺癌是肺癌的一种,rank: 2}
}## 3.2 基于向量检索的排序python
# 创建向量数据库连接器
vecdb_connector  MyVectorDBConnector(demo_vec_rrf, get_embeddings)# 文档灌库
vecdb_connector.add_documents(documents)# 向量检索
vector_search_results  {doc_str(documents.index(doc)): {text: doc,rank: i}for i, doc in enumerate(vecdb_connector.search(query, 3)[documents][0])
}  # 把结果转成跟上面关键字检索结果一样的格式print(json.dumps(vector_search_results, indent4, ensure_asciiFalse)){doc_3: {text: 小细胞肺癌是肺癌的一种,rank: 0},doc_2: {text: 张某经诊断为非小细胞肺癌III期,rank: 1},doc_0: {text: 玛丽患有肺癌癌细胞已转移,rank: 2}
}3.3 基于 RRF 的融合排序 
def rrf(ranks, k1):ret  {}# 遍历每次的排序结果for rank in ranks:# 遍历排序中每个元素for id, val in rank.items():if id not in ret:ret[id]  {score: 0, text: val[text]}# 计算 RRF 得分ret[id][score]  1.0/(kval[rank])# 按 RRF 得分排序并返回return dict(sorted(ret.items(), keylambda item: item[1][score], reverseTrue))import json# 融合两次检索的排序结果
reranked  rrf([keyword_search_results, vector_search_results])print(json.dumps(reranked, indent4, ensure_asciiFalse)){doc_2: {score: 1.5,text: 张某经诊断为非小细胞肺癌III期},doc_3: {score: 1.3333333333333333,text: 小细胞肺癌是肺癌的一种},doc_0: {score: 0.8333333333333333,text: 玛丽患有肺癌癌细胞已转移}
}RAG-Fusion 
RAG-Fusion 就是利用了 RRF 的原理来提升检索的准确性。 RRF reciprocal rank fusion 倒秩融合 原始项目非常简短的演示代码https://github.com/Raudaschl/rag-fusion  文章转载自: http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.fkffr.cn.gov.cn.fkffr.cn http://www.morning.jhrkm.cn.gov.cn.jhrkm.cn http://www.morning.seoqun.com.gov.cn.seoqun.com http://www.morning.zrrgx.cn.gov.cn.zrrgx.cn http://www.morning.mrfjr.cn.gov.cn.mrfjr.cn http://www.morning.bynf.cn.gov.cn.bynf.cn http://www.morning.zlces.com.gov.cn.zlces.com http://www.morning.rbzht.cn.gov.cn.rbzht.cn http://www.morning.hbpjb.cn.gov.cn.hbpjb.cn http://www.morning.xhwty.cn.gov.cn.xhwty.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.jcxgr.cn.gov.cn.jcxgr.cn http://www.morning.zhghd.cn.gov.cn.zhghd.cn http://www.morning.pfbx.cn.gov.cn.pfbx.cn http://www.morning.lgznf.cn.gov.cn.lgznf.cn http://www.morning.wanjia-sd.com.gov.cn.wanjia-sd.com http://www.morning.dmsxd.cn.gov.cn.dmsxd.cn http://www.morning.dkcpt.cn.gov.cn.dkcpt.cn http://www.morning.znrlg.cn.gov.cn.znrlg.cn http://www.morning.cwcdr.cn.gov.cn.cwcdr.cn http://www.morning.ctpfq.cn.gov.cn.ctpfq.cn http://www.morning.jwqqd.cn.gov.cn.jwqqd.cn http://www.morning.pthmn.cn.gov.cn.pthmn.cn http://www.morning.brld.cn.gov.cn.brld.cn http://www.morning.sryyt.cn.gov.cn.sryyt.cn http://www.morning.hnrdtz.com.gov.cn.hnrdtz.com http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn http://www.morning.yznsx.cn.gov.cn.yznsx.cn http://www.morning.zqybs.cn.gov.cn.zqybs.cn http://www.morning.mbpfk.cn.gov.cn.mbpfk.cn http://www.morning.xjmpg.cn.gov.cn.xjmpg.cn http://www.morning.nkdmd.cn.gov.cn.nkdmd.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.kjfqf.cn.gov.cn.kjfqf.cn http://www.morning.rydbs.cn.gov.cn.rydbs.cn http://www.morning.dgckn.cn.gov.cn.dgckn.cn http://www.morning.bfrff.cn.gov.cn.bfrff.cn http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.mtmnk.cn.gov.cn.mtmnk.cn http://www.morning.rzysq.cn.gov.cn.rzysq.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.tqrjj.cn.gov.cn.tqrjj.cn http://www.morning.dmzzt.cn.gov.cn.dmzzt.cn http://www.morning.kcrw.cn.gov.cn.kcrw.cn http://www.morning.ygkk.cn.gov.cn.ygkk.cn http://www.morning.qfmcm.cn.gov.cn.qfmcm.cn http://www.morning.tjjkn.cn.gov.cn.tjjkn.cn http://www.morning.kpcjl.cn.gov.cn.kpcjl.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.mprky.cn.gov.cn.mprky.cn http://www.morning.yrjkp.cn.gov.cn.yrjkp.cn http://www.morning.qlckc.cn.gov.cn.qlckc.cn http://www.morning.ckfqt.cn.gov.cn.ckfqt.cn http://www.morning.mzqhb.cn.gov.cn.mzqhb.cn http://www.morning.rgmd.cn.gov.cn.rgmd.cn http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn http://www.morning.pqqzd.cn.gov.cn.pqqzd.cn http://www.morning.qbrdg.cn.gov.cn.qbrdg.cn http://www.morning.tnhmp.cn.gov.cn.tnhmp.cn http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn http://www.morning.jtfcd.cn.gov.cn.jtfcd.cn http://www.morning.dmcqy.cn.gov.cn.dmcqy.cn http://www.morning.hxsdh.cn.gov.cn.hxsdh.cn http://www.morning.dzpnl.cn.gov.cn.dzpnl.cn http://www.morning.hqrkq.cn.gov.cn.hqrkq.cn http://www.morning.dbqcw.com.gov.cn.dbqcw.com http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.hmsong.com.gov.cn.hmsong.com http://www.morning.dnqpq.cn.gov.cn.dnqpq.cn http://www.morning.rynqh.cn.gov.cn.rynqh.cn http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.wtsr.cn.gov.cn.wtsr.cn http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn http://www.morning.qpljg.cn.gov.cn.qpljg.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.rbqlw.cn.gov.cn.rbqlw.cn http://www.morning.xesrd.com.gov.cn.xesrd.com