首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将卷积特征编码器的Wav2Vec 2.0输出作为变压器上下文网络的输入

如何将卷积特征编码器的Wav2Vec 2.0输出作为变压器上下文网络的输入
EN

Data Science用户
提问于 2021-04-14 01:23:32
回答 1查看 539关注 0票数 1

我正在阅读Wav2Vec 2.0论文并试图理解模型的体系结构,但我很难理解可变长度的音频原始输入是如何通过模型提供的,特别是从卷积特性编码器到变压器上下文网络。

在微调期间(据我所读),尽管批处理中的音频原始输入将被填充到批处理中最长输入的长度,但输入的长度可能因批处理而异。因此,这意味着从卷积特征编码器的输出将有不同的长度在不同的批。

然而,变压器上下文网络有一个固定的输入维;基本的Wav2Vec 2.0模型使用模型维度768的转换器。这意味着,从卷积特征编码器的输出必须以某种方式“操纵”成为维度768,以便输入变压器。

这种“操纵”是怎么做到的?HuggingFace的Wav2Vec模型(见下文)显示,在卷积特性编码器(即.k.a.,Wav2Vec2FeatureExtractor)和互感器上下文网络(即.k.a.,Wav2Vec2Encoder)之间存在一个Wav2Vec2FeatureProjection层。Wav2Vec2FeatureProjection包含一个线性层,它接受维度512和输出维度768的输入。输入维512是如何确定原始输入可以在不同批次之间具有不同长度的?

代码语言:javascript
复制
Wav2Vec2ForCTC(
  (wav2vec2): Wav2Vec2Model(
    (feature_extractor): Wav2Vec2FeatureExtractor(
      (conv_layers): ModuleList(
        ...
        (6): Wav2Vec2NoLayerNormConvLayer(
          (conv): Conv1d(512, 512, kernel_size=(2,), stride=(2,), bias=False)
        )
      )
    )
    (feature_projection): Wav2Vec2FeatureProjection(
      (layer_norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)
      (projection): Linear(in_features=512, out_features=768, bias=True)
      (dropout): Dropout(p=0.1, inplace=False)
    )
    (encoder): Wav2Vec2Encoder(
      (pos_conv_embed): Wav2Vec2PositionalConvEmbedding(
        (conv): Conv1d(768, 768, kernel_size=(128,), stride=(1,), padding=(64,), groups=16)
        (padding): Wav2Vec2SamePadLayer()
      )
    ...
EN

回答 1

Data Science用户

发布于 2021-04-16 00:42:47

它们的关键是变压器的768维矢量是单个输入的大小。让我解释一下。

  • 从可变长度的音频输入开始。
  • 这是通过一个时态CNN网络传递的,它将为您提供输出,由纸张称为z_1 to z_T,其中T在整个批处理中是可变的,是特定音频输入中的时间步骤数(不同的音频输入不同)。
  • 这些z中的每一个都作为768维向量传递给变压器,即有T 768-昏暗矢量传递给您的变压器。

可以想象,实际上您也需要向转换器传递一个掩码,这样它就知道批处理中不同输入的变量T是什么。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/93036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档