글쟁이, 코딩한다

0115 / k_digital 28일차 / 미드프로젝트 본문

나는 코딩도 한다/TIL

0115 / k_digital 28일차 / 미드프로젝트

Algori 2021. 1. 17. 21:32

0. 

  멜론 장르별 가사 데이터 기반 추천 서비스 구축

 

  지금까지.

  1.  프로젝트 주제 : 텍스트 데이터 활용 유사도 분석&ML 적용 -> 멜론 장르별 스테디셀러 가사를 메인 데이터로 채택
  2.  가사 데이터를 크롤링으로 얻어내기(쉽지 않음)
  3.  획득한 데이터를 쓰기 위한 형태소 분석(쉽지 않음2) 
  4.  유사도 분석 기반 추천 서비스 & 가사 장르 예측 모델 구축

결과물 내기

 

  얻어낸 데이터에 바탕해 결과물을 만들어낸다. 해당 프로젝트의 주목적은 실제 서비스 제공이 아닌, 공부&발표에 있다. 따라서 목적에 맞는 결과물을 제시해야 한다. 이에 따라,

  • 데이터 분석 결과 시각화
  • PPT
  • 작업 과정의 논리적 연결고리
  • 서비스 & 모델의 샘플 데이터 활용 결과
  • 코드

가 얻어내야할 메인 목적이었다.

 

실제 나온 결과물

 

  오전 시간을 활용해 각자 결과물을 내고 이를 취합했다.

  시각화를 위해서는 워드클라우드, 장르별 품사 빈도수 그래프(바 그래프)를 활용했다. 아울러 답가&리메이크&표절시비가 붙은 곡들의 샘플 데이터 유사도 비교, 샘플 PPT가 나왔다.

 

  이를 기반으로 발표의 맥락을 정리한다.

 

발표 맥락

 

  우선 1번. 데이터 선택. 왜 노래 가사라는 텍스트 데이터를 선택했는가.

  노랫말이 주는 친숙함, (멜론의) 친절한 태깅, 다양한 데이터 활용법.

  또, 노랫말이라는 텍스트의 중요도. 이는 자연스레 우리가 추구한 결과물 - 데이터 시각화, 추천 서비스&장르 예측 모델 구축의 이유로 이어진다.

 

  2번. 데이터 수집. 그럼 그 데이터 어떻게 모았나.

  데이터를 모으기 위한 크롤링 과정이 이어진다. URL 분석, 사이트 HTML 분석, 예외 처리(19금 가사, Varius Artist 등).

  코드를 작성하고 IP 밴을 지나 데이터를 모아내기까지, 오랜 시간이 걸렸다.

 

  3번. 데이터 전처리. 데이터는 어떻게 처리했나.

  형태소 분석(토크나이즈)이 데이터 처리의 핵심. 코드가 갖춰져 있어 그리 어렵지는 않았다. 우리는 Konlpy 라이브러리의 Okt 모듈을 활용했다. 성능도 나름 괜찮았고, 무엇보다 속도가 빨랐다. 이어, 단순한 코드 소개. 불용어를 결정한 기준들. 장르별로 데이터를 모은 이유. 데이터 취합.

 

  다음 4번. 이제부터는 결과물이다. 데이터 시각화

  데이터 시각화는 활용법이 괜찮다. 워드클라우드라는 익숙하면서도 힘있는 시각화 방안이 있다. 품사 분석 역시 노랫말이라는 특수 텍스트의 성질을 분석하기에 맞다. 그 외에도 시간상 생략했지만, 크롤링으로 함께 수집한 가수명, 발매일 등도 활용해볼 법했다. 분석 시각화는 아래 블로그들에서 힌트를 많이 얻었다.

 

1. 걸그룹 가사별 데이터 분석 brunch.co.kr/@cloud09/97

 

데이터 분석가의 걸그룹 데이터 분석하기

부제 : 공부하는 데는 덕심이 최고시다 | 나는 아이돌에 관심이 많다. 정확히는 무엇인가를 열심으로 좋아하는 사람들(a.k.a 덕후)에 대해 흥미를 가지고 있다. 아이돌, 게임, 만화, 코스메틱 가리

brunch.co.kr

2. 한국 가요 가사 분석 junhewk.github.io/text/2017/11/10/melonchart-lyrics/

 

