2. Word2Vec으로 문장을 벡터로 변환하기


파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문

파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문 책과 강의를 바탕으로 코드 리뷰 및 정리를 했습니다. 자세한 내용은 책과 강의를 참고해주세요.


6. 텍스트 분석과 챗봇 만들기

6-2. Word2Vec으로 문장을 벡터로 변환하기


Word2Vec

img

  • 문장 내부의 단어를 벡터로 변환하는 도구.

  • 단어의 연결을 기반으로 단어의 연관성을 벡터로 만들어줌 -> 단어 의미 파악에 유용합니다.

  • 단어를 벡터로 만들기 때문에 의미의 유사도 계산 및 선형으로 계산도 가능합니다.

  • Gensim 라이브러리를 이용합니다.

    $ pip3 install gensim
    
  • 국립국어원 언어 정보 나눔터 말뭉치 데이터베이스 에서 다양한 데이터를 얻을 수 있습니다.

  • ‘토지’데이터를 활용하여 분석해 보겠습니다. (데이터가 작기 때문에 정확성보다 분석실습에 의의)

import codecs
from bs4 import BeautifulSoup
from konlpy.tag import Twitter
from gensim.models import word2vec

#utf-16 인코딩으로 파일열고 글자 출력
fp=codecs.open("BEXX0003.txt", "r",encoding="utf-16")
soup=BeautifulSoup(fp, 'html.parser')
body=soup.select_one("body > text")
text=body.getText()

#텍스트 한줄씩 처리하기
twitter=Twitter()
results=[]
lines=text.split("\n")

for line in lines:
    #단어기본형 활용. 형태소 분석
    malist=twitter.pos(line, norm=True, stem=True)
    r=[]
    for (word, pumsa) in malist:
        #어미/조사/구두점 등은 대상에서 제외
        if not pumsa in ["Josa","Eomi","Punctuation"]:
            r.append(word)

    rl=(" ".join(r)).strip() #양쪽 공백 추가하여 조인
    results.append(rl)
    print(rl)

#파일로 출력
with open('toji.wakati','w',encoding='utf-8') as fp:
    fp.write("\n".join(results))
    
#Word2Vec 
data=word2vec.LineSentence('toji.wakati')
model=word2vec.Word2Vec(data,size=200,window=10,hs=1,min_count=2,sg=1) #size=listsize
model.save("toji.model")
print("ok")


  • 유사한 단어를 확인할 때 most_similar() 메소드를 사용합니다. positive / nagative 매개변수를 붙여 호출할 수 있다.
model.most_similar(model.most_similar(positive=["집"])) #'집'과 긍정적인 연관이 있는 단어 출력
[('구석', 0.8189886808395386),
 ('제', 0.7966692447662354),
 ('점심', 0.7663639783859253),
 ('이지마', 0.7649472951889038),
 ('하모', 0.7538532018661499),
 ('말리다', 0.7532320022583008),
 ('그까짓', 0.7482759356498718),
 ('앙님', 0.745795488357544),
 ('물이', 0.745074987411499),
 ('날', 0.7414768934249878)]


  • word2vec은 챗봇 구현에도 매우 큰 도움이 됩니다.






© 2018. by yeo0

Powered by yeo0