百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

统一多模态Embedding:通义实验室开源GME系列模型

ztj100 2025-02-11 14:27 61 浏览 0 评论

在2025年初,阿里巴巴通义实验室推出了GME(General MultiModal Embedding)系列模型,旨在解决多模态信息检索中的复杂问题。随着多媒体应用的迅猛发展,用户产生的数据类型日益多样化,不再局限于文本,还包含大量图像、音频和视频等多模态信息。传统的信息检索模型多关注单一模态,如仅对文本或图像进行分析和搜索,而GME通过统一的多模态表征模型,显著提升了信息检索的效率和精准度。

Paper: http://arxiv.org/abs/2412.16855

huggingface:

https://huggingface.co/Alibaba-NLP/gme-Qwen2-VL-2B-Instruct

https://huggingface.co/Alibaba-NLP/gme-Qwen2-VL-7B-Instruct

modelscope:

https://modelscope.cn/models/iic/gme-Qwen2-VL-2B-Instruct

https://modelscope.cn/models/iic/gme-Qwen2-VL-7B-Instruct

以下是对GME效果的详细介绍:

GME的核心技术

GME基于Qwen2-VL多模态大语言模型构建,采用对比学习的方法进行训练。每个训练样本包含一个查询、一个相关候选项及多组无关候选项,覆盖文本、图像及图文组合等多种数据类型。通过指令调优,GME能够适应不同的检索任务,比如视觉问答(VQA)等,进一步增强了模型的表征能力。具体为:

模型架构:GME基于MLLM构建,能够接受图像、文本或图像-文本对作为输入。受先前文本嵌入研究的启发,GME使用最后一个标记的最终隐藏状态作为输入的表示(或嵌入)。尽管预训练的MLLM具有强大的多模态理解能力,但其原始训练目标并未针对表示学习进行优化。因此,需要进行任务特定的微调(或对齐)以增强模型的表示能力。

对比学习:在对比学习设置中,每个训练实例包括一个查询q、一个相关候选c和一组不相关的候选{c1?,c2?,…,cK?}。为了适应各种下游检索任务,GME采用了指令调优方法,为每个检索任务添加定制的指令文本i。训练过程中,GME通过最小化相关对的余弦距离,同时最大化不相关对的余弦距离来优化模型。

硬负样本:为了提高对比学习模型的质量和多样性,GME采用了两阶段训练策略:首先使用随机选择的负候选进行初始训练,然后使用初始模型检索每个查询的前K个候选,从中选择非相关候选作为硬负样本进行进一步训练。

训练数据组成:GME的训练数据包括单模态、跨模态和融合模态数据。通过实验,研究团队发现平衡不同类型的数据可以显著提高模型在各种检索场景中的表现。

在训练数据方面,GME不仅利用了丰富的单模态和跨模态数据,还通过大模型生成技术,合成了海量的混合模态相关性数据。为了高效合成高质量的融合模态数据,研究团队采用了类似于Doc2Query的策略。

具体步骤包括:文档到查询生成实体提取和查询重写图像检索和生成以及数据过滤。通过这些步骤,研究团队成功合成了113.5万条高质量的融合模态训练数据,显著增强了模型的训练和性能。

统一多模态检索评测 (UMRB)

为系统评估模型在多种模态检索场景下的表现,GME作者团队构建了一个统一多模态检索评测数据集,命名为通用多模态检索基准(Universal Multimodal Retrieval Benchmark,UMRB)

该Benchmark包含47个评测子集,覆盖广泛的多模态检索任务。这些子集主要来源于之前针对不同子场景或子任务构建的专用数据集。UMRB包括以下几类数据:

  1. BEIR评测集:用于文本到文本的检索场景。
  2. M-BEIR数据集:聚焦于视觉相关的检索场景。
  3. 混合模态数据集:涵盖M-BEIR未覆盖的检索任务。
  4. 文本到视觉文档搜索数据集(如ViDoRe):扩展评测数据的覆盖范围,确保对模型通用性的全面评估。

在UMRB评测中,GME-Qwen2-VL系列模型表现优异。2B和7B规模的GME模型均超越了此前的基线模型,验证了其在单模态、跨模态及混合模态检索任务中的有效性。

此外,GME在纯文本检索和富文本图片检索上也展现出强大的能力。在BEIR文本检索评测中,尽管多模态嵌入模型在文本任务上略逊于专门的纯文本模型,但GME在富文本图片检索(如论文PDF、财报等)中,无需经过OCR识别即可直接进行高效检索,取得了显著优势。

模型使用方法

GME模型是通义基于多模态预训练大模型构建多模态Embedding模型进行的初步探索,当前版本还有许多提升空间和技术改进方向。基于Qwen2-VL系列模型训练的General MultiModal Embedding(GME)系列模型现已在Huggingface和ModalScope平台开源。

Huggingface例代码(2B):

# You can find the script gme_inference.py in https://huggingface.co/Alibaba-NLP/gme-Qwen2-VL-2B-Instruct/blob/main/gme_inference.py
from gme_inference import GmeQwen2VL

