最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

使用 SpeechT5 進行語音合成、識別和更多功能

2023-03-14 10:56 作者:HuggingFace  | 我要投稿

我們很高興地宣布,SpeechT5 現(xiàn)在可用于 ?? Transformers (一個開源庫,提供最前沿的機器學習模型實現(xiàn)的開源庫)。

SpeechT5 最初見于微軟亞洲研究院的這篇論文 SpeechT5: Unified-Modal Encoder-Decoder Pre-Training for Spoken Language Processing。論文作者發(fā)布的 官方檢查點 可在 Hugging Face Hub 上找到。

  • SpeechT5 論文地址:
    https://arxiv.org/abs/2110.07205

  • 官方檢查點:
    https://github.com/microsoft/SpeechT5

如果您想直接嘗試,這里有一些在 Spaces 上的演示:

  • 語音合成 (TTS)
    https://hf.co/spaces/Matthijs/speecht5-tts-demo

  • 語音轉(zhuǎn)換
    https://hf.co/spaces/Matthijs/speecht5-vc-demo

  • 自動語音識別
    https://hf.co/spaces/Matthijs/speecht5-asr-demo

介紹

SpeechT5 不是一種,也不是兩種,而是一種架構(gòu)中的三種語音模型。

它可以做:

  • 語音到文本,用于自動語音識別或說話人識別;

  • 文本轉(zhuǎn)語音,用于合成音頻;

  • 語音到語音,用于在不同語音之間進行轉(zhuǎn)換或執(zhí)行語音增強。

SpeechT5 背后的主要思想是在文本到語音、語音到文本、文本到文本和語音到語音數(shù)據(jù)的混合體上預訓練單個模型。這樣,模型可以同時從文本和語音中學習。這種預訓練方法的結(jié)果是一個模型,該模型具有由文本和語音共享的隱藏表示的?統(tǒng)一空間。

SpeechT5 的核心是一個常規(guī)的?Transformer 編碼器 - 解碼器?模型。就像任何其他 Transformer 一樣,編碼器 - 解碼器網(wǎng)絡使用隱藏表示對序列到序列的轉(zhuǎn)換進行建模。這個 Transformer 骨干對于所有 SpeechT5 任務都是一樣的。

為了使同一個 Transformer 可以同時處理文本和語音數(shù)據(jù),添加了所謂的?pre-nets?和?post-nets。per-nets 的工作是將輸入文本或語音轉(zhuǎn)換為 Transformer 使用的隱藏表示。post-nets 從 Transformer 獲取輸出并將它們再次轉(zhuǎn)換為文本或語音。

下圖展示了 SpeechT5 的架構(gòu) (摘自原始論文)。

論文地址:
https://arxiv.org/abs/2110.07205

SpeechT5 architecture diagram

在預訓練期間,同時使用所有的 per-nets 和 post-nets 。預訓練后,整個編碼器 - 解碼器主干在單個任務上進行微調(diào)。這種經(jīng)過微調(diào)的模型僅使用特定于給定任務的 per-nets 和 post-nets 。例如,要將 SpeechT5 用于文本到語音轉(zhuǎn)換,您需要將文本編碼器 per-nets 交換為文本輸入,將語音解碼器 per-nets 和 post-nets 交換為語音輸出。

注意: 即使微調(diào)模型一開始使用共享預訓練模型的同一組權(quán)重,但最終版本最終還是完全不同。例如,您不能采用經(jīng)過微調(diào)的 ASR 模型并換掉 per-nets 和 post-nets 來獲得有效的 TTS 模型。SpeechT5 很靈活,但不是?那么靈活。

文字轉(zhuǎn)語音

SpeechT5 是我們添加到 ?? Transformers 的?第一個文本轉(zhuǎn)語音模型,我們計劃在不久的將來添加更多的 TTS 模型。

對于 TTS 任務,該模型使用以下 per-net 和 post-net:

  • 文本編碼器 per-net。一個文本嵌入層,將文本標記映射到編碼器期望的隱藏表示。類似于 BERT 等 NLP 模型中發(fā)生的情況。

  • 語音解碼器 per-net。這將對數(shù)梅爾頻譜圖作為輸入,并使用一系列線性層將頻譜圖壓縮為隱藏表示。此設計取自 Tacotron 2 TTS 模型。

  • 語音解碼器 post-net。這預測了一個殘差以添加到輸出頻譜圖中并用于改進結(jié)果,同樣來自 Tacotron 2。微調(diào)模型的架構(gòu)如下所示。

SpeechT5 architecture for text-to-speech

