최근에는 유부브를 비롯하여 동영상 컨텐츠가 많이 활용되고 있다.
나 역시 동영상 강좌를 제작하는 경우가 있는데
자막을 넣어 달라는 요청을 받는 경우가 종종있다.
자막을 자동으로 넣어 주는 다양한 유료, 무료 프로그램이 많이 나와있지만
open ai 에서 제공하는 whisper 라는 것이 있어 활용해 보려고 한다.
Robust Speech Recognition via Large-Scale Weak Supervision
https://openai.com/research/whisper
인터넷에서 오디오의 대규모 스크립트를 예측하기 위해 단순히 훈련된 음성 처리 시스템의 기능을 연구합니다. 680,000시간의 다중 언어 및 다중 작업 감독으로 확장하면 생성된 모델은 표준 벤치마크에 잘 일반화되며 종종 이전의 완전히 감독된 결과와 경쟁하지만 미세 조정 없이 제로샷 전송 설정에서 수행됩니다. 인간과 비교할 때 모델은 정확도와 견고성에 접근합니다. 우리는 강력한 음성 처리에 대한 추가 작업의 기반으로 제공하기 위해 모델과 추론 코드를 출시하고 있습니다.
음성 인식 시스템(ASR)은 오디오를 텍스트로 변환하는 데 사용됩니다.
ASR 시스템은 일반적으로 오류를 범합니다.
이러한 오류는 모호한 발음, 지정 오류, 데이터 세트의 품질 등 다양한 요인으로 인해 발생할 수 있습니다.
Whisper는 680,000시간의 다중 언어 및 다중 작업 감독을 통해 훈련된 ASR 모델입니다.
Whisper는 이전의 ASR 모델보다 정확도가 높지만 여전히 오류를 범합니다.
Whisper의 성능을 인간의 성능과 비교하기 위해 연구원들은 Kincaid46 데이터 세트에서 25개의 녹음을 선택했습니다.
그들은 5개의 서비스에서 전문 녹음가를 사용하여 각 녹음의 텍스트를 생성했습니다.
이 서비스 중 하나는 컴퓨터 지원 녹음가였고 나머지 네 개는 순수하게 인간이었습니다.
연구원들은 각 녹음의 오류율(WER)과 전체 WER을 계산했습니다.
컴퓨터 지원 녹음가가 Whisper보다 1.15% 포인트 낮은 전체 WER을 가지고 있음을 발견했습니다.
순수한 인간의 성능은 Whisper보다 훨씬 적은 비율로만 더 나았습니다.
이 결과는 Whisper의 영어 ASR 성능이 완벽하지는 않지만
인간 수준의 정확도에 매우 가깝다는 것을 보여줍니다.
Python usage
Transcription can also be performed within Python:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
Internally, the transcribe() method reads the entire file and processes the audio with a sliding 30-second window, performing autoregressive sequence-to-sequence predictions on each window.
Below is an example usage of whisper.detect_language() and whisper.decode() which provide lower-level access to the model.
import whisper
model = whisper.load_model("base")
# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)
# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio).to(model.device)
# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")
# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
# print the recognized text
print(result.text)
이제 테스트를 한번 진행해 봅시다.