

# 從搜尋結果建立 YouTube 逐字稿語料庫

要建立 YouTube 逐字稿語料庫，你必須先訂定研究規則，透過搜尋查詢找出不重複的影片 ID，並為每條選定影片核對相應的字幕結果或失敗記錄。Actor 是託管在平台上、用來收集資料的程式。Task 是已儲存的輸入預設設定。語料庫是你最終整理的來源集合。尋找影片和擷取字幕是分開的步驟。搜尋結果不是逐字稿，缺少字幕也不代表缺少相關主題的內容。

## 收集設定

你會使用 [YouTube Search Actor](https://apify.com/chronometrica/youtube-search-scraper) 尋找影片，並使用 [YouTube Transcript Actor](https://apify.com/chronometrica/youtube-transcript-scraper) 取得字幕。公開 Task [YouTube Video URLs for Transcript Workflows](https://apify.com/chronometrica/youtube-search-scraper/examples/youtube-video-urls-for-transcripts) 的預設設定包含 2 個通用查詢，以及 `maxResults: 100`、`resultsPerQuery: 50`、`maxPagesPerQuery: 1`、`searchDistribution: "balanced"`、`includeShorts: true`、`enableQueryExpansion: false`、`enrichWithVideoMetrics: false`、`enrichMissingChannelFields: true` 和 `maxChannelEnrichmentRequests: 100`。

進行小規模試驗檢查時，將輸入改為 1 個相關查詢，設定 `maxResults: 2`、`resultsPerQuery: 2`、`maxPagesPerQuery: 1`，並停用可選的頻道資料補充功能（`enrichMissingChannelFields: false`）、查詢擴展及指標收集。`maxResults` 參數是整次執行共用的上限，`resultsPerQuery` 則限制每個獨立搜尋的結果數量。

搜尋輸出會傳回以下確切欄位：`rootQuery`、`query`、`querySource`、`postId`、`postUrl`、`postType`、`isShort`、`title`、`description`、`channelId`、`channelUrl`、`publishedAt`、`status`、`statusReason` 和 `observedAt`。不明的發佈日期應保持不明；不要根據搜尋結果的位置編造日期。已檢查的 2 條候選影片對照測試，是因為達到 `max_items_reached` 而停止，並非因為已涵蓋整個主題。

要收集字幕，請將影片的直接網址傳入 Transcript Actor 的 `startUrls`。設定你的 `preferredLanguages` 語言規則，選用 `outputFormats=["json"]`，並在需要失敗詳情時設定 `includeFailedInputDetails=true`。輸出會傳回以下確切鍵名：`videoId`、`videoUrl`、`transcriptLanguageCode`、`isAutoGenerated`、`segments`、`status` 和 `scrapedAt`，另加 OUTPUT 中的輸入失敗記錄。將搜尋找到的 1 個確切網址傳入 Transcript Actor 後，結果中的 `videoId`，以及英文人工字幕的身分、語言和時間資訊均相符。這項流程檢查僅限於 1 條影片，不能用來衡量整個主題的字幕可用情況。字幕取得功能只處理公開字幕軌的可用情況；它不會產生音訊，也不會翻譯無法取得的字幕軌。每條成功處理的影片會產生 1 筆資料集記錄，但每項選定的輸入仍須在記錄表中列明結果。

## 8 個操作步驟

1. 訂定研究規則：搜尋前，先寫下研究問題、語言規則、日期相關性規則，以及納入或排除規則。明確指出影片必須解釋甚麼內容才有用。不要以觀看次數代替相關性判斷。
2. 執行一小組相關查詢：建立一小組查詢，涵蓋問題的不同部分。先從 1 個查詢及 2 條候選影片開始。儲存輸入、觀察時間、限制和輸出。在確認查詢擴展的需要及運作方式之前，保持停用這項功能。
3. 挑選實際來源：選定影片前，先檢視標題、描述及可取得的影片來源。記錄每條影片是已選定、已排除還是待定，並列明原因。單憑標題，不能證明影片確實涵蓋你的問題。缺少的發佈日期應保持不明；不要僅因影片排名較前，就將它標示為近期影片。
4. 統一影片識別資料：按確切的影片身分統一整理資料，並保留查詢及來源證據。同一條影片在搜尋中多次出現，不代表有多條不同影片。不同剪輯版本或不同上載版本應保留為獨立來源 ID，除非研究規則有充分理由將它們歸為一組。
5. 分批收集字幕：將選定影片的直接網址以小批次交給 Transcript Actor。沿用已選定的語言規則，並檢查輸出中的失敗記錄。字幕取得功能處理的是公開字幕軌的可用情況；它不會產生音訊，也不會翻譯無法取得的字幕軌。
6. 建立字幕記錄表：為每條選定影片建立記錄。記錄選定的 ID、發現來源、狀態、字幕結果的識別資料、語言、字幕時間資訊、失敗類別或待處理原因。根據輸出逐一核對選定的 ID，將結果列為成功、失敗、尚未嘗試或尚未釐清。只計算資料集中成功記錄的數量，會掩蓋沒有產生記錄的輸入。
7. 檢視品質和涵蓋範圍：按研究需要檢視字幕軌及來源品質。在字幕旁保留自動產生或人工製作的狀態，以及語言資料。判斷能否在不改變研究問題的情況下，排除無法取得字幕或字幕結果不相符的影片。應報告這項篩選限制，不要在未說明的情況下刪去影片。
8. 交付最終成果：交付影片篩選表、字幕記錄表，以及納入來源集合的定義。完成後才使用後續分析方法。這個範圍有限的集合，不能支持任何關於具代表性的母體、主題需求或完整頻道涵蓋情況的主張。

## 虛構語料庫的逐步示例

本例中的所有 ID、文字、來源和狀態均屬虛構。2 批查詢共產生 8 次候選影片出現記錄，涉及 6 個不重複的影片 ID。查詢 1 找到影片 V1、V2、V3 和 V4。查詢 2 找到影片 V2、V4、V5 和 V6。將這 8 次出現記錄核對整理為 6 個不重複的 ID。為 V2 和 V4 保留 2 個查詢來源，供讀者參考。

審核是否納入時，選定明確涵蓋研究問題的 V1、V2、V4 和 V5。排除 V3，因為它只是一則廣告。V6 的內容及日期背景尚未核實，因此維持待定。4 條選定影片進入字幕收集步驟。

字幕結果顯示，V1 成功取得英文人工字幕軌，V2 成功取得英文自動字幕軌，V4 的失敗類別為所需語言無法取得，V5 則因來源存取失敗而無法取得字幕。字幕資料集有 2 筆成功記錄，而記錄表涵蓋全部 4 個選定 ID。4 條選定影片中，2 條成功，2 條失敗。V6 仍待決定是否選用，從未被選定，也未嘗試收集字幕，因此不屬於字幕處理失敗的輸入。

最終來源語料庫包含 V1 和 V2，並保留人工字幕與自動字幕之間的差別。它只能回答這些影片所支持的部分。只有 V4 和 V5 涵蓋的問題仍未獲解答，或必須另找符合資格的來源。不要把這個結果視為字詞準確率、該細分主題所有影片的字幕涵蓋率，或公開字幕可用率。它只是這個虛構例子中，選定輸入的成功數量。

第 1 個表格列出 6 條不重複影片的篩選記錄。

| 影片 ID | 發現來源 | 納入狀態 | 原因或備註 |
| --- | --- | --- | --- |
| V1 | 查詢 1 | 已選定 | 清楚解釋核心主題 |
| V2 | 查詢 1、查詢 2 | 已選定 | 涵蓋問題的第 2 部分（各查詢中的出現記錄供讀者參考） |
| V3 | 查詢 1 | 已排除 | 只是一則廣告 |
| V4 | 查詢 1、查詢 2 | 已選定 | 涵蓋主題的第 3 部分 |
| V5 | 查詢 2 | 已選定 | 涵蓋主題的第 4 部分 |
| V6 | 查詢 2 | 待定 | 內容及日期背景尚未核實 |

第 2 個表格列出 4 筆字幕收集嘗試記錄。

| 選定 ID | 發現來源 | 字幕狀態 | 語言 | 失敗類別或原因 |
| --- | --- | --- | --- | --- |
| V1 | 查詢 1 | 成功 | 英文 | 已收集人工字幕軌 |
| V2 | 查詢 1、查詢 2 | 成功 | 英文 | 已收集自動字幕軌 |
| V4 | 查詢 1、查詢 2 | 失敗 | 無 | 已分類：所需語言無法取得 |
| V5 | 查詢 2 | 失敗 | 無 | 來源存取失敗 |

第 3 個表格列出 2 筆已納入的字幕來源記錄。

| 已納入 ID | 字幕狀態 | 語言 | 使用範圍 |
| --- | --- | --- | --- |
| V1 | 成功 | 英文（人工） | 回答核心主題部分 |
| V2 | 成功 | 英文（自動） | 回答主題的第 2 部分 |

## 下一步

開啟 [YouTube Search Actor](https://apify.com/chronometrica/youtube-search-scraper)，測試你的第 1 次搜尋，然後檢視已儲存的 [YouTube Video URLs for Transcript Workflows Task](https://apify.com/chronometrica/youtube-search-scraper/examples/youtube-video-urls-for-transcripts)，透過逐字稿 Actor 逐一核對每條選定影片的處理結果，再[為其建立索引](/zh-Hant/articles/youtube-%E9%80%90%E5%AD%97%E7%A8%BF-rag-%E5%88%86%E6%AE%B5%E8%88%87%E4%BE%86%E6%BA%90%E6%99%82%E9%96%93%E6%A8%99%E8%A8%98/)。

## 來源與延伸閱讀

- [YouTube Search Actor](https://apify.com/chronometrica/youtube-search-scraper)
- [YouTube Transcript Actor](https://apify.com/chronometrica/youtube-transcript-scraper)
- [字幕取得指南](https://chronometrica.com/zh-Hant/articles/%E5%8F%96%E5%BE%97-youtube-%E9%80%90%E5%AD%97%E7%A8%BF-%E6%AA%A2%E6%9F%A5%E7%BC%BA%E5%B0%91%E5%AD%97%E5%B9%95/)
- [Reddit RAG 討論](https://www.reddit.com/r/Rag/comments/1rm7cxi/experiment_turning_youtube_channels_into_ragready/)