- 통화 녹음의 장점 😊: 보이스피싱, 협박, 괴롭힘 등 예상치 못한 상황에서 객관적 자료 확보
- 통화 녹음의 단점 😒: 일상대화, 스팸 등 불필요한 통화 내용까지 모두 저장
음성 기반
wav2vec2.0를 이용하여 통화 녹음된 파일을 긍정, 분노, 공포, 슬픔 4가지로 분류텍스트 기반
BERT를 이용하여 음성에서 잡아낼 수 없는 감정을 대화 속 내용에서 추측- 두 결과에 가중치를 부여하여 합산. 분노, 공포, 슬픔의 값이 임계값을 넘으면 통화 녹음 필요 상황으로 판단
- Azure STT를 사용하여 음성 파일의 텍스트 변환
- koBERT를 이용한 요약문 모델
- Azure 서버의 Funtion App으로 모델 자동 작동
- Android 앱 내의 OkHttp 통신으로 트리거 생성
- 녹음 완료시 기기 외부저장소에 파일 저장 및 서버에 전송
- 멀티스레딩 HTTP Pooling으로 ANR 방지
- 머신러닝 AI 모델 개발을 위한 프로그래밍 언어
- SKT 연계 프로젝트로서, T전화 앱의 서비스 추가를 목표로 Android 개발 환경 채택
- 프로그래밍 언어 Java
- Android UI와 Color Chip 구상
- 클라이언트와 통신하기 위한 서버
- 병렬화 가상머신 통한 모델 동작
▶ 음성 감정 분류
✔ wav2vec2.0
- Facebook wav2vec2.0 전이학습 모델
- Self-Supervised Learning
- Fine-Tuning
- Positive와 Angry 잘 분류
- Accuracy: 0.75
▶ 텍스트 감정 분류
✔ BERT
- 앞 뒤 문맥을 모두 고려할 수 있는 양방향 Encoder 구조
- WordPeice 토크나이저를 subword 식별 → 신조어, 일상어 식별↑
- Positive와 Fear 잘 분류
- Accuracy: 0.76
▶ 음성 + 텍스트 멀티 모달
✔ wav2vec2.0 + BERT
- 각 모델이 잘 감지하는 감정에 따라 가중치 부여
- Accuracy: 0.82
▶ 첫 번째 시도
- 길이가 긴 요약 데이터 제거
- 문서를 BART를 통해 요약
✔ 첫 번째 시도: 결과
- 애매한 성능
- STT 성능상의 단어 오류 존재
- 오타, 불용어 등 부적절한 단어들이 요약에 그대로 포함
- 문장 종료 토큰을 지정했음에도 문장이 마침표로 끝나지 않고 중간에 끊긴 문장이 등장
▶ 두 번째 시도
- Embedding 벡터의 크기가 너무 작아 원문, 요약문의 특성을 모두 담지 못함 → 원문, 요약문의 텍스트 크기 분포를 각각 확인하여 Embedding 벡터 수정
- Kiwi 형태소 분석기를 사용 → 단어 오류, 맞춤법 교정, 불용어 제거
- 마침표로 끝나지 않는 문장 제거
✔ 두 번째 시도: 결과
- 불필요한 단어들이 제거된 탓에 요약 문장이 매끄럽지 않음 → Kiwi 형태소 분석기 사용 기각
- 마침표로 끝나는 온전한 문장들만 등장
- 길이가 너무 짧아 의미가 없는 문장이 등장 + 문장 수가 많은 요약문 등장
▶ 세 번째 시도
- 너무 짧은 문장 제거, 문장 개수 제한
✔ 세 번째 시도: 결과
- 한 두 문장으로 구성된 요약문 생성 성공
▶ 첫 번째 시도
- 문서에서 Sklearn의 CountVectorizer를 사용하여 키워드 추출
- 문서와 문서로부터 추출한 키워드를 BERT를 통해 Embedding
- Cosine Similarity를 사용해 문서와 가장 유사한 키워드 추출
✔ 첫 번째 시도: 결과
- STT 성능상의 단어 오류 존재
- 동사형 등 키워드에 부적합한 단어 등장
- 비슷한 의미의 키워드들이 리턴
▶ 두 번째 시도
- Kiwi 형태소 분석기를 사용 → 단어 오류, 맞춤법 교정, 불용어 제거, 명사만 추출
✔ 두 번째 시도: 결과
- 자연스러운 키워드 추출 성공
- 여전히 비슷한 의미의 키워드들이 리턴
▶ 세 번째 시도
- MMR(Maximal Marginal Relevance) 사용 → 중복을 최소화하고 결과의 다양성 극대화
1) 문서와 가장 유사한 키워드 선택
2) 문서와 유사하고 이미 선택된 키워드와 유사하지 않은 새로운 키워드를 반복적으로 선택
✔ 세 번째 시도: 결과
- 주제 관련성이 높은 키워드 추출
- 키워드 중복을 방지하여 다양한 키워드 추출
성시열(https://github.com/sungsiyul)
- Product Manager
- 음성 감정 분류 모델
- Cloud 서버 VM 네트워킹
김지환(https://github.com/hongju904)
- Android 앱 UI/UX 개발 (구현 내용)
- Cloud 서버와 Android 클라이언트 HTTP 통신
전민기(https://github.com/mk9165)
- 텍스트 감정 분류 모델
- 대화 요약, 키워드 추출
최형준(https://github.com/junhjun)
- 음성 감정 분류 모델
- 음성 + 텍스트 멀티 모달
- Cloud 서버 VM 네트워킹
1️⃣ 첫 번째 시도: 특징 벡터 모델
- 음성에서 같은 시간 간격의 특징 벡터 추출
- Zero Crossing Rate, Chroma STFT, Mel Spectrogram, MFCC, RMS
- 1D CNN
- Reference
🔍 결과
- 특정 감정의 민감도 낮음(angry, sad)
- 특징 벡터 추출 시 오랜 시간 소요 → 특징 벡터 추가 실패
2️⃣ 두 번째 시도: 스펙트로그램 이미지 모델
- 음성에서 같은 시간 간격의 스펙트로그램 이미지 추출
- 시간과 주파수에 따른 진폭의 변화 시각화 기법
- 2D CNN(VGG13)
- Reference
🔍 결과
- 전반적인 정확도 낮음
- 이미지 추출 시 오랜 시간 소요
- 층이 깊은 모델 구조 → 과적합 발생
3️⃣ 세 번째 시도: wav2vec2.0
- 자기지도학습으로 대량 데이터 학습한 효과
- Reference
🔍 결과
- 감정 분류의 정확도 및 분석속도 개선
- 라벨링 된 음성 데이터의 부족함 해결