音訊課程文件
Seq2Seq 架構
並獲得增強的文件體驗
開始使用
Seq2Seq 架構
上一節討論的 CTC 模型只使用了 transformer 架構的編碼器部分。當我們加入解碼器來建立一個編碼器-解碼器模型時,這被稱為序列到序列模型或簡稱 seq2seq。該模型將一種資料序列對映到另一種資料序列。
對於僅有編碼器的 transformer 模型,編碼器對輸入序列中的每個元素進行預測。因此,輸入和輸出序列的長度將始終相同。在 Wav2Vec2 等 CTC 模型中,輸入波形首先被下采樣,但每 20 毫秒的音訊仍然有一個預測。
使用 seq2seq 模型,沒有這種一對一的對應關係,輸入和輸出序列的長度可以不同。這使得 seq2seq 模型適用於自然語言處理任務,如文字摘要或不同語言之間的翻譯,也適用於語音識別等音訊任務。
解碼器的架構與編碼器非常相似,兩者都使用以自注意力為主要特徵的相似層。然而,解碼器執行的任務與編碼器不同。為了瞭解其工作原理,我們來研究一下 seq2seq 模型如何進行自動語音識別。
自動語音識別
Whisper 的架構如下(圖表由 OpenAI Whisper 部落格 提供)
這看起來應該很熟悉。左邊是 transformer 編碼器。它將對數梅爾譜圖作為輸入,並將該譜圖編碼為一系列編碼器隱藏狀態,從而從口語語音中提取重要特徵。這個隱藏狀態張量代表了整個輸入序列,並有效地編碼了輸入語音的“意義”。
然後,編碼器的輸出透過一種稱為交叉注意力的機制傳遞到右側所示的transformer 解碼器中。這類似於自注意力,但關注的是編碼器輸出。從這一點開始,編碼器不再需要。
解碼器以自迴歸方式預測文字標記序列,一次一個標記,從只包含“開始”標記的初始序列開始(在 Whisper 的情況下為 SOT
)。在每個後續時間步,前一個輸出序列被反饋到解碼器中作為新的輸入序列。透過這種方式,解碼器一次發出一個新標記,穩步增長輸出序列,直到預測到“結束”標記或達到最大時間步數。
雖然解碼器的架構與編碼器大部分相同,但存在兩個主要區別:
- 解碼器有一個交叉注意力機制,允許它檢視編碼器對輸入序列的表示
- 解碼器的注意力是因果的——解碼器不允許檢視未來。
在這種設計中,解碼器扮演著語言模型的角色,處理來自編碼器的隱藏狀態表示並生成相應的文字轉錄。這是一種比 CTC 更強大的方法,即使 CTC 模型與外部語言模型結合,因為 seq2seq 系統可以使用相同的訓練資料和損失函式進行端到端訓練,從而提供更大的靈活性和通常更優越的效能。
seq2seq ASR 模型典型的損失函式是交叉熵損失,因為模型的最後一層預測了可能標記的機率分佈。這通常與 束搜尋等技術結合以生成最終序列。語音識別的度量標準是 WER 或詞錯誤率,它衡量將預測文字轉換為目標文字所需的替換、插入和刪除的數量——數量越少,分數越高。
文字轉語音
您可能不會感到驚訝:TTS 的 seq2seq 模型的工作原理與上述基本相同,只是輸入和輸出互換了!transformer 編碼器接收一系列文字標記並提取一系列隱藏狀態,這些隱藏狀態表示輸入文字。transformer 解碼器將交叉注意力應用於編碼器輸出並預測譜圖。
在 ASR 模型中,解碼器透過只包含特殊“開始”標記的序列啟動。對於 TTS 模型,我們可以用一個全為零的長度為一的譜圖開始解碼,該譜圖充當“開始標記”。給定這個初始譜圖和編碼器隱藏狀態表示上的交叉注意力,解碼器隨後預測該譜圖的下一個時間片,逐步一次一個時間步地生成譜圖。

但是解碼器如何知道何時停止呢?在 SpeechT5 模型中,這是透過讓解碼器預測第二個序列來處理的。該序列包含當前時間步是最後一個時間步的機率。在推理時生成音訊時,如果此機率超過某個閾值(例如 0.5),則解碼器表示譜圖已完成,生成迴圈應結束。
解碼完成後,我們得到一個包含譜圖的輸出序列,SpeechT5 使用一個由多個卷積層組成的後置網路來最佳化譜圖。
在 TTS 模型的訓練過程中,目標也是譜圖,損失函式是 L1 或 MSE。在推理時,我們希望將輸出譜圖轉換為音訊波形,以便我們實際收聽。為此,使用了一個外部模型,即聲碼器。此聲碼器不屬於 seq2seq 架構,並且是單獨訓練的。
TTS 的難點在於它是一種一對多對映。語音到文字只有一種正確的輸出文字與輸入語音對應,但文字到語音的輸入文字可以對映到許多可能的語音。例如,不同的說話者可能會選擇強調句子的不同部分。這使得 TTS 模型難以評估。因此,L1 或 MSE 損失值實際上並沒有太多意義——將相同文字表示為譜圖有多種方法。這就是為什麼 TTS 模型通常由人類聽眾使用稱為 MOS 或平均意見得分的指標進行評估。
結論
seq2seq 方法比僅有編碼器的模型更強大。透過將輸入序列的編碼與輸出序列的解碼分離,音訊和文字的對齊問題減少了。
然而,編碼器-解碼器模型也較慢,因為解碼過程一次一步地進行,而不是一次性完成。序列越長,預測越慢。自迴歸模型也可能陷入重複或跳過單詞。束搜尋等技術可以幫助提高預測質量,但也會使解碼速度更慢。
< > 在 GitHub 上更新