LLM

작사 LLM 제작 - 1. 데이터 전처리

skydance_blog 2025. 8. 8. 13:13
728x90
반응형

작사 LLM(Large Language Model)을 개발하기 위한 첫 걸음은 바로 신뢰할 수 있고 깔끔한 가사 데이터셋을 확보하고 전처리하는 과정입니다. 이번 글에서는 Kaggle의 공개 가사 데이터셋을 기반으로 진행한 전처리 과정을 소개합니다.

 

⚠️ 본 프로젝트는 비상업적 연구 및 실험 목적이며, 원본 가사 내용은 일절 공개하지 않습니다.
사용된 데이터의 저작권은 원저작자에게 있으며, 본문에서는 오직 전처리 및 모델 학습 과정만을 다룹니다.

 

 

 

📘 1. 데이터 개요

사용한 데이터는 Kaggle에서 공개된 가사 데이터셋으로, 총 11,399개의 곡에 대한 가사가 포함되어 있었습니다.
모델 훈련을 위해 먼저 전처리 과정을 거쳤습니다.

 

 

 

🧹 2. 결측치 제거

데이터프레임에는 'Lyric' 컬럼이 존재하며, 일부 행에는 NaN 혹은 None 등 결측치가 포함되어 있었습니다.
이를 제거하여 텍스트가 있는 가사만 남기는 작업을 먼저 수행했습니다.

# Lyric 컬럼에서 결측치 제거
df1 = df_raw.dropna(subset=['Lyric'])

 

📉 데이터 : 11,399개 → 11,353개로 감소

 

 

 

🚫 3. 이상 키워드 필터링

가사 대신 "lyrics available", "unreleased snippet" 등의 메타데이터 혹은 비정상 문장이 포함된 경우가 많았습니다.
이러한 문장이 포함된 행을 제거하기 위해 아래와 같은 키워드 필터링을 수행했습니다.

# 삭제할 키워드 리스트
keywords = ["lyrics", "available", "release", "unreleased", "snippet"]

# 해당 단어가 포함된 행 제거
df2 = df1[~df1['Lyric'].str.contains('|'.join(keywords), case=False, na=False)]

 

📉 데이터 : 11,353개 → 10,809개로 감소

 

 

 

📊 4. EDA 기반 가사 길이 필터링

가사로서 의미를 가지려면 최소한의 길이를 보장할 필요가 있습니다.
이를 위해 간단한 EDA를 통해 문장 길이의 분포를 살펴본 결과,
길이가 85자 미만인 가사는 의미가 부족하다고 판단하여 제외했습니다.

 

 

EDA 기반 가사 길이 필터링

 

 

# 길이 기준 필터링
df2['length'] = df2['Lyric'].str.len()
df3 = df2[df2['length'] >= 85]

 

📉 데이터 : 10,809개 → 10,744개로 감소

 

 

 

✅ 5. 최종 데이터 수 및 정리

최종적으로 전처리된 가사 수는 10,744개입니다.
초기 데이터 수(11,399개)에 비해 5.7%만 감소했기 때문에,
학습 데이터로 충분히 활용 가능하다고 판단하였습니다.

 

전처리 단계 가사 데이터 수
원본 데이터 11,399
결측치 제거 11,353
이상 키워드 제거 10,809
가사 길이 필터링 10,744

 

 

 

🔜 다음 이야기

이제 이렇게 전처리된 데이터셋을 바탕으로,
LLM을 이용한 키워드 추출 및 요약 작업을 진행하게 됩니다.

다음 편에서는 Hugging Face 모델을 이용해 어떻게 가사에서 핵심 키워드와 주제를 추출했는지,
그리고 이를 작사 LLM 학습 데이터로 어떻게 가공했는지에 대해 상세히 다뤄보겠습니다.

📌 2편 예고: "작사 LLM 제작 - 2. 키워드 추출과 데이터셋 구축"

728x90
반응형