본문 바로가기
projects/PPT Helper

날짜별 진행상황

by 하이방가루 2022. 6. 30.
728x90
반응형

WBS

2022/06/14

- 나를 포함한 팀원 3명이 각자 데이터를 분석하고 전처리하기로 함.

- 명령어 모음(일반남녀) 데이터를 맡음.

- 데이터 정보가 json형식으로 말하는 사람에 대한 많은 데이터와 대본이 있음.

- 파일명과 대본만을 따로 떼어내서 csv파일로 변환.

 

- 다른 데이터의 경우 전사규칙으로 인한 특수토큰과 다중으로 일상표기/발음으로 적혀있는 등 전처리가 까다로움.

 

- 제일 간단한 명령어 모음 데이터를 이용하여 모델을 학습시켜보기로 함.

- 모든 데이터를 한 번에 학습시키기에는 computer resources가 적어 데이터를 1000개씩 나누어 train data와 validation data로 나누어 학습시키려 함.

 

2022/06/15

- 오디오 파일을 학습시킬 때마다 불러와서 변환하는 것은 시간이 너무 많이 소요됨.

- 미리 오디오 파일에서 raw data를 추출하여 csv파일에 저장하기로 함.

 

* csv에 저장된 raw data의 경우 불러왔을 때 문자열로 변화되어 들어옴.

 

- 문자열된 raw data를 ndarray로 변환하는 것이 오디오 파일에서 raw data를 추출하는 것보다 빠름.

- csv에 raw data를 저장하여 사용하기로 확정.

 

- 앞서 계획한대로 1000개의 데이터를 Huggingface를 이용하여 XLSR-53(사전학습된 wav2vec2모델)을 100에포크 정도 훈련시킴.

{'eval_loss': 0.9267768859863281, 'eval_wer': 0.7187196896217265, 'eval_runtime': 11.61, 'eval_samples_per_second': 17.227, 'eval_steps_per_second': 2.153, 'epoch': 100.0}
{'train_runtime': 7706.641, 'train_samples_per_second': 10.381, 'train_steps_per_second': 0.324, 'train_loss': 3.5201705753326418, 'epoch': 100.0}
TrainOutput(global_step=2500, training_loss=3.5201705753326418, metrics={'train_runtime': 7706.641, 'train_samples_per_second': 10.381, 'train_steps_per_second': 0.324, 'train_loss': 3.5201705753326418, 'epoch': 100.0})

 

2022/06/16

- 강의실에서 마이크로 음성을 녹음하여 실제 환경에서의 음성을 잘 인식하는지 테스트

* 실환경에서 실시간 STT모델을 실행했을 때 사람이 알 수 없는 환경음이 들어가 환경음을 텍스트로 만들어 내보냄

 

- 동굴이나 영화관 등 공간감을 주는 룸 잔향이라는 소리의 울림이 실제 데이터에서는 있음.- 강의실의 RIR(Room Impulse Response) 데이터를 획득하고 AI허브 데이터에 적용하여 데이터를 증강

 

- AI허브 데이터에 추가로 소리의 재생속도를 조절하여 말의 빠르기 변화에도 텍스트를 잘 추정할 수 있도록 데이터를 증강하여 모델 학습 실시.

{'eval_loss': 2.384470224380493, 'eval_wer': 1.0407960199004975, 'eval_runtime': 11.1086, 'eval_samples_per_second': 18.004, 'eval_steps_per_second': 2.251, 'epoch': 80.0}

- 과적합의 징후가 보여 훈련을 중단

- WER가 좀 더 높아졌지만 실제 환경에서 녹음한 데이터도 텍스트로 잘 변환함.

 

2022/06/17

* 학습시킨 데이터에 있는 대본의 경우 대부분 정확하게 음성을 텍스트로 변환하지만 대본에 없는 단어들은 잘 변환하지 못함.

- 모든 단어들을 텍스트로 잘 변환해주는 모델을 만들기보다는 PPT 동작에 필요한 단어가 들어가 대본으로 직접 음성을 녹음하여 학습시켜야 함.

 

