| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 생성형 인공지능
- LangGraph
- SQL
- 소프트웨어 개발
- dementional reduction
- 힙정렬
- 데이터 시각화
- 객체지향
- 기초
- CNN
- 랭그래프
- python기초
- 트랜스포머
- TTS
- RDBMS
- UMAP
- ASR
- 캐글
- 에이전트
- 데이터엔지니어
- CLIP
- python 기초
- RNN
- 머신러닝
- 정보처리기사
- 딥러닝
- Transformer
- 자연어처리
- 알고리즘
- Python
Archives
- Today
- Total
수달이네 기술 블로그
4. FastText 본문
FastText
Facebook AI Research(FAIR)에서 개발한 단어 임베딩 및 텍스트 분류 모델
- Word2Vec과 유사하나, 서브워드(subword)정보를 활용하여 더 강한 성능 발휘
- 단어 단위가 아닌, 단어를 여러개의 n-gram 문자 조각으로 분해 학습한다.
- 이때문에 희귀 단어(Out-of-Vocabulary)처리와 형태소 기반 언어에서 뛰어난 성능을 보임
- 텍스트 분류에도 활용 가능
예시(3-gram)
- 영어: playing > pl, pla, lay, ayi, yin, ing, ng
- 여기서 play, played등은 많은 서브워드를 공유하므로 의미가 가까운 벡터로 처리
- 한국어: 어미, 조사가 붙어 형태가 다양하게 나타난다.
- 그러나, 토큰화를 MeCab등으로 형태소 분석기를 이용해 조사를 분리하면 품사, 어미등을 더 잘 반영한다.
- NFC(일반 표기): U+AC15 = “한국어” = 3개문자
- NFD(정규화): “ㅎ ㅏ ㄴ ㄱ ㅜ ㄱ ㅇ ㅓ” = 자모 8개
- 최소 2~3 최대 4~6 정도의 길이가 적당함.
FastText 해보기
loaded_model = KeyedVectors.load_word2vec_format("kor_w2v") # Word2Vec 모델 로드
- 만든 word2Vec모델을 로드해온다.
model_result = loaded_model.most_similar("한국")
print(model_result)
# [('일본', 0.7266947627067566), ('중국', 0.7214913368225098), ('외국', 0.6808579564094543), ('미국', 0.6744703054428101), ('계', 0.6672414541244507), ('국내', 0.6502709984779358), ('대한민국', 0.629600465297699), ('국산', 0.6115814447402954), ('홍콩', 0.6070912480354309), ('재난', 0.5950663685798645)]
- 단어사전에 있는 텍스트면 가장 관련있는 단어리스트를 뽑아준다.
model_result = loaded_model.most_similar("슬픈수달")
print(model_result)
# KeyError: "Key '슬픈수달' not present in vocabulary"
- 없다면 위와 같은 에러
from gensim.models import FastText
fasttext_model = FastText(tokenized_data, vector_size=100, window=5, min_count=5, workers=4, sg=1)
- FastText모델을 불러와서 학습 시킬 것임.
- vector_size: 생성할 단어 벡터의 차원 수
- window: 컨텍스트 윈도우 크기를 설정. 현재 단어를 기준으로 좌우 몇 개의 단어를 고려할지 정하는 값
- min_count: 코퍼스에서 등장 횟수가 min_count 미만인 단어를 무시
- workers: 병렬 처리를 위한 CPU 코어 개수를 설정
- sg: 학습 알고리즘을 결정하는 Skip-gram(1) / CBOW(0) 선택 옵션
- tokenized_data는 이전에 뽑아낸 토큰들
FastText모델이 실행 완료되면
fasttext_model.wv.most_similar('슬픈수달')
# [('슬픈', 0.944154679775238),
# ('슬픈데', 0.9154887199401855),
# ('슬픈지', 0.8784722089767456),
# ('슬프', 0.840110182762146),
# ('아린', 0.8381637930870056),
# ('아픈데', 0.8134650588035583),
# ('어슬프', 0.8062575459480286),
# ('먹먹하', 0.8058263659477234),
# ('눈물나', 0.7971489429473877),
# ('눈물겹', 0.7945569753646851)]
- 이전엔 뽑아내지 못하던 비슷한 단어를 뽑아낸 것을 확인 가능하다
fasttext_model.wv.most_similar('한국')
# [('우리나라', 0.7421770691871643),
# ('한국사', 0.7245447635650635),
# ('조폭', 0.7051274180412292),
# ('미국', 0.6853338479995728),
# ('국산', 0.6824985146522522),
# ('암흑기', 0.6741575002670288),
# ('외국', 0.6723015308380127),
# ('후진국', 0.6595128178596497),
# ('중국', 0.6578665375709534),
# ('나라', 0.6563915610313416)]
- 있는 단어도 물론 잘 된다.
'AI공부 > 자연어처리' 카테고리의 다른 글
| 6. RNN활용 KOSPI예측(시퀀스데이터) (0) | 2026.02.23 |
|---|---|
| 5. RNN(Recurrent Neural Network)기초 (1) | 2026.02.22 |
| 3. NSMC를 활용한 단어 분류 (1) | 2026.02.20 |
| 2. 자연어 처리(벡터화) (1) | 2026.02.16 |
| 1. 자연어처리 (0) | 2026.02.16 |