2. Word2Vec으로 문장을 벡터로 변환하기
파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문
파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문 책과 강의를 바탕으로 코드 리뷰 및 정리를 했습니다. 자세한 내용은 책과 강의를 참고해주세요.
link: github
6. 텍스트 분석과 챗봇 만들기
6-2. Word2Vec으로 문장을 벡터로 변환하기
Word2Vec
문장 내부의 단어를 벡터로 변환하는 도구.
단어의 연결을 기반으로 단어의 연관성을 벡터로 만들어줌 -> 단어 의미 파악에 유용합니다.
단어를 벡터로 만들기 때문에 의미의 유사도 계산 및 선형으로 계산도 가능합니다.
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은 챗봇 구현에도 매우 큰 도움이 됩니다.