견리더의 알(R)파(Python)고

고용 관련 뉴스기사 분류 및 토픽 모델링 - 3 (word2vec) 본문

프로젝트

고용 관련 뉴스기사 분류 및 토픽 모델링 - 3 (word2vec)

견리더 2020. 11. 23. 13:47

이제 단어 임베딩 방법 중 하나인 word2vec를 쓸 것이다. 이 방법은 같이 등장하는 단어는 비슷한 의미의 단어이다라는 명제가 기본 전제이다. 그래서 같이 등장하는 단어들을 비슷한 위치의 벡터값을 갖게 해준다. ... 나는 문과출신이라서 잘 모르겠지만 여기 블로그에서 아주 친절하게 설명 해 주신다. 하나하나 차근차근 읽어보자. 나름 재미있다.

 

Word2Vec으로 문장 분류하기 · ratsgo's blog

 

Word2Vec으로 문장 분류하기 · ratsgo's blog

이번 포스팅에선 요즘 인기를 끌고 있는 단어 임베딩 방법론 가운데 하나인 Word2Vec을 활용해서 문장을 분류하는 방법에 대해 이야기해보려고 합니다. 우선은 뽐뿌, 클리앙, 세티즌 등 휴대폰 리

ratsgo.github.io

이제 word2vec의 기본 원리를 알았으니 이제 직접 해보자. 코드는 아주 간단하다.

임포트 할 것은 이미 이전에 따로 정리해 놓았으니 참고하면 될 것이다.

 

embedding_model = Word2Vec(data50['words'], size=100,
			window = 6, min_count=100, workers=4, iter=100)

words는 단어 형태소 분석이 된 list형태의 단어들이다. 이전 포스트에서 형태소 분석한 결과를 사용했다.

 

size는 백터의 크기를 말한다. 보통 100차원을 사용하며 최대 300~500차원을 사용하기도 한다만 100차원이 적당하다.

 

window = 6 은 각 단어의 앞뒤 어느 정도까지 관련 단어로 볼 것이냐는 수치다. 6은 앞 뒤 6단어까지 보겠다는 뜻

 

min_count=100 단어들의 출현빈도가 50번 미만인 단어는 분석에서 제외하라는 것이다. 모든 단어를 다 본다면 오히려 분석의 정확도가 떨어질 수 있다.

 

workers=4 cpu 쿼드코어를 사용하란 뜻이다. 컴퓨터 성능에 맞게 조절하면 된다. 분석 결과에는 영향을 끼치지 않고 분석 속도에 영향을 끼치는 부분이다.

 

iter=100 반복학습의 수이다. 100번 반복하라는 뜻이고 횟수가 늘수록 시간도 오래 걸리도 분석결과도 조금씩 달라진다. 적당한 수를 찾아 선택한다. 보통 100번 정도면 적당히 원하는 결과를 볼 수 있었다.

 

이제 (컴퓨터가) 열심히 만든 모델을 고이 저장하자.

 

embedding_model.wv.save_word2vec_format('C:/Users/USER/Desktop/1~8newsurl/w2v')# 모델 저장'''
embedding_model = KeyedVectors.load_word2vec_format('C:/Users/USER/Desktop/1~8newsurl/w2v') # 모델 로드

 

로드도 이런식으로 하면 된다.

 

이제 모델이 잘 나왔는지 시험 해보자

 

embedding_model.most_similar('고용')

이 코드를 쓰면 고용에 가장 비슷한 뜻을 가진 단어를 10개 뱉어준다.

나의 결과는 이렇다. 어느정도 비슷한 뜻의 단어들이 나온 것같다. 저 뒤에 숫자는 코사인 유사도 이다. 1에 가까우면 비슷한 단어라는 뜻이다.

embedding_model.similarity('청년','일자리')

위의 두 단어의 코사인 유사도를 구해준다.

꽤 높게 나온다.

 

다음 포스팅은 이를 이용하여 고용 관련 뉴스기사를 뽑아볼 예정이다.

고럼 이만 총총...