서론 |
메타휴먼의 귀가 되어줄 STT(Speech to Text) 처리를 어떻게 할지 어떤 모델을 사용할 지 생각해봤다.
STT의 고려사항은 매우 여러가지 있다. 그런 부분에 대한 고려를 하며 모델을 테스트해본다.
본론 |
Considerations
일반적으로 STT라고 한다면 음성파일을 텍스트로 변환해주는 작업을 말한다.
하지만 사람이랑 대화할때는 이런 방식은 괴리감이있다. 그런부분에서 고려할 사항을 간단하게 짚고 넘어갈 것이다.
1. 내가 언제나 불시에 말을 할 수 있고, 언제 말을 끝낼지를 정해놓지 않는다.
즉 내가 말을 시작한 시점부터 녹음해야하며, 내가 말을 끝낸 부분에서 녹음을 끊고 변환해야한다.
내가 어떤시점에서 말을 시작했고 끝냈는지 실시간으로 인지 가능해야한다.
그러기 위해서는 몇가지 방법이 있는데,
1.1. 첫번째는 끊어서 녹음하고 구두점이 나올때 멈추고 앞에 토큰들이랑 적절히 합치는 로직이다. (비추)
별로 좋지 않은 방법인것 같다. 일단 끊키는 부분에서 인식 오류가 생길 수 밖에 없다. 그리고 그 어색한 문맥을 채우기 위해 STT모델단의 자동보정이 들어가는 경우가 있기때문에 더 좋지 않다.
물론 아래와같이 처리할수도 있지만. 이또한 딜레이를 만들어 레이턴시를 높이기때문에 좋지 않은 방법같다.
1.2. 두번째는 Noise Level을 이용하는 방법이다. (추천)
말할때의 소음 정도를 이용하여 소음이 적어졌을 시 끊어서 변환하는 방식이다.
아마 대부분의 음성챗봇이 이런 방식을 사용하고있지 않을까 예상하고 있다. 물론 소음이 많은 공간에서는 좋지 않을 수 있다.
2. 기능성 STT를 사용하는게 좋다.
우리는 비언어적 표현을 통하여 감정을 표현하기도 한다. 표정이라던지 혹은 말투라던지 말이다.
근데 STT를 사용하면 구두점이나 느낌표 같은 문장구호를 지원하지 않는 모델이 있기도 하고. 이는 밋밋한 텍스트에 약간이나마 감정을 넣어주기도 한다. 그렇기에 이러한 부분을 지원해주는 모델을 쓰는게 좋다.
모델 1 : Whisper AI
Open AI에서 만든 STT모델이다 Timestamp를 지원한다.
Model
Source
Result
테스트로 돌려보았고 결과는 다음과 같았다.
"segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 2.0, "text": " \uc544 \uc9c4\uc9dc \uc544\uc774\uc528", "tokens": [ 50364, 2216, 7106, 2216, 3946, 242, 101, 50464 ], "temperature": 0.0, "avg_logprob": -0.4883014424641927, "compression_ratio": 1.5061728395061729, "no_speech_prob": 0.10356370359659195 }, { "id": 1, "seek": 0, "start": 2.0, "end": 3.0, "text": " \uc544 \ub2e4\ub4e4 \uc7a0\uae50 \ubd10\ubd10", "tokens": [ 50464, 2216, 47660, 43479, 8649, 2998, 16808, 50514 ], "temperature": 0.0, "avg_logprob": -0.4883014424641927, "compression_ratio": 1.5061728395061729, "no_speech_prob": 0.10356370359659195 }, ..... |
평가
직접만든 라벨링 | 모델 출력데이터 |
아 진짜 아이씨 아 다들 잠깐 봐봐 우리 거래처 부장한테 오빠라고 한사람 누구야 어? 박대리 너야? 네? 사.. 사장님 저겠습니까? 누구야 그러면! 이과장! 너야? 아니야? 씨이...... 아니면 아니라고 말을하면 되잖아! 아이씨 간차장! 뭐요 아니야! 김.. 김사원 네? 혹시.. 혹시 자네야? 네! 아 이씨 처음부터 자네라고 하면 되잖아! 왜 순서를 기다리는거야! 아 나 갑갑하네 증말로 진짜! 옥지씨 왜 오빠라고했어요? 네? 저보다 오빠니깐요. 알았어 병신아 네? 왜 저한테 병신이라고 하세요? 병신이니까 어? |
[00:00.000 --> 00:02.000] 아 진짜 아이씨 [00:02.000 --> 00:03.000] 아 다들 잠깐 봐봐 [00:03.000 --> 00:05.000] 우리 거래치고 부장한테 오빠라고 하는 사람 누구야 [00:05.000 --> 00:06.000] 어? [00:06.000 --> 00:07.000] 박자리 너야? [00:07.000 --> 00:08.000] 네? [00:08.000 --> 00:10.000] 사...사장님 저겠습니까? [00:10.000 --> 00:12.000] 누구야 그러면 [00:12.000 --> 00:13.000] 이거장 [00:13.000 --> 00:14.000] 어? [00:14.000 --> 00:15.000] 아니야? [00:16.000 --> 00:19.000] 아니면 아니라고 말을 하면 되잖아 [00:19.000 --> 00:21.000] 아이씨 [00:21.000 --> 00:22.000] 간짜장 [00:22.000 --> 00:23.000] 너요 [00:23.000 --> 00:24.000] 아니야 [00:24.000 --> 00:25.000] 김... [00:25.000 --> 00:26.000] 김사원 [00:26.000 --> 00:27.000] 네? [00:27.000 --> 00:28.000] 혹시 자네야? [00:28.000 --> 00:29.000] 네 [00:29.000 --> 00:30.000] 아이씨 [00:30.000 --> 00:32.000] 처음부터 자네라고 하면 되잖아 [00:32.000 --> 00:34.000] 왜 순서를 기다리는 거야 [00:34.000 --> 00:35.000] 됐지 [00:35.000 --> 00:36.000] 아 나 값값하네 [00:36.000 --> 00:37.000] 정말로 [00:37.000 --> 00:38.000] 진짜 [00:39.000 --> 00:40.000] 옥지씨 [00:40.000 --> 00:41.000] 왜 오빠라고 했어요 [00:41.000 --> 00:42.000] 네? [00:42.000 --> 00:43.000] 저보다 오빠니까요 [00:44.000 --> 00:45.000] 알았어 병신아 [00:45.000 --> 00:46.000] 네? [00:46.000 --> 00:47.000] 왜 저한테 병신이라고 하세요 [00:47.000 --> 00:48.000] 병신이니까 [00:49.000 --> 00:50.000] 어? |
총평
얼추 잘 맞는 것 같아 일부러 좀 알아듣기 어려울만한 영상으로 골랐는데 작정하고 언어 유희식으로 노린
간차장 -> 간짜장 이런 부분은 확실히 잘못 알아듣긴 했다.
해당 모델은 출력의 시간값도 같이주니 겹치는 입력을 넣고 합치기에 나쁘지않은 듯 보인다.
SpeechRecognition Integration Module
또 다른 STT모델들을 조사하다가 유명한 STT모델들을 통합시켜놓은 파이썬 모듈을 발견했다.
이 패키지에는 굉장히 여러개의 STT모델을 통합시켜 놓았는데 아직 완벽하지는 않은것 같지만 사용하기 편리했다.
그 중에서 google에서 지원하는 로컬 모듈이 있길래 사용해봤다.
해당 모듈의 좋은점은 마이크 인식과 실시간 인식 도구를 지원하기에 몇몇 STT모델에서 실시간으로 사용할 수 있다는 점이였다.
출력 (Google Speech Recognition)
모델 출력 |
Start 아아 안녕하세요 speech recognition model test 하려고 합니다 잘 돌아가고 있는 건지 모르겠는데요 지금 나오는 단어들을 보니까 얼추 잘 돌아가고 있는 거 같네요 지금 결과를 지켜보니까 뭔가 그 말 하다가 중간에 멈추면 그걸 단위로 인식을 하는 거 같아요 그럼 테스트는 여기까지 해 보도록 하겠습니다 Stop |
생각보다 잘 돌아가는 모습입니다. 생각하는것 보다는 덜 실시간이긴 한데 이렇게 나오는것도 나쁘지 않은것 같다.
그래도 조금 딜레이가 있는 모습이라 아쉬운 부분이다.
조금 더 테스트 해 본 결과
마침표나 느낌표, 물결표 등의 기호들이 없는게 아쉬운 부분이다.
모델 출력 |
Start 아 근데 이거 마침표 안 해 주나 진짜 마침표를 안 해 주는 거 같아 아 좀 아쉬운데 야 이 정도면 된 거 같다 오케이 Stop |
결론 |
우선 google stt, whisper ai 이렇게 2개 모델을 알아봤다.
google stt는 실시간 이용이 가능하다는 점에서 좋았지만, 각종 부호 생성을 하지 않아 대화의 분위기 전달이 아쉬웠다.
whisper ai는 분위기나 말의 톤을 잘 이해하는 느낌을 받았지만, 실시간으로 이용하려면 좀 손봐야 할 것 같다.
'B급 개발물 > 메타휴먼 프로젝트' 카테고리의 다른 글
6. 첫번째 POC 개발 및 테스트 (0) | 2024.03.04 |
---|---|
5. 대화 History와 Retrieval 정리 (0) | 2024.03.02 |
4. LLM 모델조사 (0) | 2024.03.01 |
3. TTS 모델 조사 (0) | 2024.02.28 |
1. 버추얼 휴먼 개발 프로젝트 (0) | 2024.02.24 |