在这篇文章中,我们将展示如何利用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)
可能遇到的错误
- API Token无效: 确保提供了有效的Replicate和OpenAI API Token。
- 网络问题: 下载文件时可能会出现网络问题,请确保网络连接正常。
- 依赖库未安装: 确保已按照指示安装了所有需要的库。
如果你觉得这篇文章对你有帮助,请点赞、关注我的博客,谢谢!
参考资料: