이번 게시글에서는 Kaggle에서 Whisper JAX를 이용하여 mp3 파일을 텍스트로 변환하고 자막을 생성하는 방법을 알려드리려고 합니다.
Colab / Kaggle 버전 차이
저번 게시글에서 [Colab에서 mp3 파일 텍스트 변환하는 방법]에 대해 알아보았는데요. Colab 버전과 Kaggle 버전의 차이점은 다음과 같았습니다.
지원 모델 | 접근성 | 소요 시간 | 기타사항 | |
Colab | Small / Medium | 상대적으로 쉬움. (Interactive Markdown 지원) |
Kaggle에 비해 오래 걸림. | 구글 계정 필요 |
Kaggle | Small / Medium / Large | 과정이 colab에 비해 복잡하여 어려울 수 있음. | Large 모델도 Colab보다 빠르게 텍스트를 얻을 수 있음. | Kaggle 가입 필요 |
👉🏻 요약 : Colab이 Kaggle에 비해 텍스트 변환하는 방법이 쉽지만, Medium 모델까지 지원하기 때문에 텍스트 변환 시간이 오래걸리고 결과 퀄리티가 떨어질 수 있습니다. 반면 Kaggle은 Colab에 비해 과정은 조금 복잡하지만, Large 모델도 지원하기 때문에 텍스트 변환 퀄리티가 높고, 시간도 적게 걸립니다.
👉🏻 한국어 음성 파일을 변환하는 경우에는 퀄리티가 낮습니다.
개인적으로 영어 mp3 파일을 변환하는 경우에는 Colab의 Medium 모델로도 충분했습니다. 하지만 한국어를 텍스트 변환하는 경우에는 Kaggle의 Large 모델로 변환하면 그나마 났지만, 두 버전 모두 상대적으로 퀄리티가 떨어졌습니다 😭 이러한 특징들과 자신의 상황을 고려하여 Colab 버전과 Kaggle 버전을 선택해서 사용하시면 됩니다 :)
Colab 버전의 한계
Colab 환경에서는 아쉽게도 무료 버전에서 사용할 수 있는 VRAM 제한이 있기 때문에 Medium 모델까지 사용이 가능했습니다. 또한, Whisper JAX 라이브러리 버전 충돌로 인해 Colab에서 TPU 사용이 불가능했기 때문에 OpenAI Whisper JAX 모델의 성능을 100% 활용하지 못했습니다. (OpenAI Whisper JAX를 TPU로 실행시킬 경우 기존 OpenAI Whisper보다 최대 70배 빠른 속도를 낸다고 합니다.) 그렇다면 Whisper JAX를 100% 활용할 수 있는 방법은 없을까요?
'Kaggle'이라는 사이트를 이용하면 OpenAI Whipser JAX의 성능을 최대한 사용할 수 있습니다! Kaggle도 Colab처럼 코드를 돌릴 수 있는 가상환경을 제공하고, TPU도 매주 20시간 무료로 사용가능한데요. 대신, Kaggle을 사용하기 위해서는 약간 귀찮은 (구글 계정과 휴대폰 인증 정도?의) 가입 과정이 필요합니다. 또한, 사이트가 영어로 되어있기 때문에 당황하실 수 있는데요. 아래 방법대로 천천히 따라오면 아마 어렵지 않게 하실 수 있을겁니다.
Kaggle에서 MP3 파일 텍스트 변환 및 자막 추출하기
이제 본격적으로 Kaggle에서 MP3 파일을 텍스트 변환하는 방법에 대해 알아보겠습니다. Colab에서와 마찬가지로 MP3 파일을 텍스트 변환하는 방법은 크게 2개의 과정(파일 불러오기, 텍스트 변환하기)이 있습니다.
Kaggle 세팅하기
우선, kaggle을 이미 가입했다고 가정하고 설명을 진행하겠습니다. 아래 kaggle 링크로 이동합니다.
[Copy & Edit]을 누릅니다. 아마 복사한 Kaggle Notebook으로 이동할 것 입니다. (이미 Copy & Edit을 하셨다면, Kaggle 홈에서 Notebook으로 들어가면 복사한 Kaggle Notebook을 확인할 수 있습니다.)
사이드바의 Notebook options에 있는 Accelerator를 TPU v3-8로 변경해주세요.
👉🏻 만약 위 사진처럼 사이드바가 없으면?
아래 그림처럼 오른쪽 하단에 있는 화살표 버튼을 클릭하면 사이드바가 열립니다.
첫번째 코드 블럭을 실행시키면 아래 사진과 같이 출력됩니다. 반드시 아래 사진처럼 TpuDevice로 출력되야합니다.
Kaggle에 MP3 파일 업로드 하는 2가지 방법
Kaggle Notebook에 mp3 파일을 불러오는 2가지 방법이 있습니다. 첫번째 방법으로는 내 컴퓨터에 있는 mp3 파일을 Kaggle에 직접 업로드하는 것이고, 두 번째 방법은 Google Drive에 mp3 파일을 업로드하고 Kaggle로 불러오는 방식입니다.
👉🏻 변환할 mp3의 수가 적거나, 파일의 크기가 작은 경우 1번째 방법을 추천드립니다.
👉🏻 만약 mp3 파일의 크기가 크거나 수가 많을 경우, 이미 한번 Colab 버전으로 실행을 해서 이미 Google Drive에 파일이 업로드 되어있는 경우는 2번째 방법을 추천드립니다.
방법 1) Kaggle 에 직접 MP3 파일 업로드하기
먼저, 방법이 간단한 Kaggle에 직접 mp3 파일을 업로드하는 방법을 설명하겠습니다.
위 사진처럼 Add Data 버튼 옆의 아이콘을 클릭해주세요.
클릭하면 데이터셋을 만드는 창이 뜨는데요. 우선, 원하는 데이터셋 이름을 입력하고 Drag 방식이나 Browse Files 방식 중 편한 방법으로 내 컴퓨터에 있는 mp3 파일들을 올려주시면 됩니다. 파일이 다 업로드 되었으면 [Create]를 클릭해주세요.
👉🏻 만약 업로드 속도가 느리면?
네트워크 상황이나 파일의 크기, 수에 따라 업로드 속도가 느릴 수 있습니다. 이 경우 Google Drive를 이용하는 2번째 방법으로 진행해보세요.
👉🏻 만약 이미 이 방법으로 과거에 올렸던 파일인 경우?
이 방법은 구글 드라이브처럼 Kaggle에서 제공하는 Kaggle Datasets이라는 곳에 파일을 저장합니다. 따라서 Kaggle Datasets에서 따로 파일을 삭제를 안했다면, 전에 입력했던 데이터셋 이름으로 해당 데이터셋에 이미 기존 파일이 있을 것 입니다. 이 경우 'Add Data'를 클릭하여 해당 데이터셋을 추가해주면 됩니다.
이제 두 번째 코드블럭(Loading mp3 files to a Kaggle notebook)에서 위 사진처럼 변수들을 바꿔주세요.
이걸로 첫번째 방법인 Kaggle에 직접 mp3 파일을 업로드하기는 끝입니다. 위 과정을 다 하셨다면 아래 [텍스트 및 자막 변환] 부분으로 이동해주세요.
방법 2) Google Drive에 MP3 업로드 및 Kaggle로 파일 불러오기
방법2는 구글 드라이브에 MP3 파일을 업로드하고 이 파일을 Kaggle로 불러옵니다. 구글 드라이브에서 Kaggle로 mp3 파일을 불러오는 방법은 첫 번째 방법보다 복잡한데요. 아래 방법을 따라해보고, 막히시면 첫번째 방법을 이용하는 것을 추천드립니다.
mp3 파일 하나를 Kaggle에 불러올 것인가 / 여러개의 mp3 파일을 Kaggle에 불러올 것인가에 따라 방법이 약간 다릅니다.
1. 구글 드라이브에 mp3 파일 업로드하기
👉🏻 만약 mp3 파일 하나를 Kaggle로 불러오는 경우는?
먼저, 파일 하나를 Kaggle에 불러오는 것은 매우 쉽습니다. 구글 드라이브에 mp3 파일을 업로드합니다. (이미 구글 드라이브에 업로드 되어있는 경우는 추가로 업로드 안하셔도 됩니다.) 그 후 아래로 내리셔서 [2. 업로드한 파일 공유하기]로 바로 넘어가주세요.
👉🏻 만약 여러개의 mp3 파일을 Kaggle로 불러오는 경우는?
먼저, 아래 Colab 링크로 들어갑니다.
아래 사진처럼 MP3 파일을 업로드할 폴더 이름을 입력 후 실행해주세요.
구글 로그인창이 뜨면 파일을 업로드할 구글 드라이브 계정을 선택하고, 허용 버튼을 클릭합니다.
예시로 저는 "GoodNotes 폴더 안에 있는 강의1 폴더"로 설정하기 위해 GoodNotes/강의1 이라고 입력했습니다.
구글 드라이브로 접속하면 입력한 폴더 이름으로 폴더가 생성되고, 그 안에 input 폴더가 생긴걸 확인할 수 있습니다. (Colab 버전을 이용하신분들이라면 output 폴더도 같이 있을 것입니다.)
이제 input 폴더 안에 텍스트 변환하실 mp3 파일을 업로드해주세요.
👉🏻 이미 Colab 버전을 사용하신분들은 추가적으로 파일 업로드 안하셔도 됩니다! input 폴더가 있는 폴더명만 제대로 입력해주세요.
(ex. GoodNotes/강의1)
파일을 업로드를 하셨으면 다시 Colab으로 돌아가 [업로드한 MP3 파일 압축하기]를 실행시켜주세요. 아래 사진처럼 자신이 업로드한 파일이 모두 출력되었는지 확인해주세요.
이제 mp3 파일이 있는 폴더로 가면 input.zip 이라는 파일이 새로 생겼을 것입니다. input.zip을 클릭하면 위 사진처럼 mp3 파일들이 잘 들어있는지 확인해주세요.
2. 업로드한 파일 공유하기
input.zip 혹은 하나의 mp3 파일인 경우는 해당 mp3 파일을 우클릭하고 공유 버튼을 클릭하면 창이 하나 뜹니다. 거기서 일반 액세스 부분을 제한됨에서 링크가 있는 모든 사용자를 선택합니다.
링크 복사를 클릭 후 완료 버튼을 누릅니다.
3. Google Dirve에 있는 파일(input.zip or mp3 파일) 불러오기
이제 다시 Kaggle로 돌아와서 두 번째 코드블럭에서 위 변수들을 위와 같이 변경합니다.
👉🏻 mp3 파일 하나인 경우는 IS_ZIP을 False 로 바꿔주세요.
복사한 링크를 아래 사진처럼 sharing_url의 ' ' 안에 붙여넣습니다. (ex. 'https://drive.google.com/file/d/~/view?usp=sharing')
그 다음 해당 코드 블럭을 실행시켜주세요.
위 사진처럼 결과창에 여러분들이 Google Drive에 업로드한 mp3 파일들을 번호와 함께 출력합니다.
👉🏻 만약 업로드한 파일 중 일부분만 텍스트 변환하고 싶은 경우는?
예시로 위 파일에서 3, 4번만 텍스트 변환하고 싶다고 가정하겠습니다.
- has_undesirable_mp3_file : 업로드한 파일 중 일부분만 텍스트 추출을 원하는 경우 True로 바꿔주세요.
- order_str : has_undesirable_mp3_file 을 True로 설정한 경우에만 바꾸시면 됩니다. " " 안에 원하는 mp3 파일의 번호를 입력해주세요. (ex. "3 4") 띄어쓰기 주의해주세요! 3, 4 (X)
위 사진처럼 해당 코드 블럭을 실행하면 최종적으로 변환할 mp3 목록이 파란 글씨로 출력됩니다.
텍스트 및 자막 변환하기
1. 옵션 선택하기
이제 옵션만 입력해주면 끝입니다! 코드로 되어있는데 어려울 것 없습니다. 마치 체크박스에 체크하는 것처럼 체크를 True, 체크 안하는 것을 False 로 생각하면 됩니다.
옵션은 다음과 같습니다. 원하는 옵션을 True로 바꿔주세요. 이해가 안되는 옵션은 다음 게시글을 참고해주세요.
- small, medium, large_model : 텍스트 변환에 사용할 모델입니다. large_model이 가장 성능이 좋은 대신 시간이 오래걸립니다. (다중 선택 가능)
- timestamp : True 일 경우, 추가적으로 시간과 텍스트를 같이 저장합니다. (True 시에도 텍스트만 있는 파일도 같이 저장됩니다.)
- txt, doc, srt : 저장할 파일 형식입니다. 텍스트(txt), 문서(doc), 자막(srt) 총 3가지 파일 형식을 지원합니다. (다중 선택 가능)
옵션을 다 선택하셨다면 해당 코드 블럭과 아래에 있는 코드 블럭들을 모두 실행시켜주세요. 결과창에 무언가(중간마다 초록색)를 계속 출력할텐데 당황하지마세요! 텍스트 변환에 필요한 라이브러리를 모두 다운받고 텍스트 변환하는데 시간이 다소 걸립니다. 변환하는 파일의 크기와 수, 선택한 모델에 따라 작업 시간이 오래걸릴 수 있습니다. 잠시 다른 일하면서 기다려주세요.😀
작업이 마무리되면 "MP3 conversion is complete"이라 출력됩니다.
2. 결과 확인하기
오른쪽 사이드바의 OUTPUT으로 텍스트 변환 파일을 확인할 수 있습니다. 파일 이름은 (변환한 mp3 파일명)_(사용한 모델)_ouput.(파일 형식) 형태로 저장됩니다. 추가적으로 timestamp를 선택했으면 사용한 모델 뒤에 _timestamp가 붙어있습니다.
3. 파일 다운로드하기
위 사진에서 output.zip의 마우스를 가져다대고 맨 오른쪽 3개 점 표시를 클릭하여 다운받으면 압축 파일 안에 변환한 모든 파일이 저장되어있습니다. 혹은 output 폴더 안에 있는 원하시는 파일을 하나씩 받으면 됩니다.
프로젝트를 마무리하며..
오랜만에 티스토리를 복귀해서 글을 쓰니깐 시간 가는줄 모르고 썼네요 ㅎㅎ.. 글을 읽어주신 모든 분들에게 조금이라도 도움이 되길 바라며 이번 프로젝트를 마무리하겠습니다. 앞으로도 유용한 게시물들로 찾아뵙겠습니다!
혹시라도 에러가 발생하거나 그 외 문의사항들은 댓글로 남겨주세요.