OnAIr는 빅데이터 분산 처리 기반의 'AI 라디오' 프로젝트로 사용자가 '사연'과 '희망테마'를 입력하면 그에 맞는 대본과 음악 추천 결과를 생성하여 스트리밍 하는 서비스입니다.
강현 Front-end |
박기현 Back-end |
연제경 PM/Full-Stack |
최규호 Front-end |
최시환 Back-end |
최재용 Data-Engineer |
- 사용자가 제목, 사연을 입력 후 음악의 테마와 DJ를 설정.
- 음악 추천 알고리즘을 통해 사연에 맞는 음악 3가지 추천 및 TTS 생성.
- AI DJ가 사연을 읽고 그에 따른 추천된 음악을 재생.
- 원하는 음악을 내 보관함의 저장 후 나만의 플레이 리스트 생성.
- 플레이 리스트를 재생하면 음악 플레이어 실행.
- 페이지가 바뀌어도 음악 플레이어는 끊김없이 재생.(사용성 강화)
- 공유된 온캐스트를 특정 시간에 라이브 서버에서 재생.(하루 10개 제한)
- 사용자들은 온캐스트를 들으며 소통.
- 마음에 드는 음악은 내 보관함에 추가 가능.
- NameNode 1대, Backup NameNode 1대, DataNode 3대
- YARN과 ZOOKEEPER는 구동 중인 NameNode 상 운영
- 800만 개의 노래 데이터를 HDFS에 적재하여 분산 병렬 처리
- 클러스터 실행, 종료, 재실행 스크립트 작성
- 차원 축소법(PCA)으로 노래 데이터의 특성들의 다중공선성 제거 및 모델 성능 개선
- PySpark와 분산 병렬 처리를 이용한 800만 개의 노래 데이터를 K-평균 군집화
- 실루엣(Silhouette) 계수 기반으로 최적의 K 값 활용
- 사용자 입력 데이터가 속한 클러스터 내 중심점에 가까운 노래 목록 일부 추출
- 추천 알고리즘에 필요한 Valence와 Energy를 얻기 위한 감성 분석 수행
- HuggingFace BERT 토크나이저 및 트랜스포머 모델(XLM-RoBERTa-large) 활용
- 앙상블 모델인 랜덤 포레스트(**sklearn.ensemble.RandomForestClassifier)**를 기반으로 각 노래 특성 별 중요도를 측정
- 전체 특성 중 일부를 제거하여 모델의 성능이 얼마나 변화하는가 기준으로 중요도 계산
- 특성 중요도는 클러스터마다 개별 측정
- Spotify API를 이용하여 키워드(ex. KPOP, ROCK etc.) 별 플레이리스트에 등록된 노래들과 특성 값들을 수집하여 HDFS에 적재
- YARN, ZOOKEEPER를 NameNode 서버 상에서 구동 및 관리
- Flask REST API 서버를 구축하여 사용자에게 추천 결과 제공
- Hive와 Zeppelin를 연동하여 MapReduce 기반 집계 및 시각화 수행
- Hive 메타스토어 DB로 Derby DB 사용
- 라이브에 참여한 사용자에게 실시간 라이브 정보를 제공하는 서버와 라이브 스케줄을 관리하는 서버 사이에 실시간성을 높이기 위해 효율적인 데이터 전달 기술이 필요했습니다.
- kafka 와 zookeeper를 활용해 클러스터를 구축하여, 비동기 메시지 통신을 구현하고 안정적인 라이브 기능을 제공할수 있었습니다.
- 실시간 채팅과 실시간 라이브 방송을 진행을 위해, 사용자들이 서로 데이터를 주고 받아야만 했습니다.
- HTTP Polling 방식 대신, WebSocket 방식을 도입해 불필요한 데이터 전송을 줄여, 서버 부하를 막고, 네트워크 대역폭을 줄일수 있었습니다.