본문 바로가기
데이터 분석

NLP(자연어처리) 화장품 리뷰 분석 (3) Word2Vec / 단어별 유사도 유사어 찾기

by 돈워리대지♡ 2023. 2. 7.

리뷰 데이터로 Word2Vec 을 만드는 실습을 하였습니다. 

Word2Vec 으로 단어별 유사도와 연관어 찾기 

word2vec 은 word to vec 라는 뜻으로, 단어를 벡터형식으로 변환시켜줍니다. 

벡터형식 데이터 계산을 통해 단어별 유사도와 연관어를 추출해낼 수 있습니다. 

 

실습 내용을 짧게 설명드릴께요! 

 

1)데이터가 저장되어있는 구글 드라이브에 마운트한다. 

2)github의 mecab 형태소 분석기를 colab으로 불러와 필요한 파일을 실행한다. 

3)폰트를 설치한다. 

4)구글 드라이브에서 데이터를 불러온다. 

5)word2vec, mecab을 import 한다

6)준비된 데이터 단어를 학습시켜 벡터값으로 변환한다. 

7)유사도, 유사어를 출력한다. 

 

정리된 것 보니 복잡하거나 어려워보이지 않습니다!

할 수 있습니다.!!! can do it!!!!!!!! 

 

실습 내용 보여드릴께요! 저는 구글 colab으로 실습하였습니다. 

"코드실행>" 표시가 보일 때마다 표시 단위로 코드를 실행해주시면 됩니다. 

 

1)구글 드라이브 마운트

 

from google.colab import drive
drive.mount('gdrive')

코드실행> 해당 코드를 실행하여 마운팅해줍니다.

 

ROOT_PATH = 'gdrive/MyDrive/리뷰데이터실습/word2vec/'

코드실행> 리뷰 데이터가 저장된 구글 드라이브 경로를 ROOT_PATH에 넣어주었습니다. 

 

2)MECAB 불러오기 

 

git clone https://github.com/SOMJANG/Mecab-ko-for-Google-Colab.git

 

코드 실행>  git clone 으로 복제를 하여 프로젝트를 불러왔습니다. 

mecab은 수많은 데이터를 빠르게 분석할 수 있는 장점을 가지고 있습니다. 

 

! ls Mecab-ko-for-Google-Colab

코드실행 > 불러온 프로젝트에 어떤 파일이 있는지 !ls 로 살펴봅니다. 

5개의 파일이 보이네요.

 

! bash Mecab-ko-for-Google-Colab/install_mecab-ko_on_colab_light_220429.sh

코드실행 > ! bash 명령어로 .sh 파일을 실행해줍니다. 

! bash 명령어는 .sh 파일을 실행하는데 사용됩니다. 

 

3)폰트 설치

 

!apt -qq -y install fonts-nanum
 
 
코드실행> 나눔체를 설치해줍니다. 
 
import matplotlib.font_manager as fm
from matplotlib import rc

font_path = '/usr/share/fonts/truetype/nanum/NanumGothic.ttf'
fontprop = fm.FontProperties(fname=font_path)
rc('font', family=fontprop.get_name(), size=16)
fm._rebuild()

코드실행 > 한글 시각화를 위해 폰트 설정을 해줍니다.

**코드실행 이후 런타임다시시작> 구글마운팅 재실행 > ROOT_PATH 재실행 

 

4)영화후기 데이터 불러오기

분석할 데이터 저장되어있는 구글 드라이브(경로는  ROOT_PATH로 앞에서 지정) 에서 불러와야겠죠? 

 


import pandas as pd
df_train = pd.read_csv(ROOT_PATH + 'review_train.txt', sep='\t', encoding='cp949')
df_train.head()

코드실행 > 데이터를 불러와 '\t' 단위로 분리해줍니다. 

인고딩 에러가 떠서 cp949 지정해주었습니다.

상위 5개 행을 출력하여 잘 실행되었는지 확인해줍니다. 

df_train.dropna(inplace=True)
df_train.info()

데이터의 null값을 제거해줍니다. 

 

5)단어 학습시키기 (벡터값으로 변환)

 

from gensim.models import Word2Vec
from tqdm import tqdm
 

코드실행> gensim의 Word2Vec 을 import 해줍니다.

tqdm을 통해 반복문의 진행과정을 볼 수 있습니다. 

 

from konlpy.tag import Mecab

코드실행> konlpy의 Mecab을 import 해줍니다

 

