아무것도 없이 STT 모델(OpenAI Whisper) 파인튜닝하기1
돈도💰 데이터도 없이 OpenAI Whisper 파인튜닝하기
저희는 강의, 회의 음성을 받아 적어 자동으로 노트 필기본을 만들어주는 Synnote 서비스를 운영하고 있습니다. OpenAI의 오픈소스 모델인 Whipser를 활용하여 STT(Speech to text)를 하는데요,
서비스를 개발하면서 퀄리티를 높이기 위해서 여러가지 고민을 했는데 그중 하나가 전문 용어도 잘 받아 적을 수 있어야 한다는 요구사항이 있었습니다.🤔
이를 해결하기 위해서 특정 분야마다 관련된 전문 용어, 음성들로 파인 튜닝된 도메인 특화 STT 모델을 직접 만들어 활용하기로 하였습니다!😎
STT 모델을 파인 튜닝하기에 앞서, 저희 팀의 가용 가능& 불가능한 자원은 다음과 같았습니다.
RTX 3090 x 4 ✅
트레이닝에 활용할 음성 데이터 🚫
데이터를 구매하거나 레이블링을 요청할 돈 🚫
보시다시피 하드웨어 자원말고는 아무것도 없는 상태에서, 그럴싸한 성능의 파인튜닝 모델을 만들었던 방법을 소개하겠습니다.
유투브로 데이터 수집하기
가장 시급했던 것은 튜닝에 활용할 데이터 수집이었습니다.
Whisper를 훈련하기 위한 데이터로 음성과 해당 음성에 맞게 전사된 대본이 필요했는데, 이 두가지 종류의 데이터를 구할 수 있는 소스인 유튜브🎥를 사용했습니다.
유튜브 동영상에 대본(또는 자막)이 달려있는 경우를 보신 적이 많으실 겁니다.
유투브에는 두가지 종류의 대본이 있습니다. 바로 ASR 엔진이 자동으로 생성한 대본과 사람이 직접 작성한 대본입니다.
(유튜브 대본의 예시)
여기서 ASR 엔진이 자동으로 생성한 대본은 오타가 많으므로 동영상의 메타 데이터를 분석하여 사람이 직접 작성한 대본만 크롤링하도록 만들었습니다.
이렇게 유튜브로만 데이터를 구성하는 것에는 또 다른 문제점이 있었습니다. 바로 대부분의 데이터가 고급 음향 장비로 녹음되었기 때문에 지나치게 좋은 음질을 가지고 있다는 점입니다.
저희 Synnote가 실제로 사용되는 환경에서 녹음된 데이터는 대부분 음질이 좋지 않기 때문에 저희는 동의하에 오프라인 강연을 직접 녹음하여 추가적인 음성 데이터도 확보했습니다.
데이터 전처리하기
데이터 전처리는 크게 2가지 과정으로 이루어져 있습니다.
유투브 데이터로부터 고품질의 대본만을 훈련 데이터로 선정 🙌
음성 데이터의 분할 ✂️
유튜브에서 사람이 작성한 대본만을 수집하였다고 말씀드렸는데, 사람이 직접 작성한 대본이라 할지라도 사용할 수 없는 것들이 많았습니다.
사용할 수 없는 대본의 예시들은 이런 경우입니다.
괄호 안에 상황 설명 ex. (웃으면서)재미있네요.
발화자 이름 삽입 ex. (철수)안녕하세요.
이런 데이터들을 훈련에 활용할 수 없습니다. 이런 데이터들을 솎아내기 위해서, 저희는 Whisper 모델로 음성을 전사시킨 뒤 전사본과 유투브 대본을 비교하여 전사본과 차이가 많이 나지 않는 대본만 훈련 데이터로 선정하였습니다. 이렇게 유투브 대본 - 전사본의 차이값을 데이터별로 비교한 데이터그램 차트를 보면 재미있는 결과가 보이는데요.
(x축은 CER 즉 차이값, y축은 데이터의 개수입니다)
이렇게 상황 설명이나 발화자 이름 등의 정보가 들어간 데이터들은 대본과 전사본의 차이가 급격하게 커지므로, 좋은 대본과 좋지 않은 대본의 두 그룹으로 데이터가 깔끔하게 분류되는 것을 볼 수 있습니다. CER 50 전후에 threshold값을 두고 왼쪽에 몰려있는 '좋은' 대본들을 활용해서 트레이닝 셋으로 선정했습니다.
다음으로 음성 데이터를 분할하는 과정입니다. WhisperX는 30초 단위로 이루어진 음성 데이터로 pre-training이 되었기 때문에, fine-tuning도 같은 길이의 데이터로 이루어져야 합니다. 여기서 음성을 단순히 30초 단위로 분할하게 되면 연속되는 발화가 어색하게 끊기는 경우가 발생했기 때문에, 완전한 문장 단위로 음성을 깔끔하게 분할 해야했습니다.
이를 위해 저희는 Voice Activity Detection 모델과 한국어 형태소 분석 라이브러리를 사용하여 30초 내외의 완전한 문장으로 이루어진 다수의 분할된 음성 데이터를 확보할 수 있었습니다.
이외에도 여러 우여곡절이 많았는데요, (트레이닝 GRAM 부족 문제, 실제 성능 비교 단계 문제 등..) 기회가 된다면 다른 메이커로그에서 풀어보도록 하겠습니다! 😆
강의나 회의에서 모든 음성을 받아적는 “자동 음성 기록 AI 어시스턴트”
댓글
로그인 후 댓글을 남길 수 있습니다.
와.. Whisper 파인 튜닝을 해서 사용하고 계시군요.. 저도 STT API 로만 사용해보면서 전문용어 인식을 너무 못해서 답답.. 했었는데.. 넘 어렵더라구요.. 전문용어도 분야마다 다 다르니. ㅎ