Skip to content

dldmsals/kpop_lyrics_analysis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

K-POP 가사 시대별 의미 변화 분석

Word2Vec 임베딩을 활용하여 K-POP 가사에서 특정 키워드의 의미가 시대별로 어떻게 변화했는지 분석하는 프로젝트입니다.

개요

멜론 차트 데이터(1996-2025)를 기반으로 3개 시대(Era)로 나누어 각 시대별 Word2Vec 모델을 학습하고, 키워드의 유사 단어 변화를 추적합니다.

시대 기간 특징
Era1 1996-2005 1세대 아이돌, 발라드 전성기
Era2 2006-2015 2세대 아이돌, K-POP 글로벌화
Era3 2016-2025 3-4세대 아이돌, 다양한 장르

분석 키워드

이별, 사랑, 연락, 새벽, 친구, 거울, 약속, 눈물

요구사항

pip install pandas gensim scikit-learn matplotlib openpyxl

데이터 구조

KPOP_LYRICS_ANALYSIS/
├── processed_lyrics/          # 전처리된 가사 데이터 (입력)
│   ├── Processed_1996.xlsx
│   ├── Processed_1997.xlsx
│   └── ...
├── output/                    # 분석 결과 (출력)
│   ├── analysis_report.txt    # 시대별 유사 단어 요약
│   ├── word_sources_report.txt # 유사 단어 출처 곡 상세
│   └── tsne_*.png             # t-SNE 시각화
├── lyrics_semantic_analysis.py # 메인 분석 코드
└── README.md

입력 데이터 형식

processed_lyrics/ 폴더의 Excel 파일에는 다음 컬럼이 필요합니다:

컬럼 설명
Year 연도
Month
Rank 차트 순위
Title 곡 제목
Artist 아티스트
Song_ID 곡 고유 ID (중복 제거용)
Lyrics 원본 가사
Processed_Tokens 형태소 분석된 토큰 리스트 (문자열)

실행

python lyrics_semantic_analysis.py

출력 결과

1. analysis_report.txt

시대별 키워드 유사 단어 요약:

■ '이별'의 시대별 의미 변화
--------------------------------------------------

[Era1 (1996-2005)]
  기약, 예고, 서글프다, 울먹이다, 충분히, ...

[Era2 (2006-2015)]
  아프다, 헤어지다, 버려지다, 후유증, ...

[Era3 (2016-2025)]
  결코, 뒤돌아서다, 베이다, 잠수, 찢어지다, ...

2. word_sources_report.txt

각 유사 단어가 등장한 곡 목록과 원문 가사 문맥:

■ 졸리다 (유사도: 0.732) - 총 8곡
-------------------------------------------------------
  [2018] 벤, 김원주 (2F) - 첫날밤 #94
    → "...12시가 지나면 넌 항상 졸리다 하며 전화를 걸었는데..."
  [2021] TWICE (트와이스) - Alcohol-Free #20
    → (토큰 매칭, 원문 문맥 미발견)

3. t-SNE 시각화 (tsne_*.png)

각 키워드별 시대별 의미장(semantic field) 시각화:

  • 중심: 타겟 키워드 (빨간색)
  • 주변: 유사 단어들 (거리 = 의미적 유사도)

주요 파라미터

파라미터 기본값 설명
vector_size 100 Word2Vec 임베딩 차원
window 4 문맥 윈도우 크기
min_count 5 최소 등장 횟수
min_doc_count 5 최소 등장 곡 수

분석 방법론

Word2Vec (Skip-gram)

  • 단어의 분포적 의미(distributional semantics)를 학습
  • "비슷한 문맥에서 등장하는 단어는 비슷한 의미를 가진다"
  • 빈도가 아닌 문맥 패턴의 유사성을 측정

필터링

  • min_doc_count: 특정 곡에만 등장하는 단어(과적합) 제거
  • 불용어: 의미 없는 기능어 제거 (하다, 되다, 나, 너 등)
  • 의성어: 반복 어구 제거 (라라라, 둠칫둠칫 등)
  • 중복 제거: 시대별로 Song_ID 기준 동일 곡 제거 (같은 곡이 여러 시대에 차트인했으면 각 시대에서 유지)

출처 추적

  1. Processed_Tokens에서 원형(lemma) 매칭 → 형태소 분석기가 복원한 모든 활용형 포함
  2. Lyrics에서 어간 검색 → 원문 문맥 추출
  3. 단어 경계 확인 → '수군대'가 '군대'로 잘못 매칭되는 것 방지

결과 해석 예시

'연락'의 시대별 변화:

  • Era1 (1996-2005): 버릇, 화내다, 귀찮다 → 연인 간 갈등/짜증의 맥락
  • Era2 (2006-2015): 부재중, 배터리, 일주일 → 휴대폰/일상의 맥락
  • Era3 (2016-2025): 답장, 문자, 졸리다 → 메신저/밤늦은 대화의 맥락

License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages