多模态综述

多模态综述多模态综述介绍参考文献:《MultimodalMachineLearning:ASurveyandTaxonomy》介绍我们身边的环境就是一个多模态的环境,看到的实体、听到的声音、闻到的气味和尝到的味觉。本篇综述不是着重于多模态的应用,而是重点关注多模态的方法和技术。多模态问题的定义在于数据来源是不同模态的数据,而这些数据具有异质性(heterogeneity),则带来了多模态的五个挑战:representation,translation,alignment,fusion和co-

大家好,又见面了,我是你们的朋友全栈君。

参考文献:《Multimodal Machine Learning: A Survey and T axonomy》

介绍

我们身边的环境就是一个多模态的环境,看到的实体、听到的声音、闻到的气味和尝到的味觉。本篇综述不是着重于多模态的应用,而是重点关注多模态的方法和技术。多模态问题的定义在于数据来源是不同模态的数据,而这些数据具有异质性(heterogeneity),则带来了多模态的五个挑战:representation, translation, alignment, fusion和co-learning。后面主要就这五个挑战展开说明现有的较为先进的方法。

  1. Representation
    如何表示数据来探索多模态数据的互充性和冗余性,由于数据的异质性使得建立这种表示方法十分具有挑战。例如语言通常是符号化具有象征意义,而视觉和听觉模态通常用具体的信号表示。

  2. Translation
    如何将一个模态的数据转变为另一个模态的数据,不仅仅是数据的异质性还有模态间的关系是开放且主观,寻找一个完美的图片翻译是不存在的。

  3. Alignment
    寻找多个模态间数据的直接关系,例如一个视频中做菜的过程对应步骤。解决此类问题我们需要计算不同模态间的相似性并且处理可能存在的大范围的依赖和歧义。

  4. Fusion
    综合多个模态去做一个预测,例如对于视听演讲识别,嘴唇动作可以和语言信号综合做一个对演讲者说的单词的预测。但是不同模态的信息预测效果不同且噪声的结构也不同,并且可能会在一两个模态有丢失的数据信息。

  5. Co-learning
    迁移不同模态的知识,进行一种联合学习。这实际上就是一种对于协同训练、概念框架、zero shot learning(0样本的学习)的拓展。协同学习探索的是一个模态怎样借助另一个模态的训练结果去训练自己模态。这个问题的挑战在于相关模态可能会有一些有限的资源。

应用

本节大概介绍的是多模态发展的一个历程

最早的多模态研究i是视听语言识别,当人们听到/ba-ba/并看到嘴唇说出/ga-ga/时,他们会接收到/da-da/的信息。这个结果促进很多研究人员用视觉信息去探索语言,HMM在那个时候作为很多多模态任务的研究模型,而现阶段的MM研究大多数时用深度学习。

AVSR原始版本改善语音识别时,人们发现主要的优点在于提升当声音讯号存在噪音时的表现。第二个多模态应用的范围在于多模态内容检索和索引。第三个应用从2000年一些试图理解人类社会行为的研究,AMI Meeting Corpus是一个里程碑式的数据集包含了100个小时的会议语音;SEMAINE研究说话者和听者之间的动态关系。2010年之后随着自动化人脸识别等技术的发展,情绪识别和情感计算等技术发展卡里。AVEC每年都在挑战包括健康中心的项目,例如沮丧和焦虑的自动评估。D‘Mello在多模态情感识别上做了很好的总结,并且他们揭示多个模态下起作用,但面对自然生成的情绪时改进有限。

最近来说,一个新的应用伴随着在语言和视觉上的强调。代表性的应用就是根据图片生成描绘图片的文字的图像捕获。这项应用主要是帮助视障人士。主要的挑战在于怎样评估描绘性能。VQA(visual question answering)目的是回答一个关于图片的具体问题,最近被提出解决一些评估挑战。

多模态表征

多模态表征最好能够满足:平滑性、时间和空间连贯性、自然聚类。更为理想的是表征空间中的相似性也能反映对应概念的相似性。这种表征在缺少某些模态的情况下仍然能够获取,最后可以根据已有的观察模态填补缺失的模态。

