이미지와 영상처리

🎓 FastText 활용 영화 리뷰 감성 분석 (2024-04-16)

EasyHanAI 2025. 4. 16. 14:37

 

 

✏ 오늘 공부한 내용

오늘은 Gensim의 FastText 모델을 활용하여 영화 리뷰 데이터를 임베딩하고, 특정 단어와 유사한 단어를 추출하는 방법을 실습했습니다. Word2Vec보다 확장성이 좋고, OOV(Out Of Vocabulary) 문제를 해결하는 FastText의 강점을 직접 느껴볼 수 있었습니다.


📁 사용한 코드와 설명

# gensim 라이브러리에서 FastText 불러오기
from gensim.models import FastText

# FastText 모델 생성
ft_model = FastText(
    corpus,         # 학습할 말뭉치
    window=3,       # 중심 단어 기준 앞뒤 3개 단어 참고
    min_count=3,    # 3번 이상 등장한 단어만 학습
    min_n=2,        # 서브워드 최소 길이 (n-gram 시작)
    max_n=2,        # 서브워드 최대 길이 (n-gram 끝)
    vector_size=100,# 임베딩 벡터 차원 수
    negative=10,    # 부정 샘플링 개수
    sg=1            # Skip-gram 방식 사용
)
# ✅ 특정 단어와 유사한 단어 추출
ft_model.wv.most_similar('이정재')
# ✅ corpus에 없는 단어가 존재할 때 확인
print('우주평화' in ft_model.wv.key_to_index)  # → False

# ✅ 없는 단어도 유사한 단어 추출 시도 가능
print(ft_model.wv.most_similar('우주평화'))  # → 오류 없이 출력됨

💡 배운 점

  • FastText의 핵심 장점은 바로 OOV 문제 해결입니다.
    Word2Vec은 학습하지 않은 단어는 벡터로 표현할 수 없지만,
    FastText는 **서브워드 단위(n-gram)**로 학습하기 때문에 유사한 형태를 가진 단어를 근사적으로 예측할 수 있습니다.
  • 예를 들어 '우주평화'라는 단어가 말뭉치에 없더라도, "우주"나 "평화" 같은 부분 단어들이 학습되어 있으면 유사 단어를 예측해줍니다.

🤔 부족했던 점

  • 처음에 .mv라고 잘못 입력해서 "FastText object has no attribute 'mv'"라는 오류를 여러 번 겪었습니다.
    정확한 속성명은 .wv인데, 자꾸 .mv로 쳐서 시간을 허비했네요.
  • OOV 단어가 왜 Word2Vec에서는 오류가 나고, FastText에서는 잘 되는지도 처음엔 직관적으로 이해되지 않았습니다.
    실습하면서 n-gram의 의미를 직접 확인하고 나서야 확실히 이해됐습니다.

🔧 개선할 점

  • n-gram 설정을 더 다양하게 바꿔보고 성능에 어떤 차이가 있는지 실험해봐야겠습니다.
    (예: min_n=2 → min_n=3으로 변경)
  • 영화 리뷰 데이터셋에서 의미 없는 단어(예: 조사, 접속사 등)를 제거하는 전처리를 추가하면 더 정확한 임베딩이 될 수 있겠다고 느꼈습니다.

📌 정리 요약

항목 Word2Vec FastText

OOV 단어 처리 ❌ 오류 발생 ✅ 근사 추론 가능
단어 표현 방식 단어 단위 n-gram 기반 서브워드
메모리 사용량 작음 약간 더 큼
성능 빠름 약간 느리지만 일반화 성능 좋음

📝 마무리

FastText는 단순히 Word2Vec보다 느리다는 이유로 외면하기엔 아까운 모델입니다.
형태소가 다양한 한국어에서는 특히 효과적일 수 있습니다.
오늘은 영화 리뷰 데이터에 적용해봤지만, 이후 감성 분류 모델 학습에도 꼭 활용해보고 싶습니다.