civio / verba

Explora los Telediarios de RTVE desde 2014
https://verba.civio.es
GNU Affero General Public License v3.0
31 stars 5 forks source link

Probar la transcripción automática de audio #9

Open dcabo opened 5 years ago

dcabo commented 5 years ago

Estamos empezando a trabajar con el ejemplo de los Telediarios de RTVE, que vienen ya subtitulados, pero es interesante en cualquier caso probar los servicios que existen para transcribir audio, por varios motivos:

1) Algunos días no publican los subtítulos. En particular, hay varias semanas de julio de 2018 donde no lo hacen, no sé por qué.

2) Hay algunos errores, sobre todo cuando conectan con corresponsales. Podría ser que la transcripción automática fuera de mejor calidad, aunque en principio sería raro.

3) Lo de transcribir audio es algo útil para nuestros otros proyectos, así que ya que nos ponemos a trabajar con estas cosas...

dcabo commented 5 years ago

Hago una prueba siguiendo esto de Dan Nguyen. Primero instalo las cosas que dice, y uso aws configure para configurar AWS. Hay que elegir una "default region" para que la transcripción funcione, yo he elegido "eu-west-3" (París), y he creado un cubo para guardar estas pruebas.

Estoy usando -al azar- el Telediario de las 15h del día que Aznar va a declarar al Congreso por la Gürtel.

# extract the audio as a mp3 file
ffmpeg -i ../4743546.mp4 -acodec libmp3lame 4743546.mp3

# upload the mp3 file to a S3 bucket 
# (and optionally make it publicly readable)
aws s3 cp --acl public-read 4743546.mp3 s3://verba-test.civio.es/tmp/4743546.mp3 

# Start the transcription job and specify that the transcription result data be saved to a given bucket
# NOTE: es-ES not allowed. Not sure whether that's an issue
aws transcribe start-transcription-job \
    --language-code 'es-US' \
    --media-format 'mp3' \
    --transcription-job-name 'telediario' \
    --media '{"MediaFileUri": "s3://verba-test.civio.es/tmp/4743546.mp3"}' \
    --output-bucket-name 'verba-test.civio.es'

# optionally: use this to check the status of the job before attempting to download the transcript
aws transcribe get-transcription-job  \
        --transcription-job-name telediario

# Download the JSON at the expected S3 URL, parse it with jq and spit it out as raw text
curl -s https://s3.eu-west-3.amazonaws.com/verba-test.civio.es/telediario.json \
    | jq '.results.transcripts[0].transcript' --raw-output

El proceso tardó bastante, unos 25 minutos si entiendo bien los metadatos, y me encaja con lo que yo noté en directo. Cuesta, por cierto, 0.0004$ por segundo, o sea que una hora de telediario son 1.5$ o así.

dcabo commented 5 years ago

El resultado final es de muy buena calidad, excepto en algún nombres propio (e.g. "Gürtel"), que le confunden bastante. Se puede subir un diccionario personalizado, si quisiéramos. El JSON generado es extremadamente detallado: tiene timing ¡a nivel de palabra! Tampoco creo que eso sea la solución a la segmentación (#7), que en realidad debe operar a nivel semántico. Pero es curioso, y permitiría hacer cortes muy precisos. Ejemplo del principio:

José María Aznar ha negado una caja de en el PP y que conociera al cabecilla de la burdel, Francisco Correa. El ex presidente del Gobierno y el Partido Popular ha llegado a la comisión de Investigación sobre la presunta financiación ilegal de ese partido acompañado por la dirección y el nuevo líder. Y uno de los momentos más tensos se ha producido cuando preguntaba Pablo Iglesias

Ponerse a transcribir todo de nuevo no parece tener mucho sentido, y tiene un coste no despreciable (700 programas / año => ~1200$). Pero es interesante para uso interno.

dcabo commented 5 years ago

Por comparar con otras alternativas, Google Cloud, la versión gratuita, sin login (<1 minuto), es bastante patetero, solo mejora que pilla "Gürtel", pero pierde a Correa y la puntación no existe:

José María Aznar ha negado una caja de en el PP y que conociera el cabecilla de la Gürtel Franco corre al ex presidente del Gobierno del Partido Popular ha llegado a la comisión de investigación sobre la presunta financiación ilegal de ese partido acompañado por la dirección y el nuevo líder de uno de los momentos más tensos se ha producido cuando preguntaba Pablo Iglesias

Watson, de IBM, es de puto chiste:

Speaker 0: Cuál. Speaker 1: Pasarían a negado una caja en el space que conociera carecía de la urss el francisco correa el expresidente del gobierno del partido popular ha llegado a la comisión de investigación sobre la presunta financiación. Speaker 2: Ilegal de su partido acompañado por la dirección y el nuevo líder de uno de los momentos más tensos sea producido cuando preguntaba padres. Speaker 0: Creo que.

Quería probar alguna otra app comercial, pero me daba pereza andar registrándome. La única que me dejaba probar así de forma sencilla era Temi, aunque luego resulta que pedía el correo igualmente. Bah. El resultado era una mierda horrenda: no me han preguntado el idioma en ningún momento y claro, no daba una. Se supone que otros servicios comerciales son mejores (tengo notas de recomendaciones por ahí), pero por coste y modo de uso se salen del ámbito de Verba.

dcabo commented 5 years ago

La gente de AWS monta unas demos bastante flipantes, donde combinan un porrón de componentes para generar transcripciones y subtítulos en tiempo real en varios idiomas, todo sin usar servidores. Yo no necesito este tinglado, pero dejo aquí un par de demos por curiosidad: