音訊課程文件

第 3 單元. 用於音訊的 Transformer 架構

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

第三單元:音訊的Transformer架構

在本課程中,我們將主要探討Transformer模型及其在音訊任務中的應用。雖然您不需要了解這些模型的內部細節,但理解其核心概念將非常有益,因此這裡快速回顧一下。如果想深入瞭解Transformer,請檢視我們的NLP課程

Transformer如何工作?

最初的Transformer模型旨在將書面文字從一種語言翻譯成另一種語言。其架構如下:

Original transformer architecture

左側是編碼器,右側是解碼器

  • 編碼器接收輸入,在本例中是文字標記序列,並構建其表示(其特徵)。模型中的這一部分經過訓練,旨在從輸入中獲取理解。

  • 解碼器使用編碼器的表示(特徵)以及其他輸入(先前預測的標記)來生成目標序列。模型的這一部分經過訓練,旨在生成輸出。在最初的設計中,輸出序列由文字標記組成。

還有一些基於Transformer的模型僅使用編碼器部分(適用於需要理解輸入的任務,如分類),或僅使用解碼器部分(適用於文字生成等任務)。僅使用編碼器的模型示例是BERT;僅使用解碼器的模型示例是GPT2。

Transformer模型的一個關鍵特徵是它們由稱為注意力層的特殊層構建。這些層告訴模型在計算特徵表示時特別關注輸入序列中的某些元素並忽略其他元素。

Transformer在音訊中的應用

本課程中我們將介紹的音訊模型通常採用如上所示的標準Transformer架構,但在輸入或輸出端進行了一些細微修改,以適應音訊資料而非文字。由於所有這些模型本質上都是Transformer,它們大部分架構相同,主要區別在於它們的訓練和使用方式。

The transformer with audio input and output

對於音訊任務,輸入和/或輸出序列可能是音訊而不是文字。

  • 自動語音識別(ASR):輸入是語音,輸出是文字。

  • 語音合成(TTS):輸入是文字,輸出是語音。

  • 音訊分類:輸入是音訊,輸出是類別機率——序列中每個元素的類別機率,或整個序列的單個類別機率。

  • 語音轉換或語音增強:輸入和輸出都是音訊。

有幾種不同的方法可以處理音訊,以便其能與Transformer一起使用。主要的考慮因素是使用原始形式的音訊——作為波形——還是將其處理為聲譜圖。

模型輸入

音訊模型的輸入可以是文字或聲音。目標是將此輸入轉換為嵌入向量,以便Transformer架構進行處理。

文字輸入

文字轉語音模型以文字作為輸入。這與原始Transformer或任何其他NLP模型的工作方式相同:輸入文字首先被分詞,得到一個文字標記序列。該序列透過輸入嵌入層,將標記轉換為512維向量。然後,這些嵌入向量被傳遞到Transformer編碼器中。

波形輸入

自動語音識別模型以音訊作為輸入。為了將Transformer用於ASR,我們首先需要以某種方式將音訊轉換為嵌入向量序列。

諸如**Wav2Vec2**和**HuBERT**等模型直接將音訊波形作為模型輸入。正如您在音訊資料章節中看到的那樣,波形是一個浮點數的一維序列,其中每個數字代表給定時間的取樣振幅。這個原始波形首先被歸一化為零均值和單位方差,這有助於標準化不同音量(振幅)的音訊樣本。

Wav2Vec2 uses a CNN to create embeddings from the input waveform

歸一化後,音訊樣本序列透過一個小型卷積神經網路(稱為特徵編碼器)轉換為嵌入。該網路中的每個卷積層處理輸入序列,對音訊進行下采樣以縮短序列長度,直到最終卷積層輸出一個512維向量,其中包含每個25毫秒音訊的嵌入。一旦輸入序列轉換為這樣的嵌入序列,Transformer將照常處理資料。

聲譜圖輸入

使用原始波形作為輸入的一個缺點是它們的序列長度往往很長。例如,取樣率為16 kHz的30秒音訊會產生長度為30 * 16000 = 480000的輸入。更長的序列長度需要在Transformer模型中進行更多的計算,從而導致更高的記憶體使用。

因此,原始音訊波形通常不是表示音訊輸入最有效的方式。透過使用聲譜圖,我們可以在更壓縮的形式下獲得相同的資訊量。

Whisper uses a CNN to create embeddings from the input spectrogram

諸如**Whisper**之類的模型首先將波形轉換為對數梅爾聲譜圖。Whisper始終將音訊分割成30秒的片段,每個片段的對數梅爾聲譜圖形狀為(80, 3000),其中80是梅爾頻段的數量,3000是序列長度。透過轉換為對數梅爾聲譜圖,我們減少了輸入資料量,但更重要的是,這比原始波形短得多。然後,對數梅爾聲譜圖由一個小型CNN處理為嵌入序列,該序列像往常一樣輸入到Transformer中。

在波形和聲譜圖輸入兩種情況下,Transformer前端都有一個小型網路,將輸入轉換為嵌入,然後Transformer接管進行處理。

模型輸出

Transformer架構輸出一個隱藏狀態向量序列,也稱為輸出嵌入。我們的目標是將這些向量轉換為文字或音訊輸出。

文字輸出

自動語音識別模型的目標是預測文字標記序列。這透過在Transformer的輸出之上新增一個語言建模頭——通常是一個單層線性層——然後進行softmax操作來實現。這會預測詞彙表中文字標記的機率。

聲譜圖輸出

對於生成音訊的模型,例如文字轉語音 (TTS) 模型,我們必須新增能夠生成音訊序列的層。通常會生成一個聲譜圖,然後使用一個稱為聲碼器的附加神經網路將其轉換為波形。

例如,在**SpeechT5** TTS模型中,Transformer網路的輸出是一個768元素向量序列。一個線性層將該序列投影到對數梅爾聲譜圖。一個由附加線性層和卷積層組成的所謂後處理網路透過降噪來最佳化聲譜圖。然後聲碼器生成最終的音訊波形。

SpeechT5 outputs a spectrogram and uses a vocoder to create the waveform
💡 如果您獲取一個現有波形並應用短時傅立葉變換(STFT),則可以執行逆操作ISTFT,再次獲取原始波形。這是因為STFT建立的聲譜圖包含振幅和相位資訊,兩者都需要重建波形。然而,生成聲譜圖作為其輸出的音訊模型通常只預測振幅資訊,而不預測相位。要將此類聲譜圖轉換為波形,我們必須以某種方式估計相位資訊。這就是聲碼器的作用。

波形輸出

模型也可以直接輸出波形,而不是將聲譜圖作為中間步驟,但我們目前在 🤗 Transformers中沒有支援此功能的模型。

結論

總而言之:大多數音訊Transformer模型大同小異——它們都建立在相同的Transformer架構和注意力層之上,儘管有些模型只使用Transformer的編碼器部分,而另一些則同時使用編碼器和解碼器。

您還了解了如何將音訊資料輸入和輸出Transformer模型。為了執行ASR、TTS等不同的音訊任務,我們可以簡單地替換預處理輸入為嵌入的層,並替換後處理預測嵌入為輸出的層,而Transformer主幹保持不變。

接下來,讓我們看看這些模型可以通過幾種不同的方式訓練以進行自動語音識別。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.