Какую проблему решает
Исследователям устной речи, переключения кодов или малоресурсных языков трудно найти достаточно естественных разговорных данных. У многих видео нет субтитров, а существующие смешивают человеческие и автоматические источники разного качества. Командам нужен единый конвейер, который работает со многими языками и фиксирует происхождение каждой расшифровки.
Что включить в первую версию
- Определение доступных языков субтитров для каждого видео
- AI-распознавание речи на 99 языках для видео без субтитров
- Поддержка переключения кодов для речи на смеси языков
- Таймкоды на уровне слов для выравнивания
- Метаданные о языке и источнике субтитров для каждой расшифровки
Как создать: пошагово
- 01
Найдите подходящие видео
Получите списки видео каналов или плейлистов, где звучат ваши целевые языки, и вызовите /transcripts/{video_id}/languages, чтобы увидеть доступные дорожки субтитров.
- 02
Используйте субтитры, где они есть
Получайте ручные субтитры там, где они есть, — обычно они самые точные.
- 03
Заполните пробелы распознаванием речи
Для видео без субтитров запрашивайте ASR с заданным или автоматически определяемым языком и включайте codeSwitching для речи на смеси языков.
- 04
Храните с данными выравнивания
Запрашивайте format.words для таймкодов на уровне слов и сохраняйте язык и источник каждой расшифровки вместе с текстом.
Стартовый код
Эта идея построена на шаблоне «Рецепт 3: массовая загрузка плейлиста в базу знаний». Подставьте свои каналы, промпты и хранилище.
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
"limit": 100}).json()
ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
"video_ids": ids,
"format": {"timestamp": True, "paragraphs": True},
}).json()
# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
if r["status"] == "completed":
for p in r["data"]["transcript"].get("paragraphs") or []:
store(video_id=r["video_id"], start=p["start"], text=p["text"]) # your vector DBПочему это стоит создать
Лаборатории и AI-команды получают данные для оценки и исследований на языках, сбор которых иначе обходится дорого. Чистые, хорошо задокументированные датасеты для конкретных языков или областей также ценны для разработчиков моделей.
Каких ошибок избегать
- Считать автоматические субтитры эталоном: помечайте источники и вручную проверяйте выборку.
- Смешивать диалекты без метаданных: фиксируйте канал и регион, чтобы результаты можно было интерпретировать.
- Забывать о лицензиях: перед распространением любого датасета проверьте правила платформы и авторское право.
Вопросы об этой идее
Сколько языков поддерживает распознавание речи?
AI-распознавание речи поддерживает 99 языков с автоматическим определением языка и опциональным переключением кодов для речи на смеси языков.
Можно ли получить таймкоды на уровне слов?
Да. Запросите format.words, чтобы получить тайминг каждого слова, — это полезно для выравнивания и фонетических исследований.
Можно ли распространять датасет, собранный с YouTube?
Это зависит от условий YouTube, авторского права и правил вашего учреждения. Многие исследователи публикуют ID видео и код, а не сами расшифровки.