← 전체 프로젝트

맑은소리

음성 데이터로 치매를 조기에 가려내는 진단 보조 시스템

기간
2025.05
구성
팀 프로젝트 — 음성 기반 치매 분류 모델 담당
내 역할
음성 기반 치매 분류 — 발화·음향 특성 추출부터 모델 학습·평가까지 (구현은 AI 페어)
Pythonlibrosascikit-learnXGBoostTensorFlow · Keras

한눈에

내가 맡은 범위

팀이 “대화를 유도해 음성을 모으고, 그 음성으로 치매를 가려내는” 시스템을 나눠 만들었고, 나는 치매를 가려내는 부분 전체를 맡았다 — 음성에서 특성을 뽑고, 여러 모델을 만들어 비교하고, 평가까지.

대화를 유도하는 LLM 챗봇, 음성 합성(TTS), 앱은 다른 팀원들이 맡았다.

내가 내린 설계 결정

말의 어떤 변화를 숫자로 볼까 — 발화 특성 7종

치매가 진행되면 말이 단순해지고 자주 끊긴다. 그래서 전사된 문장에서 문장당 단어 수, 음소 착어(발음이 헛나옴), 어순 도치, 머뭇거림, 말 고침, 반복, 말 멈춤 7가지를 직접 수치로 뽑았다. 실제로 정상 → 경도인지장애 → 치매로 갈수록 문장당 단어 수가 평균 13.2 → 11.5 → 8.5개로 뚜렷이 줄었다(다른 지표도 함께 변했다). “말의 무너짐”을 모델이 읽을 수 있는 숫자로 만든 것이 분류의 출발점이었다.

음성 이미지 딥러닝 vs 말버릇 머신러닝 — 둘 다 만들어 비교

음성을 다루는 길은 둘이었다. 음성을 이미지(Mel-Spectrogram)로 바꿔 딥러닝(CNN)에 넣는 방법과, 위에서 뽑은 발화 특성을 머신러닝에 넣는 방법. 어느 쪽이 나을지 미리 알 수 없어 같은 데이터로 둘 다 만들어 비교했다.

모델정상/치매경증/중증
음향 Mel-Spectrogram · CNN0.530.49
발화 특성 · ElasticNet0.600.52
발화 특성 · RandomForest0.820.75
발화 특성 · XGBoost0.850.82
음향+발화 복합0.600.52

정확도(테스트 20%). 발화 특성 + XGBoost가 두 단계 모두 가장 높았다.

결과는 분명했다. 발화 특성 + XGBoost가 정확도 0.85로 가장 좋았고, RandomForest 0.82가 뒤를 이었다. 반면 음성을 이미지로 바꾼 딥러닝은 0.53으로 거의 찍기 수준이었고, 둘을 합친 복합 모델도 0.60에 그쳤다. 화려한 딥러닝보다 “말버릇을 숫자로 뽑아 가벼운 모델에 넣는” 쪽이 이 문제에선 더 정확했다 — 어느 게 맞을지 가정하지 않고 직접 비교해서 얻은 답이다.

한 번에 셋 말고, 두 단계로 — 정상 → 치매 → 중증도

정상·경도인지장애·치매를 한 번에 셋으로 나누면 경계가 흐려 틀리기 쉽다. 그래서 단계로 나눴다 — 먼저 정상/치매를 가르고, 치매로 나오면 다시 경증/중증을 갈랐다. 각 단계 결과를 점수로 합쳐 치매 위험도를 0~100점으로 정량화해, 한 번의 진단이 아니라 꾸준히 지켜볼 수 있게 했다.

어디서 배웠나 — 임상 음성 데이터에 나이·성별까지

모델은 진단이 붙은 임상 음성 데이터(AI Hub 인지기능 장애 음성 — 정상·경도인지장애·치매 3집단)를 직접 모아 학습에 썼다. 음성·발화 특성만이 아니라 나이와 성별도 함께 넣었다. 남성과 여성은 목소리 주파수가 다르고, 나이에 따라 발화 양상도 달라지기 때문이다. 이렇게 사람마다 다른 조건을 모델이 함께 고려하도록 했다.

정직하게 — 내가 한 일

이 프로젝트에서 내가 만든 것은 음성으로 치매를 가려내는 분류 부분 전체 — 음성 전사(STT), 발화·음향 특성 추출, 5종 모델 비교, 2단계 분류, 평가까지다. 모델 코드는 AI를 페어로 구현했다. 대화 유도 LLM 챗봇·음성 합성(TTS)·앱은 팀원들이 맡았다.