El problema que resuelve
Quienes investigan la lengua hablada, la alternancia de código o los idiomas con pocos recursos tienen dificultades para encontrar suficientes datos naturales y conversacionales. Muchos vídeos no tienen subtítulos, y los que existen mezclan fuentes humanas y automáticas de calidad variable. Los equipos necesitan un proceso coherente que gestione muchos idiomas y registre de dónde procede cada transcripción.
Qué incluir en tu primera versión
- Detección de los idiomas de subtítulos disponibles en cada vídeo
- Reconocimiento de voz por IA en 99 idiomas para vídeos sin subtítulos
- Soporte de alternancia de código para el habla que mezcla idiomas
- Marcas de tiempo por palabra para la alineación
- Metadatos de idioma y origen de los subtítulos para cada transcripción
Cómo construirlo, paso a paso
- 01
Encuentra vídeos candidatos
Resuelve canales o listas de reproducción que se sabe que incluyen tus idiomas objetivo y llama a /transcripts/{video_id}/languages para ver qué pistas de subtítulos existen.
- 02
Usa los subtítulos cuando estén disponibles
Obtén los subtítulos manuales cuando existan, ya que suelen ser los más precisos.
- 03
Completa los huecos con reconocimiento de voz
Para los vídeos sin subtítulos, solicita ASR con el idioma indicado o detectado automáticamente, y activa codeSwitching para el habla que mezcla idiomas.
- 04
Guarda los datos de alineación
Solicita format.words para obtener marcas de tiempo por palabra y guarda el idioma y el origen de cada transcripción junto al texto.
Código de inicio
Esta idea se basa en el patrón "Receta 3: carga en bloque una lista de reproducción en una base de conocimiento". Usa tus propios canales, prompts y almacenamiento.
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 DBPor qué vale la pena construirlo
Los laboratorios y equipos de IA obtienen datos de evaluación e investigación en idiomas que de otro modo son caros de recopilar. Los conjuntos de datos limpios y bien documentados para idiomas o dominios concretos también tienen valor para quienes crean modelos.
Errores que debes evitar
- Dar por hecho que los subtítulos automáticos son la verdad de referencia: etiqueta las fuentes y valida una muestra a mano.
- Mezclar dialectos sin metadatos: registra el canal y la región para poder interpretar los resultados.
- Pasar por alto las licencias: revisa los términos de la plataforma y los derechos de autor antes de redistribuir cualquier conjunto de datos.
Preguntas sobre esta idea
¿Cuántos idiomas admite el reconocimiento de voz?
El reconocimiento de voz por IA admite 99 idiomas, con detección automática del idioma y alternancia de código opcional para el habla que mezcla idiomas.
¿Puedo obtener marcas de tiempo por palabra?
Sí. Solicita format.words para recibir los tiempos de cada palabra, lo que resulta útil para la alineación y la investigación fonética.
¿Puedo redistribuir un conjunto de datos creado a partir de YouTube?
Depende de los términos de YouTube, la legislación sobre derechos de autor y las políticas de tu institución. Muchos investigadores comparten los IDs de vídeo y el código en lugar de las propias transcripciones.