Skip to content

Multi modal

评估模块。

MultiModalRetrieverEvaluator #

Bases: BaseRetrievalEvaluator

检索器评估器。

该模块将使用一组指标评估检索器。

Parameters:

Name Type Description Default
metrics List[BaseRetrievalMetric]

要评估的指标序列

required
retriever BaseRetriever

要评估的检索器。

required
node_postprocessors Optional[List[BaseNodePostprocessor]]

检索后要应用的后处理器。

None
Source code in llama_index/core/evaluation/retrieval/evaluator.py
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
class MultiModalRetrieverEvaluator(BaseRetrievalEvaluator):
    """检索器评估器。

    该模块将使用一组指标评估检索器。

    Args:
        metrics (List[BaseRetrievalMetric]): 要评估的指标序列
        retriever: 要评估的检索器。
        node_postprocessors (Optional[List[BaseNodePostprocessor]]): 检索后要应用的后处理器。"""

    retriever: BaseRetriever = Field(..., description="Retriever to evaluate")
    node_postprocessors: Optional[List[BaseNodePostprocessor]] = Field(
        default=None, description="Optional post-processor"
    )

    def __init__(
        self,
        metrics: Sequence[BaseRetrievalMetric],
        retriever: BaseRetriever,
        node_postprocessors: Optional[List[BaseNodePostprocessor]] = None,
        **kwargs: Any,
    ) -> None:
        """初始化参数。"""
        super().__init__(
            metrics=metrics,
            retriever=retriever,
            node_postprocessors=node_postprocessors,
            **kwargs,
        )

    async def _aget_retrieved_ids_and_texts(
        self, query: str, mode: RetrievalEvalMode = RetrievalEvalMode.TEXT
    ) -> Tuple[List[str], List[str]]:
        """获取检索到的id。"""
        retrieved_nodes = await self.retriever.aretrieve(query)
        image_nodes: List[ImageNode] = []
        text_nodes: List[TextNode] = []

        if self.node_postprocessors:
            for node_postprocessor in self.node_postprocessors:
                retrieved_nodes = node_postprocessor.postprocess_nodes(
                    retrieved_nodes, query_str=query
                )

        for scored_node in retrieved_nodes:
            node = scored_node.node
            if isinstance(node, ImageNode):
                image_nodes.append(node)
            if node.text:
                text_nodes.append(node)

        if mode == "text":
            return (
                [node.node_id for node in text_nodes],
                [node.text for node in text_nodes],
            )
        elif mode == "image":
            return (
                [node.node_id for node in image_nodes],
                [node.text for node in image_nodes],
            )
        else:
            raise ValueError("Unsupported mode.")