生成式AI在文本應用相當廣泛,連帶也延伸至其它領域的應用,就像前面的以文生圖。而本篇就來看文本與語音領域的應用,分別是語音轉文本(STT)和文本轉語音(TTS)。
另一個方向則是文本轉語音技術,將文字轉換為自然語音。過去的品質通常是機械化、單調的聲音,而現在已經接近人類自然語音的表現,甚至可以簡單幾句範例語檔,就能做出模仿到位的聲音。TTS技術的核心在於如何將文本轉換為具有情感和語調變化的語音。過去依賴於拼接預錄聲音片段做合成語音,這種方式的局限在於語音表現力有限,並且無法自然表達語氣的變化。而生成式的語音不僅在語言流暢度上明顯提高,還能根據上下文調整語調,模仿不同的情感表達。例如:目前已有新聞台推出虛擬主播的應用。
應用場景
語音導航:GPS導航系統使用TTS技術來提供駕駛指引,確保駕駛員不必分心閱讀文字提示。
無障礙技術:視障人士可以透過TTS技術讓電子設備將文本轉化為語音,方便他們取得資訊。
語音客服:使用TTS技術來建立自動化的語音客服系統,提升使用者體驗並減少人工客服的工作量。
電子書和語音合成:越來越多的電子書應用整合TTS技術,使讀者可以將書籍內容轉換為語音,方便在開車或運動時使用。
建立 kernel 物件並掛載 AddOpenAITextToAudio 連接器服務
modelId:tts-1,是OpenAI TextToAudio 的 tts-1 模型。
var kernel = Kernel.CreateBuilder()
.AddOpenAITextToAudio(
modelId: Config.openai_audio_modelId,
apiKey: Config.openai_apiKey
).Build();
var textToAudioService = kernel.GetRequiredService<ITextToAudioService>();
var content =
"""
生成式人工智慧(Generative AI)和分辨式人工智慧(Discriminative AI)是人工智慧中兩個重要的概念。
生成式 AI 模型與分辨式模型就根本的差異,在於生成式 AI 模型巧妙運用大量沒有標注標籤的資料 X,
試圖自我產生資料與隱藏於資料中的訊息。
而移除標注資料的限制後,讓大型的複雜模型的訓練,藉助於強大 GPU 的算力與大量的資料,得以實現。
生成式 AI,雖無必要使用有標注標籤的資料,但若仍有標注標籤的資料合併使用,
訓練過程中再引入強化學習(Reinforcement learning)機制,可協助引導模型快速朝向「正確」合用的方向收斂。
而這樣的模式,也讓通用性的人工智慧漸露曙光。這種人工智慧可以創造生成出自然語言、音樂、圖像和其他形式的資料。
""";
OpenAITextToAudioExecutionSettings settings = new()
{
Voice = "alloy", // alloy, echo, fable, onyx, nova, and shimmer.
ResponseFormat = "mp3", // Supported formats are mp3, opus, aac, and flac.
Speed = 1.0f // The speed of the generated audio.Select a value from 0.25 to 4.0. 1.0 is the default.
};
AudioContent audioContent = await textToAudioService.GetAudioContentAsync(content, settings);
//Save to file
var audioFilePath = Path.Combine(Directory.GetCurrentDirectory(), "output.mp3");
await File.WriteAllBytesAsync(audioFilePath, audioContent.Data!.Value.ToArray());
傳統的STT技術主要依賴於語音識別模型,這些模型通常基於統計語音識別系統,將語音訊號劃分為較小的單元並進行分析。這在面對語音變化、口音、環境噪音等情況時,容易出現準確率下降的情況。而拜生成式AI的加入,能夠更正確的理解語音中的上下文,連帶提高轉錄的準確性。最新火熱的一個應用不外乎就是前幾天全球正式發行的 OpenAI ChatGPT APP 的 advanced voice,讓整個應用明顯提升到另一個層次。
應用場景
語音助手:如Apple的Siri、Google Assistant和Amazon的Alexa,都依賴STT技術來理解使用者的語音指令,並提供相應的回應。
會議紀錄:會議軟體如Zoom、Microsoft Teams,利用STT技術自動生成會議記錄,使得與會者可以更專注於討論,而不必擔心手動記錄。
醫療記錄:醫療從業者可以透過語音錄入病人的診斷或處方內容,節省時間並提高效率。
自動化字幕生成:影片內容平台使用STT技術生成自動字幕,提升觀看者的體驗,尤其是聽障人士的觀影需求。
建立 kernel 物件並掛載 AddOpenAIAudioToText 連接器服務
modelId:whisper-1,是OpenAI AudioToText 的 whisper-1 模型。
var kernel = Kernel.CreateBuilder()
.AddOpenAIAudioToText(
modelId: Config.openai_audioToText_modelId,
apiKey: Config.openai_apiKey
).Build();
var textToAudioService = kernel.GetRequiredService<IAudioToTextService>();
OpenAIAudioToTextExecutionSettings settings = new(fileName)
{
Language = "zh", // ISO-639-1 language code (e.g. 'en' or 'es').
Prompt = "你必須用繁體中文回覆",
ResponseFormat = "srt" //json, text, srt, verbose_json, or vtt. Default is 'json'
};
// Read audio content from a file
var audioFilePath = Path.Combine(Directory.GetCurrentDirectory(), fileName);
var audioFileBinaryData = await File.ReadAllBytesAsync(audioFilePath);
AudioContent audioContent = new(audioFileBinaryData, mimeType: null);
// Convert audio to text
var textContent = await audioToTextService.GetTextContentAsync(audioContent, settings);
// Output result
Console.WriteLine(textContent.Text);
2
00:00:03,360 --> 00:00:06,160
是人工智慧中兩個重要的概念
3
00:00:06,960 --> 00:00:11,760
生成式AI模型與分辨式模型就根本的差異
4
00:00:12,080 --> 00:00:17,400
在於生成式AI模型巧妙運用大量沒有標註標籤的資料
5
00:00:17,440 --> 00:00:22,400
X試圖自我產生資料與隱藏於資料中的訊息
6
00:00:22,440 --> 00:00:25,000
而移除標註資料的限制後
7
00:00:25,160 --> 00:00:27,480
讓大型的複雜模型的訓練
(以下省略....)
生成式AI的出現使得在文本語音發也連帶進了一大步,當然也會帶來一些風險與挑戰,例如:
伴隨以文生圖、語音文本轉換,可以發展的 LLMs 應用預期只會更多,本文使用 Semantic Kernel 透過不到 50 行的程式碼,就能輕鬆實作,是不是很方便啊。
老師,感謝在semantic kernel分享這麼多,這篇的TTS和STT介紹與範例寫反了唷!期待後續的教學文!
啊...真是累了,程式碼跟文字說明寫反了,感謝您