在使用RAG时,用FlashrankRerank中的模型作为Ranker时,从HuggingFace无法下载的解决方法

报错:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /prithivida/flashrank/resolve/main/ms-marco-MiniLM-L-12-v2.zip (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7fdb6f87edc0>: Failed to establish a new connection: [Errno 101] Network is unreachable'))

 首先,进入到FlashrankRerank的源码部分,找到这句代码

values["client"] = Ranker(model_name=values["model"])

 然后,进入到Ranker源码部分,在import部分,找到这句:

from flashrank.Config import default_model, default_cache_dir, model_url, model_file_map, listwise_rankers

其中有个default_cache_dir,进入里面:

model_url = 'https://huggingface.co/prithivida/flashrank/resolve/main/{}.zip'
listwise_rankers = {'rank_zephyr_7b_v1_full'}

default_cache_dir = "/tmp"
default_model = "ms-marco-TinyBERT-L-2-v2"
model_file_map = {
    "ms-marco-TinyBERT-L-2-v2": "flashrank-TinyBERT-L-2-v2.onnx",
    "ms-marco-MiniLM-L-12-v2": "flashrank-MiniLM-L-12-v2_Q.onnx",
    "ms-marco-MultiBERT-L-12": "flashrank-MultiBERT-L12_Q.onnx",
    "rank-T5-flan": "flashrank-rankt5_Q.onnx",
    "ce-esci-MiniLM-L12-v2": "flashrank-ce-esci-MiniLM-L12-v2_Q.onnx",
    "rank_zephyr_7b_v1_full": "rank_zephyr_7b_v1_full.Q4_K_M.gguf"
}

结合“model_url”和“model_file_map”,从网上把模型下载到本地。

如果愿意修改“default_cache_dir”这个参数,修改为下载到自己本地的模型路径,那么可以解决问题。

或者也可以修改FlashrankRerank的源码部分:(以下是我修改的部分)

from __future__ import annotations

from typing import TYPE_CHECKING, Dict, Optional, Sequence

from langchain_core.callbacks.manager import Callbacks
from langchain_core.documents import Document
from langchain_core.pydantic_v1 import Extra, root_validator

from langchain.retrievers.document_compressors.base import BaseDocumentCompressor

if TYPE_CHECKING:
    from flashrank import Ranker, RerankRequest
else:
    # Avoid pydantic annotation issues when actually instantiating
    # while keeping this import optional
    try:
        from flashrank import Ranker, RerankRequest
    except ImportError:
        pass

DEFAULT_MODEL_NAME = "ms-marco-MultiBERT-L-12"


class FlashrankRerank(BaseDocumentCompressor):
    """Document compressor using Flashrank interface."""

    client: Ranker
    """Flashrank client to use for compressing documents"""
    top_n: int = 3
    """Number of documents to return."""
    model: Optional[str] = None
    """Model to use for reranking."""

    cache_dir: Optional[str] = None  # 增加 cache_dir 字段
    """源码居然无法自己指定已经下载好的模型路径,那只有自己写了"""

    class Config:
        """Configuration for this pydantic object."""

        extra = Extra.forbid
        arbitrary_types_allowed = True

    @root_validator(pre=True)
    def validate_environment(cls, values: Dict) -> Dict:
        """Validate that api key and python package exists in environment."""
        try:
            from flashrank import Ranker
        except ImportError:
            raise ImportError(
                "Could not import flashrank python package. "
                "Please install it with `pip install flashrank`."
            )
        
        values["model"] = values.get("model", DEFAULT_MODEL_NAME)
        values["cache_dir"] = values.get("cache_dir", None)

        if values["cache_dir"] is not None:
            values["client"] = Ranker(model_name=values["model"], cache_dir=values["cache_dir"])
        else: 
            values["client"] = Ranker(model_name=values["model"])
        return values

    def compress_documents(
        self,
        documents: Sequence[Document],
        query: str,
        callbacks: Optional[Callbacks] = None,
    ) -> Sequence[Document]:
        passages = [
            {"id": i, "text": doc.page_content, "meta": doc.metadata}
            for i, doc in enumerate(documents)
        ]

        rerank_request = RerankRequest(query=query, passages=passages)
        rerank_response = self.client.rerank(rerank_request)[: self.top_n]
        final_results = []

        for r in rerank_response:
            metadata = r["meta"]
            metadata["relevance_score"] = r["score"]
            doc = Document(
                page_content=r["text"],
                metadata=metadata,
            )
            final_results.append(doc)
        return final_results

然后在调用的时候,多一个cache_dir参数,就是你模型的本地路径:

compressor = FlashrankRerank(model="ms-marco-MiniLM-L-12-v2", 
                             cache_dir="/data1/txy/Match/First use of LLM+RAG or Fine-turn/Dependence")

问题就解决了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值