# 課程介紹與講師
* 課程主題:在 Python 中實作語音辨識,透過五個專案學習
* 講師:Patrick(軟體工程師)與 Lisa(資料科學家),皆為 AssemblyAI 開發者倡導者
* AssemblyAI:提供語音轉文字 API,課程使用其服務進行專案開發
# 課程五個專案
* 專案一:錄製音訊,從麥克風擷取聲音並儲存為 WAV 檔
* 專案二:使用 AssemblyAI API 對錄音檔執行語音辨識
* 專案三:分析 YouTube 上的 iPhone 評論情緒
* 專案四:摘要線上 Podcast 並建立網頁展示結果
* 專案五:結合語音辨識與 OpenAI API 製作問答應用
# 音訊格式基礎


* 常見格式:MP3(有損壓縮)、FLAC(無損壓縮)、WAV(未壓縮)
* WAV 優點:音質最佳、結構簡單、Python 內建 wave 模組可直接操作
# 音訊訊號參數

* channels:聲道數(1 為 mono,2 為 stereo)
* sample width:每個樣本的位元組數
* frame rate(sample rate):每秒取樣次數,CD 標準為 44.1 kHz
* number of frames:整段音訊的總取樣數
* 每個 frame 的值為二進位格式,可轉為整數
# 讀取與寫入 WAV 檔

* 使用 wave.open() 開啟檔案(讀取模式為 'rb')
* 可取得參數:nchannels、sampwidth、framerate、nframes
* 讀取音訊內容用 readframes(),結果為 bytes 物件
* 重新寫入檔案時設定相同參數,使用 writeframes() 寫入資料
# 視覺化音訊波形

* 使用 matplotlib 與 numpy 繪圖
* 將 bytes 轉為 numpy array,dtype 設為 int16
* 使用 linspace 生成時間軸,橫軸為時間、縱軸為音訊取樣值
* 可清楚看到聲音波形隨時間變化
# 麥克風錄音實作


* 使用 PyAudio 錄音,支援多平台(Linux、Windows、macOS)
* 重要參數:frames_per_buffer、format(int16)、channels、rate(如 16000 Hz)
* 透過 stream.read() 擷取音訊資料,儲存在 frames list 中
* 錄音完成後停止、關閉 stream 並終止 PyAudio
* 使用 wave 模組將 frames 寫入 WAV 檔
# 載入與操作 MP3 檔

* 使用 pydub 模組(需先安裝 ffmpeg)
* AudioSegment 物件可讀取 MP3 或 WAV
* 可調整音量(+6 dB)、重複片段、加入淡入淡出效果
* 匯出音檔時使用 export() 並指定格式
* 可再讀取匯出後的檔案驗證處理結果
# 第一部分內容總覽
* 認識音訊格式與關鍵參數
* 學會使用 wave 模組載入、儲存、複製音訊
* 能使用 matplotlib 繪製波形圖
* 實作麥克風錄音與輸出 WAV 檔
* 能使用 pydub 處理與輸出 MP3 音訊
* 為後續語音辨識與 API 專案建立基礎
---
# 專案目標與流程

* 將本地音訊檔上傳至 AssemblyAI,取得轉寫文字
* 四步驟:上傳檔案 → 發起轉寫 → 輪詢狀態 → 寫入文字檔
* 範例音檔:「hi i'm patrick this is a test123」,轉寫結果一致
# 主要依賴

* AssemblyAI API(取得並使用 API Key)
* Python `requests`(HTTP 通訊)
* Python 標準庫:`sys`(讀取命令列參數)、`time`(輪詢間隔)
# API 金鑰與設定
* 到 assemblyai.com 建立帳號並複製 API Key
* 建立設定檔存放 API Key
* 以 HTTP Header `Authorization: <API Key>` 驗證
# 端點與 HTTP 方法
* 上傳端點:`/v2/upload`,使用 `POST`
* 轉寫端點:`/v2/transcript`,使用 `POST`
* 輪詢端點:`/v2/transcript/{id}`,使用 `GET`
* 上傳採分塊讀取,建議每塊 5MB
# 命令列參數
* 以 `sys.argv[1]` 取得音訊檔名
* 由終端執行:`python main.py <檔名>`
# 上傳流程


* 以讀檔產生器分塊讀取音訊
* `POST /upload` 附帶 Header 與檔案資料
* 取得回傳的 `upload_url` 作為後續轉寫的 `audio_url`
# 發起轉寫


* `POST /transcript` 請求 JSON 內含 `audio_url`
* 立即回傳轉寫工作 `id`,非同步處理
# 輪詢結果

* 以 `GET /transcript/{id}` 查詢狀態
* 觀察 `status` 欄位:`processing`、`completed`、`error`
* 使用 `while True` 迴圈輪詢,未完成時 `time.sleep(30)` 再查詢
# 儲存轉寫

* 轉寫完成後從回應 `text` 取出全文
* 以原檔名加上 `.txt` 存檔
* 失敗時輸出錯誤內容以便除錯
# 函式化與重構
* `upload(file_name) → audio_url`
* `transcribe(audio_url) → job_id`
* `poll(transcript_id) → response_json`
* `get_transcription_result(audio_url) → (data, error)`
* `save_transcript(file_name, audio_url)` 將結果寫檔
* 將 API 溝通函式移至 `api_communication.py`,主程式僅負責流程調用
# 錯誤處理與訊息
* 狀態為 `error` 時回傳錯誤資訊
* 執行過程打印必要提示(如等待 30 秒)
# 補充資料
* 回應包含逐字詞的開始與結束時間(毫秒)與信心分數
* 可用於更進階功能(非本教學重點)
# 實測與結果
* 短音檔成功轉寫為「hi i'm patrick this is a test123」
* 較長的一分鐘音檔可正常轉寫但需較久時間
* 最終會生成同名 `.txt` 檔,內容為完整轉寫文字
---
# 專案目標

* 對 YouTube 影片做情緒分析,逐句產生文字與情緒標籤(positive、negative、neutral)
* 不下載整部影片,直接取得可存取的音訊 URL 後送至轉寫與情緒分析
* 輸出轉寫結果與情緒結果為檔案,供後續統計與展示
# 主要套件與服務

* youtube-dl:擷取 YouTube 影片資訊或媒體連結
* AssemblyAI:語音轉文字與情緒分析 API
* json:輸出與讀取結果檔
* 既有專案結構:api 機制(密鑰與 helper)、youtube_extractor、main
# YouTube 資訊與音訊 URL 取得


* 使用 YoutubeDL.extract_info(url, download=False) 取得影片或播放清單資訊
* 若為播放清單,選取 entries[0] 作為單一影片
* 從 result["formats"] 遍歷,篩選 ext == "m4a" 的純音訊格式並取其 url
* 取得之音訊 URL 為第三方托管位址,非 youtube.com
# 與 AssemblyAI 串接流程


* 以音訊 URL 呼叫轉寫 API,並在 JSON 請求中加入 sentiment_analysis=True
* 轉寫完成後,取得 transcript 與 sentiment 分析結果
* 儲存 transcript 檔與 sentiments 檔,檔名以影片標題整理(去空白、以底線取代空格),存入 data/ 目錄
# 檔案與命名約定
* 轉寫檔:以影片標題為名存於 data/,純文字或 JSON 皆可
* 情緒檔:同名加上 _sentiments.json,縮排便於閱讀
* 影片標題經 strip 與空白替換,避免檔名不合法
# Sentiment 結果資料結構(重點欄位)
* text:句子內容
* start、end:時間戳(秒或毫秒)
* sentiment:positive、neutral、negative
* confidence:分類信心度
# 基礎統計與評估
* 讀取 sentiments JSON,依 sentiment 分類收集句子
* 計算 positive、negative、neutral 各自數量
* 計算正向比率 = positives / (positives + negatives)
* 用於快速評估評論傾向與整體情緒概況
# 關鍵實作細節
* youtube-dl 僅抽取資訊不下載媒體(download=False)以節省時間與流量
* 轉寫與情緒分析為非同步雲端工作,須輪詢或封裝等待邏輯(由既有 api helper 處理)
* build 管線中建議將 API 金鑰與環境參數以 Secrets 管理(此專案已在 api helper 中使用)
# 產出與應用場景
* 產出逐句情緒與文字對應,適合評論摘要、品牌聲量監控、內容品質評估
* 可延伸至前端 Web App 視覺化呈現,支援搜尋、篩選、統計圖表
---
# 專案目標與成品

* 建立「Podcast 章節摘要」應用與網頁介面,來源音訊由 Listen Notes 取得,使用 AssemblyAI 產生自動章節與摘要,介面顯示封面、Podcast 與集數標題、章節清單與摘要
# 架構與依賴

* `api_communication.py` 負責 API 呼叫與工具函式
* `main.py` 負責流程控制與 Streamlit 介面
* 使用 `requests`、`json`、`streamlit`、`time`
* 需要 AssemblyAI API Key 與 Listen Notes API Key
# API 與端點
* AssemblyAI 轉寫:`/v2/transcript`
* AssemblyAI 查詢:`/v2/transcript/{id}`
* Listen Notes 集數:`/v2/episodes/{episode_id}`
* 認證 Header:AssemblyAI 使用 `Authorization`,Listen Notes 使用 `X-ListenAPI-Key`
# 取消上傳與資料取得改動
* 不使用 `/upload` 與分塊上傳,直接以遠端 `audio_url`
* 透過 `episode_id` 從 Listen Notes 取得 `audio`、`image`、`podcast.title`、`title`
# 後端流程
* 以 `episode_id` 取得 `audio_url` 與顯示資訊
* 呼叫 AssemblyAI 建立轉寫任務並設定 `auto_chapters: true`
* 每 60 秒輪詢 `transcript_id` 直到完成或錯誤
* 完成後寫入 `episode_id_chapters.json`
# 主要函式職責
* `get_episode_audio_url(episode_id)` 回傳 `audio_url`、`episode_thumbnail`、`podcast_title`、`episode_title`
* `transcribe(audio_url, auto_chapters=True)` 回傳 `job_id`
* `poll(transcript_id)` 回傳結果 JSON
* `get_transcription_result(audio_url, auto_chapters=True)` 回傳 `(data, error)`
* `save_transcript(episode_id)` 串接前述流程並存檔
# 儲存格式
* JSON 欄位含 `chapters`(每章節含 `start`、`end`、`gist`、`headline`、`summary`)、`episode_thumbnail`、`episode_title`、`podcast_title`
# Streamlit 介面
* `st.title("Podcast Summaries")` 顯示標題
* 側欄 `st.sidebar.text_input` 輸入 `episode_id`
* 側欄 `st.sidebar.button("Get Podcast Summary", on_click=save_transcript, args=(episode_id,))`
* 讀取 `episode_id_chapters.json` 後以 `st.header` 顯示 `{podcast_title} - {episode_title}` 並用 `st.image` 顯示縮圖
* 迭代 `chapters` 以 `st.expander` 顯示每章節的 `gist` 與 `summary`
# 時間格式處理
* 將毫秒 `start` 轉為 `HH:MM:SS` 或 `MM:SS`,有小時則顯示 `H:M:S`,無小時顯示 `M:S`
# 行為與等待設定
* 輪詢間隔 60 秒以適應較長音訊
* 僅在按鈕被點擊後觸發下載與顯示流程
# 錯誤與狀態
* 狀態為 `error` 時回傳錯誤訊息供介面顯示
* 執行過程僅輸出必要提示訊息
---
# 專案目標




* 在 Python 實作即時語音辨識
* 串接 OpenAI API 建立語音對話助理
* 使用 WebSockets 與 asyncio 實作雙向即時通訊
# 使用技術
* PyAudio:麥克風錄音
* websockets:WebSocket 客戶端
* asyncio:非同步事件迴圈
* AssemblyAI 實時 ASR(需升級帳號)
* OpenAI API:文字問答
* base64、json:音訊編碼與資料序列化
# 專案結構
* `api_secrets`:存放 AssemblyAI 與 OpenAI 金鑰
* `main.py`:錄音、WebSocket 傳輸、接收轉寫、呼叫聊天回覆
* `openai_helper.py`:封裝發問與回覆取得
# 即時語音辨識流程
* 以 PyAudio 開啟麥克風串流(如 16kHz、int16、mono)
* 連線 AssemblyAI WebSocket(URL 需帶 sample_rate 參數)
* 非同步同時執行「送音訊」與「收轉寫」
# WebSocket 連線重點
* 連線時附加授權標頭(Authorization)
* 設定 `ping_timeout` 與 `ping_interval`
* 連線後短暫 `asyncio.sleep(0.1)` 等待就緒
# 發送音訊邏輯
* 循環讀取 `frames_per_buffer` 的音訊塊
* 設 `exception_on_overflow=False` 避免溢位中斷
* 將音訊以 base64 編碼,包成 `{"audio_data": ...}` 的 JSON 傳送
* 傳送迴圈間以 `asyncio.sleep(...)` 節流
# 接收轉寫邏輯
* 持續接收 JSON,解析 `text` 與 `message_type`
* 僅在 `message_type == "final_transcript"` 時使用完整句子
* 於終端顯示「使用者:轉寫文字」
# 與 OpenAI 串接
* 在 helper 中設定 API key,實作發問函式
* 將最終轉寫文字作為 `prompt` 傳給 OpenAI
* 取得回覆文字並於終端顯示「機器人:回答」
# 執行流程
* `asyncio.run(send_receive())` 啟動
* `asyncio.gather(send(), receive())` 併行處理
* 使用者開口說話→ ASR 回傳文字→ 傳給 OpenAI→ 回覆顯示
# 錯誤處理重點
* 捕捉 `websockets.exceptions.ConnectionClosedError` 並終止迴圈
* 修正常見錯誤:`await asyncio.gather(...)` 不可遺漏
* base64、JSON 轉換失敗時應中斷當次資料並繼續循環
# 參數設定重點

* `rate=16000`、`format=int16`、`channels=1` 與 WebSocket `sample_rate` 一致
* `frames_per_buffer` 影響延遲與穩定度
* OpenAI `max_tokens` 控制回覆長度
# 成品行為
* 啟動程式後可直接對麥克風發問
* 於終端即時顯示辨識文字與聊天機器人回覆
* 支援連續對話與多輪問答
---
# Terminology
* 語音辨識(Speech Recognition):將人類語音轉換成文字的技術。
* 組合式人工智慧(Assembly AI):提供語音轉文字 API 的深度學習公司。
* 應用程式介面(API, Application Programming Interface):讓應用程式之間可互相溝通的介面。
* 音訊資料(Audio Data):以數位方式儲存的聲音訊號。
* 麥克風輸入(Microphone Input):從麥克風擷取的即時聲音資料。
* 波形音訊格式(WAV, Waveform Audio File Format):未壓縮的音訊檔案格式。
* MP3 格式(MP3, MPEG Audio Layer III):常見的有損壓縮音訊格式。
* FLAC 格式(FLAC, Free Lossless Audio Codec):無損壓縮音訊格式。
* 音訊取樣率(Sample Rate):每秒取樣的次數,單位為赫茲(Hz)。
* 取樣寬度(Sample Width):每個取樣點的位元組數,決定音質精度。
* 聲道數(Channels):音訊的獨立輸出通道數,如單聲道或立體聲。
* 音訊框架(Frame):音訊中包含取樣資料的最小單位。
* 位元深度(Bit Depth):描述每個取樣的位元數,影響音訊解析度。
* 音訊時長(Audio Duration):整個音訊檔案的時間長度。
* 二進位資料(Binary Data):以位元組形式儲存的音訊原始資料。
* Numpy 陣列(Numpy Array):Python 中用於處理數值與矩陣運算的結構。
* Matplotlib 圖表(Matplotlib Plot):Python 的繪圖套件,用於視覺化音訊訊號。
* 波形圖(Waveform Plot):顯示音訊隨時間變化的振幅曲線圖。
* PortAudio 函式庫(PortAudio Library):跨平台的音訊 I/O 函式庫。
* PyAudio 模組(PyAudio Module):Python 對 PortAudio 的封裝,用於錄音與播放。
* 緩衝框架(Frames per Buffer):每次錄音或播放處理的音訊資料塊大小。
* 資料流(Stream):連續傳送或接收音訊資料的通道。
* 輸入裝置(Input Device):如麥克風,用於擷取音訊訊號的硬體。
* 錄音物件(Recording Object):用來建立與管理錄音設定的 Python 物件。
* 結束錄音(Stop Stream):停止正在進行的錄音或播放流程。
* 終止 PortAudio(Terminate PortAudio):釋放音訊資源並關閉連線。
* 聲波取樣(Sound Sampling):將聲音連續波形轉換為離散數值的過程。
* 音訊轉換(Audio Conversion):不同格式間的轉換,例如 wav 轉 mp3。
* FFmpeg 工具(FFmpeg Tool):跨平台的多媒體轉換與處理工具。
* Pydub 函式庫(Pydub Library):簡化音訊讀取、編輯與輸出的 Python 套件。
* 音訊段(Audio Segment):Pydub 中表示音訊的基本物件。
* 音量調整(Volume Adjustment):對音訊音量進行分貝增減的操作。
* 淡入(Fade In):音訊在播放開始時逐漸增強音量的效果。
* 淡出(Fade Out):音訊結尾時逐漸減弱音量的效果。
* 重複播放(Audio Looping):將音訊片段重複多次以延長長度。
* 音訊匯出(Audio Export):將處理後的音訊儲存為新檔案。
* 音訊合併(Audio Merging):將多個音訊片段組合為單一音訊。
* 聲音波形(Sound Waveform):表示聲音振幅隨時間變化的圖像。
* 聲音取樣頻率(Sampling Frequency):單位時間內取樣的次數。
* 音訊振幅(Amplitude):音訊波形的強度或音量大小。
* 聲音時間軸(Time Axis):在波形圖上代表時間的橫軸。
* 聲音資料緩衝區(Audio Buffer):暫存音訊資料的記憶體區塊。
* 位元組串流(Byte Stream):以位元組形式連續傳送的音訊資料。
* 錄音秒數(Recording Duration):設定錄音要進行的時間長度。
* 音訊封包(Audio Packet):音訊傳輸中包含聲音資料的資料單位。
* 語音資料集(Speech Dataset):用於訓練或測試語音模型的音訊資料集合。
* 聲音可視化(Audio Visualization):將音訊訊號以圖形方式呈現。
* 語音文字轉換(Speech-to-Text, STT):將語音內容轉為文字的技術。
* 自然語言處理(Natural Language Processing, NLP):讓電腦理解與分析文字的技術。
* 情感分析(Sentiment Analysis):分析語音或文字情緒傾向的演算法。
* 播客摘要(Podcast Summarization):將長篇音訊內容自動生成簡短摘要。
* 問答應用(Q&A Application):能根據語音輸入回覆使用者問題的應用程式。
* 語音辨識(Speech Recognition):將人類語音內容轉為可處理的資料或文字
* 自動語音辨識(Automatic Speech Recognition):以演算法自動將語音轉成文字的技術
* 語音轉文字(Speech-to-Text):把音訊訊號解碼成可讀文字的過程
* 音訊取樣率(Sample Rate):每秒擷取的樣本數決定可表達的頻率上限
* 位元深度(Bit Depth):每個樣本的解析度影響動態範圍與雜訊底
* 單聲道(Mono):單一聲道音訊更利於語音模型處理
* 立體聲(Stereo):雙聲道音訊需先混成單聲道以簡化辨識
* 音訊編碼(Audio Codec):壓縮或封裝音訊資料的演算法與格式
* 容器格式(Container Format):封裝音訊與中繼資料的檔案外層格式
* WAV 格式(WAV):無壓縮脈衝編碼音訊適合高品質轉錄
* MP3 格式(MP3):有損壓縮格式體積小但可能影響辨識細節
* 上傳端點(Upload Endpoint):接收本地檔案上傳至服務的 API 路徑
* 轉錄端點(Transcription Endpoint):建立語音轉文字作業的 API 路徑
* API 權杖(API Token):用於服務端驗證請求者身份的機密字串
* REST 介面(REST API):以 HTTP 動詞與資源導向設計的網路服務
* HTTP 標頭(HTTP Headers):在請求與回應中傳遞授權與格式等中繼資訊
* JSON 載荷(JSON Payload):以 JSON 結構承載參數與結果的訊息內容
* POST 請求(POST Request):向伺服器提交資料或建立資源的操作
* GET 請求(GET Request):向伺服器讀取資源或查詢狀態的操作
* 分塊上傳(Chunked Upload):將大檔案切成固定大小片段逐步上傳
* 讀取串流(Stream Reading):邊讀邊傳避免一次載入整個檔案至記憶體
* 輪詢(Polling):定期查詢作業狀態直至完成或失敗
* 非同步任務(Asynchronous Job):在背景執行需一段時間才完成的處理
* 回應狀態碼(HTTP Status Code):以數字表示請求結果與錯誤類型
* 作業識別碼(Job ID):用於查詢特定轉錄作業狀態的唯一代號
* Webhook 回呼(Webhook Callback):作業完成時主動通知客戶端的回傳 URL
* 速率限制(Rate Limiting):限制單位時間內可發出的 API 請求數
* 指數退避(Exponential Backoff):重試時逐步拉長等待以降低壅塞
* 超時設定(Timeout):請求在逾時前等待回應的最長時間
* 重試機制(Retry Logic):在暫時性錯誤發生時自動重新嘗試請求
* 例外處理(Exception Handling):攔截並處理執行期間的錯誤狀況
* 語者分離(Speaker Diarization):將轉錄文字依不同說話者標註區分
* 語言偵測(Language Detection):自動判斷音訊所使用的語言
* 時間戳(Timestamps):標註每個字或詞在音訊中的起訖時間
* 逐字稿(Transcript):完成轉錄後的文字內容總表
* 信心分數(Confidence Score):模型對輸出文字正確性的機率估計
* 關鍵詞加權(Keyword Boosting):對特定詞彙提高辨識優先度
* 標點還原(Punctuation Restoration):自動為轉錄文字加入標點符號
* 大小寫正規化(Truecasing):為轉錄結果恢復正確大小寫
* 語音活動偵測(Voice Activity Detection, VAD):偵測語音片段以過濾靜音
* 噪音抑制(Noise Suppression):降低背景雜訊以提升辨識品質
* 自訂詞彙(Custom Vocabulary):加入專有名詞以改善辨識率
* 延遲(Latency):從送出請求到收到結果所花的時間
* 音訊分段(Audio Chunk):上傳或處理時分割的固定大小音訊片段
* 檔案輸入輸出(File I/O):讀寫本地檔案系統的操作
* 命令列參數(Command-line Arguments, CLI):從終端機傳入的程式參數
* 環境變數(Environment Variables):以系統變數存放密鑰與設定
* 設定檔(Configuration File):集中保存 API 金鑰與參數的檔案
* 絕對路徑(Absolute Path):自根目錄起的完整檔案位置標示
* 文字檔輸出(Text File Output):將轉錄結果寫入 .txt 檔以供後續使用
* 情感分析(Sentiment Analysis):分析文字或語音內容情緒傾向(正面、負面或中性)的技術。
* YouTube DL 套件(YouTube-DL Package):可用於下載 YouTube 影片或提取影音資訊的 Python 工具。
* 音訊網址(Audio URL):影片中音訊檔的直接連結,用於後續語音辨識或情感分析。
* JSON 格式(JSON Format):以鍵值對形式儲存結構化資料的輕量化資料格式。
* 字典(Dictionary):Python 中以鍵值組織資料的結構,用於儲存 YouTube DL 回傳結果。
* 播放清單(Playlist):包含多個影片項目的 YouTube 集合型內容。
* M4A 格式(M4A Format):一種常用的 MPEG-4 音訊格式,支援高音質壓縮。
* Assembly AI 語音轉文字(Assembly AI Speech-to-Text):將語音內容轉換成文字的雲端 API。
* Assembly AI 情感分析(Assembly AI Sentiment Analysis):針對轉錄文字判斷句子情緒的功能。
* 轉錄(Transcription):將語音資料轉換為文字紀錄的過程。
* 音訊智慧(Audio Intelligence):Assembly AI 提供的進階音訊分析功能集合。
* 自動摘要(Auto Summarization):從長篇內容自動提取重點的技術。
* 主題偵測(Topic Detection):分析語音內容以辨識主題類別的功能。
* 自動章節(Auto Chapters):自動分割語音或影片內容為主題段落的功能。
* API 端點(API Endpoint):API 伺服器上用於接收請求的特定路徑。
* JSON 請求體(JSON Payload):在 HTTP POST 請求中傳送的 JSON 格式資料。
* 情感分類結果(Sentiment Classification Results):每句轉錄文字的情緒判定輸出。
* 信心分數(Confidence Score):模型對情感預測準確性的信心水準。
* 正面情緒(Positive Sentiment):顯示積極或滿意情感的語句。
* 負面情緒(Negative Sentiment):顯示批評或不滿情感的語句。
* 中性情緒(Neutral Sentiment):不表現明顯情感傾向的語句。
* YouTube 影片資訊(YouTube Video Info):由 YouTube DL 取得的影片資料,如標題、格式與 URL。
* 格式清單(Formats List):影片不同解析度或音訊格式的描述集合。
* 上下文管理器(Context Manager):Python 語法結構,用於安全開啟與關閉資源。
* API 憑證(API Credentials):授權應用程式使用 API 的金鑰或認證。
* 標題正規化(Title Normalization):去除空白與特殊符號以建立安全檔名的過程。
* 檔案輸出(File Output):將分析結果寫入本機或資料夾的動作。
* JSON 輸出檔(JSON Output File):包含每句文字與情感標籤的分析結果檔案。
* 檔案縮排(JSON Indent):在 JSON 輸出中設定排版層級以便閱讀。
* Sentiment Analysis Key:Assembly AI 回傳 JSON 結果中的「sentiment_analysis_results」欄位。
* URL 參數(URL Parameter):在 API 呼叫中用於指定目標或行為的參數。
* 音訊轉錄端點(Transcribe Endpoint):Assembly AI 用於提交音訊檔進行文字轉換的 API 路徑。
* HTTP 請求(HTTP Request):與 API 溝通以傳遞或接收資料的標準通訊格式。
* 資料處理流程(Data Pipeline):從下載、轉錄到分析的自動化資料處理步驟。
* 正負面比率(Positive Ratio):正面句子數量與總情感句子數量的比值。
* 自動化分析(Automated Analysis):不需人工干預的情感與內容分析流程。
* Python 模組化(Python Modularization):將功能拆分為多個檔案(如 API.py、main.py)的結構化方法。
* 檔案目錄(Data Folder):用於儲存結果輸出與中間資料的專案資料夾。
* 主程式檢查(Main Check):`if __name__ == "__main__":` 判斷程式進入點的標準寫法。
* 例外處理(Error Handling):防止下載、轉錄或分析過程中斷的錯誤控制。
* YouTube 影片標題(YouTube Video Title):自動作為輸出檔名與分析識別用的標籤。
* 影片評論分析(Video Review Analysis):針對產品或主題評論影片的情緒總結。
* API 功能標誌(Feature Flag):用布林值開關決定是否啟用特定 API 功能。
* JSON Dump:Python 將資料結構輸出為 JSON 格式文字的函式。
* 自動語音情感分析(Automated Speech Sentiment Analysis):將語音內容自動化轉錄與情感分類的流程。
* 播客摘要(Podcast Summarization):將整段節目濃縮為重點與結論
* 章節化(Auto Chapters):自動切分音訊為主題段落並產出標題
* 節目集 ID(Episode ID):標識單一播客集數的唯一代碼
* 收聽筆記 API(Listen Notes API):查詢播客節目與音訊連結的服務介面
* 音訊網址(Audio URL):可直接串流或下載之節目音訊位置
* 轉錄(Transcription):將音訊內容轉成文字的處理流程
* 摘要生成(Text Summarization):將長文壓縮為較短且保留關鍵資訊的文本
* 關鍵句抽取(Extractive Summarization):挑選原文句子組成摘要的方法
* 精煉生成(Abstractive Summarization):以新句子概括原文語意的方法
* 主題偵測(Topic Detection):辨識段落主題以輔助章節切分
* 章節摘要(Chapter Summary):對每個章節的簡要說明
* 章節標題(Chapter Headline):概括章節主旨的短語
* 起訖時間戳(Start/End Timestamps):章節在音訊中開始與結束的毫秒位置
* 語音辨識 API(Speech Recognition API):提供語音轉文字雲端服務的介面
* AssemblyAI:提供轉錄、章節化與摘要等語音 AI 功能的雲端平台
* 請求標頭(Request Headers):HTTP 請求中攜帶授權與格式的中繼資訊
* API 金鑰(API Key):授權第三方服務存取的機密字串
* 速率限制(Rate Limit):單位時間可發送請求數的上限
* 分頁參數(Pagination):分批取得大型查詢結果的協定
* JSON 結構(JSON Schema):定義資料欄位與型別的結構描述
* POST 方法(HTTP POST):用於建立資源或傳送資料的請求動詞
* GET 方法(HTTP GET):用於讀取資源或查詢狀態的請求動詞
* 回應狀態碼(HTTP Status Code):以數字表示請求結果的標準
* 重試機制(Retry Logic):失敗時依策略再次呼叫 API 的流程
* 指數退避(Exponential Backoff):逐次增加重試等待時間的策略
* 超時控制(Timeout):請求等待回應的最長時限設定
* 端點(Endpoint):服務對外提供的特定功能 URL
* 音訊串流(Audio Streaming):連線即時傳送音訊資料的方式
* 語音活動偵測(VAD):偵測語音區段以忽略靜音或噪音
* 噪音抑制(Noise Suppression):降低背景噪音提升轉錄品質
* 語言偵測(Language Detection):自動判斷音訊語言類別
* 自訂詞彙(Custom Vocabulary):加入專有名詞提升辨識準確率
* 置信度分數(Confidence Score):模型對輸出正確性的機率評估
* 內容過濾(Content Filtering):偵測並標示露骨或敏感內容
* 斷詞與標點(Tokenization & Punctuation):復原標點與正確分詞
* 文字正規化(Text Normalization):統一大小寫、數字與符號格式
* 關鍵詞加權(Keyword Boosting):對重要詞彙提高辨識與摘要權重
* 章節粒度(Chapter Granularity):章節切分的細緻程度設定
* 主旨萃取(Key Point Extraction):擷取章節或節目的核心要點
* 摘要長度控制(Summary Length Control):限制輸出字數或句數
* 前端框架(Frontend Framework):建構使用者介面的程式庫或工具
* Streamlit:以 Python 快速建立互動式網頁介面的框架
* 側邊欄(Sidebar):放置表單輸入與操作按鈕的側邊 UI 區域
* 展開面板(Expander):可收合內容區塊以節省版面
* 圖片元件(Image Widget):在頁面上顯示節目縮圖的 UI 元件
* 命令列參數(CLI Arguments):從終端機傳入腳本的參數值
* 設定檔管理(Config Management):集中保存金鑰與環境設定
* 環境變數(Environment Variables):以系統層級保存機密與參數
* 序列化與反序列化(Serialization/Deserialization):物件與 JSON 之間的轉換
* 日誌記錄(Logging):於執行期間記錄事件與錯誤以便除錯
* 例外處理(Exception Handling):攔截與處理執行錯誤確保程式穩定
* 即時語音辨識(Real-Time Speech Recognition):在使用者說話時即時轉換語音為文字的技術。
* 組合式人工智慧即時 API(Assembly AI Real-Time API):透過 WebSocket 提供即時語音辨識服務的 API。
* WebSocket:用於在客戶端與伺服器之間建立雙向持續連線的通訊協定。
* AsyncIO:Python 的非同步 I/O 標準庫,用於同時執行多個協程以提高效能。
* 協程(Coroutine):可暫停與恢復執行的輕量級非同步函數。
* PiAudio:用於錄製與播放音訊的 Python 函式庫,封裝 PortAudio。
* PortAudio:跨平台音訊輸入輸出的底層函式庫。
* Base64 編碼(Base64 Encoding):將二進位音訊資料轉換為文字格式以便於傳輸。
* JSON 格式(JSON Format):以鍵值結構傳輸資料的標準格式。
* WebSocket URL:指定即時 API 的連線端點與參數(如取樣率)。
* 音訊取樣率(Sample Rate):每秒擷取的音訊樣本數,影響音質與延遲。
* 非同步上下文管理器(Async Context Manager):在非同步程式中安全開啟與關閉連線的控制結構。
* Ping Interval:WebSocket 保持連線的心跳時間間隔。
* Ping Timeout:當伺服器未回應時自動中斷的等待時間。
* 授權標頭(Authorization Header):傳送 API 金鑰以驗證請求的 HTTP 標頭。
* 聲音串流(Audio Stream):從麥克風連續讀取音訊資料的資料流。
* Overflow(緩衝區溢出):當音訊處理速度低於輸入速度時導致的資料丟失情況。
* Base64 編碼後傳輸(Base64 Transmission):API 要求以文字形式傳送音訊資料時使用的編碼方式。
* 音訊 JSON 封包(Audio JSON Packet):包含音訊資料的 JSON 格式訊息,鍵名通常為 "audio_data"。
* 結束碼(Exit Code):表示連線中止原因或錯誤狀態的代碼。
* 結果接收函式(Receive Function):負責接收並解析 API 回傳轉錄結果的非同步函式。
* 最終轉錄(Final Transcript):API 確認完整句子的最終辨識結果。
* 臨時轉錄(Partial Transcript):在說話過程中即時更新的暫時辨識文字。
* 提示文字(Prompt):用於傳遞給語言模型的輸入句子。
* 虛擬助理(Virtual Assistant):能即時聽懂語音並生成回答的互動系統。
* OpenAI API:提供 GPT-3 等模型的自然語言生成與理解能力的雲端介面。
* GPT-3 模型(Generative Pre-trained Transformer 3):OpenAI 的自然語言生成模型。
* 問答引擎(Q&A Engine):根據使用者輸入回覆文字答案的模型模式。
* API 金鑰(API Key):授權應用程式呼叫雲端 API 的密鑰。
* OpenAI Python 套件(OpenAI Python Package):操作 OpenAI API 的官方 Python 函式庫。
* 完成端點(Completion Endpoint):OpenAI API 用於生成文字的主要端點。
* Max Tokens:控制模型回覆長度的參數,限制生成文字的字數。
* 響應字典(Response Dictionary):API 回傳的 JSON 資料結構,在 Python 中為字典。
* Choices 鍵(Choices Key):包含一個或多個模型回覆選項的 JSON 鍵。
* Text 鍵(Text Key):模型生成文字內容的實際欄位。
* 啟動主程式(Main Execution Block):`if __name__ == "__main__":` 判斷 Python 執行起點的語句。
* 問答助手函式(Ask Computer Function):封裝向 GPT-3 傳送提示並回傳答案的自定義函式。
* 結合模組(Module Integration):將語音辨識、WebSocket、與 GPT-3 功能整合的過程。
* 聲控聊天機器人(Voice-Activated Chatbot):能即時聽取語音、辨識文字並生成回覆的應用。
* 事件循環(Event Loop):AsyncIO 負責排程與執行協程的核心機制。
* 例外捕捉(Exception Handling):防止連線錯誤或中斷導致程式崩潰的機制。
* 音訊封包頻率(Audio Packet Rate):決定每秒傳送幾次音訊資料的速率。
* 即時互動(Real-Time Interaction):系統與使用者在毫秒級內回應的操作模式。
* 語音驅動介面(Voice Interface):使用語音作為主要互動方式的應用介面。
* 非同步執行(Asynchronous Execution):允許多個任務同時進行而不阻塞主程式的設計。
* 虛擬助理回覆(Assistant Response):由語言模型生成並回傳給使用者的回答內容。
* 程式模組化(Program Modularization):將錄音、傳輸與對話邏輯分離以提高可維護性。