单模态的表征已经得到很大程度的发展,从手写标记到数据驱动。图像描述上,从SIFT到CNN;声音讯号上,有MFCC用神经网络训练在语音辨识中,RNN语言分析。在NLP中,文本特征体现在单词在文献中出现的频率,现在已经被数据驱动的单词嵌入来发现单词内容替换了。虽然已经有了大量的单模态表示工作,多模态表示工作仍然大部分是简单的连接,但仍然在迅速发展。

这里我们提出两类多模态表示方法:joint(连接)和coordinated(协同)。
joint表征结合单模态信号到相同的表征空间
coordinated表征分别处理单模态信号然后连接到同一空间
在这里插入图片描述

  1. Joint Representations
    最简单的方法就是直接连接不同模态的特征,这里我们主要讨论一些先进的方法:图形模型和RNN

由于深层神经网络的多层性,越深的层次表示数据的方式越抽象,因此通常使用最后一层或者倒数第二层的网络作为数据表示形式。又由于神经网络需要大量带标签的训练数据,通常使用自动编码器对无监督数据进行预训练。Ngiam使用堆叠式去噪自动编码器分别表示每个模态,再使用另一个自动编码器将他们融合成多模态表示。预训练之后我们常常对结构还要进行微调。

然而这种模型仍然有缺陷在于不能处理丢失的数据,且深度学习通常很难训练。

对于图形模型来说,最受欢迎的方法是深度玻尔兹曼机,堆叠的首先玻尔兹曼机。和神经网络类似,DBM被期望可以抽象地代表高维数据。尤其DBM不需要有标签的数据。由于他们是图形模型,因此数据的表示是概率的,但是可以将他们转换为确定性神经网络,但这就失去了模型的生成方面。
(这里需要额外的介绍一下RBM限制玻尔兹曼机)link
注意的是,RBM的隐藏节点和输入节点之间是共用权值,并且对于每个节点计算到的仅仅是激活的概率,概率越大值为1的概率越大。而DBN(深度置信网络)则是多层RBM组合而成,逐层训练,每层的隐藏层都作为下一层的输入层。

Kim用对于每一个模态用DBN,然后再结合他们用joint representation来做视听情感识别。多模态DBMs可以从多个模态学习联合表示,具体方法是用隐藏单元的二进制层合并多个无向图。DBMs主要缺点是训练困难,计算成本高,需要使用近似变分训练方法。

上面的方法都是应用于固定长度序列的多模态表征,而对于动态序列,我们联系RNN的特性,可以用RNN的隐藏层来表征多模态数据。RNN目前在单模态的单词、音频或图像序列,在语言领域有了很大成功,RNN的隐藏状态可以看作是数据的一种表示,RNN在时间步t处的隐藏状态可以看作是该时间步之前序列的总结。在Encoder-Decoder模型中,这种表征尤为明显。Cosi在AVSR上用了RNN处理多模态。

  1. coordinated representations
    系统表征不同于直接将多模态映射到一个联合空间,而是分别学习每个模态再通过一些约束条件将他们协调再一起。
    相似模型最小化不同模态间的距离:例如“dog”和一张狗的图片之间的距离应该比“dog”和一张猫的图片要近。WSABIE做过一个简单的线性映射使得图片和文本特征有一个更高的内积(更小的余弦距离)
    而结构化的协调空间不仅仅要求表征间的相似性,也同时要求了一些约束性。压缩高维数据到一个二维编码的空间(相似的对象用相似的编码)。这种交叉模态hashing创建多模态检索的编码。这种hashing对于最终的空间上有一些具体的约束:1)必须有N维汉明空间;2)相同对象在不同模态的编码近似;3)空间必须保持相似性
    另一种结构化协同表征是在文本和图像的嵌入顺序上,利用文本和图像的结构化。
    还有一种特殊的情况是用CCA。通常情况下我们使用KCCA(核相关性分析)来产生Hilbert映射空间。DCCA(Dep canonical correlation analysis)被介绍替代KCCA可以解决范围问题。相似的相关性自动编码器和深度相关性RBMs也被用来解决跨模态检索。
    其中CCA和KCCA、DCCA都是表示层面上的相关性,而深层相关性自动编码器也能关注到数据本身的语义,另一种语义相关性最大化方法也被提出。因此,综合CCA和跨模态hashing的结合能够解决两方面的问题。

对于联合表征和协调表征,联合表征偏重于对于最终的应用在两个模态上,例如多模态情感识别;而协调表征更关注单个模态的应用,例如多模态检索和翻译。

翻译

翻译(映射)是将一个模态映射到另一个模态,例如给一个图像,我们想要给出描述这个图像的文字。早期工作关于语音合成、视觉语言生成、视频描述和跨模态检索。

我们将多模态翻译分为两类:example-based和generative。example-based模型从字典中检索最佳翻译,generative模型在字典上训练翻译模型,然后再用该模型进行翻译。毫无疑问生成模型要更有挑战性,因为涉及到生成信号和信号序列。但随着深度学习的发展,模型拥有能够生成图片、声音和文本的能力,这个情况逐渐好转起来。
在这里插入图片描述

  1. Example-based
    基于实例的翻译可以分为基于检索的模型和基于组合的模型,其中基于检索的模型最为简单,就是在字典中选择最优的翻译结果;基于组合模型则依赖于更复杂的规则在一些检索实例中创造翻译结果。

1 基于检索的模型
这种模型是多模态翻译最简单的形式,在字典中发现最近的样本,并且将他们用于翻译结果。
这里对于空间选择也有两种方法,一种是在单模态检索,在源空间中查找最接近的实例,这里源空间可以是经过CNN特征提取后的高度抽象的特征空间。
《A Distributed Representation Based Query Expansion Approach for Image Captioning》这篇文章中就是提取CNN的倒数第二层作为特征,为了防止噪声点,选取多个相似图片进行loss计算。并且在最后重新排列检索到的译文。

另一种则是在中间语义空间进行相似性比较,类似于在协调空间中进行跨模态检索。而这里主要涉及到的就是将另一个模态经过某种约束(相似度最高)映射到另一个模态中,这里面可以有cross-modal hashing,KCCA。Kaepathy还提出一种多模态相似度度量方法,可以在图像内部和句子片段对齐。我理解是把图片内部分割成块,每一块均可与句子中某个单词对齐,类似图片中的猫对应句子中的“cat”。
显然语义空间里的检索方法要比单模态的检索方法要好,因为它是在一个更有意义的空间中检索实例。

  1. 基于组合的模型:实际上就是在字典中检索一些对应的结果并组合在一起生成更好的翻译。这个模型的原理基于图片的句子描述共享一个简单且相同的可探索的结构。Kuznetsova检索描述相似图片的句子,并将它们组合在一起描述查询图片;类似的Gupta找到k个原图相似的图片,根据它们对应的短语生成描述图片的句子。Lebret用基于CNN的图像描述来推断短语。

这种基于实例的模型最大的缺陷在于想要实现精确的效果,字典必须足够大,或者组件更复杂结构的组合模型。

  1. Generative

基于生成的方法,是在给定单模态实例的条件下建立可以多模态翻译的模型。要能够同时理解源模态和生成序列和信号是个很大的挑战,并且因为可供选择的正确答案有很多,如何评估模型的好坏也是个问题。

这里我们确立三大生成模型,grammer-based, encoder-decoder, 和contimus generation
Grammer-based模型是对于目标域用语法建立某种约束进行任务的简化,比如生成<subject,object,verb>模板;Encoder-decoder模型首先将源模态编码到一个潜在的表示,这个表示再通过一个decoder来解码得到结果;Continuous generation模型能够连续地生成目标模态,例如文本-语音翻译。

  1. Grammer-based
    Kojimma提出了可以基于图片中的头和手位置以及自然语言规则生成描述;Barbub提出描述语法:who did what to whom and where and how they did it。Guadarrama预测<subject, verb, object>三元组。这个方面允许翻译字典总看不到的动词和名词。
    为了描述图像,Yao提出使用and or的图像模型,考虑对象、视觉属性和对象之间的空间关系。Mitchell更提出了更复杂的基于树的语言生成模型,可以导致更多样化的描述。
    考虑到我们并没有对图像的空间语义关系做出很多处理,因此我们可以从图像中提取视觉特征来预测一组<none,verb,scene,preb>,并用统计语言模型和隐式马尔科夫模型推理组合成句子。

基于语法的优点是在有限制的条件下逻辑出错的概率较小,但不能创造性地翻译;并且语法不一定能够普适,对于每个概念可能都需要单独模型和单独训练。

  1. Encoder-decoder
    端到端的训练模型,encoder生成特征意义的向量,decoder解码得到输出。对于encoder,RNN变体用于语义模态,CNN用于图像模态;decoder通常由RNN或者LSTM执行,而RNN遗忘过快,因此基于attention的方法作为更优的方法被广泛应用。

尽管取得了巨大成功,可是或许网络只是在记忆数据而非理解生成场景,而训练需要大量数据也是一个难点。

  1. Continuous generation
    比如文本到语音的生成,视频到文本的生成。连续的encoder-decoder模型可以用于解决此类问题,但额外困难还有模式之间在时间上的一致性要求。

Deena和Galata提出用共享高斯过程潜在变量模型进行基于音频的实觉语音合成,视频和音频之间创建一个潜在的共享空间。HMM也被用于视觉语音生成和文本语音转换。encoder-decoder模型最为流行,语音信号为滤波器组光谱,识别文本,可以更为准确地识别稀有和词汇外的单词。

  1. Evaluation
    人为评价翻译的好坏仍然是黄金标准,有一些BLUE、ROUGE德国自动替代方案,通过计算机器翻译过程中相似性得分,通常不可用,尤其对于当前的视频描述数据集。Hodosh提出检索作为字幕评价的代理,检索不是生成标题,而是判断标题与图像的匹配程度对可用标题进行排序,评估正确标题是否由较高的排名。

VQA作为由标准答案的问题,评估系统较为容易,可也还是由答案模糊性和问题倾向性问题。

对齐

多模态对齐是指发现不同模态数据之间的关系,例如图片和标题,我们希望能发现图片中的狗能对应标题中的狗。

  1. 显式对齐
    显示对齐一个比较重要的部分是

测量不同部分模态的相似度,这种相似度定义方法可以是人工或者从数据中学习到。
我们又将算法分为无监督和弱监督两种方法。

  1. 无监督
    在无标签的条件下对齐不同模态的数据,为了使任务变简单我们给对齐假设一些约束条件,
    DTW是一种动态规划的方法被广泛应用在多视角时间序列中,它需要两个序列在不同时间戳上具有可比较性并有一个相似性测量的步骤,DTW能够直接应用在多模态中通过人工定义的相似性比较。传统的DTW需要一个预定义好的在不同模态间的相似性度量,它可以被扩展用CCA来映射到协同空间内。这样就可以既能够对齐也能学习到不同模态映射到协同空间的联合表示。但是基于CCA的DTW只能去寻找线性变化的多模态数据,不能模拟非线性变换。这个缺点已经被deep canonocal time warping方法解决了。
    各种图模型也被广泛应用在多模态序列对齐中,早期工作用一个生成图模型去对齐视觉物体和说过的话。
  1. 弱监督
    有监督的对齐方式也是受到无监督训练的启发,Plummer用CCA去发现一个协同空间用于对齐,Gebru训练一个高斯混合模型并且用自监督聚类和无监督潜在变量图形模型去对齐视频中演讲者的言语和视频中对应的时间位置。
    深度学习在显示对齐中流行起来,Zhu通过训练一个CNN来测量场景和文本的相似度来对齐剧本对应的电影和情节,Mao用一个LSTM和CNN来匹配图片中的表达和物体。
  1. 隐式对齐
    有两类隐式对齐的模型:图形模型和神经网络。
    图形模型在早期工作中用来更好地对齐不同语言的句子用作机器翻译,但是这个方法需要人工构建不同模态间的映射。例如将电话映射到声学特性的生成电话模型,但构建这样的模型需要培训数据或人类专业知识来手动定义它们。
    神经网络转换将对齐作为潜在的中间步骤执行,该任务通常会得到改进。Attention机制常被用于解决encoder编码器负担过重的解决方法。

多模态对齐面临的几个困难:1)少量可以对齐的数据 2)不同模态间设置相似性度量是困难的 3)或与存在多个可能的对齐并且不是所有在同一个模态的元素在另一个模态都有能与之对应的元素。早期多模态对齐关注于用无监督的方法和DTW方法去对齐多模态序列。这种方法依赖于人工定义相似性度量。近期随着可用有标签的数据的出现,学习相似度度量具有了可能性。

多模态融合

多模态的研究来源于三个好处:第一,可以提供更加鲁棒性的预测;第二,能够接触到多模态的数据意味着我们可以捕捉到补充的信息;第三,一个多模态系统仍然能够运作在其中一个多模态缺失的情况下。多模态融合包括了一些任务,包括audio-visual speech recognition(AVSR),multimodal emotion recognition等等。我们将多模态融合分为两类:一类是model-agnostic方式,不直接依赖于具体的机器学习方式;另一类是model-based方式,显示地在构建的过程中解决融合,例如基于核的方式、图形模型和神经网络。

  1. model-agnostic
    历史上大部分多模态融合的方法是基于model-agnositc,这样的方式被分为早期基于特征、晚期基于决定和混合融合。早期融合在特征被提取后立即结合(经常仅仅是简单地连接表征),后期的融合是在每一个模态都做决定后(例如分类和回归)做结合。最终,混合融合结合早期融合和独立的单模态预测器。model-agnostic的优点在于他们能够在几乎任何单模态分类器和回归器上被实现。
    早期的融合可以被看作通过多模态表征学习来做的初始的尝试,因为它可以探索每个模态间低层次的特征之间的联系。此外,它只需要单模态的训练。
    后期的融合用单模态决定并用一些融合机制(例如平均、投票、基于通道噪声的权值和信号偏差)。它在同一个模态可以用不同的预测器,有更多的灵活性。此外,它也使得当一个模态缺失的情况下仍然能够训练。但是后期的融合忽略了模态间低层次的信息交互。
    混合模型综合上述两者的优点,已经在多模态演讲者身份识别、多模态事件探测(MED)上取得了成功。

  2. model-based
    尽管单模态很容易实现模型不可知的方式,但最终不是直接处理多模态融合,这里我们有三种做多模态融合的方式

  1. Mutiple kernel learning
    MKL是基于SVM的一种扩展,可以在不同模态上用不同的核,由于核也可以看作是数据点之间相似性函数,在MKL中具体模态的核能够对不同种类的数据有更好的融合。
    MKL在目标检测中融合视觉描述上很流行,最近被深度学习的方式取代。他们也最近被用于多模态情感识别、MED。此外MKL还在很多方面上有应用。
    除了核函数的灵活性之外,MKL的优点还在于它的损失函数是凸函数,能够允许用标准优化包核全局优化方法去训练模型。此外,MKL还能够用于回归和分类。
    MKL的缺点在于依赖于训练数据,导致推理缓慢和大量内存占用。
  1. Graphical models
    图模型主要分为两类:生成式的或者判别式的,最早应用在多模态的图模型就是生成式的例如基于贝叶斯网络的HMM。最近提出的主流HMM是结合模态的动态权重。
    生成式的模型现在没有判别式的模型这么流行,例如conditional random fields(CRF)牺牲了联合概率的建模而获得预测能力。CRF结合视觉和文本的信息来分割图像。CRF模型拓展到使用隐藏的条件随机字段来模拟潜在状态,并用于多模态会议分割。CRF模型大多数用于分类,但已经用于回归和情感识别上。
    图形模型的优点在于利用数据的空间和时间结构,允许人类知识的添加,模型可解释能力强。
  1. neural networks
    神经网络主要通过联合隐藏层中的融合信息,缺点是缺乏可解释性和大量数据集。
    在(17年)文中还指出大多数由RNN和LSTM,但实际上现在用transformer较多了

协同学习

协同学习旨在用一个模态帮助另一个模态,尤其是当其中一个模态缺少资源。我们的挑战主要是互助模态只能被用在模型训练过程中,而不能用在模型测试阶段。我们将协同学习分为三类:并行、非并行、混合。

并行数据需要数据集中不同模态的观测值是直接相关的,比如视听样本中,视觉信息和听觉信息需要来源于同一个人。非并行数据则不需要这个条件,他们是通过重叠来实现协同学习。

  1. 并行数据
    协同训练是可以创造出更多样本标签,基本算法就是在每个模态建造弱分类器。定义这个任务依赖于多模态样本的重叠,需要并行数据。协同训练不仅仅用于语音识别,也可以通过过滤不可靠的样本来处理一些不同模态间的噪声。但是协同训练也会导致训练样本的过拟合。
    迁移学习是另一种方法,深度玻尔兹曼机和多模态自动编码器能够迁移一个模态的信息到另一个模态上,这不仅仅用在多模态表征上,也能够是的单模态模型更好。

  2. 非并行数据
    非并行数据不需要有共享实例,只需要共享类别或概念。在学习表示时可以提供帮助,允许更好地理解语义概念。
    迁移学习:允许信息从数据丰富或干净的模式构建表示传输到数据稀缺或嘈杂的模式。

  3. 混合数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149967.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 排列组合公式及排列组合算法[通俗易懂]

    排列组合公式排列组合公式/排列组合计算公式公式P是指排列,从N个元素取M个进行排列。公式C是指组合,从N个元素取M个进行组合,不进行排列。N-元素的总个数M参与选择的元素个数!-阶乘,如    9!=9*8*7*6*5*4*3*2*1从N到数M个,表达式应该为n*(n-1)*(n-2)..(n-m+1);               因为从n到(

  • ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理

    ExpandableListView实例(一)_数据库增删改查处理和listitem点击长按处理本例说明:1.实例中表现层与数据处理层分开,代码可复用性强,如果能看懂代码对算法会有提高.2.组和子条目上”点击”事件处理,能够区分操作的是组还是子条目,并且得到组和子条目的内容.3.组和子条目上”长按”事件处理,能够区分组和子条目,并且得到组和子条目的内容.4.自定义条目样式,灵活与数据库中字段绑定.5.实现对DB的增删改查,并且操作后自动刷新.6.使用数据库处理框架AH

  • 软件测试人员应该如何介绍自己测试过的项目工作_软件测试项目介绍

    软件测试人员应该如何介绍自己测试过的项目工作_软件测试项目介绍测试人员在找工作的过程中,通常有一个问题是很难绕开的。就是要如何向别人介绍自己之前做过的项目。下面我们就这个问题简单的做一些分析。要解决这个问题,大体上可以分为如下几个步骤:1、对项目进行基本介绍2、说明自己负责测试的模块3、针对部分模块展开进行说明一.对项目进行基本介绍以下就以一个简单的项目进行介绍说明:最近测试的Tpshop项目是一个B/S架构的Web项…

    2022年10月20日
  • quartz定时任务使用(quartz定时任务原理)

    packagecom.jeeplus.common.utils;importjava.util.Map;importorg.quartz.CronScheduleBuilder;importorg.quartz.CronTrigger;importorg.quartz.Job;importorg.quartz.JobBuilder;importorg.quartz….

  • .NET控件名称缩写一览表「建议收藏」

    .NET控件名称缩写一览表「建议收藏」.NET控件名称缩写一览表

  • python fillna_pandas增加一列

    python fillna_pandas增加一列fillna填充缺失值df.fillna()importpandasaspdimportnumpyasnpfromnumpyimportnanasNaNdf1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])df1

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号