以下是如何使用 SpeechT5 文本轉(zhuǎn)語音模型合成語音的完整示例。您還可以在 交互式 Colab 筆記本 中進行操作。
https://colab.research.google.com/drive/1XnOnCsmEmA3lHmzlNRNxRMcu80YZQzYf?usp=sharing

SpeechT5 在最新版本的 Transformers 中尚不可用,因此您必須從 GitHub 安裝它。還要安裝附加的依賴語句,然后重新啟動運行。

首先,我們從 Hub 加載 微調(diào)模型,以及用于標記化和特征提取的處理器對象。我們將使用的類是?SpeechT5ForTextToSpeech

微調(diào)模型:
https://hf.co/microsoft/speecht5_tts

接下來,標記輸入文本。

SpeechT5 TTS 模型不限于為單個說話者創(chuàng)建語音。相反,它使用所謂的?Speaker Embeddings?來捕捉特定說話者的語音特征。我們將從 Hub 上的數(shù)據(jù)集中加載這樣一個 Speaker Embeddings。

Speaker Embeddings 是形狀為 (1, 512) 的張量。這個特定的 Speaker Embeddings 描述了女性的聲音。使用 此腳本 從 CMU ARCTIC 數(shù)據(jù)集獲得嵌入?/utils/prep_cmu_arctic_spkemb.py,任何 X-Vector 嵌入都應該有效。

  • 腳本地址:
    https://hf.co/mechanicalsea/speecht5-vc/blob/main/manifest

  • CMU ARCTIC:
    http://www.festvox.org/cmu_arctic/

現(xiàn)在我們可以告訴模型在給定輸入標記和 Speaker Embeddings 的情況下生成語音。

這會輸出一個形狀為 (140, 80) 的張量,其中包含對數(shù)梅爾譜圖。第一個維度是序列長度,它可能在運行之間有所不同,因為語音解碼器 per-net 總是對輸入序列應用 dropout。這為生成的語音增加了一些隨機變化。

要將預測的對數(shù)梅爾聲譜圖轉(zhuǎn)換為實際的語音波形,我們需要一個?聲碼器。理論上,您可以使用任何適用于 80-bin 梅爾聲譜圖的聲碼器,但為了方便起見,我們在基于 HiFi-GAN 的 Transformers 中提供了一個。此聲碼器的權(quán)重,以及微調(diào) TTS 模型的權(quán)重,由 SpeechT5 的原作者友情提供。

聲碼器的權(quán)重:
https://huggingface.co/mechanicalsea/speecht5-tts

加載聲碼器與任何其他 ?? Transformers 模型一樣簡單。

要從頻譜圖中制作音頻,請執(zhí)行以下操作:

我們還提供了一個快捷方式,因此您不需要制作頻譜圖的中間步驟。當您將聲碼器對象傳遞給 generate_speech 時,它會直接輸出語音波形。

最后,將語音波形保存到文件中。SpeechT5 使用的采樣率始終為 16 kHz。

輸出聽起來像這樣:
https://hf.co/datasets/huggingface/documentation-images/resolve/main/blog/speecht5/tts_example.wav

這就是 TTS 模型!使這個聲音好聽的關鍵是使用正確的 Speaker Embeddings。

您可以在 Spaces 上進行 交互式演示。

交互式演示:
https://hf.co/spaces/Matthijs/speecht5-tts-demo

語音轉(zhuǎn)語音的語音轉(zhuǎn)換

從概念上講,使用 SpeechT5 進行語音轉(zhuǎn)語音建模與文本轉(zhuǎn)語音相同。只需將文本編碼器 per-net 換成語音編碼器 per-net 即可。模型的其余部分保持不變。

語音編碼器 per-net?與 wAV2vec 2.0 中的特征編碼模塊相同。它由卷積層組成,這些卷積層將輸入波形下采樣為一系列音頻幀表示。

wAV2vec 2.0:
https://hf.co/docs/transformers/model_doc/wAV2vec2

作為語音到語音任務的示例,SpeechT5 的作者提供了一個 微調(diào)檢查點 用于進行語音轉(zhuǎn)換。要使用它,首先從 Hub 加載模型。請注意,模型類現(xiàn)在是?SpeechT5ForSpeechToSpeech

微調(diào)檢查點:
https://hf.co/microsoft/speecht5_vc

我們需要一些語音音頻作為輸入。出于本示例的目的,我們將從 Hub 上的小型語音數(shù)據(jù)集加載音頻。您也可以加載自己的語音波形,只要它們是單聲道的并且使用 16 kHz 的采樣率即可。我們在這里使用的數(shù)據(jù)集中的樣本已經(jīng)采用這種格式。

接下來,對音頻進行預處理,使其采用模型期望的格式。

與 TTS 模型一樣,我們需要 Speaker Embeddings。這些描述了目標語音聽起來像什么。

我們還需要加載聲碼器以將生成的頻譜圖轉(zhuǎn)換為音頻波形。讓我們使用與 TTS 模型相同的聲碼器。

現(xiàn)在我們可以通過調(diào)用模型的?generate_speech?方法來執(zhí)行語音轉(zhuǎn)換

更改為不同的聲音就像加載新的 Speaker Embeddings 一樣簡單。您甚至可以嵌入自己的聲音!

原始輸入下載:
https://hf.co/datasets/huggingface/documentation-images/resolve/main/blog/speecht5/speech_original.wav

轉(zhuǎn)換后的語音:
https://hf.co/datasets/huggingface/documentation-images/resolve/main/blog/speecht5/speech_converted.wav

請注意,此示例中轉(zhuǎn)換后的音頻在句子結(jié)束前被切斷。這可能是由于兩個句子之間的停頓導致 SpeechT5 (錯誤地) 預測已經(jīng)到達序列的末尾。換個例子試試,你會發(fā)現(xiàn)轉(zhuǎn)換通常是正確的,但有時會過早停止。

???您可以進行交互式演示。
https://hf.co/spaces/Matthijs/speecht5-vc-demo

用于自動語音識別的語音轉(zhuǎn)文本

ASR 模型使用以下 pre-nets 和 post-net:

  • 語音編碼器 per-net。這是語音到語音模型使用的相同預網(wǎng),由來自 wAV2vec 2.0 的 CNN 特征編碼器層組成。

  • 文本解碼器 per-net。與 TTS 模型使用的編碼器預網(wǎng)類似,它使用嵌入層將文本標記映射到隱藏表示中。(在預訓練期間,這些嵌入在文本編碼器和解碼器預網(wǎng)之間共享。)

  • 文本解碼器 post-net。這是其中最簡單的一個,由一個線性層組成,該層將隱藏表示投射到詞匯表上的概率。微調(diào)模型的架構(gòu)如下所示。

如果您之前嘗試過任何其他 ?? Transformers 語音識別模型,您會發(fā)現(xiàn) SpeechT5 同樣易于使用。最快的入門方法是使用流水線。

作為語音音頻,我們將使用與上一節(jié)相同的輸入,任何音頻文件都可以使用,因為流水線會自動將音頻轉(zhuǎn)換為正確的格式。

現(xiàn)在我們可以要求流水線處理語音并生成文本轉(zhuǎn)錄。

打印轉(zhuǎn)錄給出:

聽起來完全正確!SpeechT5 使用的分詞器非常基礎,是字符級別工作。因此,ASR 模型不會輸出任何標點符號或大寫字母。

當然也可以直接使用模型類。首先,加載 微調(diào)模型 和處理器對象。該類現(xiàn)在是?SpeechT5ForSpeechToText。

微調(diào)模型:
https://hf.co/microsoft/speecht5_asr

預處理語音輸入:

最后,告訴模型從語音輸入中生成文本標記,然后使用處理器的解碼功能將這些標記轉(zhuǎn)換為實際文本。

播放?語音到文本任務?的交互式演示。
https://hf.co/spaces/Matthijs/speecht5-asr-demo

結(jié)論

SpeechT5 是一個有趣的模型,因為與大多數(shù)其他模型不同,它允許您使用相同的架構(gòu)執(zhí)行多項任務。只有 per-net 和 post-net 發(fā)生變化。通過在這些組合任務上對模型進行預訓練,它在微調(diào)時變得更有能力完成每個單獨的任務。

目前我們只介紹了語音識別 (ASR)、語音合成 (TTS) 和語音轉(zhuǎn)換任務,但論文還提到該模型已成功用于語音翻譯、語音增強和說話者識別。如此廣泛的用途,前途不可估量!

原文:?https://huggingface.co/blog/speecht5

作者: Mathijs Hollemans

譯者: innovation64 (李洋)

審校、排版: zhongdongy (阿東)


使用 SpeechT5 進行語音合成、識別和更多功能的評論 (共 條)

分享到微博請遵守國家法律
潞城市| 新绛县| 如皋市| 汪清县| 庄河市| 乌苏市| 崇左市| 水城县| 阜城县| 恩施市| 长顺县| 冀州市| 汝州市| 哈密市| 丰台区| 囊谦县| 买车| 凯里市| 历史| 资源县| 志丹县| 禄丰县| 紫金县| 齐河县| 九龙城区| 宁明县| 鄢陵县| 车险| 澄城县| 盐亭县| 临邑县| 中山市| 庆云县| 天等县| 华坪县| 沛县| 大英县| 光山县| 天门市| 双牌县| 新化县|