ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Transformers] 음성 텍스트 변환 모델 whisper 알아보기 (Automatic Speech Recognition)
    Python/음성처리 2024. 5. 9. 14:26
    반응형

    음성 텍스트 변환 모델 알아보기 (Automatic Speech Recognition)


    딥러닝 기술 중 상업적으로 자주 사용되는 모델은 대표적으로 음성 인식 모델을 꼽을 수 있습니다. 음성 인식 모델, 혹은 음성 텍스트 변환 모델이라고 부르는 Automatic Speech Recognition(ASR)은 옛날에는 Speech to Text라는 이름으로 알려졌던 모델입니다. 이 모델은 우리가 일상생활에서 말하는 ARS, 홈쇼핑 전화의 주소 인식 모델, 장애인을 위한 자동 자막 생성 기술 등 여러 분야에서 이미 활용되고 있지요. 이번에는 OpenAI에서 제작한 whisper 모델을 활용해 파이썬으로 음성 텍스트 변환 프로그램을 구현해 보도록 하겠습니다.

     

     

    OpenAI whisper


    whisper 모델은 대표적인 ASR 모델입니다. 영어뿐만 아니라 다양한 언어를 지원하며, 인식 성능도 상당한 수준이기 때문에 손쉽게 자연어 처리를 할 수 있다는 장점이 있지요. 게다가 음성 인식 모델을 활용할 시스템에 따라 tiny, small, medium, large, large-v2 모델을 취사선택할 수 있다는 점도 돋보입니다. 이번에는 그 중에서 whisper-tiny 모델과 whisper-small 모델을 서로 비교해보는 작업을 해 보겠습니다. 이 모델들은 모두 Huggingface에서 조회할 수 있으며, transformers 라이브러리에서 지원하는 pipeline 기능을 활용해 기능을 활용할 수 있습니다.

     

     

    이 기능은 transformers 4.35.0 버전 및 ffmpeg가 설치된 환경, 그리고 인식할 오디오 파일을 요구합니다. ffmpeg 설치는 운영체제별로 지원되는 패키지 관리자에서 설치할 수 있으며, 윈도우의 경우 chocolatey를 활용해 choco install ffmpeg 명령어를 실행하면 됩니다. 오디오 파일의 경우, mp3 및 flac 확장자 등을 지원합니다.

     

     

    음성 인식 실습


    저는 TEDxYouth@MCH에서 찾아볼 수 있는 한국의 툰베리를 만나러 가는 길의 음성 파일을 인식할 수 있도록 whisper 모델을 이용해 봤습니다. transformers에서 제공하는 pipeline 기능을 활용해서 한줄로 구현할 수 있지요. 아래 코드를 참조해 보시기 바랍니다.

     

     

    # Import Package
    from transformers import pipeline
    
    # Import whisper model
    whisper_tiny = pipeline("automatic-speech-recognition", "openai/whisper-tiny")
    whisper_small = pipeline("automatic-speech-recognition", "openai/whisper-small")

     

    whisper_tiny("https://github.com/boringariel/python/raw/tmp/audio/data/%ED%95%9C%EA%B5%AD%EC%9D%98%20%ED%88%B0%EB%B2%A0%EB%A6%AC%EB%A5%BC%20%EB%A7%8C%EB%82%98%EB%9F%AC%20%EA%B0%80%EB%8A%94%20%EA%B8%B8%20%20Chaeeun%20Kim%20%20TEDxYouthMCH.mp3", generate_kwargs = {"language":"korean"})
    {'text': ' 공굴 수 있는 미래를 위한 우리들의 외침 지금부터 시작하겠습니다 여러분 초콜라 좋아하세요 그럼 포동화 차리는요? 네 저는 전부 좋아하는 음식들인데요 특히 제가 초콜라에서 너무 너무 좋아해서 항상 가방 어딘가에 챙겨 놓을 정도입니다 그런데 이 음식들이 조만간 쉽게 먹을 수 없는 사체품이 된다고 합니다'}

     

    whisper_small("https://github.com/boringariel/python/raw/tmp/audio/data/%ED%95%9C%EA%B5%AD%EC%9D%98%20%ED%88%B0%EB%B2%A0%EB%A6%AC%EB%A5%BC%20%EB%A7%8C%EB%82%98%EB%9F%AC%20%EA%B0%80%EB%8A%94%20%EA%B8%B8%20%20Chaeeun%20Kim%20%20TEDxYouthMCH.mp3", generate_kwargs = {"language":"korean"})
    {'text': ' 꿈꿀 수 있는 미래를 위한 우리들의 외침 지금부터 시작하겠습니다 여러분 초콜릿 좋아하세요? 네 그럼 포도나 체리는요? 아니요 네 저는 전부 좋아하는 음식들인데요 특히 제가 초콜릿을 너무너무 좋아해서 항상 가방 어딘가에 챙겨놓을 정도입니다 그런데 이 음식들이 조만간 쉽게 먹을 수 없는 사채품이 된다고 합니다'}

     

     

    음성 인식 결과물은 딕셔너리 형태로 반환되는데, 여기에서 text 라는 인덱스에 인식한 음성 정보가 입력됩니다. whisper-tiny 모델의 경우, 대충 알아들을 수 있을 정도지만 연음 처리가 어색한 부분이 보이네요. 예를 들어, '꿈꿀 수 있는 미래' 라는 말을 '공굴 수 있는 미래' 라고 읽는 등의 문제가 보입니다.

     

     

    반면에 whisper-small 모델의 경우, 이정도면 쓸만하다고 생각될 만큼 처리 품질이 개선된 것을 확인할 수 있습니다. 앞서 살펴본 tiny 모델이 약했던 연음 처리도 자연스러워져서, '꿈꿀 수 있는 미래' 라는 말도 정확하게 읽어들였지요. medium 이상의 모델에서는 성능이 더욱 나아지지만, 시스템 요구사양 및 처리 속도에서 불리하기 때문에 사용 환경에 따라 적합한 사이즈의 모델을 선택해야 합니다.

     

     

    프로그램 개선


    whisper 모델을 그냥 사용할 경우, 최대 30초 분량의 음성만 인식할 수 있습니다. 그래서, 더욱 긴 분량의 음성을 인식하기 위해서는 30초 단위로 파일을 자른 뒤, 각각의 파일을 읽는 방법 등을 활용해야겠지요.

     

     

    [자료 출처]

     

    반응형

    댓글

문의: jwkang3929@naver.com