MergerRetriever
MergerRetriever原理是合并多个检索器的结果,以便提供更全面和多样化的搜索结果。
MergerRetriever接收一个包含多个检索器的列表作为输入。 对于给定的查询,MergerRetriever会调用每个检索器,获取它们各自认为与查询相关的文档集合。
实现过程
合并的过程可以按照一种轮询(round-robin)的方式进行,即逐个从每个检索器的结果中选取文档,直到所有检索器的结果被完全合并。 如果有多个检索器返回了相同的文档,那么这些重复的文档可以被合并为一个。 最终的结果是一个包含多个检索器返回的文档的列表,这些文档被认为与查询相关,并且经过了合并和可能的过滤处理。 这个结果列表可以按照一定的排序规则返回,例如根据文档的相关性评分或其他标准进行排序。

EnsembleRetriever
EnsembleRetriever结合了多个检索器的输出,以生成最终的文档排名列表。它利用了逆序排名融合(Reciprocal Rank Fusion,RRF)算法来汇总和重新排列来自不同检索器的结果。
实现过程
RRF是一种将多个排名列表合并为单个聚合列表的技术。它根据文档在各个排名列表中的排名和与每个排名列表相关联的权重为文档分配分数。
每个文档的RRF分数是使用以下公式计算的:
其中'排名'是文档在排名列表中的位置,'权重'是分配给检索器的权重,c是一个常数,默认设置为60。
EnsembleRetriever收集每个检索器返回的文档排名列表。它使用RRF算法对这些列表进行聚合,统计每个文档在所有检索器中的RRF分数。
参考文档
https://python.langchain.com/docs/modules/data_connection/retrievers/ensemble https://www.elastic.co/guide/en/elasticsearch/reference/current/rrf.html

文章转载自Coggle数据科学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




