프로젝트 개요# 목적# Technical Highlights1. 대용량 데이터 수집 및 처리 Data Collection and Processing2. 라이브 인덱싱 Live Indexing3. 시퀀스 일치 검색 Sequence Matching Search4. 랭킹 및 검색 모듈 Ranking and Retrieval Module5. 추천 모듈 Recommendation Module
프로젝트 개요
Find My Lyrics
는 최근 10년간 발매된 음원에 대한 가사 검색 기능을 제공하는 검색 엔진이다. 현재 약 15만 건 이상의 가사 및 메타데이터를 보유하고 있으며, 주기적으로 추가 발매된 음원에 대한 데이터를 수집하고 인덱싱 할 수 있도록 개발하였다. 검색 모듈의 경우, 해당 서비스의 use case를 반영하여 오탈자 및 부분 검색을 고려한 결과를 출력하도록 설계되었다. 추가적으로, 음원의 가사 임베딩에 기반한 간단한 추천 모듈을 개발하였으며, Youtube API 연계를 통해 검색 결과 페이지 내부 음원 재생 기능 또한 구현하였다.# 목적
Text Technology for Data Science (INFR11145) 는 텍스트 프로세싱에 대한 내용을 중점적으로 다룬다. 특히, 정보 검색(Information Retrieval) 및 검색 엔진(Search Engine), 그리고 텍스트 분류에 활용되는 기술에 초점을 맞추고 있다. 이 프로젝트의 목적은 해당 과정에서 학습한 내용을 바탕으로 실제 활용 가능한 어플리케이션을 개발하는 것이다. 보다 구체적으로, 아래와 같은 내용들을 포함하는 ‘완전히 기능하는 검색 엔진을 기초부터 구축하는 것 (Fully functional search engine built from scratch)’을 목적으로 한다.
- Large Data Collection ( > 100k)
- Text Pre-processing: Tokenization, Normalisation, Stemming, Stopping, …
- Indexing: Inverted Index, Boolean and Proximity Search, Live index, …
- Search Module: Search based on Index, Real-time Search, …
- Retrieval Model(s): Ranked Retrieval, PageRank, Learning to Rank(L2R), …
- Evaluation Methods and Measures: Precision, Recall, MAP, Significance Testing, …
- Query Expansion
- User Interface
# Technical Highlights
1. 대용량 데이터 수집 및 처리 Data Collection and Processing
Find My Lyrics
는 초기 데이터로 최근 10년간 발매된 약 15만 음원에 대한 데이터를 수집하였으며, 신규 발매되는 트랙에 대한 데이터를 일주일마다 자동으로 추가 수집한다. 먼저, 음원에 대한 메타 데이터는 MusicBrainz로부터 수집하였으며, JSON 형태로 제공되는 Dump 파일로부터 약 160만건의 데이터를 수집할 수 있었다. 다음으로, 가사 데이터는 1400만건 이상의 가사 데이터를 보유하고 있는 음악 데이터 서비스 기업인 MusixMatch의 REST API를 통해 수집하였으며, ISRC (International Standard Recording Code)를 기준으로 메타 데이터와 결합하였다. 다만 무료 API의 한계로, 전체 가사의 30%만 수집이 가능했던 부분은 한계점이라고 볼 수 있다. 별도의 두 원천으로부터 수집된 데이터는 결합, 중복 데이터 제거, 가사 내 불필요한 문구 제거, 가사 데이터 수집 불가 음원 제거 등의 후처리 과정을 거쳐 데이터베이스에 적재된다.2. 라이브 인덱싱 Live Indexing
신규 음원은 지속적으로 발매되기 때문에, 데이터베이스를 업데이트하고 다시 인덱싱하는 것은 가사 검색 서비스에 있어서 매우 중요한 부분이다. 신규 데이터는 매주 월요일 수집 되며, 메타 데이터와 가사 데이터가 모두 수집된 후 인덱스 모듈은 이를 기존 인덱스에 점진적으로 추가한다.
3. 시퀀스 일치 검색 Sequence Matching Search
가사 검색은 일반 검색과 다음과 같은 두 가지 특징적인 차이점을 보인다.
- 사용자가 떠올리는 단어들은 일반적으로 순차적이다. 사용자들은 노래 전체에 퍼져있는 단어들을 기억하기보다는, 단 한줄의 가사나 후렴구만을 기억하기 때문이다. (쿼리의 순차성)
- 사용자가 기억하는 가사는 불완전하거나 많은 오타를 포함하고 있을 수 있다. (쿼리의 불완전성)
이러한 특성들 때문에, 기존의 TF-IDF나 Proximity Search 같은 표준적인 알고리즘은 효과가 떨어진다. 따라서, 우리는 검색 및 랭킹 알고리듬이 다음과 같은 두 가지 특성을 지녀야한다고 생각했다.
- 쿼리와 검색 결과 사이에 일치하는 연속된 단어들에 대한 선호 (쿼리의 순차성 고려)
- 일치하는 단어 시퀀스 중간 중간에 일치하지 않는 단어가 존재할 수 있다. (쿼리의 불완전성 고려)
이러한 특성들을 반영하기 위해, 우리는 Common Substring Matching Problem으로부터 영감을 얻은 새로운 Sequence Matching 알고리듬을 구현하였다.
4. 랭킹 및 검색 모듈 Ranking and Retrieval Module
랭킹 모듈은 쿼리 와 검색된 음원 가사 사이의 일치 정도에 따라 검색 결과로써의 적합성에 대한 점수를 계산한다. 검색 결과에 대한 순위가 결정된 후, 검색 모듈은 매칭되는 가사와 곡 정보를 화면에 출력할 수 있도록, 데이터베이스에서 해당 노래에 대한 세부 데이터를 조회하여 관련 snippet을 생성한다.
5. 추천 모듈 Recommendation Module
가사 검색 서비스의 사용성을 향상시키고 웹사이트를 보다 인터랙티브하게 만들기 위해, 컨텐츠 기반 음원 추천 모듈을 추가적으로 구현하였다. 즉, 추천 모듈은 사용자가 검색한 음원의 가사와 유사한 주제를 가진 새로운 노래를 추천하는 것을 목표로 한다. 해당 모듈은 구글의 Universal Sentence Encoder를 기반으로 생성된 가사 임베딩 사이의 유사성에 기반하여 추천 음원을 결정한다.