使用Replicate服务的LLaVa模型通过LlamaIndex进行检索增强图像描述

在这篇文章中,我们将展示如何利用LLaVa和Replicate进行图像理解/描述,并根据图像理解从Tesla 10K文件中检索相关的非结构化文本和嵌入的表格。

背景

LLaVa (Large Language and Vision Assistant) 可以基于用户提示提供图像理解。我们使用Unstructured来解析表格,并使用LlamaIndex递归检索来索引/检索表格和文本。通过LLaVa的图像理解,我们可以从知识库中检索相关信息,该知识库由LlamaIndex生成和索引。

准备工作

首先,我们需要安装一些必要的库:

!pip install llama-index-readers-file
!pip install llama-index-multi-modal-llms-replicate
!pip install unstructured

数据提取

我们使用Unstructured来解析10-K文件中的表格和非表格元素。

!wget "https://www.dropbox.com/scl/fi/mlaymdy1ni1ovyeykhhuk/tesla_2021_10k.htm?rlkey=qf9k4zn0ejrbm716j0gg7r802&dl=1" -O tesla_2021_10k.htm
!wget "https://docs.google.com/uc?export=download&id=1THe1qqM61lretr9N3BmINc_NWDvuthYf" -O shanghai.jpg
!wget "https://docs.google.com/uc?export=download&id=1PDVCf_CzLWXNnNoRV8CFgoJxv6U0sHAO" -O tesla_supercharger.jpg

from llama_index.readers.file import FlatReader
from pathlib import Path

reader = FlatReader()
docs_2021 = reader.load_data(Path("tesla_2021_10k.htm"))

from llama_index.core.node_parser import UnstructuredElementNodeParser

node_parser = UnstructuredElementNodeParser()
raw_nodes_2021 = node_parser.get_nodes_from_documents(docs_2021)

nodes_2021, objects_2021 = node_parser.get_nodes_and_objects(raw_nodes_2021)

设置可组合检索器

我们可以设置一个可组合检索器来查询这些表格。

from llama_index.core import VectorStoreIndex

vector_index = VectorStoreIndex(nodes=nodes_2021, objects=objects_2021)
query_engine = vector_index.as_query_engine(similarity_top_k=2, verbose=True)

运行LLaVa模型进行图像理解

通过使用Replicate服务的LLaVa模型,我们可以对图像进行理解。

from llama_index.multi_modal_llms.replicate import ReplicateMultiModal
from llama_index.core.schema import ImageDocument

multi_modal_llm = ReplicateMultiModal(
    model="llava-13b",
    max_new_tokens=200,
    temperature=0.1,
)

prompt = "what is the main object for tesla in the image?"
imageUrl = "./tesla_supercharger.jpg"
llava_response = multi_modal_llm.complete(
    prompt=prompt,
    image_documents=[ImageDocument(image_path=imageUrl)],
)

根据LLaVa图像理解从LlamaIndex知识库中检索相关信息

prompt_template = "please provide relevant information about: "
rag_response = query_engine.query(prompt_template + llava_response.text)
print(rag_response)

示例代码

# 导入库和设置
from llama_index.multi_modal_llms.replicate import ReplicateMultiModal
from llama_index.core.schema import ImageDocument
from pathlib import Path
import os

# 初始化Replicate
os.environ["REPLICATE_API_TOKEN"] = "your_replicate_api_token"  # 替换为你的Replicate API token
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"  # 替换为你的OpenAI API key

# 加载和解析数据
!wget "https://www.dropbox.com/scl/fi/mlaymdy1ni1ovyeykhhuk/tesla_2021_10k.htm?rlkey=qf9k4zn0ejrbm716j0gg7r802&dl=1" -O tesla_2021_10k.htm
reader = FlatReader()
docs_2021 = reader.load_data(Path("tesla_2021_10k.htm"))
node_parser = UnstructuredElementNodeParser()
raw_nodes_2021 = node_parser.get_nodes_from_documents(docs_2021)
nodes_2021, objects_2021 = node_parser.get_nodes_and_objects(raw_nodes_2021)

# 设置可组合检索器
vector_index = VectorStoreIndex(nodes=nodes_2021, objects=objects_2021)
query_engine = vector_index.as_query_engine(similarity_top_k=2, verbose=True)

# 运行LLaVa模型进行图像理解
multi_modal_llm = ReplicateMultiModal(
    model="llava-13b",
    max_new_tokens=200,
    temperature=0.1,
)
imageUrl = "./tesla_supercharger.jpg"
llava_response = multi_modal_llm.complete(
    prompt="what is the main object for tesla in the image?",
    image_documents=[ImageDocument(image_path=imageUrl)],
)

# 根据LLaVa图像理解从LlamaIndex知识库中检索相关信息
prompt_template = "please provide relevant information about: "
rag_response = query_engine.query(prompt_template + llava_response.text)
print(rag_response)

可能遇到的错误

  1. API Token无效: 确保提供了有效的Replicate和OpenAI API Token。
  2. 网络问题: 下载文件时可能会出现网络问题,请确保网络连接正常。
  3. 依赖库未安装: 确保已按照指示安装了所有需要的库。

如果你觉得这篇文章对你有帮助,请点赞、关注我的博客,谢谢!

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值