texts = [
    "What kind of car is this?",
    "The Tesla Cybertruck is a battery electric pickup truck built by Tesla, Inc. since 2023."
]
images = [
    'https://en.wikipedia.org/wiki/File:Tesla_Cybertruck_damaged_window.jpg',
    'https://en.wikipedia.org/wiki/File:2024_Tesla_Cybertruck_Foundation_Series,_front_left_(Greenwich).jpg',
]

gme = GmeQwen2VL("Alibaba-NLP/gme-Qwen2-VL-2B-Instruct")

# Single-modal embedding
e_text = gme.get_text_embeddings(texts=texts)
e_image = gme.get_image_embeddings(images=images)
print((e_text * e_image).sum(-1))
## tensor([0.2281, 0.6001], dtype=torch.float16)

# How to set embedding instruction
e_query = gme.get_text_embeddings(texts=texts, instruction='Find an image that matches the given text.')
# If is_query=False, we always use the default instruction.
e_corpus = gme.get_image_embeddings(images=images, is_query=False)
print((e_query * e_corpus).sum(-1))
## tensor([0.2433, 0.7051], dtype=torch.float16)

# Fused-modal embedding
e_fused = gme.get_fused_embeddings(texts=texts, images=images)
print((e_fused[0] * e_fused[1]).sum())
## tensor(0.6108, dtype=torch.float16)

Modelscope例代码(7B):

# You can find the script gme_inference.py in https://modelscope.cn/models/iic/gme-Qwen2-VL-7B-Instruct/file/view/master?fileName=gme_inference.py
from gme_inference import GmeQwen2VL

texts = [
    "What kind of car is this?",
    "The Tesla Cybertruck is a battery electric pickup truck built by Tesla, Inc. since 2023."
]
images = [
    'https://mitalinlp.oss-cn-hangzhou.aliyuncs.com/test/Tesla_Cybertruck_damaged_window.jpg',
    'https://mitalinlp.oss-cn-hangzhou.aliyuncs.com/test/2024_Tesla_Cybertruck_Foundation_Series%2C_front_left_(Greenwich).jpg',
]

gme = GmeQwen2VL("gme-Qwen2-VL-7B-Instruct")

# Single-modal embedding
e_text = gme.get_text_embeddings(texts=texts)
e_image = gme.get_image_embeddings(images=images)
print((e_text * e_image).sum(-1))
## tensor([0.2281, 0.6001], dtype=torch.float16)

# How to set embedding instruction
e_query = gme.get_text_embeddings(texts=texts, instruction='Find an image that matches the given text.')
# If is_query=False, we always use the default instruction.
e_corpus = gme.get_image_embeddings(images=images, is_query=False)
print((e_query * e_corpus).sum(-1))
## tensor([0.2433, 0.7051], dtype=torch.float16)

# Fused-modal embedding
e_fused = gme.get_fused_embeddings(texts=texts, images=images)
print((e_fused[0] * e_fused[1]).sum())
## tensor(0.6108, dtype=torch.float16)


阿里云多模态Embedding模型服务

通义实验室也在阿里云百炼大模型平台上推出推理性能更佳、垂直领域检索效果更优秀的公共云多模态Embedding模型服务multimodal-embedding-v1, multimodal-embedding-v1模型服务提供文本、图片、视频三种模态的表征能力,详情参考阿里云百炼大模型服务平台模型服务。

结论

GME系列模型的推出,标志着多模态信息检索领域的一次重大突破。通过统一的多模态表征模型,GME不仅提升了信息检索的效率和精准度,还为未来的多模态应用提供了强大的技术支持。随着开源社区的不断壮大,GME有望在多模态信息处理与检索领域发挥更大的作用。

探讨

我以前用Chinese Clip进行商品比对一类的工作。效果还不错,具体参考:

北方的郎:利用Chinese Clip实现基于图片的商品识别

看GME的文档,感觉效果肯定比Clip要好。可是看了一下模型,也大了很多:

后续准备有时间评估一下费效比。

相关推荐

Vue3非兼容变更——函数式组件(vue 兼容)

在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...

利用vue.js进行组件化开发,一学就会(一)

组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...

Vue3 新趋势:10 个最强 X 操作!(vue.3)

Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...

总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率

SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...

前端流行框架Vue3教程:17. _组件数据传递

_组件数据传递我们之前讲解过了组件之间的数据传递,...

前端流行框架Vue3教程:14. 组件传递Props效验

组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...

前端流行框架Vue3教程:25. 组件保持存活

25.组件保持存活当使用...

5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?

前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...

绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!

前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...

前端流行框架Vue3教程:15. 组件事件

组件事件在组件的模板表达式中,可以直接使用...

Vue3,看这篇就够了(vue3 从入门到实战)

一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...

前端流行框架Vue3教程:24.动态组件

24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...

前端流行框架Vue3教程:12. 组件的注册方式

组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...

焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!

前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...

前端流行框架Vue3教程:26. 异步组件

根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...

取消回复欢迎 发表评论: