TEASEL: A transformer-based speech-prefixed language model

文章目录

  • TEASEL:一种基于Transformer的语音前缀语言模型
    • 文章信息
    • 研究目的
    • 研究内容
    • 研究方法
      • 1.总体框图
      • 2.BERT-style Language Models(基准模型)
      • 3.Speech Module
        • 3.1Speech Temporal Encoder
        • 3.2Lightweight Attentive Aggregation (LAA)
      • 4.训练过程
        • 4.1预训练阶段
        • 4.2微调阶段
        • 4.3TEASEL模型训练的算法伪代码
    • 结果与讨论
    • 代码和数据集
    • 附录

TEASEL:一种基于Transformer的语音前缀语言模型

总结:论文提出了一种基于 Transformer 的语音前缀语言模型 TEASEL,实际本质是用了一个 RoBERTa 模型作为框架,然后加入了一个 LAA 模块(LAA模块就是将音频特征编码为 RoBERTa 编码器的前缀 token)。在训练的时候主要是训练 LAA 模块的参数,当 LAA 模块的参数收敛后,在CMU-MOSI数据集上面微调整个模型。

该论文在2021年就挂在arXiv上面了,但是一直没有发表,看了这篇论文之后,终于知道为什么没有发表了,论文里面有一些错误的地方,而且对自己方法的介绍稀里糊涂的,一些词用的很偏僻,很难以理解。但是最奇怪的是,作者没有提供代码,GitHub上面有人根据算法的思想实现了这个模型,并且在 MSA 任务上的一些指标竟然是 SOTA 的结果。所以本人参考代码,以及论文的思想,终于把这篇论文挖掘出来了。如果大家有不同的看法,欢迎留言 😃

文章信息

作者:Mehdi Arjmand,Mohammad Javad Dousti

单位:University of Tehran(德黑兰大学-伊朗)

会议/期刊:arXiv

题目:TEASEL: A transformer-based speech-prefixed language model

年份:2021

研究目的

解决在多模态语言学习(包括多模态情感分析与多模态情感识别)中,由于数据不足,难以训练一个关于多模态语言学习的自监督Transformer模型的问题。(换句话说,作者想要在不训练完整的Transformer模型的情况下,训练一个关于多模态语言学习的自监督 Transformer模型。)

研究内容

提出了一种基于Transformer的语音前缀语言模型TEASEL。与传统的语言模型相比,增加了语音模态作为动态前缀。该模型可以达到与花费较长时间重新训练Transformer相同的性能水平,而无需训练完整的Transformer模型。

研究方法

1.总体框图

该模型利用传统的预训练语言模型(指的就是RoBERTa)作为跨模态注意力模块。从根本上来说,TEASEL 模型专注于将语音特征表示为RoBERTa的前缀(参考图中的 C A C_A CA)。

Alt

训练包含两个阶段:预训练和微调。

  • 在预训练阶段,使用 LAA 模块学习语音模态的表征,以便在 RoBERTa 中插入语音模态,训练步骤相对较少(总共 8000 步)。(预训练阶段做的事情,就是对 LAA 模块进行训练
  • 在微调阶段,固定了 LAA 模块的大部分内容,并在 CMU-MOSI 数据集上微调了 RoBERTa 模型,将其作为多模态情感分析下游任务的跨模态 Transformer。(微调阶段做的事情,就是对 RoBERTa 模型进行了调参

2.BERT-style Language Models(基准模型)

将 RoBERTa 模型作为 BERT-style Language Models(选择RoBERTa作为基准模型是因为RoBERTa是专门针对 MaskedLM 任务训练的)。

RoBERTa tokenizer标记器将句子 L 分解为:
{ [ C L S ] , l 1 , l 2 , … , l T L , [ S E P ] } = t o k e n i z e r ( L ) \{[CLS],l_{1},l_{2},\ldots,l_{T_{\mathbf{L}}},[SEP]\}=tokenizer(L) {[CLS],l1,l2,,lTL,[SEP]}=tokenizer(L)

符号含义
l i ∈ R d l_i \in R_d liRd每个token
T L T_L TL文本模态的时间步数(序列的长度)
[CLS]代表序列的开始,只关注[CLS]对应的输出
[SEP]代表分割
[MASK]代表屏蔽的token

3.Speech Module

3.1Speech Temporal Encoder

选择 wav2vec 预先训练好的固定参数的 CNN 作为音频特征编码器,来提取音频特征。
{ z 1 , z 2 , … , z T A ; z i ∈ R d A } = C N N θ w ( ψ ) \{z_1,z_2,\ldots,z_{T_{\mathbf{A}}};z_i\in\mathbb{R}^{d_A}\}=\mathrm{CNN}_{\theta_{\mathbf{w}}}(\psi) {z1,z2,,zTA;ziRdA}=CNNθw(ψ)

符号含义
ψ \psi ψ原始的语音数据
z i z_i zi第i个时间步对应的特征
3.2Lightweight Attentive Aggregation (LAA)

轻量级注意力聚合模块 LAA 的目的是将 Z(Z就是经过CNN提取的音频特征) 编码为 RoBERTa 编码器的前缀 token。

Alt

LLA 在提取的语音特征的顶部执行双向门控循环单元(BiGRU),以双向行为捕捉信息。然后利用聚合模块(Aggregation Module)将 BiGRU 的输出进行动态加权求和。

整体过程如下所示:(公式在原论文的基础上进行了修改,个人认为作者的公式在动态加权求和的时候有问题)
Z ^ = L a y e r N o r m ( Z ) ( 1 ) Φ = B i G R U ( W 1 ⊺ Z ^ + b 1 ) , ( 2 ) Φ = { { ϕ 1 , 1 , … , ϕ 1 , T A } , { ϕ 2 , 1 , … , ϕ 2 , T A } } , ( 3 ) u k , i = σ ( W A g g 1 T ϕ k , i + b A g g 1 ) , k ∈ { 1 , 2 } , i ∈ { 1 , T } ( 4 ) α k , i = S o f t m a x ( W A g g 2 I u k , i + b A g g 2 ) , α k , i ∈ [ 0 , 1 ] ( 5 ) C A = ∑ i = 1 T α k , i ϕ k , i ( 6 ) \begin{gathered} \hat{Z}=LayerNorm(Z)\quad(1)\\ \\ \Phi=BiGRU(W_{1}^{\intercal}\hat{Z}+b_{1}), \quad(2)\\ \\ \Phi=\{\{\phi_{\mathbf{1},1},\ldots,\phi_{\mathbf{1},T_{\mathbf{A}}}\},\{\phi_{\mathbf{2},1},\ldots,\phi_{\mathbf{2},T_{\mathbf{A}}}\}\}, \quad(3)\\ \\ u_{k,i}=\sigma(W_{Agg_1}^\mathsf{T}\phi_{k,i}+b_{Agg_1}),k\in\{1,2\},i \in {\{1,T\}}\quad(4)\\ \\ \alpha_{k,i}=Softmax(W_{Agg_2}^{\mathsf{I}}u_{k,i}+b_{Agg_2}),\alpha_{k,i}\in[0,1]\quad(5)\\ \\ \mathcal{C}_\mathbf{A}=\sum_{i=1}^T\alpha_{k,i}\phi_{k,i} \quad(6) \end{gathered} Z^=LayerNorm(Z)(1)Φ=BiGRU(W1Z^+b1),(2)Φ={{ϕ1,1,,ϕ1,TA},{ϕ2,1,,ϕ2,TA}},(3)uk,i=σ(WAgg1Tϕk,i+bAgg1),k{1,2},i{1,T}(4)αk,i=Softmax(WAgg2Iuk,i+bAgg2),αk,i[0,1](5)CA=i=1Tαk,iϕk,i(6)

符号含义
Φ ∈ A 2 × T A × d A \Phi\in\mathbf{A}^{2\times T_{A}\times d_{A}} ΦA2×TA×dABi-GRU的输出序列
σ \sigma σ激活函数
C A ∈ R 2 × d a \mathcal{C}_\mathbf{A}\in\mathbb{R}^{2\times d_a} CAR2×da两个可用于 RoBERTa 的语音前缀token

4.训练过程

4.1预训练阶段

输入序列 { [ C L S ] , l 1 , l 2 , … , l T L , [ S E P ] } \{[CLS],l_{1},l_{2},\ldots,l_{T_{\mathbf{L}}},[SEP]\} {[CLS],l1,l2,,lTL,[SEP]}给预先训练好的 RoBERTa 模型,然后只计算语音输出token(也就是 C A C_A CA​​)的损失函数,梯度只影响 LAA 模块

使用 LIBRISPEECH 数据集对 LAA 模块进行了 8000 步训练(通过实验观察,进行8000步,模型收敛,F1分数趋于稳定,故训练8000步)。每 2,000 步保存一次模型,并对保存的参数进行微调,以便在 CMU-MOSI 数据集上进行高效的多模态情感分析。

Alt

4.2微调阶段

将语音前缀和文本token输入到 RoBERTa 模型,根据[CLS]对应的输出,对 RoBERTa 模型进行微调。

image-20240308220253335

4.3TEASEL模型训练的算法伪代码

Alt

结果与讨论

斜体是消融实验

  • 通过与一些仅限于文本的流行Transformer方法基于Transformer的冻结特征方法为下游任务微调Transformer的方法进行对比,TEASEL在Corr、ACC-2与F1分数上的表现是最佳的。
  • 在相同的条件下,对预训练TEASEL的不同步数下的参数进行微调,表明了预训练 LAA 模块是有效的,也证明了训练8000步是刚刚好的。
  • 通过对微调部分应该固定 LAA 模块的哪些部分进行了详尽的实验,证明了不需要对整个 LAA 模块进行微调。
  • 对测试集中的某个随机数据的注意力激活层进行可视化,证明了语音前缀的有效性。

代码和数据集

此代码是别人复现的,论文作者并没有提供。

代码:https://github.com/tjdevWorks/TEASEL

数据集:CMU-MOSI

实验环境:GitHub上面,有人复现这个代码,使用Tesla V100都显示CUDA内存不足。

附录

MaskedLM 任务:旨在使用句子中未屏蔽的全部词语来预测随机屏蔽的标记。标准的 MaskedLM 80% 的时间使用 [MASK] token,10% 的时间使用random token,10% 的时间使用unchanged token,迫使语言模型顺利地预测输出标记。

wav2vec模型:wav2vec模型利用五层卷积神经网络(CNN)作为时间特征编码器,并利用BERT-style Transformer作为上下文编码器。

BiGRU单元:BiGRU单元指的是双向门控循环单元(Bidirectional Gated Recurrent Unit)。它是一种特殊的循环神经网络(RNN)结构,用于处理序列数据。BiGRU通过结合两个GRU层来工作,一个处理正向时间序列(从开始到结束),另一个处理反向时间序列(从结束到开始)。这种结构允许网络同时学习过去和未来的上下文信息,提高了对序列数据的理解能力。GRU单元结构:

image-20240310182334909

😃😃😃

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/458509.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端实例:页面布局1(后端数据实现)

效果图 注&#xff1a;这里用到后端语言php&#xff08;页面是.php文件&#xff09;,提取纯html也可以用 inemployee_index.php <?php include(includes/session.inc); $Title _(内部员工首页); $ViewTopic 内部员工首页; $BookMark 内部员工首页; include(includes/…

vue3动态组件未渲染问题

渲染问题 component动态组件写法与vue2写法一致&#xff0c;代码如下&#xff1a; <component :is"componentName"/><script setup>import { ref } from vueimport account from ./user/account.vue// 组件名称const componentName ref(account)// 点击…

Linux arrch64系统架构 py文件运行时的编码问题解决

问题&#xff1a; 因为要测试一些东西&#xff0c;所以必须有中文数据来做支撑&#xff0c;之前用的架构是x86&#xff0c;现在一个服务器的架构为arrch64&#xff0c;下列编码都挨个都进行声明&#xff0c;但是无法解决问题&#xff0c;总是报错 # -*- coding: gbk -*- # -*…

数组的大小与元素的个数

一、数组的大小 数组一旦声明&#xff0c;大小就确定了&#xff0c;无论元素是否填充 以大括号声明的数组&#xff0c;数组大小和大括号中元素的数量是一致的 以双引号字符串声明的字符数组&#xff0c;数组大小比字符的个数多一个 sizeof(数组名)得到的是元素类型所占字节…

一行代码极速部署:打造面向开发者的流计算平台

作者&#xff1a;Yingjun Wu TL;DR. curl https://risingwave.com/sh | sh在2021年初&#xff0c;我创立了RisingWave&#xff0c;目标是推广流计算技术的普及。在过去的三年中&#xff0c;我不断的向市场布道RisingWave&#xff0c;希望RisingWave能够在流计算这一市场中占…

精简版 Obsidian 图床配置 PicGo+ gitee

精简版 Obsidian 图床配置 PicGo gitee 图床的作用 图床&#xff08;Image Hosting Service&#xff09;是一种在线服务&#xff0c;用于存储和托管用户上传的图片文件。用户可以将图片上传到图床服务器&#xff0c;并获得一个可访问的图片链接&#xff0c;然后可以在网页、博…

【Stable Diffusion】入门-01:原理简介+应用安装(Windows)+生成步骤

【Stable Diffusion】入门&#xff1a;原理简介应用安装&#xff08;Windows&#xff09;生成步骤 原理简介应用安装 原理简介 稳定扩散生成模型(Stable Diffusion)是一种潜在的文本到图像扩散模型&#xff0c;能够在给定任何文本输入的情况下生成照片般逼真的图像。 应用安…

谷歌的后量子密码学威胁模型

1. 引言 若现在不使用量子安全算法来加密数据&#xff0c;能够存储当前通信的攻击者最快十年内就能对其解密。这种先存储后解密的攻击是当前采用后量子密码学 (post-quantum cryptography&#xff0c;PQC) 背后的主要动机&#xff0c;但其他未来的量子计算威胁也需要一个深思熟…

macOS - 获取硬件设备信息

文章目录 1、CPU获取方式 一&#xff1a; system_profiler获取方式二&#xff1a;sysctl&#xff0c; machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一&#xff1a; system_profiler % syst…

CKA认证之Etcd备份与恢复

题目介绍&#xff1a; 资料参考&#xff1a; https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/configure-upgrade-etcd 解题&#xff1a; 1、备份 #参考模板列出 etcdctl 可用的各种选项。 #例如&#xff0c;你可以通过指定端点、证书和密钥来制作快照&#xff0…

计算机视觉——目标检测(R-CNN、Fast R-CNN、Faster R-CNN )

前言、相关知识 1.闭集和开集 开集&#xff1a;识别训练集不存在的样本类别。闭集&#xff1a;识别训练集已知的样本类别。 2.多模态信息融合 文本和图像&#xff0c;文本的语义信息映射成词向量&#xff0c;形成词典&#xff0c;嵌入到n维空间。 图片内容信息提取特征&…

大语言模型提示词技巧

LLM&#xff08;Large Language Model&#xff09;大语言模型时代&#xff0c;提示词&#xff08;Prompt&#xff09;很重要&#xff0c;而改进提示词显然有助于在不同任务上获得更好的结果。这就是提示工程背后的整个理念。 下面我们将介绍更高级的提示工程技术&#xff0c;使…

【办公类-40-01】20240311 用Python将MP4转MP3提取音频 (家长会系列一)

作品展示&#xff1a; 背景需求&#xff1a; 马上就要家长会&#xff0c;我负责做会议前的照片滚动PPT&#xff0c;除了大量照片视频&#xff0c;还需要一个时间很长的背景音乐MP3 一、下载“歌曲串烧” 装一个IDM 下载三个“串烧音乐MP4”。 代码展示 家长会背景音乐: 歌曲串…

科普|大数据信用高风险形成原因,怎么查询?

在大数据时代&#xff0c;基于大数据技术的大数据信用风险在很多时候是很多机构比较重视的问题&#xff0c;大数据信用风险主要包括多头借贷风险、履约行为风险、联系人风险、司法风险等。本文将详细为大家讲讲大数据信用高风险是怎么形成的?怎么查询?一起去了解一下吧。 大数…

leetCode刷题 13. 罗马数字转整数

目录 题目&#xff1a; 1. 思路 2. 解题方法 3. 复杂度 4. Code 题目&#xff1a; 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L …

Python 多种字符串处理函数介绍

Python 提供了丰富的字符串处理函数&#xff0c;用于执行各种字符串操作&#xff0c;如查找、替换、截取、转换等。以下是一些常用的 Python 字符串处理函数及其用法&#xff1a; 字符串长度和大小写转换 1. **len()**&#xff1a;返回字符串的长度。 2. **upper()**&#xff1…

如何区分工业以太网交换机和常规以太网交换机

工业以太网交换机和常规以太网交换机乍一看似乎很相似&#xff0c;但两者之间存在着一些关键区别。在本文中&#xff0c;我们将阐明这些差异&#xff0c;并为您提供一些快速区分两者的提示。 工业以太网交换机与常规以太网交换机的比较 工业以太网交换机和常规以太网交换机都…

[ai笔记15] openAI官方提示词工程文档(图文重排版本)

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第15篇分享&#xff01; 最近在学习prompt提示词技巧&#xff0c;一番研究发现其实提示词的技巧并不是限定死的&#xff0c;所谓技巧和心法更像是教导我们如何更清晰、更结构化的大模型聊天工具进行沟通…

SpringBoot +WebSocket应用

我们今天不研究原理&#xff0c;只看应用。 什么是WebSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455&#xff0c;并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数…

Redis-复制功能

0 序言 复制功能是Redis提供的多机功能中最基础的一个&#xff0c;这个功能是通过主从复制&#xff08;master-slave replication&#xff09;模式实现的&#xff0c;它允许用户为存储着目标数据库的服务器创建出多个拥有相同数据库副本的服务器&#xff0c;其中存储目标数据库…
最新文章