多模态的定义
在人工智能领域,模态指的是数据的不同形式或类型,例如文本、图像、音频、视频等。多模态则意味着模型能够处理和理解多种不同模态的数据。
大模型的多模态指的是那些能够处理和理解多种模态数据的大型人工智能模型。这些模型通常基于深度学习技术,通过学习不同模态数据之间的关联和规律,从而实现更强大的功能。
多模态大模型的特点
- 跨模态理解: 多模态大模型能够理解不同模态数据之间的关系,例如将图像和文本联系起来,理解图像的内容并用文字描述出来。
- 模态转换: 多模态大模型能够将一种模态的数据转换为另一种模态的数据,例如将文本描述转换为图像,或者将语音转换为文本。
- 更强的泛化能力: 通过学习多种模态的数据,多模态大模型通常具有更强的泛化能力,能够更好地适应不同的任务和场景。
多模态大模型的应用
多模态大模型在很多领域都有广泛的应用,例如:
- 图像和文本理解: 例如图像搜索、图像描述、视觉问答等。
- 语音和文本理解: 例如语音识别、语音翻译、智能助手等。
- 视频和文本理解: 例如视频描述、视频搜索、智能监控等。
- 跨模态生成: 例如根据文本描述生成图像、根据图像生成文本描述等。
Hugging Face 平台上的多模态模型
Hugging Face 平台提供了丰富的多模态模型,例如:
- CLIP: 一个由 OpenAI 开发的图像和文本理解模型,能够将图像和文本联系起来。
- ALIGN: 一个由 Google 开发的图像和文本理解模型,具有强大的跨模态理解能力。
- Visual-T5: 一个由 Google 开发的视觉问答模型,能够回答与图像内容相关的问题。
OpenAI的多模态功能非常丰富,文本、图片、语音、视频等都有。DeepSeek目前仅在文本模态,其他模态尚无。智普的多模态也做的挺好,功能也比较强大。本文通过OpenAI和智普的WebAPI演示图片识别功能,也俗称 图生文。
一、OpenAI的图片识别
使用OpenAI的Chat Complations接口,content的内容与普通的对话接口不一样,对话接口的content是一段文本,图生文的处理中,content是一组数组。
数组代表多组图片或提示词,prompt提示词使用type=“text”的text中,图片放type="image_url"的image_url里;若有多张图片则content的数组增加多个。
单轮图片URL对话一
from openai import OpenAI
client = OpenAI(api_key="xxx", base_url="https://vip.apiyi.com/v1")
model="gpt-4-turbo"
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": "请描述下这张图片"},
{
"type": "image_url",
"image_url": {
"url": "https://p6.itc.cn/q_70/images03/20200602/0c267a0d3d814c9783659eb956969ba1.jpeg",
},
},
],
}
],
max_tokens=300,
)
print(response.choices[0])
返回:
Choice(finish_reason='length', index=0, logprobs=None, message=ChatCompletionMessage(content='这张图片是一张幽默风格的搞笑对比图,展示了两种不同类型的犬类形象。左边的图像是一只金毛色的狗,经过创意修改,被赋予了一副人类的肌肉健身身体,看起来非常壮实和强壮。右边的图像呈现了一只正常体型的柴犬坐着的样子,显得较为柔弱和平静。\n\n左侧的标题是“16岁的我”,下方的文字是我日常与一片云聊天,我不落地,人们轻轻的大腿。右侧的标题是“工作后的我”,下方的文字是好累好累,好想躺地洗澡,我不想洗澡,我在考虑小吃。\n\n这种对比图旨在幽默的比较了人在年轻时候的梦想与壮志与工作后可能的现实感受的差距', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))
上面例子中图片是使用网络地址,也可以使用本地图片转base64。
单轮图片Base64对话二
from openai import OpenAI
import base64
import requests
client = OpenAI(api_key="sk-xxxx", base_url="https://vip.apiyi.com/v1") # 初始化 OpenAI 客户端
model="gpt-4-turbo"
image_path="./images/gdp_1980_2020.jpg"
# 实现 Base64 编码
def encode_image(path):
with open(path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# 获取图像的 Base64 编码字符串
base64_image = encode_image(image_path)
# 构造请求的负载
messages = [
{
"role": "user",
"content": [
{"type": "text", "text": "请提取图片中的文字"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}}
]
}
]
response = client.chat.completions.create(
model=model,
messages= messages,
max_tokens=1000
)
print(response.choices[0])
二、智普的图片识别
GLM-4V-Plus模型支持最多5张图像的理解以及视频理解,GLM-4V模型只支持图片理解。支持url地址和base64。
多轮图片对话一
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") # 填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4v-plus-0111",
stream=False,
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://aigc-files.bigmodel.cn/api/cogview/202411181621355e276522adac433a_0.png"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://aigc-files.bigmodel.cn/api/cogview/2024111816214822f9ee58eefa48bc_0.png"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://aigc-files.bigmodel.cn/api/cogview/2024111816415481bfd2e6ef99445e_0.png"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://aigc-files.bigmodel.cn/api/cogview/20241118164408b8bdfd6a63484cf3_0.png"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://aigc-files.bigmodel.cn/api/cogview/20241118164507bfd683b3d8d84de8_0.png"
}
},
{
"type": "text",
"text": "图中的狗有什么区别"
}
]
}
]
)
# 输出结果
print(response)
多轮图片对话二
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="YOUR API KEY") # 填写您自己的APIKey
response = client.chat.completions.create(
model="glm-4v-plus-0111", # 填写需要调用的模型名称
messages=[
{
"content": [
{
"image_url": {
"url": "https://cdn.bigmodel.cn/xxxxxx.png"
},
"type": "image_url"
},
{
"text": "图中有什么",
"type": "text"
}
],
"role": "user"
},
{
"content": [
{
"text": "这是一幅描绘自然风景的画,展现了一片宁静的湖泊,湖水呈现出深浅不一的蓝绿色调。湖边长着一棵盛开的樱花树,粉白色的花朵在阳光下显得格外鲜艳。树下有一位身穿蓝色衣服的人坐在船上,似乎正在享受这美好的时光。\n\n背景是连绵起伏的山脉,山体被绿色的植被覆盖,山顶则被云雾缭绕,增添了几分神秘感。远处还可以看到一座小亭子,它坐落在湖边的岩石上,与周围的自然环境和谐相融。\n\n整个画面给人一种宁静、和谐的感觉,仿佛置身于一个世外桃源之中。",
"type": "text"
}
],
"role": "assistant"
},
{
"content": [
{
"image_url": {
"url": "https://cdn.bigmodel.cn/xxxxxxx.jpeg"
},
"type": "image_url"
},
{
"text": "这个图与上面图有什么不一样",
"type": "text"
}
],
"role": "user"
},
{
"content": [
{
"text": "第一张图和第二张图在画面内容、构图、色彩等方面都有很大的不同,形成鲜明的对比。\n\n1.第一张图是风景画,主要描绘了自然风景,如樱花树、湖泊、山脉等,色彩丰富,充满春天的气息,而第二张图是描绘长城在冬季的风景照片,长城在白雪覆盖的山脉中蜿蜒盘旋,整体色调偏冷,给人一种寒冷、宁静的感觉。\n\n2.构图上,第一张图采用对称式构图,以樱花树为中心,两侧的景物相互呼应,形成平衡和谐的画面效果,第二张图则采用对角线构图,长城作为视觉引导线,引导观众的视线穿越整个画面,增加画面的深度和动态感。\n\n整体来看,这两张图在画面内容、色彩、构图和氛围上都呈现出明显的对比,一张是充满生机和色彩的春日风景画,另一张是宁静而神秘的冬日长城风景照。",
"type": "text"
}
],
"role": "assistant"
},
{
"content": [
{
"image_url": {
"url": "https://cdn.bigmodel.cn/xxxxxxx.jpeg"
},
"type": "image_url"
},
{
"text": "这个图与上一张图有什么区别",
"type": "text"
}
],
"role": "user"
}
]
)
print(response.choices[0].message)