"Pure Sound"의 두 판 사이의 차이
cdc wiki
(→구성원 및 추진체계) |
(→완료작품의 평가) |
||
(같은 사용자의 중간 판 7개는 보이지 않습니다) | |||
59번째 줄: | 59번째 줄: | ||
====구성원 및 추진체계==== | ====구성원 및 추진체계==== | ||
− | * | + | * 황*연: 프로젝트 일정 관리 및 감독, STT/TTS 논문 리뷰 및 구축, 데이터 전처리 & 코딩, 모델 테스트 및 결과 정리, 논문 작성, 학회 발표 |
− | * | + | * 고*정: GPT 프롬프트 튜닝, BTS 논문 리뷰, STT 후처리기 모델 사용 |
− | * | + | * 채*석: gstt-gtts 구축, DNS 조사 및 코딩, 데모 웹페이지 제작 |
==설계== | ==설계== | ||
===설계사양=== | ===설계사양=== | ||
====제품의 요구사항==== | ====제품의 요구사항==== | ||
− | + | * 프로그램 사용 시간이 짧아야 한다. | |
+ | * 음성 인식 정확도가 높아야 한다. | ||
+ | * 출력 음성이 사람이 듣기에 정확해야 한다. | ||
====설계 사양==== | ====설계 사양==== | ||
− | + | * 모델 학습 시에는 i7-13700 CPU와 RTX 4090 GPU를 이용하였다. | |
+ | * 프로젝트는 주로 딥러닝 및 자연어 처리 모델을 활용하므로, Python 언어를 기반으로한 PyTorch 딥러닝 라이브러리를 활용하였다. | ||
+ | * Whisper 모델과 그의 파인튜닝을 위해 Hugging Face에서 제공하는 Transformers 라이브러리를 이용한다. | ||
+ | * Google Text to Speech와 같은 TTS 서비스를 이용하기 위해 gtts 라이브러리를 사용하였다. 모델의 성능 평가를 위해 WER와 CER를 계산하는 데 필요한 라이브러리를 사용하였다. | ||
+ | * 개발 환경은 Jupyter notebook과 Google Colab을 활용하였다. 이를 통해 코드 작성, 테스트, 디버깅 등을 효율적으로 수행할 수 있었다. | ||
===개념설계안=== | ===개념설계안=== | ||
− | + | * STT와 TTS를 결합한 소음 제거 모델을 구현할 때 중요한 점은 STT에서 텍스트를 생성할 때 오류율이 낮아야 한다는 점이다. 이를 위해 첫 번째 방법으로 STT 앞에 DNS(소음 제거 딥러닝 모델)을 결합하여 명확한 목소리가 담긴 음성을 STT에 전달하고자 하였다. 두 번째 방법은 STT와 TTS 사이에 GPT 모델을 결합하여 STT에서 출력한 텍스트를 적절히 교정해주는 것이다. 이러한 방식이 실제로 유용한지 실험해보기 위해 다음과 같이 실험을 설계해보았다. | |
+ | * 모델 준비: 모델은 다음과 같이 4가지를 준비한다. | ||
+ | (1) 사전 학습된 Whisper-small 모델 (Baseline) | ||
+ | (2) AI Hub의 소음 데이터로 fine-tuning한 모델 | ||
+ | (3) DNS로 소음을 제거된 데이터를 이용해 fine-tuning한 모델 | ||
+ | (4) 2번 모델을 3번 방법으로 한 번 더 fine-tuning한 모델 | ||
+ | * 실험 방법: DNS와 GPT의 유용성을 각각 확인해보기 위해 다음과 같이 2번의 실험을 진행한다. | ||
+ | (1) DNS의 유무에 따른 CER(Character Error Rate) 비교 실험 | ||
+ | (2) GPT 유무에 따른 CER 비교 실험 | ||
+ | * 만약 DNS와 GPT가 결합되었을 때 CER이 낮다는 것을 확인한다면 각각을 결합한 모델이 더 좋은 성능을 보인다고 결론을 내릴 수 있다. | ||
===이론적 계산 및 시뮬레이션=== | ===이론적 계산 및 시뮬레이션=== | ||
− | + | * 1차 실험: 데이터 양을 줄인 1차 실험을 진행한 뒤, 여유가 있는 경우 2차 실험을 진행하기로 하였다. 위와 같이 설계한 실험에 필요한 준비 및 실험 내용을 기술하기로 한다. | |
+ | * 데이터 준비: AI Hub의 35,330개의 데이터 중 35,000개의 데이터는 훈련과 검증 데이터로, 나머지 330개의 데이터는 평가 데이터로 사용하였다. 훈련 데이터와 검증 데이터의 비율은 99:1로 설정하였다. DNS로 소음을 제거한 음성 데이터를 마련하기 위해서는 각 음성 데이터에 대해 하나씩 DNS 모델을 통과시켜야 하는데 여기에서 상당히 많은 시간이 소요된다. RTX 4090 GPU을 이용했을 때 1개의 음성 파일마다 약 6초가 걸리므로 35,330개의 데이터 모두 DNS를 통과시키기 위해서는 약 70시간이 필요하다. 따라서 DNS로 소음을 제거한 음성 데이터는 33가지의 소음 분류마다 각 120개씩, 총 3,960개의 훈련/검증 데이터와 330개의 평가 데이터만 구축하기로 하였다. 데이터를 구축하는 데에는 총 8시간이 소요되었으며, 훈련 데이터와 검증 데이터의 비율은 95:5로 나누었다. 데이터 구축 정보는 다음과 같다. | ||
+ | [[파일:PS표1.png]] | ||
+ | |||
+ | * 모델의 하이퍼파라미터 설정: 모델은 batch size를 16, max steps를 4,000으로 설정하여 총 64,000개의 데이터에 대해서 학습하도록 설정하였으며, 이는 약 1.85 epochs 만큼 학습하는 것이라고 볼 수 있다. 3번 모델과 4번 모델에는 denoise 데이터를 사용하게 되는데, denoise 데이터는 noise 데이터보다 훨씬 적은 양이므로 이에 맞는 하이퍼파라미터를 따로 설정해주어야 한다. Denoise 데이터에 대해서는 batch size 16, max step을 1,000으로 설정하여 과하게 학습하지 않도록 조절해주었다. 이는 약 4.25 epochs 만큼 학습하는 것이라고 볼 수 있다. 따라서 STT의 fine-tuning 파라미터는 다음과 같이 정리할 수 있다. | ||
+ | [[파일:PS표2.png]] | ||
+ | |||
+ | * 2번 모델과 3번 모델의 훈련 결과: 대표적으로 2번과 3번 모델에 대한 훈련 결과만을 다음과 같이 출력해보았다. 왼쪽 그래프는 손실함수를 나타내며, 오른쪽 그래프는 WER과 CER을 나타낸다. 첫 번째 그림은 2번 모델에 대한 결과, 두 번째 그림은 3번 모델에 대한 결과를 보여준다. | ||
+ | [[파일:PS그림3.png]] | ||
+ | 두 모델 모두 학습이 잘 진행되었음을 확인할 수 있으며, 이를 통해 Fine-tuning 과정이 Whisper 모델의 소음 음성 처리 최적화가 가능하도록 만들어준다는 사실을 확인할 수 있었다. | ||
+ | |||
+ | * DNS 유무에 따른 CER 비교 실험: 4가지 STT 모델을 활용하여 DNS 유무에 따른 CER 비교 실험을 해본 결과는 다음과 같다. | ||
+ | [[파일:PS표3.png]] | ||
+ | DNS의 유무에 상관없이 2번 모델이 가장 좋은 성능을 보인다는 사실을 확인할 수 있었으며, DNS를 결합하지 않은 모델에서 더 좋은 성능을 나타냈다. 이는 DNS를 사용하지 않는 것이 더 도움이 된다는 것을 의미한다. | ||
+ | |||
+ | * GPT 유무에 따른 CER 비교 실험: 다음과 같이 GPT 프롬프트를 제시한 뒤 temperature(모델 생성 문장의 다양성)를 0.2로 설정하였다. | ||
+ | [[파일:PS프롬프트.png]] | ||
+ | |||
+ | 이렇게 GPT를 프롬프트 튜닝한 뒤 GPT의 유무에 따른 실험을 진행하였으며, 추가로 프롬프트의 user와 assistant에 예시들을 다양하게 포함시킨 추가 프롬프트에 대해서도 실험을 진행하였다. 결과는 다음과 같았다. | ||
+ | [[파일:PS표4.png]] | ||
+ | |||
+ | 이번 역시도 GPT를 사용하는 것이 더 좋지 않은 결과를 보였다. 그러나 TTS로 음성을 들었을 때에는 GPT를 사용한 것이 더 자연스럽게 들렸는데, 그 이유는 GPT가 복잡한 구두점과 띄어쓰기를 올바르게 표기해주었기 때문이다. 또, GPT를 사용했을 때 CER이 크게 증가하지 않은 것을 고려하면, GPT를 사용하는 것이 도움이 될 수 있다고 보았다. | ||
+ | |||
+ | * 2차 실험: 데이터를 보강해서 1차 실험과 동일한 실험을 진행한다. | ||
+ | |||
+ | * 데이터 준비: 2차 실험에서는 noise 데이터와 denoise 데이터 모두 동일하게 훈련/검증/평가 데이터를 구성했다. 훈련 데이터는 34,650개, 검증 데이터는 350개, 평가 데이터는 252개로 설정하였다. 평가 데이터는 330개에서 252개로 줄어들었는데, 그 이유는 1차 실험에서 구축한 평가 데이터 330개 중 78개는 훈련/검증 데이터와 중복되었음을 확인했기 때문이다. 그래서 이를 제거한 252개의 데이터를 평가 데이터로 구축하였다. | ||
+ | DNS로 소음이 제거된 데이터를 만들기 위해서 RTX 4090 GPU로 약 70시간 동안 DNS 모델을 실행시켰다. 10월 30일에 모든 데이터 구축을 완료할 수 있었으며, 10월 31일에 모든 실험을 진행하였다. 데이터 분포를 정리하면 다음과 같다. | ||
+ | [[파일:PS표11.png]] | ||
+ | |||
+ | * 모델의 하이퍼파라미터 설정: 완전히 동일한 개수의 데이터 셋을 사용했기 때문에 기존 2번 모델의 하이퍼파라미터를 3, 4번에도 똑같이 적용할 수 있었다. 하이퍼파라미터는 다음과 같다. | ||
+ | [[파일:PS표12.png]] | ||
+ | |||
+ | * 2번 모델과 4번 모델의 훈련 결과: 대표적으로 2번 모델과 4번 모델의 훈련 결과만 살펴보면 다음과 같다. | ||
+ | [[파일:PS그림13.png]] | ||
+ | |||
+ | 이번에도 두 모델 모두 잘 학습되는 모습을 볼 수 있었고, 특히 denoise 데이터의 수를 증가시켰더니 4번 모델의 Validation CER이 상당히 크게 감소하여 8 이하로 떨어졌음을 확인할 수 있었다. | ||
+ | |||
+ | * DNS 유무에 따른 CER 비교 실험: 놀랍게도, denoise의 데이터 양을 증가시켰더니 1차 실험과는 다른 결과를 얻을 수 있었다. DNS를 결합했을 때 4번 모델의 CER이 가장 크게 감소했음을 확인할 수 있었으며, DNS를 결합하지 않았을 때에는 여전히 2번 모델의 CER이 가장 낮았다. DNS 결합 시 4번 모델의 CER이 낮은 이유가 2번 학습으로 8,000 steps를 학습했기 때문이라고 해석할 여지가 있어서 DNS 없는 2번 모델을 2번 학습시켰다. 총 8,000 steps를 학습시켰지만 CER이 11.96으로 상승한 것을 보았을 때, 4번 모델이 적절한 방법으로 fine-tuning 하였기 때문에 좋은 결과를 낸 것으로 해석할 수 있었다. | ||
+ | [[파일:PS표13.png]] | ||
+ | |||
+ | * GPT 유무에 따른 CER 비교 실험: 1차 실험과 비교하여 GPT 프롬프트를 약간 바꾸었으며, temperature를 0.1로 설정하였다. GPT 유무에 따른 CER 비교 실험은 1차 실험과 비슷했다. | ||
+ | [[파일:PS표14.png]] | ||
+ | |||
+ | 여전히 GPT를 결합하지 않은 모델이 더 좋은 CER을 보였으며, 1차 실험때와 같이 TTS의 자연스러운 음성 출력을 위해 GPT를 사용하는 것은 선택적으로 도움이 된다고 결론을 내렸다. | ||
===상세설계 내용=== | ===상세설계 내용=== | ||
− | + | * 최종 모델은 다음과 같다. | |
+ | [[파일:PS최종모델.png]] | ||
+ | |||
+ | * DNS: DNS (Deep Noise Suppression) 기술은 딥러닝과 기계 학습을 활용한 소음 제거 기술이다. 주파수 영역에서 작용하는 필터를 사용해 소음을 구분하여 제거하던 기존 방식과는 다르게 노이즈가 있는 음성과 노이즈 없는 음성을 쌍 구분을 통해 노이즈 프로필을 학습하여 노이즈를 제거하는 방식을 사용한다. 우리가 사용하는 모델은 TSCN 모델이다. TSCN 모델은 노이즈 제거와 음성 향상을 위해 두 단계로 나누어 작동하는 딥러닝 아키텍처로 첫 번째 단계에서는 주로 크기에 집중하여 노이즈를 제거하고, 두 번째 단계에서는 노이즈 스펙트럼을 개선하고 최종 음성을 생성한다. 두 단계 모두 딥러닝 네트워크를 사용하며, 경량화된 컨볼루션 모듈을 사용하여 효율적으로 처리하여 노이즈를 효과적으로 제거하고 깨끗한 음성을 생성한다. | ||
+ | |||
+ | * STT: TT(Speech To Text)는 음성을 텍스트로 변환하는 기술이다. 딥러닝을 이용한 대표적인 STT 모델에는 Facebook AI에서 개발한 wav2vec 2.0과 Open AI에서 개발한 Whisper[2] 모델이 있다. Whisper 모델은 간단한 Transformer 구조를 가지면서도 대량의 데이터로 학습하여 높은 성능을 보여주고 있다. | ||
+ | |||
+ | * GPT: GPT 3.5 API를 이용하여 프롬프트 튜닝을 한 모델이다. 위의 시뮬레이션 파트에 프롬프트 튜닝 방법이 소개되어있다. | ||
+ | |||
+ | * TTS: gTTS라는 Google TTS 라이브러리를 사용했으며, 이는 언제든지 다른 TTS로 대체 가능하다. | ||
==결과 및 평가== | ==결과 및 평가== | ||
===완료 작품의 소개=== | ===완료 작품의 소개=== | ||
====프로토타입 사진 혹은 작동 장면==== | ====프로토타입 사진 혹은 작동 장면==== | ||
− | + | * 데모 | |
− | ==== | + | [[파일:PS데모.png]] |
− | + | ||
+ | ====논문==== | ||
+ | [[파일:PS논문.png]] | ||
===관련사업비 내역서=== | ===관련사업비 내역서=== | ||
− | + | [[파일:PS비용.png]] | |
===완료작품의 평가=== | ===완료작품의 평가=== | ||
− | + | [[파일:Test.png]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− |
2023년 12월 27일 (수) 22:43 기준 최신판
프로젝트 개요
기술개발 과제
국문 : STT와 TTS를 결합한 소음 제거 딥러닝 모델
영문 : Noise Reduction Model Combining STT and TTS
과제 팀명
Pure Sound
지도교수
유하진 교수님
개발기간
2023년 9월 ~ 2023년 12월 (총 4개월)
구성원 소개
서울시립대학교 수학과 20195400** 황*연(팀장)
서울시립대학교 수학과 20185400** 채*석
서울시립대학교 컴퓨터과학부 20189200** 고*정
서론
개발 과제의 개요
개발 과제 요약
- 통화 서비스에서 소음을 줄이고 사용자의 목소리를 명확하게 전달하는 것은 중요하다. 그러나 소음 제거 기술을 발전시키는 데에는 상당한 시간이 소요된다. 이에 따라 본 연구에서는 STT(Speech-to-Text)와 TTS(Text-to-Speech)를 결합하여 근본적인 소음 제거 방법을 제안한다.
개발 과제의 배경
- 최근 블루투스 이어폰을 사용이 증가함에 따라 이어폰을 착용하여 통화하는 사람들이 늘어났다. 블루투스 이어폰을 사용하면 주변 통화 소음이 크게 포함되기에 사람들간의 의사소통에 방해 요소가 될 수 있다. 블루투스 이어폰뿐만 아니라 노인과 어린아이와의 통화 시에도 목소리가 명확하게 전달되지 않는 경우가 종종 발생하는 어려움도 있다.
개발 과제의 목표 및 내용
- 최종 개발 목표는 소음을 제거하여 명료한 목소리를 전달하는 모델을 만드는 것이다. STT와 TTS의 결합뿐만 아니라 여러 다른 모델(DNS, GPT)을 추가로 결합하여 성능을 높이는 방향으로 연구하였다.
관련 기술의 현황
관련 기술의 현황 및 분석(State of art)
- 전 세계적인 기술현황
- STT 모델에는 Wav2Vec2.0, Whisper 모델 등이 있는데, 그 중 Whisper 모델은 한국어에서 가장 좋은 성능을 보여주는 모델이다. Whisper 모델은 대량의 한국어 데이터가 포함된 데이터셋으로 학습하여 높은 성능을 보여주고 있다.
- 특허조사 및 특허 전략 분석
- 본 기술에 대한 특허가 별도로 존재하지 않는 것으로 확인된다.
- 기술 로드맵
- DNS(Deep Noise Suppression): DNS(Deep Noise Suppression)는 딥러닝 또는 심층 신경망을 활용하여 주변 소음을 탐지하고 제거하거나 억제하는 소음 제거 방식이다. 대표적으로 ICASSP 2021 DNS Challenge에서 최상위 순위를 차지한 TSCN(Two-Stage Convolutional Network)[1] 모델이 있다.
- STT(Speech To Text): STT(Speech To Text)는 음성을 텍스트로 변환하는 기술이다. 딥러닝을 이용한 대표적인 STT 모델에는 Facebook AI에서 개발한 wav2vec 2.0과 Open AI에서 개발한 Whisper 모델이 있다. Whisper 모델은 간단한 Transformer 구조를 가지면서도 대량의 데이터로 학습하여 높은 성능을 보여주고 있다.
- TTS(Text To Speech): TTS는 STT와 반대로 텍스트로부터 음성을 합성하는 기술이다. 딥러닝을 이용하여 구현한 TTS 모델에는 WaveNet, Tacotron, Glow-TTS 등이 있다. 최근에는 Google의 Cloud Text-to-Speech API 또는 Naver의 CLOVA Voice API 등과 같이 여러 기업에서 TTS API를 제공하고 있으며, 이러한 TTS는 사람처럼 다양하고 자연스러운 음성을 생성한다.
시장상황에 대한 분석
- 경쟁제품 조사 비교
- Voice Conversion에서는 TTS와 STT를 결합하려는 시도가 몇몇 보였으나, 소음 제거를 위해 STT와 TTS를 결합하려는 시도가 있던 논문은 발견하지 못했다.
- 마케팅 전략 제시
- 최종 모델을 구축하는 것이 목표이기 때문에 따로 소프트웨어로 출시할 예정은 없다. 그러나 만약 출시하게 된다면 인터넷 통화나 실제 통화에 관여하고 있는 다양한 어플리케이션에 접목할 수 있도록 시스템을 제공하는 것이 바람직해 보인다.
개발과제의 기대효과
기술적 기대효과
- 자연스러운 음성 생성 및 텍스트 이해의 향상: STT와 TTS의 통합은 음성 입력에서 텍스트로의 변환과 이를 토대로 한 자연스러운 음성 생성 간의 일관성을 증가시킬 수 있다. 또한 모델이 소음을 제거하면서 정확한 텍스트를 추출하고, TTS가 해당 텍스트를 자연스럽게 음성으로 변환할 때 불필요한 소음이나 왜곡이 줄어들게 된다.
경제적, 사회적 기대 및 파급효과
- 산업 성장과 혁신: 음성 처리 기술의 발전은 새로운 비즈니스 모델과 서비스의 등장을 촉진할 수 있다. 새로운 음성 기반 서비스 및 제품이 등장하면서 관련 산업이 성장할 수 있다.
기술개발 일정 및 추진체계
개발 일정
구성원 및 추진체계
- 황*연: 프로젝트 일정 관리 및 감독, STT/TTS 논문 리뷰 및 구축, 데이터 전처리 & 코딩, 모델 테스트 및 결과 정리, 논문 작성, 학회 발표
- 고*정: GPT 프롬프트 튜닝, BTS 논문 리뷰, STT 후처리기 모델 사용
- 채*석: gstt-gtts 구축, DNS 조사 및 코딩, 데모 웹페이지 제작
설계
설계사양
제품의 요구사항
- 프로그램 사용 시간이 짧아야 한다.
- 음성 인식 정확도가 높아야 한다.
- 출력 음성이 사람이 듣기에 정확해야 한다.
설계 사양
- 모델 학습 시에는 i7-13700 CPU와 RTX 4090 GPU를 이용하였다.
- 프로젝트는 주로 딥러닝 및 자연어 처리 모델을 활용하므로, Python 언어를 기반으로한 PyTorch 딥러닝 라이브러리를 활용하였다.
- Whisper 모델과 그의 파인튜닝을 위해 Hugging Face에서 제공하는 Transformers 라이브러리를 이용한다.
- Google Text to Speech와 같은 TTS 서비스를 이용하기 위해 gtts 라이브러리를 사용하였다. 모델의 성능 평가를 위해 WER와 CER를 계산하는 데 필요한 라이브러리를 사용하였다.
- 개발 환경은 Jupyter notebook과 Google Colab을 활용하였다. 이를 통해 코드 작성, 테스트, 디버깅 등을 효율적으로 수행할 수 있었다.
개념설계안
- STT와 TTS를 결합한 소음 제거 모델을 구현할 때 중요한 점은 STT에서 텍스트를 생성할 때 오류율이 낮아야 한다는 점이다. 이를 위해 첫 번째 방법으로 STT 앞에 DNS(소음 제거 딥러닝 모델)을 결합하여 명확한 목소리가 담긴 음성을 STT에 전달하고자 하였다. 두 번째 방법은 STT와 TTS 사이에 GPT 모델을 결합하여 STT에서 출력한 텍스트를 적절히 교정해주는 것이다. 이러한 방식이 실제로 유용한지 실험해보기 위해 다음과 같이 실험을 설계해보았다.
- 모델 준비: 모델은 다음과 같이 4가지를 준비한다.
(1) 사전 학습된 Whisper-small 모델 (Baseline) (2) AI Hub의 소음 데이터로 fine-tuning한 모델 (3) DNS로 소음을 제거된 데이터를 이용해 fine-tuning한 모델 (4) 2번 모델을 3번 방법으로 한 번 더 fine-tuning한 모델
- 실험 방법: DNS와 GPT의 유용성을 각각 확인해보기 위해 다음과 같이 2번의 실험을 진행한다.
(1) DNS의 유무에 따른 CER(Character Error Rate) 비교 실험 (2) GPT 유무에 따른 CER 비교 실험
- 만약 DNS와 GPT가 결합되었을 때 CER이 낮다는 것을 확인한다면 각각을 결합한 모델이 더 좋은 성능을 보인다고 결론을 내릴 수 있다.
이론적 계산 및 시뮬레이션
- 1차 실험: 데이터 양을 줄인 1차 실험을 진행한 뒤, 여유가 있는 경우 2차 실험을 진행하기로 하였다. 위와 같이 설계한 실험에 필요한 준비 및 실험 내용을 기술하기로 한다.
- 데이터 준비: AI Hub의 35,330개의 데이터 중 35,000개의 데이터는 훈련과 검증 데이터로, 나머지 330개의 데이터는 평가 데이터로 사용하였다. 훈련 데이터와 검증 데이터의 비율은 99:1로 설정하였다. DNS로 소음을 제거한 음성 데이터를 마련하기 위해서는 각 음성 데이터에 대해 하나씩 DNS 모델을 통과시켜야 하는데 여기에서 상당히 많은 시간이 소요된다. RTX 4090 GPU을 이용했을 때 1개의 음성 파일마다 약 6초가 걸리므로 35,330개의 데이터 모두 DNS를 통과시키기 위해서는 약 70시간이 필요하다. 따라서 DNS로 소음을 제거한 음성 데이터는 33가지의 소음 분류마다 각 120개씩, 총 3,960개의 훈련/검증 데이터와 330개의 평가 데이터만 구축하기로 하였다. 데이터를 구축하는 데에는 총 8시간이 소요되었으며, 훈련 데이터와 검증 데이터의 비율은 95:5로 나누었다. 데이터 구축 정보는 다음과 같다.
- 모델의 하이퍼파라미터 설정: 모델은 batch size를 16, max steps를 4,000으로 설정하여 총 64,000개의 데이터에 대해서 학습하도록 설정하였으며, 이는 약 1.85 epochs 만큼 학습하는 것이라고 볼 수 있다. 3번 모델과 4번 모델에는 denoise 데이터를 사용하게 되는데, denoise 데이터는 noise 데이터보다 훨씬 적은 양이므로 이에 맞는 하이퍼파라미터를 따로 설정해주어야 한다. Denoise 데이터에 대해서는 batch size 16, max step을 1,000으로 설정하여 과하게 학습하지 않도록 조절해주었다. 이는 약 4.25 epochs 만큼 학습하는 것이라고 볼 수 있다. 따라서 STT의 fine-tuning 파라미터는 다음과 같이 정리할 수 있다.
- 2번 모델과 3번 모델의 훈련 결과: 대표적으로 2번과 3번 모델에 대한 훈련 결과만을 다음과 같이 출력해보았다. 왼쪽 그래프는 손실함수를 나타내며, 오른쪽 그래프는 WER과 CER을 나타낸다. 첫 번째 그림은 2번 모델에 대한 결과, 두 번째 그림은 3번 모델에 대한 결과를 보여준다.
두 모델 모두 학습이 잘 진행되었음을 확인할 수 있으며, 이를 통해 Fine-tuning 과정이 Whisper 모델의 소음 음성 처리 최적화가 가능하도록 만들어준다는 사실을 확인할 수 있었다.
- DNS 유무에 따른 CER 비교 실험: 4가지 STT 모델을 활용하여 DNS 유무에 따른 CER 비교 실험을 해본 결과는 다음과 같다.
DNS의 유무에 상관없이 2번 모델이 가장 좋은 성능을 보인다는 사실을 확인할 수 있었으며, DNS를 결합하지 않은 모델에서 더 좋은 성능을 나타냈다. 이는 DNS를 사용하지 않는 것이 더 도움이 된다는 것을 의미한다.
- GPT 유무에 따른 CER 비교 실험: 다음과 같이 GPT 프롬프트를 제시한 뒤 temperature(모델 생성 문장의 다양성)를 0.2로 설정하였다.
이렇게 GPT를 프롬프트 튜닝한 뒤 GPT의 유무에 따른 실험을 진행하였으며, 추가로 프롬프트의 user와 assistant에 예시들을 다양하게 포함시킨 추가 프롬프트에 대해서도 실험을 진행하였다. 결과는 다음과 같았다.
이번 역시도 GPT를 사용하는 것이 더 좋지 않은 결과를 보였다. 그러나 TTS로 음성을 들었을 때에는 GPT를 사용한 것이 더 자연스럽게 들렸는데, 그 이유는 GPT가 복잡한 구두점과 띄어쓰기를 올바르게 표기해주었기 때문이다. 또, GPT를 사용했을 때 CER이 크게 증가하지 않은 것을 고려하면, GPT를 사용하는 것이 도움이 될 수 있다고 보았다.
- 2차 실험: 데이터를 보강해서 1차 실험과 동일한 실험을 진행한다.
- 데이터 준비: 2차 실험에서는 noise 데이터와 denoise 데이터 모두 동일하게 훈련/검증/평가 데이터를 구성했다. 훈련 데이터는 34,650개, 검증 데이터는 350개, 평가 데이터는 252개로 설정하였다. 평가 데이터는 330개에서 252개로 줄어들었는데, 그 이유는 1차 실험에서 구축한 평가 데이터 330개 중 78개는 훈련/검증 데이터와 중복되었음을 확인했기 때문이다. 그래서 이를 제거한 252개의 데이터를 평가 데이터로 구축하였다.
DNS로 소음이 제거된 데이터를 만들기 위해서 RTX 4090 GPU로 약 70시간 동안 DNS 모델을 실행시켰다. 10월 30일에 모든 데이터 구축을 완료할 수 있었으며, 10월 31일에 모든 실험을 진행하였다. 데이터 분포를 정리하면 다음과 같다.
- 모델의 하이퍼파라미터 설정: 완전히 동일한 개수의 데이터 셋을 사용했기 때문에 기존 2번 모델의 하이퍼파라미터를 3, 4번에도 똑같이 적용할 수 있었다. 하이퍼파라미터는 다음과 같다.
- 2번 모델과 4번 모델의 훈련 결과: 대표적으로 2번 모델과 4번 모델의 훈련 결과만 살펴보면 다음과 같다.
이번에도 두 모델 모두 잘 학습되는 모습을 볼 수 있었고, 특히 denoise 데이터의 수를 증가시켰더니 4번 모델의 Validation CER이 상당히 크게 감소하여 8 이하로 떨어졌음을 확인할 수 있었다.
- DNS 유무에 따른 CER 비교 실험: 놀랍게도, denoise의 데이터 양을 증가시켰더니 1차 실험과는 다른 결과를 얻을 수 있었다. DNS를 결합했을 때 4번 모델의 CER이 가장 크게 감소했음을 확인할 수 있었으며, DNS를 결합하지 않았을 때에는 여전히 2번 모델의 CER이 가장 낮았다. DNS 결합 시 4번 모델의 CER이 낮은 이유가 2번 학습으로 8,000 steps를 학습했기 때문이라고 해석할 여지가 있어서 DNS 없는 2번 모델을 2번 학습시켰다. 총 8,000 steps를 학습시켰지만 CER이 11.96으로 상승한 것을 보았을 때, 4번 모델이 적절한 방법으로 fine-tuning 하였기 때문에 좋은 결과를 낸 것으로 해석할 수 있었다.
- GPT 유무에 따른 CER 비교 실험: 1차 실험과 비교하여 GPT 프롬프트를 약간 바꾸었으며, temperature를 0.1로 설정하였다. GPT 유무에 따른 CER 비교 실험은 1차 실험과 비슷했다.
여전히 GPT를 결합하지 않은 모델이 더 좋은 CER을 보였으며, 1차 실험때와 같이 TTS의 자연스러운 음성 출력을 위해 GPT를 사용하는 것은 선택적으로 도움이 된다고 결론을 내렸다.
상세설계 내용
- 최종 모델은 다음과 같다.
- DNS: DNS (Deep Noise Suppression) 기술은 딥러닝과 기계 학습을 활용한 소음 제거 기술이다. 주파수 영역에서 작용하는 필터를 사용해 소음을 구분하여 제거하던 기존 방식과는 다르게 노이즈가 있는 음성과 노이즈 없는 음성을 쌍 구분을 통해 노이즈 프로필을 학습하여 노이즈를 제거하는 방식을 사용한다. 우리가 사용하는 모델은 TSCN 모델이다. TSCN 모델은 노이즈 제거와 음성 향상을 위해 두 단계로 나누어 작동하는 딥러닝 아키텍처로 첫 번째 단계에서는 주로 크기에 집중하여 노이즈를 제거하고, 두 번째 단계에서는 노이즈 스펙트럼을 개선하고 최종 음성을 생성한다. 두 단계 모두 딥러닝 네트워크를 사용하며, 경량화된 컨볼루션 모듈을 사용하여 효율적으로 처리하여 노이즈를 효과적으로 제거하고 깨끗한 음성을 생성한다.
- STT: TT(Speech To Text)는 음성을 텍스트로 변환하는 기술이다. 딥러닝을 이용한 대표적인 STT 모델에는 Facebook AI에서 개발한 wav2vec 2.0과 Open AI에서 개발한 Whisper[2] 모델이 있다. Whisper 모델은 간단한 Transformer 구조를 가지면서도 대량의 데이터로 학습하여 높은 성능을 보여주고 있다.
- GPT: GPT 3.5 API를 이용하여 프롬프트 튜닝을 한 모델이다. 위의 시뮬레이션 파트에 프롬프트 튜닝 방법이 소개되어있다.
- TTS: gTTS라는 Google TTS 라이브러리를 사용했으며, 이는 언제든지 다른 TTS로 대체 가능하다.
결과 및 평가
완료 작품의 소개
프로토타입 사진 혹은 작동 장면
- 데모