Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
more
Archives
Today
Total
관리 메뉴

코딩세상

[자연어 처리] 텍스트 전처리 및 단어 임베딩 - fastText 본문

인공지능

[자연어 처리] 텍스트 전처리 및 단어 임베딩 - fastText

필륭 2023. 10. 9. 17:15

- fastText

 

 

앞서 설명한 word2vec의 사진으로 이미지에 있는 단어들을 바탕으로 "엘리스는" 이라는 단어를 추론할 수 있지만, 제시된 문장처럼 새로운 문장을 넣을 시 학습 데이터 내 존재하지 않았던 단어 백터는 생성할 수 없습니다.

이를 미등록 단어문제, out-of-vocabulary라고 합니다.

 

단어를 문자 단위로 나누어서 학습

 

그렇다면 위 문제를 어떻게 해결할 수 있을까요?

앞에서 모델을 학습 시킬 때 단어 단위로 단어 임베딩 벡터를 학습시키는 것이 아닌 각 단어를 문자 단위로 나누어서 단어 임베딩 벡터를 학습시켜서 문제를 해결할 수 있습니다.

 

위에서 설명한 것 처럼 단어를 문자 단위로 나누어 단어 임베딩 벡터를 학습시키게 될 경우 위 사진처럼 학습 데이터에 존재하지 않았던 단어의 임베딩 벡터 또한 생성이 가능해지게 됩니다.

 

fastText를 모델에 적용하는 방법은 매우 간단합니다. 앞에서 우리가 word2vec을 배울 때 자연어처리 라이브러리인 gensim에 fastText라이브러리 역시 구성되어 있으며 이를 호출하여 간단하게 fastText를 적용하여 사용할 수 있습니다.

 

아래의 코드를 통해 fastText 사용 방법을 확인해보겠습니다.

 

from gensim.models import FastText

doc = [["서울에", "살고", "있는", "맥스는", "강아지를", "좋아한다"]]

ft_model = FastText(min_count=1, window=2, vector_size=300)
ft_model.build_vocab(doc)
ft_model.train(doc, total_examples=ft_model.corpus_count, epochs=20)

similar_word = ft_model.wv.most_similar("맥스는")
print(similar_word) #이를 통해 "맥스는"과 각 단어들의 상관관계 비교가능

new_vector = ft_model.wv["종아한다고"]
print(new_vector) # 새로 만든 단어들과 기존의 단어들의 상관관계 비교가능
  • vector_size = 워드 벡터의 특징 값. 즉, 임베딩 된 벡터의 차원.
  • window = 컨텍스트 윈도우 크기
  • min_count = 단어 최소 빈도 수 제한 (빈도가 적은 단어들은 학습하지 않는다.)

 

 

 

 

# 출처 및 참고자료

 

엘리스 AI 트랙 7기 - [이론] 텍스트 전처리 및 단어 임베딩

Comments