iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
生成式 AI

Semantic Kernel 的魔力-用.NET探索生成式應用系列 第 14

生成式AI的多樣應用:文本與語音

  • 分享至 

  • xImage
  •  

生成式AI在文本應用相當廣泛,連帶也延伸至其它領域的應用,就像前面的以文生圖。而本篇就來看文本與語音領域的應用,分別是語音轉文本(STT)和文本轉語音(TTS)。

文本轉語音(Text-to-Speech, 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();
  • 加入實作 ITextToAudioService 介面的服務類別
    Semantic Kernel 已內建有基於ITextToAudioService 介面的OpenAI Text To Audio 服務類別
var textToAudioService = kernel.GetRequiredService<ITextToAudioService>();
  • 文字內容
var content = 
"""
生成式人工智慧(Generative AI)和分辨式人工智慧(Discriminative AI)是人工智慧中兩個重要的概念。

生成式 AI 模型與分辨式模型就根本的差異,在於生成式 AI 模型巧妙運用大量沒有標注標籤的資料 X,
試圖自我產生資料與隱藏於資料中的訊息。

而移除標注資料的限制後,讓大型的複雜模型的訓練,藉助於強大 GPU 的算力與大量的資料,得以實現。

生成式 AI,雖無必要使用有標注標籤的資料,但若仍有標注標籤的資料合併使用,
訓練過程中再引入強化學習(Reinforcement learning)機制,可協助引導模型快速朝向「正確」合用的方向收斂。

而這樣的模式,也讓通用性的人工智慧漸露曙光。這種人工智慧可以創造生成出自然語言、音樂、圖像和其他形式的資料。
""";
  • 參數
    Voice 可以選擇不同風格,ResponseFormat 設定輸出的音檔格式,Speed 語速。
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());

語音轉文本(Speech-to-Text, STT)

傳統的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();
  • 加入實作 IAudioToTextService 介面的服務類別
    Semantic Kernel 已內建有基於 IAudioToTextService 介面的OpenAI Audio To Text 服務類別
var textToAudioService = kernel.GetRequiredService<IAudioToTextService>();
  • 參數
    Language 音檔語言,Prompt 可以做細部要求,ResponseFormat 支援輸出不同的格式,依需求調整,例如 srt 是字幕格式
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);
  • 輸出字幕結果
    1
    00:00:00,000 --> 00:00:03,360
    生成式人工智慧和分辨式人工智慧

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的出現使得在文本語音發也連帶進了一大步,當然也會帶來一些風險與挑戰,例如:

  • 詐騙:語音合成相似度提高也造成真假難辨,詐騙識別難度也會跟著提高。
  • 隱私安全:由於STT和TTS技術需要處理大量語音及文字資料,而模型通常也在雲端,如何處理符合各地的隱私法規(如GDPR)也是一大挑戰。
  • 即時處理能力:在語音助手或客服系統中,語音轉文本和文本轉語音通常需要即時運作,任何延遲都會影響使用者體驗。如何確保模型和系統的執行效率是非常關鍵的。或是考慮使用邊緣計算或本地處理來降低延遲。

伴隨以文生圖、語音文本轉換,可以發展的 LLMs 應用預期只會更多,本文使用 Semantic Kernel 透過不到 50 行的程式碼,就能輕鬆實作,是不是很方便啊。


上一篇
生成式AI的多樣應用:從文字到圖像 II - 使用Plugin
下一篇
Function Calling:監看 Auto Function Calling
系列文
Semantic Kernel 的魔力-用.NET探索生成式應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
fadis
iT邦新手 5 級 ‧ 2024-09-30 00:13:17

老師,感謝在semantic kernel分享這麼多,這篇的TTS和STT介紹與範例寫反了唷!期待後續的教學文!

Ian iT邦新手 4 級 ‧ 2024-09-30 08:43:44 檢舉

啊...真是累了,程式碼跟文字說明寫反了,感謝您

我要留言

立即登入留言