当前位置:   article > 正文

未来数据和模型应该是什么样的?

未来数据和模型应该是什么样的?

作者:王junjie,清华大学RA

整理:青稞AI

回顾LLM

语言模型(Large Language Model,LLM)在2022年到2023年发展的如火如荼,有3个点让这玩意从科研走向生活:

  • • 基于语言的通用性

以前每次国外有创新,我们都需要有1-2年的时间对其进行复刻,然后再花1-2年变成某种成产品,才会进入到公众的视野。但是这次,所有语言和任务,都可以用一个系统解决,导致很多用户能够用中文直接使用了那个“终极产品”,也就导致国内一年以来疯狂追赶。实话说,很多提示工程的论文都还在有条不紊的水,结果国内就已经出了一堆提示工程的课了,比论文的观点甚至更多更好,这大概就是商业反哺科研吧。

  • • 性能达到“可用”

至少在代码上达到可用了,作为程序员受益良多,代码效率有了质的飞跃。而且,我觉得和很多唱衰程序员的论调不同,我认为这会让我们学习写代码变得更加重要。看代码,思考,和优化,都是必要的,而不是直接“让”大模型回答,而是学会优雅地使用大模型。而且,不仅仅是写代码这么一件事情,似乎,文书相关的事情都变得简单了许多,特别是调整出一个适合你的agent之后,有种“它就是我”的感觉。

  • • 想象空间大

资本不追求现在,追求的是透支未来。好了,从科研的角度上来说,LLM可以做的事情太多了,仿佛是万能的,而且有越来越强的趋势。我们回顾一下23年关于LLM都经历了什么:

LLM+提示词,就可以出一个产品/论文。LLM+提示词+记忆(存储),又是一个新的产品/论文。LLM+提示词+记忆+使用工具,又是一个全新的产品/论文,大名鼎鼎的agent。

这三个点,对应科研中需要思考的问题,就是:

  • • 通用的输入【基于语言的通用性】

  • • 强大的推理和生成能力,可规模化(满足缩放定律)【性能达到“可用”】

  • • 可扩展性【想象空间大】

而,构建大多模态模型(Large Multimodal Model,LMM),也需要考虑上述问题。

先考虑数据

现在很多多模态论文都是基于模型的角度去思考的,从来没有思考过目前数据集有的问题。

而,这才本文最先需要讨论的,我们应该先定义好数据格式,再去思考如何针对数据去构建模型。

目前的多模态数据,预训练阶段和任务阶段是不一致的,而不是某种“通用的”。

(注意,本文的多模态,暂时只考虑图片和文本)

1.1 当前的预训练的数据

目前比较庞大的数据是:图文对数据(即,一个图片,和一段对应的文本)

而这个数据,之所以是这个格式,完全是因为“好收集”。因为主要这些数据的,都是各大搜索引擎公司,而这些公司最毫不费力的数据格式,就是图文对了。

所以,基于这样的数据,在Transformer出现之后,预训练进行的风风火火,都基本基于图文对进行设计的。

比如,经典的UNITER

https://arxiv.org/pdf/1909.11740.pdf

5a1feaf2420f16142d54a4de9a2d8799.jpeg

因为,输入是一个图片和一个对应的描述。自然地,这个任务就可以是挖掉文本,然后预测;挖掉图片,然后预测;判断图片和文本是不是对应的。

1.2 当前的下游任务的数据

而,我们的下游任务数据,又是一堆不一样的格式的。

比如,

  • • 视觉问答(VQA)

输入:一个图片,一个问题
输出:一个答案

所以数据格式,也是这样分散开的,一个图片(jpg),一个问题(txt),一个包含所有答案词表或者是生成的答案(txt)。

c80fa900bfb83b38102662ff1d030364.jpeg
  • • 跨模态检索(Cross-modal Retrieval)

假如是用文本检索图片的场景

输入:一个文本
输出:一个图片

数据格式,基本上就是一张图(jpg),然后一个文本(txt)。

8b574c91bfc4d5cc4a5020cdb81e7c2f.jpeg

还有类似于图片注释(image captioning),光学字符识别(Optical Character Recognition),版面分析(layout analysis)等等任务。基本上就是一个任务一个格式,乱七八糟的。

