co-code 님의 블로그

Word2Vec, FastText 본문

python

Word2Vec, FastText

co-code 2026. 6. 10. 19:00
  • Word2Vec
    • 문자를 수치형으로 변환시켜주는 딥러닝 기반의 임베딩 기술
    • 매개변수(parameter)
      • sentences
        • 기본값 : None -> 학습을 시킬 수 있다.
        • 토큰화가 된 문장 데이터 (2차원 데이터)
      • vector_size
        • 기본값 : 100
        • 임베딩 벡터 차원의 개수 (feature의 수)
      • window
        • 기본값 : 5
        • 예측 시 고려할 주변 단어와의 거리 (문맥의 크기)
      • sg
        • 기본값 : 0
        • 0인 경우 : CBOW 방식 (주변 단어들을 이용하여 중심 단어를 예측)
        • 1인 경우 : Skip_gram 방식 (중심 단어를 이용하여 주변 단어를 예측)
      • min_count
        • 기본값 : 5
        • 최소 등장 빈도의 수
        • 적게 등장한 단어들을 제외
      • hs
        • 기본값 : 0
        • 계산의 방식 지정
        • 0 : Negative Sampling (계산량 적음)
        • 1 : Hierarchical Softmax (계산량 많음)
      • epochs
        • 기본값 : 100
        • 반복 학습의 횟수를 지정
      • max_vocab_size
        • 기본값 : None
        • 메모리 제한 사용할 최대 단어의 수
    • 속성
      • wv
        • 학습된 단어 벡터 (class 형태로 출력)
        • 예 : model.wv['단어']
      • wv.index_to_key
        • 단어의 리스트 (학습이 된 단어의 개수) -> 최소 등장 횟수에 영향을 줌
        • 등장 빈도 수에 따라 자동 결정
      • ww.key_to_index
        • 단어 -> 인덱스로 매칭
        • 특정 단어가 인덱스 몇에 위치하는가
      • corpus_total_word : 전체 학습이 된 단어의 개수
      • epochs : 학습의 epoch 수
      • vector_size : 벡터 차원의 수
    • 메서드
      • wv.most_similar(word, topn=10)
        • 특정 단어와 유사한 단어를 출력
        • topn은 유사한 단어의 개수를 출력
      • wv.similarity(word1, word2) : 두 단어 간의 코사인 유사도
      • wv.get_vector(word) : 특정 단어를 벡터로 변환
      • train() : 추가 데이터로 학습
      • save() : 학습된 모델을 저장
      • Word2Vec.load() : 저장되어있는 모델을 로드
  • FastText
    • Word2Vec에서 OOV(Out Of Voca) 문제를 해결하기 위한 모델
    • Word2Vec은 '강아지'와 '강아지들'의 두 단어를 다른 단어로 인식
    • FastText는 기존의 Word2Vec 학습 방식은 동잉ㄹ하지만 기준이 되는 문자가 다름
      • Word2Vec는 단어를 기준으로 하고, FastText는 글자를 기준으로 함
      • FastText : '강아지' -> '강', '아', '지', '강아', '아지', '강아지' (n-gram 방식)
      • subword를 기준으로 문자들을 벡터화
      • Word2Vec의 매개변수들을 이용하지만 추가적으로 subword 관련한 매개변수들이 사용됨
        • 최소 길이의 subword : min_n (기본값은 3)
        • 최대 길이의 subword : max_n (기본값은 6)
        • min_n=1, max_n=1로 설정을 하면 subword 사용 금지 -> Word2Vec 방식을 이용
        • min_n이 max-n보다 작거나 같게 설정
        • bucket 매개변수는 단어(subword) 사전에 개수를 제한 (메모리 과부하 방지 위함)

from gensim.models import Word2Vec, FastText
sentences=[
    ['고양이', '고양이들', '귀엽다', '동물', '반려동물'],
    ['강아지', '강아지들', '귀엽다', '동물', '반려동물'],
    ['달리다', '달리는', '달림', '걷다', '걷는'],
    ['예쁘다', '예쁨', '예쁜', '매력적이다'],
    ['컴퓨터', '컴퓨팅', '컴퓨터들', '기계']
]
w2v=Word2Vec(
    sentences=sentences,
    window=3,				#중심 단어와 주변 단어들의 거리 제한
    min_count=1,			#전체 문서에서 최소 등장 횟수 지정
    sg=1,				#단어 예측 방식( 0 : CBOW, 1 : skip-gram )
    seed=42
)

ft=FastText(
    sentences=sentences,
    window=3,
    min_count=1,
    sg=1,
    seed=42,
    min_n=2
)
#단어 간의 유사도를 확인
print(
    'Word2Vec 단어 간의 유사도 : ', w2v.wv.similarity('강아지', '강아지들')
)
print(
    'FastText 단어 간의 유사도 : ', ft.wv.similarity('강아지', '강아지들')
)
>>>	Word2Vec 단어 간의 유사도 :  0.06403736
	FastText 단어 간의 유사도 :  0.4059004

#비교 대상 단어들
test_text=[
    ['강아지', '강아지들'],
    ['고양이', '고양이들'],
    ['달리다', '달리는'],
    ['예쁘다', '예쁜'],
    ['컴퓨터', '컴퓨팅'],
    ['달리다', '걷다']
]

for word1, word2 in test_text:
    w2v_sim=w2v.wv.similarity(word1, word2)
    ft_sim=ft.wv.similarity(word1, word2)
    print(f'{word1}과 {word2}간의 유사도 : Word2Vec({w2v_sim}) / FastText({ft_sim})')
>>>	강아지과 강아지들간의 유사도 : Word2Vec(0.06403736025094986) / FastText(0.40590038895606995)
	고양이과 고양이들간의 유사도 : Word2Vec(-0.07337046414613724) / FastText(0.46013206243515015)
	달리다과 달리는간의 유사도 : Word2Vec(0.04628411680459976) / FastText(0.3028862476348877)
	예쁘다과 예쁜간의 유사도 : Word2Vec(0.1387229710817337) / FastText(0.06622864305973053)
	컴퓨터과 컴퓨팅간의 유사도 : Word2Vec(-0.05135165899991989) / FastText(0.36511483788490295)
	달리다과 걷다간의 유사도 : Word2Vec(-0.06980345398187637) / FastText(-0.019979456439614296)

 

'python' 카테고리의 다른 글

Transformer  (0) 2026.06.18
Doc2Vec  (0) 2026.06.11
LSA(Latent Semantic Analysis)  (0) 2026.06.04
TF-IDF(Term Frequency-Inverse Document Frequency)  (0) 2026.06.02
RNN(순환 신경망 : Recurrent Neural Network), LSTM  (0) 2026.05.27