word2vec 사용해서 한 단어와 연관된 단어들 찾아보기
2018. 5. 17. 06:55ㆍPython-이론/python-인공지능
word2vec를 사용해서 단어를 벡터 데이터로 나타내기
사람들은 단어를 사용할 때 이 단어가 어느 의미를 뜻하고 어느 단어들과 비슷하다는 것을 당연히 느낄 수 있습니다. 하지만 컴퓨터는 어떻게 느낄까요???? 우리 컴퓨터는 0과 1밖에 모르는데 ㅠㅠ 그래서 단어들에게 벡터값을 주어 이단어와 다른 단어가 얼마나 가깝고 연관되어 있는지 값을 나타낼 수 있습니다. 하지만 이렇게 어려운걸 어떻게 만들어내냐구요?? 당연히 모듈로 만들어져있습니다. 지금부터 이 모듈을 다운받아 보겠습니다.
gensim Download
pip3 install gensim 을 통해서 다운받을 수 있습니다.
그럼 이전 글의 토지데이터를 사용해서 예제를 실행시켜 보겠습니다.
from konlpy.tag import Twitter from gensim.models import word2vec from bs4 import BeautifulSoup import codecs fp = codecs.open('toji.txt','r',encoding = 'utf-16') twitter = Twitter() bsData = BeautifulSoup(fp,'html.parser') body = bsData.select_one('body > text') lines = body.getText() lines = lines.split('\n') twitter = Twitter() result = [] for line in lines: r = [] words = twitter.pos(line,norm=True) for word in words: if word[1] not in ["Punctuation","Eomi","Josa"]: r.append(word[0]) result.append(" ".join(r).strip()) fileName = "toji.wakati" with open(fileName,'w') as fp: fp.write("\n".join(result)) data = word2vec.LineSentence(fileName) model = word2vec.Word2Vec(data, size=200,window=10,hs=1,min_count=2,sg=1) # size -> 200차원백터로 바꾸어주라 # window -> 주면 단어는 앞뒤로 10개 # min_count -> 출현 빈도는 2개 미만은 제외하라 # sg -> 분석 방법론은 CBOW와 Skip-Gram 둘중 후자를 선택해라 # hs -> hs가 1이면 softmax를 트레이닝할때 사용 0이면 0이 아닌경우 음수로 샘플링됩니다. model.save("toji.model")
이렇게 model을 생성해준다. 모델 생성 후 참조 해줄 때
from gensim.models import word2vec model = word2vec.Word2Vec.load('toji.model') things = model.most_similar(positive["집"]) print(things)
이런식으로 사용해주면 소설속의 집과 관련되 단어를 알아볼 수 있다.
'Python-이론 > python-인공지능' 카테고리의 다른 글
다중 퍼셉트론을 이용해서 텍스트 분류하기 (0) | 2018.05.20 |
---|---|
베이즈의 정리를 통해 텍스트 구분하기 (0) | 2018.05.19 |
한국어 분석(형태소 분석) (0) | 2018.05.17 |
pandas와 numpy 다루기 (0) | 2018.05.11 |
Tensorboard 사용해보기 (0) | 2018.05.08 |