수많은 데이터를 수집하고 가공하여 새로운 정보의 가치를 얻어내는 빅 데이터 시대를 뛰어넘어, 현재는 이러한 데이터를 기반으로 한 추천 시스템, 스마트 자동차와 같은 머신러닝 서비스 기술이 보편화되고 있습니다. 특히 특정 사용자가 관심을 가질만한 정보를 추천하는 추천 시스템은, 넷플릭스의 온라인 스트리밍 서비스나 멜론의 음악 스트리밍 서비스 등에서 필수적인 역할을 하고 있습니다. 하지만 낮은 추천 시스템의 성능은 사용자의 취향이 충분히 반영되지 않은 컨텐츠 제공을 유발할 수 있으며, 이는 사용자의 서비스 만족도 감소로 이어질 수 있습니다. 이러한 추천 시스템의 성능은 학습 데이터의 품질에 크게 의존하며, 데이터 전처리를 통해 머신 러닝 모델의 성능을 향상시킬 수 있습니다. 따라서 본 과제에서는 음악 추천 시스템을 대상으로 다양한 데이터 전처리 기법을 적용하고 성능을 비교하려 합니다.
본 졸업과제는 음악 추천 모델의 성능을 향상시키기 위한 효과적인 전처리 방법을 분석합니다. 음악 추천을 위한 플레이리스트 및 음악 데이터에 다양한 전처리를 적용하고, 각 전처리 방식에 따른 추천 시스템의 성능을 비교합니다. 플레이리스트 및 음악 데이터의 태그 및 장르는 자연어 처리, 불균형 데이터 처리 등 다양한 전처리를 통해 각 전처리 조합 별 데이터셋을 생성합니다. 이후 이러한 태그 및 장르 텍스트 데이터를 기계가 이해하고 처리할 수 있는 벡터 형태로 변환합니다. 본 과제의 음악 추천 모델은 앞서 생성한 두 벡터 값의 유사도를 계산하여 가장 유사한 10곡의 음악을 추천하고, 비지도 학습 평가 지표를 통해 모델의 성능을 평가합니다. 이 과정을 각 전처리 조합 및 유사도 측정 방식에 따라 서로 다른 조건으로 수행하여 그 결과 및 모델 성능을 비교합니다. 이를 통해 음악 데이터 전처리 별 효율성을 비교하고 음악 추천 모델의 성능을 보편적으로 향상시킬 수 있는 전처리 방식을 찾아내는 것이 본 과제의 최종 목표입니다.
진현, [email protected], 음악 추천 사이트 모듈 구현, 결과 분석
임우영, [email protected], 태그 전처리, 음악 추천 사이트 로직 구현
김영수, [email protected], 장르 전처리, 음악 추천 사이트 디자인
공통, 음악 추천 모델 개발
song_meta_with_likes.json
파일은 용량 제한으로 인해, 외부에서 다운받아 아래 지정한 경로에 추가해야합니다. 데이터셋 다운
./Music_Recommender_System/polls/Datasets/
- 웹 페이지 실행을 위해 PyCharm에서 Django를 설치해야합니다. How to Download Django
- PyCharm에서 프로젝트를 생성합니다.
- PyCharm에서 추가적으로 설치해야 할 라이브러리 목록입니다.
pandas
gensim
scikit_learn
google_trans
nltk
konlpy
- PyCharm의
./Music_Recommender_System/
경로에서python manage.py runserver
명령어를 입력해 서버를 실행합니다. - 웹에서
127.0.0.1:8000/polls/
을 입력해 음악 추천 페이지에 접근합니다.
추천 모델은 샘플링된 플레이리스트 수, 각종 전처리 적용 여부에 따라 다른 결과를 도출합니다.
- 추천 모델의 샘플링 수는 프로젝트의
./Music_Recommender_System/polls/views.py
line 59의 n 값을 수정하여 변경할 수 있습니다. - 음악을 검색해 선택할 수 있으며
선택한 음악 추가
를 눌러 사용자 플레이리스트의 음악 목록에 추가할 수 있습니다. - 태그를 입력하여
태그 추가
를 눌러 사용자 플레이리스트의 태그 목록에 추가할 수 있습니다. - 각종 전처리는 웹 페이지의
전처리 방식 선택
에서 변경할 수 있습니다.
-
태그 자연어 처리 과정은 웹 페이지의
한국어 전처리
,영어 전처리
를 선택해 변경할 수 있습니다. 선택하지 않는 경우 전처리를 적용하지 않으며 한국어와 영어를 모두 선택할 수 없습니다. -
태그 불균형 처리 과정은 웹 페이지의
태그 불균형 처리
를 선택해 변경할 수 있습니다. 선택하지 않는 경우 전처리 적용하지 않습니다. -
장르 불균형 처리 과정은 웹 페이지의
장르 불균형 처리
를 선택해 변경할 수 있습니다. 선택하지 않는 경우 전처리 적용하지 않습니다. -
장르 임베딩 과정은 웹 페이지의
장르 임베딩 방식 전환
을 선택해 변경할 수 있습니다. 선택하지 않는 경우 임베딩 방식을 CountVectorizer로 적용하며 선택한 경우 TF-IDF로 적용합니다.
음악 추천
을 눌러 음악과 태그 목록, 전처리 적용 여부를 고려하여 음악을 추천 받을 수 있습니다.
결과 분석을 위한 데이터 수집은 ./Music_Recommender_System/polls/Recommend_Model_Tester.ipynb
의 코드를 사용했습니다. 이 코드에서 사용된 음악 추천 모델의 매개 변수 중 모델과 전처리 방식 선택에 관련한 매개 변수는 param
이라는 이름의 리스트 변수로 관리했습니다.
음악 추천 모델에서 param
으로 관리되지 않는 매개 변수는 test_my_songs
, test_my_tags
, song_tag_appended
, w2v
, weight_mat_cv
, weight_mat_tf
, tag_weights
, tag_weights_all
입니다.
음악 추천 모델에서 param
으로 관리되는 매개 변수는 rec_num
, simi_mode
, tag_imb
, genre_imb
, mode
, weight_mode
, tag_mode
입니다.
-
test_my_songs - 사용자 플레이리스트의 음악 목록
-
test_my_tags - 사용자 플레이리스트의 태그 목록
-
song_tag_appended - 샘플링된 플레이리스트의 음악, 태그 목록
-
w2v - 학습된 Word2Vec 모델
-
weight_mat_cv, weight_mat_tf - 가중치가 적용된 장르 임베딩 벡터 행렬 ( CountVectorizer, TF-IDF )
-
tag_weights, tag_weights_all - 가중치가 적용된 태그 임베딩 벡터 ( 최대치 기반 가중치 부여 방식, 전체 개수 기반 가중치 부여 방식 )
-
param - 값의 변경이 필요한 매개 변수 리스트
-
rec_num - Feature 우선순위에 따른 모델 선택 ( 1: 장르 유사도 우선 모델, 2: 태그 유사도 우선 모델 )
-
simi_mode - 유사도 측정 방식에 따른 모델 선택 ( 'cos': 코사인 유사도 사용 모델, 'pea': 피어슨 유사도 사용 모델 )
-
tag_imb - 태그 불균형 처리 ( False: 미적용, True: 적용 )
-
genre_imb - 장르 불균형 처리 ( False: 미적용, True: 적용 )
-
mode - 장르 임베딩 방식 ( 'cv': CountVectorizer, 'tf': TF-IDF )
-
weight_mode - 장르 불균형 처리 적용 방식 ( 0: 최대치 기반 가중치 부여 방식, 1: 전체 개수 기반 가중치 부여 방식)
-
tag_mode - 태그 불균형 처리 적용 방식 ( 0: 최대치 기반 가중치 부여 방식, 1: 전체 개수 기반 가중치 부여 방식)
-