* 다른 전처리된 데이터와의 통합 단어장을 업데이트시키면서 단어장의 크기가 켜져 모델을 처음부터 다시 시작시켜야 하는 문제가 있음

 

- hangul-utils을 사용하기 위해서는 mecab이 필요하기 때문에 unicode.py만을 가져와 음절을 자모로 분리하거나 합쳐주는 함수를 사용.

- 자모 기반으로 단어장을 구성하여 다시 처음부터 학습 예정.

 

2022/06/20

- 음절기반으로 학습된 모델을 이용하여 pyqt기반의 GUI클라이언트 개발 시작(다른 팀원)

- 모델 학습 과정의 코딩을 반복과정 내부 코드를 밖으로 이동시켜 전체 실행시간을 줄임.

- 자모 기반 단어장을 사용하는 모델 학습 시작

 

- sounddevice 패키지를 이용하여 실시간 음성 입력 및 STT 모듈 개발 시작.

* 적절하게 음성이 입력되는 부분만을 입력 받아서 STT되도록 수정해야 함.

 

- sounddevice 패키지 대신에 SpeechRecognition 패키지로 변경하여 음성을 입력받아 STT하게 만듬.

 

2022/06/21

* 데이터를 1000개씩 나누어 순차적으로 모델을 재학습시켜 조정하기 때문에 tensorboard로 학습경과를 제대로 지켜볼 수 없음.

- 모델 평가가 진행된 후 마다 평가 결과만을 따로 log용 텍스트파일에 추가 저장시켜 학습경과를 한 번에 볼 수 있게 함.

- 50번 이상 성적이 더 나은 평가 점수를 받지 못하면 조기 종료하게 함.

- 모델은 성적이 가장 우수한 모델과 마지막 훈련 모델만 저장되게 함.

 

- 새로운 1000개의 데이터를 학습할 때마다 초기 WER가 5 이하로 양호하여 명령어 모음(일반남녀) 데이터 학습 종료

- 직접 녹음한 PPT관련 명령어 학습을 통해 자모 기반의 단어장을 사용하는 최종 모델 확정

 

2022/06/22

* 음성 입력이 가끔씩 너무 길게 입력되어 STT과정이 너무 길어지는 문제 발생.

- SpeechRecognition패키지를 분석하여 직접 음성 활성 감지(VAD)알고리즘을 구현.

- 고정 Threshold 방식으로 일정 시간 신호가 임계값을 넘지 못하면 그동안 입력받은 신호를 내보내는 단순한 방식이었음.

- 다시 sounddevice를 이용하여 음성 입력부분을 구성하기로 함.

 

2022/06/23

- 음성 활성 감지(VAD)에 대역 필터를 적용하여 고주파 또는 저주파 노이즈에 반응하지 않게 함.

- Symspell 알고리즘을 이용하여 STT결과를 수정시켜 명령어 인식률을 올림.(약 70% -> 90%)

 

2022/06/24

- 임계값을 정할 때 평균과 표준편차를 이용한 시그마규칙을 적용하여 임계값이 너무 높게 설정 되지않도록 함.

* 마이크에서 떨어져 말하는 소리에도 잘 반응하게 됨. 청자의 말소리에 반응할 수 있음.

 

2022/06/27

- 어플리케이션 완성 ( 약 6G)

- onnx모델로 변환하여 어플리케이션에 필요한 패키지 경량화를 시도.

 

2022/06/28

- onnx모델로 변환완료( 모델size : 약 3.5G -> 약 1.2G )

- onnx모델을 양자화하여 모델 크기를 더 줄임 ( 모델size : 약 1.2G -> 300M )

- 양자화되면서 과적합이 되있던 부분이 줄었는지 성적이 약간 더 좋아짐. ( 추후 다른 프로젝트 때에도 비교 분석 필요)

- 필요없는 패키지도 삭제하여 어플리케이션 크기를 줄임 ( 약 6G -> 700M )

- 프로젝트 개발 종료

 

728x90
반응형

'projects > PPT Helper' 카테고리의 다른 글

개요  (0) 2022.06.29

댓글