AI 聲音:數字音訊、語音識別、TTS 簡介與使用示例

凌虚發表於2024-11-28

在現代 AI 技術的推動下,聲音處理領域取得了巨大進展。從語音識別(ASR)到文字轉語音(TTS),再到個性化聲音克隆,這些技術已經深入到我們的日常生活中:語音助手、自動字幕生成、語音導航等應用無處不在。

數字音訊

音訊是聲音的“數字化”。聲音本質上是空氣中振動的波,這些波的振動被麥克風捕捉後轉化為電訊號。接著,這些訊號會透過取樣和量化儲存為數字資料。

如上圖所示。聲波最開始是一個連續的模擬訊號,然後經過特定頻率的取樣得到取樣點(比如取樣頻率 48kHz 就是將每秒切割為 48k 個取樣點),再透過量化處理得到二進位制資料(如果量化位數是 16 位,則表示每個取樣點儲存為 16 bit 即 2 個位元組),最後將後設資料(如取樣率、量化位數、聲道數量等)和取樣點二進位制資料組合起來就得到了音訊檔案(比如 WAV 或 MP3)。

ASR 語音識別

語音識別(Automatic Speech RecognitionASR)是將語言轉化為文字的技術。

傳統方法

早期的 ASR 系統主要依賴基於統計的模型,如:

  • 聲學模型(Acoustic Model):將音訊訊號轉換為聲學特徵,如 MFCC(梅爾頻率倒譜系數)。
  • 語言模型(Language Model):使用統計方法預測文字序列的機率。
  • 解碼器(Decoder):結合聲學和語言模型,將聲學特徵對映到最可能的文字序列。

這些方法需要大量手工設計的特徵和規則,效能受限於資料量和語言模型的複雜度。

深度學習

現代 ASR 系統主要基於深度學習,使用端到端(End-to-End)方法,直接從音訊輸入到文字輸出。

如果將 AI 模型看作一個黑盒,那麼訓練過程就是輸入 <音訊, 文字> 資料對,讓模型自動學習輸入和輸出之間的對映關係。經過訓練後,模型便可以對新的音訊進行推理,生成對應文字。

這種描述是一個高度抽象的視角,背後實際上是一個複雜的過程,比如 OpenAI Whisper

實踐證明,基於深度學習方法訓練出來的模型具有更好的魯棒性、準確性和泛化能力。

OpenAI Whisper 使用示例:

import whisper

# 載入模型,預設儲存位置 ~/.cache/whisper,可以設定 download_root 改變路徑
model = whisper.load_model("base", download_root="root_dir")

# 將音訊轉換為文字
result = model.transcribe("audio.mp3")
print(result["text"])

你也可以使用 whisper.cpp,一個使用 C/C++ 編寫的 OpenAI Whisper 的高效能版本。

TTS 文字轉語言

文字轉語音(Text-to-SpeechTTS)技術則是將輸入文字轉化為自然流暢的語音。

從某種抽象的角度來看,TTS(文字轉語音)可以被視為語音識別(ASR)的“反過程”,兩者都涉及將一種形式的資料(音訊或文字)對映到另一種形式,並且現代都採用深度學習模型,通常基於 Transformer 或類似架構,但在某些技術實現(比如中間表示、損失函式、特徵表示、目標最佳化等)和複雜度上並非完全對稱。

TTS 示例如下(使用的是 HuggingFace 上的 OuteAI/OuteTTS-0.2-500M 模型):

import outetts

model_config = outetts.HFModelConfig_v1(
    model_path="OuteAI/OuteTTS-0.2-500M",
    language="en",  # Supported languages in v0.2: en, zh, ja, ko
)

interface = outetts.InterfaceHF(model_version="0.2", cfg=model_config)

# Optional: Load speaker from default presets
interface.print_default_speakers()
speaker = interface.load_default_speaker(name="male_1")

output = interface.generate(
    text="""Speech synthesis is the artificial production of human speech.
    A computer system used for this purpose is called a speech synthesizer,
    and it can be implemented in software or hardware products.
    """,
    # Lower temperature values may result in a more stable tone,
    # while higher values can introduce varied and expressive speech
    temperature=0.1,
    repetition_penalty=1.1,
    max_length=4096,
    speaker=speaker,
)

output.save("output.wav")

聲音克隆

每個人的聲音都有獨特的特性,比如音調高低、響度、停頓、語氣等等,聲音克隆就是分析並提取一個人的聲音特徵,將這些特徵引數化(通常表示為高維向量)。特徵提取本身沒有多大實際用途,為了讓這些特徵發揮作用,聲音克隆通常與 TTS(文字轉語音)技術結合,融合克隆的聲音特徵,將文字生成為與克隆聲音相似的語音。

不少 TTS 模型也會直接支援聲音克隆的功能,如何呼叫則取決於具體的模型。例如上例中的 OuteAI/OuteTTS-0.2-500M 模型可以輸入一段音訊建立具有該音訊特徵的 speaker:

# Optional: Create a speaker profile (use a 10-15 second audio clip)
speaker = interface.create_speaker(
    audio_path="path/to/audio/file",
    transcript="Transcription of the audio file."
)

總結

語音技術作為 AI 應用中的重要分支,正在改變人機互動的方式。從基礎的數字音訊處理到 ASRTTS 技術的成熟,再到聲音克隆賦予 AI 個性化表達能力,這些技術不僅滿足了自動化需求,還為虛擬助手、娛樂、醫療、教育等領域帶來了創新可能性。希望本文的介紹能為你開啟探索 AI 聲音領域的大門!


(我是凌虛,關注我,無廣告,專注技術,不煽動情緒,歡迎與我交流)


參考資料:

  • https://github.com/openai/whisper
  • https://huggingface.co/OuteAI/OuteTTS-0.2-500M

相關文章