mecab.morphs(df_train['리뷰'][0]) 

코드실행> morphs로 분석 하였습니다.

첫번째 데이터만 분석해본결과 

잘 분석된 것을 볼 수 있습니다.

 

mecab.nouns(df_train['리뷰'][0])

코드실행>nouns로도 분석이 가능한데 삭제되는 단어들이 많습니다.

 

morphs에 비해 단어가 많이 줄어들었죠. 이 데이터가 운이 좋은 것인지 모르겠지만 필요한 핵심 키워드가 잘 담겨있는 것 

같아서 nouns도 나쁘지 않은 것 같아요.

하지만 삭제되는 단어가 많으니 이번 분석에는 morphs를 사용하도록 하겠습니다. 

 

sentence_list = []

for sentence in tqdm(df_train['리뷰']):
    sentence_list.append(mecab.morphs(sentence))
len(sentence_list)

코드실행> sentence_list 라는 리스트를 만들고, 그 안에 형태소 분석한 단어들을 넣어줍니다. len을 통해 몇개의 데이터가

들어가있는지 출력해줍니다.

 

model = Word2Vec(sentences=sentence_list, size=100, window=5, sg=1, max_vocab_size=None, min_count=5)
코드실행> sentence_list의 단어들을 교육시킵니다. 5번 이상 등장하는 단어들만 교육(min_count=5) 시킴으로써 정말 의미있는 단어들을 교육시킬 수 있습니다. 

 

 
model.save(ROOT_PATH + 'word2vec.model')

코드실행> 교육 완료된 모델을 구글드라이브에 원본 저장해줍니다. 

 

loaded_model = Word2Vec.load(ROOT_PATH + 'word2vec.model')
 

코드실행> 교육 완료된 모델을 loaded_model에 저장하였습니다.

 

7)유사도, 유사어 추출

'촉촉' 이라는 단어에 대한 벡터값과 유사어를 추출하였습니다.

 

loaded_model.wv.get_vector('촉촉')

코드실행> '촉촉' 단어의 벡터값을 출력해줍니다.

 

 

loaded_model.wv.most_similar('촉촉')

코드실행> '촉촉' 단어와 유사한 단어들을 출력해줍니다. 1에 가까울수록 유사한 단어입니다. 

0에 가까울수록 먼 단어입니다. 

 

리뷰 데이터가 너무 적어서 의미있는 결과가 나오지는 않았습니다.

크롤링을 통해 수많은 리뷰 데이터를 확보하고 분석해보면 의미있는 인사이트 얻을 수 있을 것 같네요! 

 

이 전 데이터 분석 내용이 궁금하시다면 다른 컨텐츠도 구경해주세용

 

https://walkandwork.tistory.com/21

 

NLP(자연어처리) 화장품 리뷰 분석 (1)_데이터 준비 /크롤링 몰라도 가능

화장품 컨텐츠를 발행하면서, 온라인 제품 리뷰를 분석하면 제품마다 특성을 뚜렷하게 볼 수 있을 것 같아 자연어처리 공부를 시작했습니다. 아직 실수도 많고, 허점도 많지만, 시작이 반이라는

walkandwork.tistory.com

 

https://walkandwork.tistory.com/22

 

NLP(자연어처리) 화장품 리뷰 분석 (2) 빈도수 분석 / 워드클라우드

데이터 준비하는 방법이 궁금하신 분들은 이전 포스팅을 보고 와주세요 :) https://walkandwork.tistory.com/21 NLP(자연어처리) 화장품 리뷰 분석 (1)_데이터 준비 /크롤링 몰라도 가능 화장품 컨텐츠를 발

walkandwork.tistory.com

저는 class101 꽃부리님의 강의를 활용해서 실습하고 있습니다. 파이썬 기본 개념(for문, if문, 등등) 이해하고계신다면 쉽게 배울 수 있어서 강추드립니다. 덕분에 실습 성공하였습니다 ㅎㅎ (광고 아닙니당 :) 

https://class101.net/ko/products/62334b27a8866c000de7924f

 

개발자, 비개발자 모두 실무에 적용할 수 있는 자연어처리 입문 | 꽃부리AI

자연어처리가 모든 직군에게 다 필요하다고? ▶ 자연어처리 정의 컴퓨터로 언어를 연구하는 인공지능 분야인 자연어처리, 개발 직군이 아닌 마케터/기획자도 자연어처리를 배워야 한다구요? 네

class101.net