在预训练的时候,我们用了图文对做预训练任务,设计了一堆预训练任务。然后再在下游任务的时候,我们又去设计不一样的下游任务的任务head,进行ft。

比如,遇到了分类问题,那就训练个分类器。遇到了注释问题,那就训练一个decoder。

1.3 如何构建一个“足够好”的通用多模态格式?

看官看到了这里发现了问题吧,这不就是BERT的老问题吗?

预训练阶段的任务基于通用语料的, 下游任务却是千奇百怪的。没有统一起来,就导致了各种小任务的各种BERT,比如什么NER-BERT,QA-BERT。

因此,多模态领域在出现真正的LMM之前,需要思考,什么才是一个“足够好”的通用格式?

我们回想一下那三个科研的点:

  • • 通用的输入

  • • 强大的推理和生成能力,可规模化(满足缩放定律)

  • • 可扩展性

通用的输入,同时也意味着,通用的输出。

所以,我们可以参考GPT,一个自然的想法当然是把任务数据做成plain text(即,预训练语料)的格式。

我只需要加上对任务的提示,然后用自然语言的表达方法就可以了。比如,FLAN

https://arxiv.org/abs/2109.01652

中提到的 instruction tuning 。

Premise: At my age you will probably have learnt one lesson.
Hypothesis: It's not certain how many lessons you'll learn by your thirties.
Does the premise entail the hypothesis?
OPTIONS: -yes -it is not possible to tell -no

就是对每一个任务设计了一个模版,就变成了符合预训练中“预测下一个词”的样式了。

这个样带来了两个好处:

  • • 预训练和微调阶段的任务目标是统一的。

  • • 输入文本和输出文本格式是一致的。

那,多模态怎么办呢?

什么样的格式,可以容纳:

  • • 图文对

  • • 问答,版面,多图多文等特定多模态任务

  • • 符合人类阅读和写作的顺序

我们现正在看的文章,不就恰恰可以符合这种格式吗?

没错,是markdown!(这是我思考出来的解法,但是不一定就是终极解法)

对于文档语料,或者是图文对,OCR语料等,每一行数据的基础应该是 块(Block)。

因为段落的概念在自然语言中是很好理解的,但是在多模态语料是难以分辨的,比如,双栏文档等。而块,是一眼可以看出来的。比如:

df3681be959aafff44a42640c4db694d.jpeg

而且,这样有一个好处我们可以把这个这些语料里面的块信息,很好的进行拆分,经过模型的学习之后再进行重构。

我做了一个样例数据集:

https://huggingface.co/datasets/wanng/example_mmdata_mnbvc

PS:这里我使用了parquet作为基础文件格式。考虑到parquet的表格特性,我们可以通过文件id,页码等,直接做merge等操作就可以直接合并出来完整的文档文件了。而且也可以很好的利用好parquet的优秀存储压缩,避免传统多模态语料(image文件夹放一堆图,text文件夹放一堆txt文件)的碎片化。

根据这个格式,我们也可以很简单得把不同的下游任务整合起来,比如,

对于VQA:

cee0f9b903a2e3e37bb9e4bd845b3ea6.jpeg

问题:上面的图片中有多少个人?
答案:1个

就这样就可以了,其他的也可以用类似的方法。

而且,使用markdown还有下面的优势:

  • • 文本中可以使用#等表达文章结构。并且可以表达公式。

  • • 可以容纳多个模态:文本,图片,音频,视频

  • • 相比起HTML,最大的保留了模型需要学习的内容(版面信息,模态信息等),抛弃掉了不需要学习的噪声(html5语法信息)。

从模态信号的视角,看待大一统的LMM

LLM的大致可以分为三个路径:

  • • 双流(METER)

  • • 单流(现在的什么大多模态语言模型就是这一类的)

  • • 浅层双塔(CLIP)

其实,不管是什么模型,都是根据“模态信号”进行设计的。

那么,我觉得我们可以从“模态信号”这个视角去思考所有多模态的模型。

纵观所有的模型,所有的输入其实都无法逃脱下面的范式:

raw data (markdown) → numbers→ embedding → reasoning (modeling)→ generation → outputs (markdown)

