✏ 오늘 공부한 내용
오늘은 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보다 느리다는 이유로 외면하기엔 아까운 모델입니다.
형태소가 다양한 한국어에서는 특히 효과적일 수 있습니다.
오늘은 영화 리뷰 데이터에 적용해봤지만, 이후 감성 분류 모델 학습에도 꼭 활용해보고 싶습니다.
'이미지와 영상처리' 카테고리의 다른 글
| 📚 OpenCV 실습: 이미지 자르기, 사각형 표시, 다양한 확대 방법 비교 (2025-04-28) (0) | 2025.04.29 |
|---|---|
| 🎨 마우스로 영상 위에 그림 그리기 – OpenCV 마우스 이벤트 실습 정리 (2-6 ~ 2-9)📅 작성일: 2025년 4월 20일 (0) | 2025.04.20 |
| 머신러닝 기초 실습 - SVM, 로지스틱 회귀, KNN 분류 모델 비교 (with OpenCV)📅 작성일: 2025년 4월 8일 (0) | 2025.04.08 |
| 📅 2025년 4월 7일 - 머신러닝 모델 비교와 OpenCV 이미지 처리 실습 (0) | 2025.04.07 |