Sentence Transformers를 활용한 재생목록 생성기 구축
TL;DR
Hugging Face는 Sentence Transformers를 사용해 노래 가사 임베딩에 대한 의미 검색을 수행하고, 다단계 Gradio 애플리케이션으로 감싼 재생목록 생성기 구축 과정을 상세히 설명합니다. 이 프로젝트는 사전 학습된 임베딩 모델을 활용해 사용자 텍스트 프롬프트와 관련된 노래 콘텐츠를 맞추는 방법을 보여주며, 별도의 모델 학습이 필요하지 않음을 입증합니다.
Sentence Transformers를 이용한 의미 검색
재생목록 생성기의 핵심 기능은 의미 검색을 가능하게 하는 문장 임베딩을 생성하는 데 있습니다. 키워드 매칭이 아니라, 시스템은 사용자의 프롬프트와 의미가 유사한 노래를 식별합니다.
모델 선택 및 구현
이 프로젝트에서는 sentence-transformers/msmarco-MiniLM-L-6-v3 모델을 선택했습니다. 이 모델은 Bing 검색 엔진 쿼리로 학습된 MS MARCO 계열에 속하며, 다양한 분야에서 좋은 성능을 보입니다.
구절 청킹을 통한 긴 텍스트 처리
임베딩 모델은 최대 입력 시퀀스 길이(여기서는 512 토큰)가 제한되어 있어 전체 노래가 모델 용량을 초과해 잘릴 수 있습니다. 이를 해결하기 위해 가사를 작은 청크, 즉 구절 단위로 나누고 각 구절을 개별적으로 임베딩합니다. 이 방법은 검색 정확도를 높이고 모델이 노래 전체 내용을 처리할 수 있게 합니다.
임베딩 생성 및 저장
임베딩은 Sentence Transformers 모델의 .encode() 메서드를 사용해 생성합니다. 이 구현에서는 생성된 임베딩을 pickle 파일로 저장하고, Hugging Face Hub에 데이터셋 형태로 호스팅하여 접근성을 높였습니다.
검색 실행
관련 노래를 찾기 위해 시스템은 util.semantic_search를 사용해 사용자의 프롬프트 임베딩을 사전에 생성된 구절 임베딩 코퍼스와 비교합니다. 충분한 수의 서로 다른 노래가 반환되도록 top_k 파라미터를 20으로 설정했으며, 이는 동일 노래의 중복 구절을 제거한 후 보통 최소 9개의 고유한 노래를 제공합니다.
Gradio를 활용한 다단계 인터페이스 구축
애플리케이션은 Gradio Blocks API를 사용해 비선형 다단계 사용자 경험을 구현하며, 한 단계의 출력이 다음 단계에 반영됩니다.
애플리케이션 워크플로우
- Input: 사용자는 텍스트 프롬프트를
gr.TextArea에 입력하거나 예시를 선택합니다. - Trigger:
gr.Button이generate_playlist함수를 호출합니다. - Processing: 함수는 프롬프트를 인코딩하고 구절 임베딩에 대해 의미 검색을 수행합니다.
- Output: 결과는
gr.Radio컴포넌트를 통해 반환되며,.update()메서드로 동적으로 업데이트되어 식별된 노래 이름을 표시합니다. - Inspection: 사용자는 라디오 옵션에서 노래를 선택해 가사를 확인할 수 있습니다.
데이터 통합
앱은 시작 시 hf_hub_download를 사용해 Hugging Face 데이터셋에서 구절 임베딩, 노래 매핑, 가사 등 필요한 데이터를 직접 로드합니다.
향후 개선 사항 및 자료
프로젝트 작성자는 도구의 기능을 확장할 수 있는 여러 잠재적 방향을 제시합니다:
- Spotify Integration: 자동으로 재생목록을 생성하고 즉시 청취할 수 있는 임베드된 플레이어를 사용합니다.
- Visual Feedback:
HighlightedTextGradio 컴포넌트를 사용해 어떤 구절이 의미 매치를 일으켰는지 정확히 표시합니다. - Embedding Visualization: 임베딩 공간의 시각적 표현을 만들어 노래 간 관계를 더 잘 이해합니다.