본문 바로가기

💻 개발IT/기타

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

Word2Vec으로 

유사한 단어, 단어 유사도를 간단하게 구현해보자

 

샘플 데이터 가져오기

https://ko.wikipedia.org/wiki/위키백과:대문

 

위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 위키백과 우리 모두가 만들어가는 자유 백과사전문서 622,865개와 최근 기여자 1,621명 사랑방 다른 분들과 의견을 교환해봐요! 질문방 지침으로 해소되지 않는

ko.wikipedia.org

위키백과에서 아무거나 한 페이지를 복사해서 txt 파일로 만든다.

 

검색시 아래처럼 단어수가 나오는데 

어느 정도 단어 수가 있는 것을 선택하자.

 

 

필요한 라이브러리 가져오기

import re
from kss import split_sentences
from konlpy.tag import Okt
from gensim.models.word2vec import Word2Vec

 

데이터 불러오기

상단에서 저장한 데이터를 불러와서 읽어준다.

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

전처리 1 - 한글 추출

문서 내 regex를 이용하여 한글만 추출해서 분석시 숫자, 특수문자, 영어 등이 나오지 않도록 한다.

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

 

 

전처리 2 - 문장 분리

문서 내 문장을 분리하여 array로 만들어준다. 

sentences = split_sentences(ko_content)

 

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

okt 객체를 생성하고 객체 내 nouns 함수를 이용해서 문서 내 명사만 추출한다.

그리고 이 명사들이 불용어인지 확인하여 불용어일 경우 제거한다. 

okt = Okt()

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

 

학습

Word2Vec을 이용하여 학습해준다.

  • min_count : 단어의 출현 빈도를 지정하여 학습에 사용할 단어 제한
  • window : 주변 단어 앞 뒤로 어디까지 볼 것인지 지정
  • vector_size : 벡터 차원
model = Word2Vec(tokens, min_count=1, window=2, sg=1)

 

유사 단어 추출

model.wv.most_similar("미래")

 

 

반응형