-
[3월 3주차-3/17(3)]한국어 Word2Vec: 네이버 영화 리뷰 데이터로 학습하기Why Not SW CAMP 5기/수업 기록 2025. 3. 17. 17:39
Word2Vec은 단어를 벡터로 변환하여 의미를 반영한 연산을 가능하게 하는 기법입니다. 이번 글에서는 네이버 영화 리뷰 데이터를 이용해 한국어 Word2Vec 모델을 학습하는 과정을 단계별로 설명하겠습니다.
1️⃣ 데이터 준비 및 전처리
먼저, 네이버 영화 리뷰 데이터를 다운로드하여 불러옵니다.
import pandas as pd import urllib.request # 네이버 영화 리뷰 데이터 다운로드 urllib.request.urlretrieve("https://raw.githubusercontent.com/e9t/nsmc/master/ratings.txt", filename="ratings.txt") # 데이터 불러오기 train_data = pd.read_table('ratings.txt')
✅ 하는 일
- 네이버 영화 리뷰 데이터(ratings.txt)를 다운로드
- 영화 리뷰와 감성(긍정/부정) 라벨이 포함된 데이터셋 로드
2️⃣ 데이터 정제 및 불용어 제거
데이터에서 한글 이외의 문자 제거하고, 형태소 분석을 통해 불필요한 단어를 제거합니다.
from konlpy.tag import Okt from tqdm import tqdm # 결측값 제거 train_data = train_data.dropna(how='any') # 한글 이외의 문자 제거 train_data['document'] = train_data['document'].str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣]', '') # 불용어 정의 stopwords = ['의','가','이','은','들','는','좀','잘','걍','과','도','를','으로','자','에','와','한','하다'] # 형태소 분석기(Okt) 활용 okt = Okt() tokenized_data = [] for sentence in tqdm(train_data['document']): tokenized_sentence = okt.morphs(sentence, stem=True) # 형태소 분석 및 어간 추출 stopwords_removed_sentence = [word for word in tokenized_sentence if not word in stopwords] tokenized_data.append(stopwords_removed_sentence)
✅ 하는 일
- 한글 이외의 문자 제거 (str.replace('[^ㄱ-ㅎㅏ-ㅣ가-힣]', ''))
- 형태소 분석 (okt.morphs(sentence, stem=True))을 통해 단어를 형태소 단위로 분리
- 예: "배우들이 연기를 너무 잘한다" → ["배우", "들", "이", "연기", "를", "너무", "잘", "하다"]
- 불용어 제거 (예: "은", "는", "이" 등 의미 없는 단어 제거)
- 예: "연기를 잘하다" → "연기" (불용어 "잘", "하다" 제거됨)
- tqdm 라이브러리 사용: tqdm은 반복문 실행 시 진행 상태를 시각적으로 표시해주는 라이브러리로, 데이터 전처리 과정에서 진행률을 확인할 수 있도록 도와줍니다.
3️⃣ 데이터 길이 분포 분석
각 리뷰의 길이를 분석하여 분포를 시각화하여 확인합니다.
import matplotlib.pyplot as plt plt.hist([len(s) for s in tokenized_data], bins=50) plt.xlabel('length of samples') plt.ylabel('number of samples') plt.show()
✅ 하는 일
- 리뷰들의 길이 분포를 시각화하여 데이터 특성을 파악
- 너무 짧거나 긴 문장을 제거하거나, 패딩을 설정할 때 참고
4️⃣ Word2Vec 모델 학습
이제 Word2Vec을 사용하여 단어 벡터를 학습합니다.
from gensim.models import Word2Vec model = Word2Vec(sentences=tokenized_data, # 학습할 문장 데이터 vector_size=100, # 단어 벡터 차원 수 window=5, # 윈도우 크기 (주변 단어 5개까지 참고) min_count=5, # 최소 등장 횟수 (5번 미만 등장 단어 제외) workers=4, # 사용할 CPU 코어 개수 sg=0) # CBOW 모델 사용 (Skip-gram: sg=1)
✅ 하는 일
- Word2Vec()을 사용해 한국어 영화 리뷰 데이터를 학습하여 단어 벡터를 생성
- 파라미터 설명
- vector_size=100 → 각 단어를 100차원의 벡터로 변환
- window=5 → 한 단어를 중심으로 양옆 5개 단어까지 참고해서 벡터 학습
- min_count=5 → 5번 미만 등장한 단어는 학습에서 제외
- workers=4 → 4개의 CPU 코어를 사용해 학습 속도 향상
- sg=0 → CBOW 방식 사용 (Skip-gram을 쓰려면 sg=1)
5️⃣ 특정 단어와 유사한 단어 찾기
학습된 Word2Vec 모델에서 특정 단어와 가장 유사한 단어들을 확인할 수 있습니다.
print(model.wv.most_similar("발연기"))
📌 출력 예시
[('연기', 0.7702), ('연기력', 0.7515), ('어색', 0.7181), ('발음', 0.7179), ('조연', 0.7139), ('미스캐스팅', 0.6840), ('사투리', 0.6780), ('캐스팅', 0.6700), ('권상우', 0.6619), ('명연기', 0.6544)]
✅ 하는 일
- most_similar("발연기") → "발연기"와 유사한 단어들을 찾음.
- "연기력", "어색", "발음", "미스캐스팅" 같은 단어들이 의미적으로 가까운 것으로 학습됨.
📌 최종 정리
1️⃣ 네이버 영화 리뷰 데이터를 다운로드하고, 불필요한 문자 제거
2️⃣ 형태소 분석(Okt)과 불용어 제거를 통해 토큰화 진행
3️⃣ 리뷰 길이를 분석하여 데이터 특성 파악
4️⃣ Word2Vec을 사용해 단어 벡터 학습 (CBOW 방식 사용)
5️⃣ 학습된 모델에서 특정 단어와 유사한 단어 찾기
✅ Word2Vec을 사용하면 단어 간 의미적 관계를 학습할 수 있으며, 검색 엔진, 추천 시스템, 감성 분석 등에 활용 가능!
'Why Not SW CAMP 5기 > 수업 기록' 카테고리의 다른 글
[3월 3주차-3/19]비지도 학습으로 댓글을 분석해보자! (KMeans 군집화) (1) 2025.03.19 [3월 3주차-3/17(4)]Fashion MNIST 데이터셋을 학습하는 인공신경망(ANN) 모델 만들기 (1) 2025.03.17 [3월 3주차-3/17(2)]Word2Vec: 단어를 숫자로 표현하는 방법 (4) 2025.03.17 [3월 3주차-3/17(1)]인공 신경망 학습과 과적합 방지 방법 정리 (0) 2025.03.17 [3월 2주차-3/13]딥러닝 기초 개념 정리 (0) 2025.03.13