한국 가요 50년사, 가사 분석

멜론 시대별 차트는 미국 빌보드처럼 공식 가요 순위 기록이 없는 한국 가요를 여러 출처를 통해 정리한 좋은 자료입니다. 물론 음원 공급을 하는 특정 회사의 저작물이라는 한계가 있을 수 있

junhewk.github.io

 마지막 5번. 추천 서비스와 가사 장르 예측 모델.

 

  여기서는 '효용성'의 측면에서 문제가 있었다.

  '음악이라는 장르에서 가사가 차지하는 중요성'이 어느 정도인가, 이것이 명확하지 않기 때문이었다. 위에 나온 노랫말이라는 텍스트의 중요도가 검증받아야 할 필요성이다. 아울러 가사 유사도를 비교해 추천하는 것이 '독창성'이 중시되는 노랫말에서 제 역할을 할 수 있는가에 대한 질문도 있다.

 

  실제 이 부분은 프로젝트 진행 중 문제가 되기도 했다. 작업을 진행하는 우리들이 해당 결과물에 대한 의구심을 가졌기 때문이다. 따라서, 우리는 이를 해소하기 위한 결과물로

  답가&리메이크&표절시비가 붙은 곡들의 샘플 데이터 유사도 비교

  를 뽑아냈다. 위 분석 결과, 우리가 정제한 데이터들로는 아무리 겉보기에 비슷한 곡들도 유사도는 약 25%~50%에 그치는 것을 알아낼 수 있었다.

 

  이는 아마 한글 형태소 분석의 어려움과도 이어진다. 우리는 시간 관계로 불용어(Stopwords), 변형어를 기본형태로 돌리는 작업(Lemmatisation) 등을 완벽히 수행하지 못했다. 지금은 일일이 손으로 해야하기 때문이다. 영어 형태소분석 라이브러리(nltk)가 영어 데이터 분석 시에는 해당작업을 대신해주는 것에 비하면 아쉬운 일이다. 특히, 노랫말이라는 특수 형태 언어가 낮은 유사도에 더 큰 영향을 준 것으로 파악된다. 왜, 시적 허용처럼.

 

  이러한 논리적인 맥락을 바탕으로, 우리는 우리의 서비스가 '쓸모 있다'는 것을 어필할 예정이다.

 

  이제는 실제 결과물뿐.

  1.   제목을 입력하면 멜론 스테디셀러 4000곡 가운데 가사가 가장 유사한 노래를 추천해주는 작업-코드와 시연   #TF-IDF, 코사인 유사도가 핵심, 사이킷런
  2. 샘플 가사를 집어넣으면 장르를 예측하는 모델-코드와 시연                                                                      #정확도 50%, 구현 모델과 방안에 대해서는 다른 팀원이 작업했다. 추후 공부가 필요하다 - 그리 어려운 모델을 활용하지는 않은 것으로다. 하이퍼파라미터 튜닝도 간단하게만 이뤄졌다.

마무리

 

위 맥락에 따라 나도 블로그 게시글을 하나 작성하는 편이 좋겠다.

다만, 블로그 글에는 이런 고민들보다는 명확한 이유와 빠른 결과 단계 돌입이 중요해보인다.

  (1) 즉, 가사 데이터 분석 -> 이유, 가사는 재밌으니까. 스테디셀러 노래 가사들이 궁금했다.

  이어 크롤링 핵심 코드와 멜론 분석 과정을 제시. (데이터에 실제 활용보다는 이 코드 구현에 궁금증을 가진 사람들이 더 많을 거다. 아마.)

  (2) konlpy를 이용한 데이터 전처리. (코드를 중심으로)

  장르별 가사 분석 데이터. (시각화를 중심으로)

  (3) 유사도 추천 서비스(TF-IDF 코드-> 샘플 시연), 장르 예측 모델(모델 적용 코드-> 샘플 시연)

이 세 게시물로 나눠써볼 예정이다. 딥러닝이 곧바로 이어지는만큼, 강도 높은 복습이 이어질 예정이므로 아마 과정이 끝나고 하지 않을까 싶다. 그간 TIL을 이토록 자세히 쓴 것은 이런 이유였다. 

 

오늘의 블로그 업데이트가 늦은 이유

 

금요일에 쉬고 싶어져서 대신 일요일에 시간을 더 많이 냈다.

Comments