Il problema che risolve
Chi studia la lingua parlata, il code-switching o le lingue a basse risorse fatica a trovare abbastanza dati naturali e colloquiali. Molti video non hanno sottotitoli, e quelli esistenti mescolano fonti umane e automatiche di qualità variabile. I team hanno bisogno di una pipeline coerente che gestisca molte lingue e registri la provenienza di ogni trascrizione.
Cosa includere nella prima versione
- Rilevamento delle lingue di sottotitoli disponibili per ogni video
- Riconoscimento vocale AI in 99 lingue per i video senza sottotitoli
- Supporto al code-switching per il parlato che mescola più lingue
- Timestamp a livello di parola per l'allineamento
- Metadati su lingua e fonte dei sottotitoli per ogni trascrizione
Come realizzarla, passo dopo passo
- 01
Trova i video candidati
Risolvi canali o playlist noti per contenere le lingue che ti interessano e chiama /transcripts/{video_id}/languages per vedere quali tracce di sottotitoli esistono.
- 02
Usa i sottotitoli quando disponibili
Recupera i sottotitoli manuali quando esistono, perché di solito sono i più accurati.
- 03
Colma le lacune con il riconoscimento vocale
Per i video senza sottotitoli, richiedi l'ASR con la lingua impostata o rilevata automaticamente e attiva codeSwitching per il parlato in più lingue.
- 04
Archivia con i dati di allineamento
Richiedi format.words per i timestamp a livello di parola e salva lingua e fonte di ogni trascrizione insieme al testo.
Codice di partenza
Questa idea si basa sullo schema "Ricetta 3: carica in blocco una playlist in una knowledge base". Sostituisci canali, prompt e storage con i tuoi.
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 DBPerché vale la pena realizzarla
Laboratori e team AI ottengono dati di valutazione e di ricerca in lingue che altrimenti sarebbero costose da raccogliere. Dataset puliti e ben documentati per lingue o domini specifici sono preziosi anche per chi sviluppa modelli.
Errori da evitare
- Considerare i sottotitoli automatici come verità di riferimento: etichetta le fonti e convalida manualmente un campione.
- Mescolare dialetti senza metadati: registra canale e regione per poter interpretare i risultati.
- Trascurare le licenze: verifica i termini della piattaforma e il diritto d'autore prima di ridistribuire qualsiasi dataset.
Domande su questa idea
Quante lingue supporta il riconoscimento vocale?
Il riconoscimento vocale AI supporta 99 lingue, con rilevamento automatico della lingua e code-switching opzionale per il parlato in più lingue.
Posso ottenere timestamp a livello di parola?
Sì. Richiedi format.words per ricevere i tempi di ogni parola, utili per l'allineamento e la ricerca fonetica.
Posso ridistribuire un dataset creato da YouTube?
Dipende dai termini di YouTube, dalla normativa sul diritto d'autore e dalle policy del tuo ateneo. Molti ricercatori condividono gli ID video e il codice invece delle trascrizioni stesse.