当前位置: 首页 > news >正文

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

😃😃😃

相关文章:

TEASEL: A transformer-based speech-prefixed language model

文章目录 TEASEL:一种基于Transformer的语音前缀语言模型文章信息研究目的研究内容研究方法1.总体框图2.BERT-style Language Models(基准模型)3.Speech Module3.1Speech Temporal Encoder3.2Lightweight Attentive Aggregation (LAA) 4.训练…...

机器学习之分类回归模型(决策数、随机森林)

回归分析 回归分析属于监督学习方法的一种,主要用于预测连续型目标变量,可以预测、计算趋势以及确定变量之间的关系等。 Regession Evaluation Metrics 以下是一些最流行的回归评估指标: 平均绝对误差(MAE):目标变量的预测值与实际值之间的平均绝对差…...

算法二刷day3

203.移除链表元素 class Solution { public:ListNode* removeElements(ListNode* head, int val) {ListNode *dummyHead new ListNode(0);dummyHead->next head;ListNode *cur dummyHead;while (cur->next ! nullptr) {if (cur->next->val val) {ListNode *tm…...

面具安装LSP模块时提示 Unzip error错误的解决办法

面具(Magisk Delta)安装LSP模块时提示 Unzip error错误的解决办法 ​​ 如果前面的配置都正常的话,可能是LSP版本有问题重新去Github下载一个最新版的吧;我是这么解决的。 我安装1.91那个版本的LSP就是死活安装不上,下载了1.92的版本一次就…...

HarmonyOS 关系型数据 整体测试 进行 初始化 增删查改 操作

好啊 前面的文章 HarmonyOS 数据持久化 关系型数据库之 初始化操作 HarmonyOS 数据持久化 关系型数据库之 增删改逻辑编写 HarmonyOS 数据持久化 关系型数据库之 查询逻辑编写 我们分别编写了 初始化数据库表 增删查改操作 的逻辑代码 那么 下面我们就来整体操作一下 然后 这…...

软件杯 垃圾邮件(短信)分类算法实现 机器学习 深度学习

文章目录 0 前言2 垃圾短信/邮件 分类算法 原理2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍4 数据预处理5 特征提取6 训练分类器7 综合测试结果8 其他模型方法9 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 垃圾邮件(短信)分类算…...

cnpm install报错:报错Error: certificate has expired ,淘宝镜像证书过期了解决办法

方案1: 不校验证书 cnpm install --insecure; 方案2: 替换镜像源,比如换成华为的 cnpm confg set registry https://mirrors.huaweicloud.com/repository/npm/ 方案3: 使用http作为镜像源 cnpm confg set registry http://re…...

生成式 AI:使用 Pytorch 通过 GAN 生成合成数据

导 读 生成对抗网络(GAN)因其生成图像的能力而变得非常受欢迎,而语言模型(例如 ChatGPT)在各个领域的使用也越来越多。这些 GAN 模型可以说是人工智能/机器学习目前主流的原因; 因为它向每个人&#xff0…...

C#/WPF 清理任务栏托盘图标缓存

在我们开发Windows客户端程序时,往往会出现程序退出后,任务还保留之前程序的缓存图标。每打开关闭一次程序,图标会一直增加,导致托盘存放大量缓存图标。为了解决这个问题,我们可以通过下面的程序清理任务栏托盘图标缓存…...

java SSM科研管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM科研管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…...

C# OpenCvSharp 图片批量改名

目录 效果 项目 代码 下载 C# OpenCvSharp 图片批量改名 效果 项目 代码 using NLog; using OpenCvSharp; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; namespace OpenCvSharp_Demo { publi…...

大数据开发-Hive介绍以及安装配置

文章目录 数据库和数据仓库的区别Hive安装配置Hive使用方式Hive日志配置 数据库和数据仓库的区别 数据库:传统的关系型数据库主要应用在基本的事务处理,比如交易,支持增删改查数据仓库:主要做一些复杂的分析操作,侧重…...

指针篇章-(4)+qsort函数的模拟

学习目录 ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————…...

接口测试实战--使用docker方案去部署jenkins并搭建接口自动化项目

一、搭建环境 1.几个概念 CI:持续集成 CD:持续交付 DevOps(development and operations):是一个框架,是一种方法论,并不是一套工具,包括一系列基本原则和实践,核心价值在于更快速的交付和响应市场变化。 jenkins:一个开源框架,需要操作什么流程,就下载什么插件 2…...

Day 8.TCP包头和HTTP

TCP包头 1.序号:发送端发送数据包的编号 2.确认号:已经确认接收到的数据的编号(只有当ACK为1时、确认号才有用); TCP为什么安全可靠 1.在通信前建立三次握手 SYP SYPACK ACK 2.在通信过程中通过序列号和确认号和…...

【机器学习】支持向量机 | 支持向量机理论全梳理 对偶问题转换,核方法,软间隔与过拟合

支持向量机走的路和之前介绍的模型不同 之前介绍的模型更趋向于进行函数的拟合,而支持向量机属于直接分割得到我们最后要求的内容 1 支持向量机SVM基本原理 当我们要用一条线(或平面、超平面)将不同类别的点分开时,我们希望这条…...

【JS】APIs:事件流、事件委托、其他事件、页面尺寸、日期对象与节点操作

1 事件流 捕获阶段&#xff1a;从父到子 冒泡阶段&#xff1a;从子到父 1.1 事件捕获 <body> <div class"fa"><div class"son"></div> </div> <script>const fadocument.querySelector(.fa);const sondocument.qu…...

定制红酒:如何根据客户需求调整红酒口感与风格

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知不同消费者对于红酒的口感与风格有着不同的喜好和需求。因此&#xff0c;云仓酒庄洒派根据消费者的具体要求&#xff0c;灵活调整红酒的口感与风格&#xff0c;以满足他们的期望。 首先&#xff0c;云仓酒庄洒派会与消费者进行深入的…...

利用excel批量修改图片文件名

今天同事提出需求要实现利用excel批量修改某文件夹下的图片重命名&#xff0c;衡量到各种条件&#xff0c;最后还是选择了vbs来实现。代码如下 代码 创建Excel对象 Set objExcel CreateObject("Excel.Application") objExcel.Visible False 隐藏Excel窗口 打开Ex…...

间隔5分钟执行1次Python脚本设置步骤 —— 定时执行专家

《定时执行专家》是一款制作精良、功能强大、毫秒精度、专业级的定时任务执行软件&#xff0c;用于在 Windows 系统上定时执行各种任务&#xff0c;包括执行脚本或程序。 下面是使用 "定时执行专家" 软件设置定时执行 Python 脚本的步骤&#xff1a; 步骤 1: 设置 P…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...