Word2Vec으로
유사한 단어, 단어 유사도를 간단하게 구현해보자
샘플 데이터 가져오기
https://ko.wikipedia.org/wiki/위키백과:대문
위키백과에서 아무거나 한 페이지를 복사해서 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("미래")
반응형
'💻 개발IT > 기타' 카테고리의 다른 글
CSTS 요약 1 - 테스트 개요 (0) | 2023.06.12 |
---|---|
[gitlab-ci.yaml] config contains unknown keys: rules (0) | 2023.03.21 |
[Python] 위키피디아(한국어) 데이터 가져오기 (1) | 2023.02.08 |
[FastText] 단어 유사도 구현하기 (0) | 2023.02.07 |
[Gensim] The vocab attribute was removed from KeyedVector in Gensim 4.0.0. (0) | 2023.01.29 |
[selenium] ElementClickInterceptedException: Message: element click intercepted: (0) | 2022.09.26 |
네이버 지도 API에서 지도 겹침 문제 (0) | 2022.09.22 |
[HTML] Shadow DOM 이란? (feat. 크롤링 실패) (1) | 2022.09.17 |