1. 前言
现阶段, 大语言模型(LLM)由于其在自然语言理解上的突出表现&优势, 在文本表征任务上有很多应用, 但鲜有工作能利用LLM来辅助提升多模态表征任务。比如小红书的多模态I2I推荐召回场景就是一个多模态表征任务场景。
将LLM应用于多模态I2I可以大致分成两种:
-
一种最直接的方式是预训练多模态大语言模型(MLLMs)表征, 对应图中灰色箭头的流程, 但这需要依赖高质量&大规模的训练数据, 训练过程及训练成本都非常高, 业务上可能难以接受。
-
另一种方式是基于已有的LLM和预训练视觉Encoder, 使用业务数据End-to-End训练, 实现集成&融合, 对应图中黑色箭头的流程, 这种方式只依赖场景数据, 更加高效且可定制化。但一些实验表明(见下面第2节), 这种fine tune的表征容易模态失衡, 会更偏向文本模态, 忽视视觉模态。
作者将第2种方式称为多模态大表征模型(Multimodal Large Representation Models, 下文简称MLRMs), 本文所提的NoteLLM-2就属于第2种方式, 通过提出"多模态上下文学习"(multimodal In-Content Learning,简写成mICL)方法和"后融合"(Late Fusion)方法来缓解当前方法存在的缺点。
在介绍这些NoteLLM-2之前, 先看下作者对前面两种做多模态I2I方法的调研&实验分析。
2. 调研&实验分析
2.1 背景介绍
这一部分会涉及较多之前NoteLLM论文里的背景, 接下来会做一些介绍
2.1.1 问题定义
笔记内容池记为, 为笔记内容池的数量,笔记可以表示成, 其中, , , 分别表示笔记的标题, 笔记的主题标签, 笔记的类目以及笔记的内容。而多模态I2I是基于给定的笔记的多模态表征, 计算笔记之间多模态相似度, 从内容池中召回相似笔记。
2.1.2 构造共现笔记数据集
作者从用户行为数据中提取共现笔记, 构建相关笔记的Pair对数据, 具体的
- Step1: 统计一周内行为数据中用户浏览了笔记内容后,又点击浏览笔记的数据, 计算笔记笔记的共现分数:
其中, 表示有过"浏览笔记内容后又点击浏览笔记行为"的用户集合, 表示行为数据中该用户点击过的笔记的数量。这里, 可以理解为, 基于不同用户的活跃程度给不同用户赋予了不同的点击权重, 可以规避掉特别活跃用户数据的误导。
- Step2: 对于每个笔记, 计算得到其它笔记与它的共现分数后, 过滤掉共现分数不在()区间的相关笔记, 再对剩下的相关笔记依共现分数取top 笔记作为笔记的相关笔记。
2.1.3 基础MLRMs表征方法
下图分别是基础版的MLRMs表征方法(a)与作者所提NoteLLM-2表征方法(b)对比的示意图。这些基础的多模态表征方法会作为后面NoteLLM-2的实验对比基线, 先看基础的MLRMs表征方法。
1) 笔记压缩提示模板
作者构造了如下格式的笔记压缩提示模板, 该提示模板会将笔记内容以Json格式作为输入, 其中是一个占位符, 实际会以图像嵌入作为输入.
2) 多模态表征构造流程
基础表征方法的构造流程如下:
-
Step1: 使用Vision Encoder 将原始图片处理成视觉特征
-
Step2: 使用一个连接器将映射到LLM的词向量空间,得到视觉嵌入, 即, 其中为视觉嵌入的长度, 为LLM词向量空间的维度
-
Step3: 对于笔记压缩提示文本, 先基于分词器Tokenizer做分词, 再得到对应的文本词嵌入, 其中为文本Token的长度
-
Step4: 使用图像视觉嵌入, 直接替换掉上述文本词嵌入中这个Token所对应的Embedding, 从而得到, 作为笔记多模态压缩提示表征。
-
Step5: 使用LLM以上述多模态压缩提示表征作为输入, , 并取最后一个Embed作为笔记的多模态表征
3) 训练过程
和NoteLLM一样, 使用Batch内对比学习计算Loss
其中, 表示BatchSize, 由于输入的是pair对笔记, 因此总共有个笔记, 为温度系数, 这里使用余弦相似计算相似度。这里, 作者仅更新连接器, 以及这两部分的参数,预训练的视觉Encoder是冻结住的。
2.2 关于基础多模态表征方法的实验
数据集及实验设置部分跳过介绍, 直接看实验结果。
2.2.1 Zero-shot实验
下图为Zero-shot实验, 实验中, 各大语言模型的表现都远不及BM25算法。这一结果表明, 还是非常有必要做fine tune的, 原因主要是各大语言模型的预训练任务与业务场景任务(作者用representation tasks来概述)还是有非常大的差异的。
2.2.2 End-to-End的MLRMs实验
作者训练了3种End-to-End的多模态大表征模型(MLRMs, 第2种方式), 即下图中红色框选部分
-
MTomato-Base: 基于LLM Tomato, 使用CLIP ViT-B作为视觉模块,以及随机初始化的Q-Former
-
MQwen-Base: 将Tomato替换为Qwen-Chat
-
MQwen-bigG: 用ViT-bigG替换原模型的视觉部分
用于对比的第1种方式多模态大语言模型(MLLMs)有BLIP-2和Qwen-VL-Chat.
实验结论主要有:
-
End-to-End训练微调的LLM效果远好于预训练的LLM, 可以对比Table1和Table10中的Qwen-Chat.
-
End-to-End训练微调MLRMs引入多模态是有增益的, 可对比MQwen-Base与Qwen-Chat
-
End-to-End训练微调MLRMs对视觉编码器大小敏感, 可以对比MQwen-bigG和MQwen-Base
-
与多模态大语言模型(MLLMs)有差距, 对比MQwen-bigG与Qwen-VL-Chat
同时, 作者也对多种模态输入进行了评估,结果如下图表格所示。对于仅图像输入, 可以发现, 模型性能明显下降(红色方框), 这说明, 当前基础MLRMs表征方法在视觉模态上是欠学习的, 不同模态之间可能有比较大的Bias。
2.2.3 实验性深入分析不同模态的Bias
为了分析验证当前基础MLRMs在视觉模态上有Bias的, 作者基于注意力得分, 给出了一种评估不同模态重要度(贡献)的方法, 有兴趣的可以看原论文, 这里对方法不做过多描述, 直接看实验结果
其中, 上图中的横坐标为表征模型中的不同层, 可以看作是视觉模态的贡献(或重要度), 可以看作是文本模态的贡献, 则是其它信息的贡献。
从上图中可以发现, 在网络的浅层, 像BLIP-2(以及Qwen-VL-Chat)基于MLLM的方法中, 和相对比较均衡, 但MTomato-Base、MQWen-Base以及MQwen-bigG, 它们都表现出低高的趋势。这说明视觉模态在End2End训练的MLRMs中起到的作用是远小于文本模态的作用的。
3. 方法
从前面的分析中, 可以发现, 视觉模型在End2End训练的MLRMs中是被低估的, 因此, 作者提出了NoteLLM-2框架, 其核心思想是使用多模态上下文学习(mICL)以及后融合(Late Fusion)来强化视觉模态的作用,下面分别介绍。
3.1 多模态上下文学习(mICL)
这里, 作者使用prompt将多模态内容显式地分成了"视觉内容"和"文本内容", 其prompt模板如下:
其中, <IMG_EMB>是一个特殊的token. 可以看出, 该提示模板先后做了两个事情, 首先是将视觉内容进行压缩, 取<IMG_EMB>前的隐层状态作为笔记的视觉模态表征, 再把prompt最后一个隐层状态作为笔记的多模态表征。
这里需要意识到, 其实只是一个中间产物, 最终使用时, 只使用, 但是在训练时, 还是要让也被充分训练, 这样才能获得更好的多模态表征。
3.2 后融合(Late Fusion)
后融合机制其实是为了进一步强化视觉模态的作用, 直接将原始的视觉模态表征融入到上面mICL的两种表征上。具体地:
首先, 基于原始的视觉模态表征和上面mICL出来的笔记视觉模态表征, 使用MLP来计算一个融合权重系数:
再基于这个融合系数, 得到融合后的视觉模态表征
同样, 类似地, 对于前面mICL出来的多模态表征, 也做类似的操作:
进而得到融合后的笔记多模态表征
3.3 基于对比学习训练
在得到前面两个融合后的和之后, 可使用对比学习进行训练。
-
融合后的视觉模态表征
-
融合后的多模态表征
最后的Loss部分使用超参将两者进行融合:
待训练充分后, 会作为最终的多模态笔记表征来使用。
4. 实验部分
4.1 与Baseline的对比
验证了所提的mICL和late fusion都能显著提升实验效果.
4.2 不同模态重要性分析
验证了NoteLLM-2能显著改善在网络浅层视觉模态被严重低估的缺点
4.3 超参实验
如何学习大模型 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 的正确特征了。