본문 바로가기

💻 개발IT/기타

[FastText] 단어 유사도 구현하기

FastText

Word2Vec 개념을 확장하여 페이스북에서 개발하였다.

Word2Vec은 단어를 기반으로 학습한다면, FastText는 단어의 n-gram으로 벡터화하여 Word2Vec을 수행한다. 

가령 n이 3일 경우 test 단어는 <te, tes, est, st> 로 분리되어 벡터로 만든다. 

  ※ 단어의 시작과 끝에는 <, >이 추가된다. 

 

이런 방법을 통해 FastText는 Word2Vec와 차별점을 가진다.

 1) 모르는 단어(OOV. Out Of Vocabulary)에 대해서도 유사도 계산 가능 

 2) 학습 데이터 내 빈도 수가 적었던 단어에 대해서도 유사도 계산 가능

 3) 오탈자도 대응 가능

 

 

샘플 데이터 가져오기

 

이전 글과 동일하게 위키백과의 '이집트' 글을 활용하고자 한다. 

위키백과 글을 복사하여 txt 파일을 생성한다. 

 

[Word2Vec] 단어 유사도 구현하기

 

[Word2Vec] 단어 유사도 구현하기

Word2Vec으로 유사한 단어, 단어 유사도를 간단하게 구현해보자 샘플 데이터 가져오기 https://ko.wikipedia.org/wiki/위키백과:대문 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 위

sunghee2.tistory.com

 

 

라이브러리 가져오기

import re
from gensim.models import FastText
from kss import split_sentences
from konlpy.tag import Okt

 

 

데이터 가져오기

위에서 저장한 txt 파일을 불러온다. 

path = 'sample.txt'
file = open(path)
content = file.read()

 

 

 

이전 Word2Vec 글과 동일하게 전처리를 진행하였다. 

 

전처리 1 - 한글 추출

ko_content = re.sub('[^가-힣ㄱ-ㅎㅏ]', ' ', content)

 

 

전처리 2 - 문장 분리

sentences = split_sentences(ko_content)

 

 

전처리 3 - 명사 추출 및 불용어 제거

okt = Okt()

stopwords = ['은', '터', '것', '수', '로서', '로', '그', '년', '이', '더']
tokens = [[word for word in okt.nouns(sentence) if not word in stopwords] for sentence in sentences]
tokens

 

학습

Gensim 라이브러리를 이용하여 FastText 학습해준다.

model = FastText(tokens, min_count=1, window=2, sg=1)

 

 

유사 단어 추출

model.wv.most_similar("미래")

반응형