还记得 ColPali、ColQwen 和 DSE 吗?这些模型开创了视觉文档检索的新范式:无需费力地从文档中提取文本进行处理,只需将文档页面视为一系列图像(屏幕截图),然后训练视觉语言模型(VLM)直接将其内容表示为向量。ColPali 的实践表明,这种策略通常比其他替代方法更快、更简单,并且能带来更好的检索性能。
自发布一年以来,ColPali 和 ColQwen 系列模型已被下载数百万次,被誉为 “2024 年顶级人工智能创新” 之一,并激发了许多后续研究!这些模型的效果甚至好到vidore最初的基准测试(Vidore v1)现在都“显得过于简单”!
视觉语言模型(VLM)的快速发展使得顶尖模型能够处理更多模态的数据。例如,令人惊叹的 Qwen-Omni 系列模型就能够处理音频和视频输入,而不仅仅是图像和文本!鉴于此,vidore立即产生了兴趣:是否可以将 ColQwen 系列模型泛化,使其不仅能嵌入和检索文档图像,还能处理音频片段和短视频?继视觉检索增强生成(VisionRAG)之后,音频检索增强生成(AudioRAG)是否也成为可能?
现在,vidore正式推出ColQwen-Omni(3B) —— 它是 ColQwen2 的扩展,基本上可以嵌入你输入的任何模态的数据!
- 📝 论文:https://arxiv.org/abs/2407.01449
- 🗃️ Hugging Face 组织:https://huggingface.co/vidore
- 👀 模型:https://huggingface.co/vidore/colqwen-omni-v0.1
- 💻 代码:https://github.com/illuin-tech/colpali
- 📝 单向量 DSE 版本:https://arxiv.org/abs/2505.02466
示例用法
让vidore一步步演示如何使用 ColQwen-Omni 检索音频片段!你可以在 Google Colab 中跟着操作。
首先,加载模型:
# !pip install git+https://github.com/illuin-tech/colpali
from colpali_engine.models import ColQwen2_5Omni, ColQwen2_5OmniProcessor
model = ColQwen2_5Omni.from_pretrained(
"vidore/colqwen-omni-v0.1",
torch_dtype=torch.bfloat16,
device_map="cuda",
attn_implementation="flash_attention_2").eval()
processor = ColQwen2_5OmniProcessor.from_pretrained("vidore/colqwen-omni-v0.1")
假设vidore的目标是查询一个长达 30 分钟的播客。vidore可以将播客分割成 30 秒的片段,并将每个片段以 WAV 格式存储到一个 Python 列表中。
from pydub import AudioSegment
audio = AudioSegment.from_wav("<my_legally_downloaded_podcast>.wav")
# 设置目标采样率
target_rate = 16000
chunk_length_ms = 30 * 1000 # 30 秒
audios = []
for i in range(0, len(audio), chunk_length_ms):
chunk = audio[i:i + chunk_length_ms]
# 将立体声转换为单声道,并以 16k Hz 采样
chunk = chunk.set_channels(1).set_frame_rate(target_rate)
# 导出并转换为 numpy 数组
buf = io.BytesIO()
chunk.export(buf, format="wav")
buf.seek(0)
rate, data = wavfile.read(buf)
audios.append(data)
现在,vidore已经准备好嵌入所有的音频数据。
from torch.utils.data import DataLoader
# 以 4 为批量大小处理输入
dataloader = DataLoader(
dataset=audios,
batch_size=4,shuffle=False,
collate_fn=lambda x: processor.process_audios(x))
ds = []
for batch_doc in tqdm(dataloader):
with torch.no_grad():batch_doc = {k: v.to(model.device) for k, v in batch_doc.items()}
embeddings_doc = model(**batch_doc)
ds.extend(list(torch.unbind(embeddings_doc.to("cpu"))))
在这里,一段 30 分钟的音频可以在不到 10 秒内完成嵌入,并且每 30 秒的音频大约能得到 800 个音频标记!让vidore进行一个测试:
def get_results(query: str, k=3):
batch_queries = processor.process_queries([query]).to(model.device)
# 前向传播
with torch.no_grad():
query_embeddings = model(**batch_queries)
scores = processor.score_multi_vector(query_embeddings, ds)
return scores[0].topk(k).indices.tolist()
res = get_results("<YOUR QUERY>")
print(f"最相关的音频片段是: {res}")
#> 最相关的音频片段是: [102, 96, 35]
在我的测试中,音频片段 #102 和 #96 完全相关!甚至可以将最相关的音频片段发送给 GPT-4o,以实现端到端的 AudioRAG!
让vidore用一个关于汉尼拔和布匿战争的 30 分钟音频来演示整个流程,下面是基于音频的RAG问答:
完整的 Notebook 可以在这里找到。
https://github.com/ManuelFay/Tutorials/blob/main/Practical_3_AudioRAG.ipynb
什么时候需要检索音频?
许多用例可能需要音频检索。例如,你可能想在教育视频、录制的课程或播客中找到特定信息。你可能需要从朋友的几十条语音信息中,找到那条提到生日派对地址的语音。呼叫中心经理可能试图在数百万条录音电话中,找到几例客户大笑或表达愤怒的实例。
尽管可以使用语音转文本(Speech-to-Text, STT)系统将音频转录成文本,然后搜索转录内容,但直接检索音频要快得多,并且直接音频检索能更好地捕捉情感、环境声音和语音语调等信息,从而开启全新的可能性!
视频检索表现如何?
ColQwen-Omni 也适用于视频。但请注意,视频处理对内存开销很大,因此最适合处理短视频片段。
batch_videos = processor.process_videos(videos).to(model.device)
# 前向传播
with torch.no_grad():
video_embeddings = model(**batch_videos)
这里有一个关于“龙之母”的有趣演示。 输入查询关键词:
可以检索到下面视频:
模型训练
该模型的首次迭代是科学实验的成果。vidore探索了一个纯粹在视觉文档检索数据集上训练的模型,在未接触音频或视频训练数据的情况下,能否有效地将其嵌入能力迁移到其他模态。结果表明:效果还相当不错!通过严格在 Vidore 训练集上进行训练,该模型在视觉文档检索方面与当前顶尖模型表现相当,而且在音频检索方面也展现出强大的性能,尽管vidore目前还不建议将其用于生产环境。
在未来的迭代中,vidore计划专门将音频剪辑整合到对比训练集中,以进一步优化模型的音频检索能力,这有望显著提升性能。当前模型在理解口语内容方面表现出色,但在理解口音、情感和环境声音方面仍存在一些局限性。vidore相信,通过有针对性的训练可以有效解决这些问题,并欢迎对 v0.1 版本提供任何反馈,以便vidore了解未来运行中应整合哪些数据!同时,ColQwen-Omni 的训练代码已在vidore的 GitHub 上提供,随时可以接收你的定制数据集!vidore的目标还将是改进模型在自然图像和文本检索方面的表现,为实现真正与模态无关的检索器铺平道路!
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。