我个人觉得最大的阻碍就是 raw data (语言,图片,音频等) → numbers 这一步。

以至于我们只能在最后的modeling阶段才进行“单流/双流”的交互和融合。

有点类似于以前的翻译模型,我们必须要两个词表,然后通过某种attention之类的机制融合起来(这也导致了后面基于self-attention的大模型的发展)。

但是,现在的超大模型,已经不需要进行融合了,或者说,他的词表已经可以包含绝大多数的语言了。此时此刻,这个大模型就摆脱了只在modeling阶段进行融合,从头到尾都是基于所有巨大的词表进行建模的。

那么我们把所有模态都看做一种信号,我们是不是可以得到一个巨大的信号词表。而这个词表可以对输入的所有signal进行建模。

但是这非常非常困难,因为构建如此庞大的词表,光是tokenization这一步就会产生巨大的花销。

不过有一个平替方法:特征提取器。我只需要利用不同的模态的特征提取器,就可以产出embedding,然后我们就可以根据这些embedding学习一个可以接受的大信号词表了。

在输入阶段,我们目前都是把真实世界的信息处理成离散信号,然后再进行数字化。而,目前最好的对离散信号处理的特征提取器就是:双向结构,可以基于整体和块进行建模,而且效率很高。

接着,我们就是对这些信号进行理解和推理了。这个方法就有很多了,不一一阐述了。目前最好的推理器, 是基于token的,也就是单向结构。这样的模式很适合人类的阅读习惯,看电影是一帧一帧的,说话是一个一个字的,看书是一段一段的等。(这个应该是时间给人类的限制了)

最后,我们需要把推理成功的信号从离散状态一个一个变成自然界中的信号。而这些,有可能是离散的,也可能是连续的。其实我觉得大部分是连续的,而目前最好的连续信号生成器是:diffusion。其实也是合理的,训练和预测的过程就是连续信号的处理过程。

因此,我们可以得到下面这张LMM可能的结构图:

e51165487ed6296ef8b859c028b5d5e5.jpeg

我后面发现这个结构和NExT-GPT

https://arxiv.org/pdf/2309.05519.pdf

有点像。。。不过我也无法确定什么样的结构才是下一代最好的结构,只能用我浅薄的想法推导出来现在这个构架。

这样一来,我们回顾一下那三个问题:

  • • 通用的输入

  • • 强大的推理和生成能力,可规模化(满足缩放定律)

  • • 可扩展性

其实,这样的结构,就可以满足前两点了。可以接受通用的输入,并且有推理和生成能力,而且也可以满足缩放定律。

模型互联

其实,可扩展性,OpenAI的GPT4已经给出了他的答案:Agent。

假如我们第二节的模型可以处理这样的多模态数据的话。我们只需要做一些小改动就可以让模型变成Agent了,也就是 LMM+提示词+记忆+使用工具。

不过,目前这些agent都是通过prompt开发的,或许开发对应的模型才是正解?如果我们可以联合SAM和大模型,可以做比现在更多的事情。这样就需要我们在设计Markdown的时候,设计好任务。

而且我们也可以畅想,AGI的超级对齐应该是什么样的呢?需要加入一个简单易学的反馈信号到模型,让模型成为一个实时/动态的模型,是不是很酷。(不过估计会算力爆炸)

最后

从19年开始接触多模态到现在,真的感慨这个领域发展的太快了。而且,深刻地感觉到,算力对这个领域的桎梏。以前没有算力的时候是真的寸步难行,有了一些算力之后,才有机会尝试一些idea。同时,多模态模型本身就意味着更多的可能性和交互,爆发出更多的可能性。光是一个stable diffusion就可以让这么多人进行二次创作,应用到各行各界。GPT-4V引入了视觉输入之后,也提供了更多的可能性。原来,身处变革之中,就是这样的感觉。希望大家一起努力吧,我们正在见证历史。


备注:昵称-学校/公司-方向/会议(eg.ACL),进入技术/投稿群

8f465d22389e8a7b13ccda6cc76ecdde.png

id:DLNLPer,记得备注呦

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/419344
推荐阅读
相关标签
  

闽ICP备14008679号