成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【多模態(tài)&RAG】多模態(tài)RAG ColPali實(shí)踐 原創(chuàng)

發(fā)布于 2024-11-20 15:17
瀏覽
0收藏

關(guān)于??【RAG&多模態(tài)】多模態(tài)RAG-ColPali:使用視覺(jué)語(yǔ)言模型實(shí)現(xiàn)高效的文檔檢索??前面已經(jīng)介紹了(供參考),這次來(lái)看看ColPali實(shí)踐。

所需權(quán)重:

  1. 多模態(tài)問(wèn)答模型:Qwen2-VL-72B-Instruct,https://modelscope.cn/models/Qwen/Qwen2-VL-72B-Instruct
  2. 基于 PaliGemma-3B 和 ColBERT 策略的視覺(jué)檢索器:
  • ColPali(LoRA):https://huggingface.co/vidore/colpali
  • ColPali(基座):https://huggingface.co/vidore/colpaligemma-3b-mix-448-base

多模態(tài)檢索問(wèn)答實(shí)踐

  • lora的adapter_config.json字段base_model_name_or_path修改地址:ColPali(基座)存儲(chǔ)路徑
  • qwen_vl_utils下載地址:https://github.com/QwenLM/Qwen2-VL/tree/main/qwen-vl-utils/src/qwen_vl_utils
  • byaldi安裝方式:https://github.com/AnswerDotAI/byaldi
  • 完整代碼

from byaldi import RAGMultiModalModel
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
from qwen_vl_utils import process_vision_info
import torch
from pdf2image import convert_from_path

class DocumentQA:
    def __init__(self, rag_model_name: str, vlm_model_name: str, device: str = 'cuda', system_prompt: str = None):
        self.rag_engine = RAGMultiModalModel.from_pretrained(rag_model_name)
        self.vlm = Qwen2VLForConditionalGeneration.from_pretrained(
            vlm_model_name,
            torch_dtype=torch.bfloat16,
            attn_implementation="flash_attention_2",
            device_map=device
        )
        self.processor = AutoProcessor.from_pretrained(vlm_model_name, trust_remote_code=True)
        self.device = device
        if system_prompt is None:
            self.system_prompt = (
                "你是一位專精于計(jì)算機(jī)科學(xué)和機(jī)器學(xué)習(xí)的AI研究助理。"
                "你的任務(wù)是分析學(xué)術(shù)論文,尤其是關(guān)于文檔檢索和多模態(tài)模型的研究。"
                "請(qǐng)仔細(xì)分析提供的圖像和文本,提供深入的見解和解釋。"
            )
        else:
            self.system_prompt = system_prompt

    def index_document(self, pdf_path: str, index_name: str = 'index', overwrite: bool = True):
        self.pdf_path = pdf_path
        self.rag_engine.index(
            input_path=pdf_path,
            index_name=index_name,
            store_collection_with_index=False,
            overwrite=overwrite
        )
        self.images = convert_from_path(pdf_path)

    def query(self, text_query: str, k: int = 3) -> str:
        results = self.rag_engine.search(text_query, k=k)
        print("搜索結(jié)果:", results)

        if not results:
            print("未找到相關(guān)查詢結(jié)果。")
            return None

        try:
            page_num = results[0]["page_num"]
            image_index = page_num - 1
            image = self.images[image_index]
        except (KeyError, IndexError) as e:
            print("獲取頁(yè)面圖像時(shí)出錯(cuò):", e)
            return None

        messages = [
            {
                "role": "system",
                "content": self.system_prompt
            },
            {
                "role": "user",
                "content": [
                    {"type": "image", "image": image},
                    {"type": "text", "text": text_query},
                ],
            }
        ]

        text = self.processor.apply_chat_template(
            messages, tokenize=False, add_generation_prompt=True
        )

        image_inputs, video_inputs = process_vision_info(messages)

        # 準(zhǔn)備模型輸入
        inputs = self.processor(
            text=[text],
            images=image_inputs,
            videos=video_inputs,
            padding=True,
            return_tensors="pt",
        )
        inputs = inputs.to(self.device)

        generated_ids = self.vlm.generate(**inputs, max_new_tokens=1024)

        generated_ids_trimmed = [
            out_ids[len(in_ids):] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
        ]
        output_text = self.processor.batch_decode(
            generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
        )

        return output_text[0]

if __name__ == "__main__":
    # 初始化 DocumentQA 實(shí)例
    document_qa = DocumentQA(
        rag_model_name="./colpali",
        vlm_model_name="./Qwen2-VL-7B-Instruct",
        device='cuda'
    )

    # 索引 PDF 文檔
    document_qa.index_document("test.pdf")

    # 定義查詢
    text_query = (
        "文中模型在哪個(gè)數(shù)據(jù)集上相比其他模型有最大的優(yōu)勢(shì)?"
        "該優(yōu)勢(shì)的改進(jìn)幅度是多少?"
    )

    # 執(zhí)行查詢并打印答案
    answer = document_qa.query(text_query)
    print("答案:", answer)



本文轉(zhuǎn)載自公眾號(hào)大模型自然語(yǔ)言處理  作者:余俊暉

原文鏈接:??https://mp.weixin.qq.com/s/27rAyOj9QqyzyRWiWYpQCg??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
主站蜘蛛池模板: 久久网站黄 | 国产精品资源在线 | 亚洲色片网站 | 日日骚视频| 91色在线| 97avcc| 欧美日韩综合视频 | 欧美在线视频一区 | 国产区精品在线观看 | 久久99蜜桃综合影院免费观看 | 欧美a∨ | 精品国产欧美一区二区三区成人 | 欧美日韩一卡二卡 | 欧美日韩国产一区二区三区 | 婷婷中文字幕 | 亚洲欧美日韩久久 | 中文字幕在线一区 | 福利视频网 | 国产精品美女久久久 | 中文字幕高清av | 成人在线小视频 | 久久99精品久久久久久 | 久草视频在 | 成av在线| 久久av一区 | 99pao成人国产永久免费视频 | 91在线视频免费观看 | 色婷婷综合在线观看 | 午夜黄色 | 天天天操操操 | 亚洲啊v在线 | 狠狠干2020 | 亚洲一区二区三区四区五区中文 | 国产高清一区二区 | 亚洲成人免费视频 | 亚洲狠狠爱一区二区三区 | 91超碰caoporn97人人 | 久久国产精品一区二区三区 | 亚洲欧美在线视频 | 精品99在线 | 欧美亚洲国产日韩 |