일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- langchain
- 랭체인
- HTML
- sklearn
- 파이토치
- konlpy
- fastapi #파이썬웹개발
- 사이킷런
- pandas
- Python
- python 정렬
- 챗gpt
- 판다스
- deeplearning
- 비지도학습
- NLP
- programmablesearchengine
- fastapi
- OpenAIAPI
- 파이썬웹개발
- 판다스 데이터정렬
- 딥러닝
- pytorch
- MachineLearning
- fastapi #python웹개발
- chatGPT
- 파이썬
- 머신러닝
- 자연어분석
- 파이토치기본
- Today
- Total
Data Navigator
[NLP, gensim] 호텔스닷컴 사용자 리뷰 Word2Vec 분석 본문
[NLP, gensim] 호텔스닷컴 사용자 리뷰 Word2Vec 분석
코딩하고분석하는돌스 2021. 2. 25. 00:38기존의 호텔스 닷컴 사용자 리뷰 분석을 gensim 모듈의 Word2Vec을 사용하여 다시 분석해 보았다.
Word2Vec는 단어를 벡터화 한 후 단어들 간에 상관도가 높은 것들을 모아서 추출할 수 있다.
1. 분석결과
1) 사용자 리뷰 전체를 벡터화해서 가장 빈도수가 높은 상위 10개 단어들을 넣고 연관 단어를 찾았으나 특이한 점은
발견 할 수 없었음.
2) 평점 8 이상을 good(만족), 7 이하를 bad(불만족)으로 구별하여 각각 다시 벡터화
3) good(만족) 그룹에서는 역시 특이한 점을 찾기 어려웠고 bad(불만족) 그룹에서 의미있는 자료가 나옴
4) bad(불만족) 그룹에서 눈에 띄었던 결과
검색어: 방음
('옆방', 0.9461838006973267), ('층간', 0.9254038333892822), ('소음', 0.9100062251091003),
('소리', 0.8953380584716797), ('대화', 0.8535889983177185), ('문소리', 0.8529661893844604),
('물소리', 0.8514931201934814), ('코고', 0.8487786650657654), ('윗방', 0.8481355309486389),
('웅', 0.829635739326477)]
검색어: 불친절
[('응대', 0.985035240650177), ('태도', 0.9659591913223267), ('대응', 0.9488734006881714),
('교육', 0.9382745027542114), ('말투', 0.9286551475524902), ('인사', 0.925360381603241),
('데스크', 0.9241042137145996), ('고객', 0.923350989818573), ('표정', 0.9121052622795105), ('성실', 0.8999203443527222)]
검색어: 냄새
[('담배', 0.888995349407196), ('방향제', 0.8857129812240601), ('냄', 0.8804351091384888),
('남', 0.8731814026832581), ('환기', 0.8726521730422974), ('하수구', 0.8604413270950317),
('진동', 0.8579041957855225), ('연기', 0.8502274751663208), ('락스', 0.8435613512992859),
('화학', 0.8432978987693787)]
검색어: 불편
[('공간', 0.8030064105987549), ('공용', 0.7456557750701904), ('계단', 0.7389194369316101),
('캐리어', 0.7243545055389404), ('콘센트', 0.7238076329231262), ('진입로', 0.719048798084259),
('수납', 0.7172905206680298), ('위험', 0.7135182619094849), ('이중주', 0.7053956389427185), ('힘', 0.6995351910591125)]
5) 위의 결과에서 볼 수 있듯이 고객들이 불만을 느꼈던 부분에 대한 내용이 연관 단어로 보여졌다. 개인적으로 흥미로웠던
부분은 [냄새]와 [불편] 이었다.
6) [냄새] 는 담배 냄새와 같은 것만 떠올리고 있었는데, 결과를 보니 방향제, 하수구, 락스, 다른 화학적 약품 냄새에도 민감함을
알 수 있었다. 객실 청소를 깨끗하게 한다고 락스를 사용해서 청소는 깨끗하게 했지만 그 냄새가 남아 있다면 고객의 불만을
초래할 수 있는 것 같다. 그리고 향을 좋게 하기 위한 방향제의 경우에도 호불호가 갈릴 수 있어서 사용에 주의가 필요하다.
7) [불편] 고객이 불편함을 느끼는 부분 중 시설에 관한 내용을 엿볼 수 있었다. 우선 [객실 공간]이나 [공용 공간]의 구조, [계단],
[캐리어]가 상위에 나오는 것으로 보아 엘리베이터가 없거나 고장나서 캐리어를 들고 계단을 올라가야 하는 상황을 상상해 볼
수 있다. [공간], [캐리어], [진입로], [수납]을 연결해서 보면 진입로가 캐리어를 들고 들어오기에 힘든 구조일 경우, 객실에
캐리어를 놓은 공간이 부족하거나, 공용공간에 캐리어를 보관할 곳이 없는 등의 문제를 유추해 볼 수 있다.
[콘센트], [위험] 을 연관지어 생각해 보면 객실내에 콘센트 갯수나 위치, 혹은 상태가 좋지 않아 위험한 경우가 있어 고객의
불만을 초래했을 것으로 상정해 볼 수 있다.
2. 분석 방법 및 환경
1) 분석 방법
A. Python의 pandas로 데이터 정제(특수 문자 제거)
B. KoNLPy의 Mecab 토크나이저를 이용해 명사만 추출
C. 추출된 호텔스닷컴 사용자 리뷰 키워드를 gensim 모듈의 Word2Vec 로 변환해서 연관 단어 추출
D. 빈도수가 높은 단어순으로 연관 단어 탐색
2) 분석 환경
A. 자료수집: Windows 10, python, pandas
B. 자료 전처리 및 분석: Linux Ubuntu 20.02, Python, Pandas, KoNLPy, Mecab, gensim, Word2Vec
import pandas as pd
data = pd.read_csv('./01_Real_Real_Final_Hotel_KoreanReviewTexts_89942.csv', encoding='utf-8')
data.head(3)
Unnamed: 0 | hotelId | hotelName | tripType | tripTypeText | reviewDate | rating | description | isKorNot | |
---|---|---|---|---|---|---|---|---|---|
0 | 356 | 105343 | 서울 웨스틴조선호텔 (The Westin Chosun Seoul) | family | 1박 가족 여행 | 2019년 1월 26일 | 10.0 | 직원들 서비스나 마인드 완벽합니다 다만 노후된 시설과 좁은 라운지가 호텔 이름에 비... | True |
1 | 357 | 105343 | 서울 웨스틴조선호텔 (The Westin Chosun Seoul) | family | 1박 가족 여행 | 2019년 2월 4일 | 10.0 | 웨스틴조선은 모든면에서 최고의 숙소라고 생각합니다 분위기 편의성 직원친절도까지 모두... | True |
2 | 358 | 105343 | 서울 웨스틴조선호텔 (The Westin Chosun Seoul) | other | 2박 여행 | 2019년 2월 2일 | 10.0 | 서울시내에서 호캉스를 누릴 수 있는 곳아침 뷔페가 맛있는 곳룸서비스가 좋았음요구사항... | True |
data = data[['description','rating']]
data.head(2)
description | rating | |
---|---|---|
0 | 직원들 서비스나 마인드 완벽합니다 다만 노후된 시설과 좁은 라운지가 호텔 이름에 비... | 10.0 |
1 | 웨스틴조선은 모든면에서 최고의 숙소라고 생각합니다 분위기 편의성 직원친절도까지 모두... | 10.0 |
import string
string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
data['description'] = data['description'].apply(lambda x: ''.join([i for i in x if i not in string.punctuation]))
data['description']
0 직원들 서비스나 마인드 완벽합니다 다만 노후된 시설과 좁은 라운지가 호텔 이름에 비...
1 웨스틴조선은 모든면에서 최고의 숙소라고 생각합니다 분위기 편의성 직원친절도까지 모두...
2 서울시내에서 호캉스를 누릴 수 있는 곳아침 뷔페가 맛있는 곳룸서비스가 좋았음요구사항...
3 가격에 맞게 만족했습니다
4 처음 세명으로 셋팅 되어있지 않은점 빼고는 직원들의 친절도 및 서비스는 모두 맘에 ...
...
89936 매니저님이 친절하고 상권 근처라 편리합니다
89937 주차 유로 출차 시간 정해져 있어 불편합니다
89938 목적지 인근에 가장 좋은 숙소인 것 같아서 예약했어요 저녁 6시 조금 넘어서 도착했...
89939 호텔이 넓고 깨끗하고 편안하게 잘쉬었다가요 오픈한지 얼마안되었고 관리가 잘되어서 그...
89940 다소 소음이 많음
Name: description, Length: 89941, dtype: object
from konlpy.tag import Mecab
mecab = Mecab()
def nouns(x):
if len(str(x)) >=1:
nouns = mecab.nouns(x)
else:
pass
return nouns
data['description'] = data['description'].apply(lambda x: nouns(x))
len(data)
89941
data['description'].head(3)
0 [직원, 서비스, 마인드, 완벽, 노후, 시설, 라운지, 호텔, 이름, 부족]
1 [웨스틴, 조선, 면, 최고, 숙소, 생각, 분위기, 편의, 직원, 친절, 인상]
2 [서울, 시내, 호, 수, 곳, 아침, 뷔페, 곳, 룸서비스, 요구, 사항, 응대,...
Name: description, dtype: object
불용어 처리 후 전체 단어 등장 빈도 확인¶
stopwords = pd.read_csv('한국어불용어100.txt', encoding='utf-8', sep='\t')
stopwords.columns = ['words','pos','ratio']
stopword = list(stopwords['words'])
stopword.append('호텔')
#stopword
def stword(x):
if x not in stopword:
temp = x
else:
pass
return temp
data.head()
description | rating | |
---|---|---|
0 | [직원, 서비스, 마인드, 완벽, 노후, 시설, 라운지, 호텔, 이름, 부족] | 10.0 |
1 | [웨스틴, 조선, 면, 최고, 숙소, 생각, 분위기, 편의, 직원, 친절, 인상] | 10.0 |
2 | [서울, 시내, 호, 수, 곳, 아침, 뷔페, 곳, 룸서비스, 요구, 사항, 응대,... | 10.0 |
3 | [가격, 만족] | 10.0 |
4 | [처음, 명, 셋, 점, 직원, 친절, 서비스, 맘, 시설, 불편, 추가, 커피, ... | 10.0 |
data['description'] = data['description'].apply(lambda x: stword(x))
data.head(5)
description | rating | |
---|---|---|
0 | [직원, 서비스, 마인드, 완벽, 노후, 시설, 라운지, 호텔, 이름, 부족] | 10.0 |
1 | [웨스틴, 조선, 면, 최고, 숙소, 생각, 분위기, 편의, 직원, 친절, 인상] | 10.0 |
2 | [서울, 시내, 호, 수, 곳, 아침, 뷔페, 곳, 룸서비스, 요구, 사항, 응대,... | 10.0 |
3 | [가격, 만족] | 10.0 |
4 | [처음, 명, 셋, 점, 직원, 친절, 서비스, 맘, 시설, 불편, 추가, 커피, ... | 10.0 |
Word2Vec 훈련시키기¶
from gensim.models import Word2Vec
model = Word2Vec(data['description'], size=100, window=5, min_count=5, workers=8, sg=0)
model_result0 = model.wv.most_similar("방")
print(model_result0)
[('쪽방', 0.5903220176696777), ('이방', 0.5735920667648315), ('자야', 0.5541611909866333), ('티비', 0.5528268814086914), ('한쪽', 0.5491937398910522), ('난로', 0.5445445775985718), ('방이', 0.5416183471679688), ('폰', 0.5411542654037476), ('침', 0.5403412580490112), ('현관문', 0.5346246957778931)]
model_result1 = model.wv.most_similar("친절")
print(model_result1)
[('철', 0.8546521663665771), ('무뚝뚝', 0.6761907339096069), ('절도', 0.6745209693908691), ('절', 0.5934129953384399), ('무엇', 0.5084429979324341), ('남자', 0.5061520934104919), ('결혼식장', 0.49140873551368713), ('불친절', 0.4911978840827942), ('마중', 0.472359836101532), ('사무', 0.46873652935028076)]
model_result2 = model.wv.most_similar("만족")
print(model_result2)
[('맘', 0.5603278279304504), ('완벽', 0.5322324633598328), ('마음', 0.48402848839759827), ('의향', 0.47989800572395325), ('편안', 0.4741479754447937), ('만족도', 0.4574355185031891), ('안락', 0.43617233633995056), ('감', 0.43256258964538574), ('만점', 0.4225720763206482), ('요단', 0.3806540369987488)]
model_result3 = model.wv.most_similar("시설")
print(model_result3)
[('부대시설', 0.5718883872032166), ('전무', 0.49468618631362915), ('설비', 0.48521319031715393), ('인프라', 0.48278164863586426), ('환경', 0.4591776430606842), ('콘도', 0.4467027187347412), ('기타', 0.4431457817554474), ('리조트', 0.4428706169128418), ('온천수', 0.43611687421798706), ('숙련도', 0.4250851273536682)]
model_result4 = model.wv.most_similar("조식")
print(model_result4)
[('양식', 0.8182390928268433), ('한식', 0.8092173337936401), ('종류', 0.7825174927711487), ('메뉴', 0.7753484845161438), ('뷔페', 0.7748880386352539), ('반찬', 0.7658039331436157), ('빵', 0.762347936630249), ('가짓수', 0.7456438541412354), ('스프', 0.7429602742195129), ('국', 0.7387341260910034)]
model_result5 = model.wv.most_similar("직원")
print(model_result5)
[('원분', 0.783109724521637), ('리셉션', 0.7240973711013794), ('스탭', 0.7123961448669434), ('데스크', 0.6951662302017212), ('응대', 0.691075325012207), ('프론트', 0.6597230434417725), ('매니저', 0.6539520025253296), ('말투', 0.6517923474311829), ('프런트', 0.6478790044784546), ('스텝', 0.6395586133003235)]
model_result6 = model.wv.most_similar("이용")
print(model_result6)
[('휘트', 0.5893030762672424), ('사우', 0.5826828479766846), ('연령', 0.5813207626342773), ('입장권', 0.5781248211860657), ('용시', 0.5547897219657898), ('센터', 0.5356910228729248), ('제한', 0.535118818283081), ('사우나', 0.5324800610542297), ('셔틀', 0.5322391390800476), ('니스', 0.5311806201934814)]
model_result7 = model.wv.most_similar("위치")
print(model_result7)
[('접근성', 0.8220425844192505), ('접근', 0.814551591873169), ('터미널', 0.7546037435531616), ('역과', 0.753146231174469), ('중심가', 0.745361864566803), ('지리', 0.7403037548065186), ('중심', 0.73652583360672), ('청계천', 0.7334768772125244), ('시내', 0.7328940033912659), ('인접', 0.7327644228935242)]
model_result8 = model.wv.most_similar("객실")
print(model_result8)
[('호실', 0.4693344831466675), ('배치', 0.46894824504852295), ('정비', 0.4605451822280884), ('층수', 0.4446920156478882), ('일부', 0.42557790875434875), ('미흡', 0.4250248372554779), ('저층', 0.4173283874988556), ('불량', 0.41080763936042786), ('바닷바람', 0.40456265211105347), ('약간', 0.39880746603012085)]
model_result9 = model.wv.most_similar("주변")
print(model_result9)
[('주위', 0.9218392372131348), ('근처', 0.7168051600456238), ('인근', 0.6957695484161377), ('밀집', 0.670418918132782), ('가까이', 0.6153241395950317), ('인접', 0.5819861888885498), ('현지인', 0.561111330986023), ('건너', 0.5419366955757141), ('부근', 0.5408728718757629), ('주요', 0.5282703638076782)]
model_result10 = model.wv.most_similar("가족")
print(model_result10)
[('커플', 0.6628732085227966), ('초등학생', 0.6362373232841492), ('자녀', 0.6278095245361328), ('초등', 0.6273860931396484), ('애견', 0.6264399290084839), ('어른', 0.6208789348602295), ('동반', 0.6112335920333862), ('태교', 0.6042505502700806), ('식구', 0.5850380659103394), ('부모', 0.5804762840270996)]
model_result11 = model.wv.most_similar("가격")
print(model_result11)
[('금액', 0.6553364992141724), ('숙박료', 0.53302001953125), ('가격대', 0.5236061811447144), ('만족도', 0.517016589641571), ('비용', 0.5163726210594177), ('숙박비', 0.4778462052345276), ('바가지요금', 0.45583271980285645), ('료', 0.4408423900604248), ('최저가', 0.4285024404525757), ('땅값', 0.4260851740837097)]
model_result12 = model.wv.most_similar("안락")
print(model_result12)
[('편안', 0.8191465139389038), ('편한', 0.7272793054580688), ('모던', 0.7238069772720337), ('잠자리', 0.6796140074729919), ('심플', 0.6793283820152283), ('군더더기', 0.6739557981491089), ('인테리어', 0.6521251201629639), ('맘', 0.6156046986579895), ('흡족', 0.6038869023323059), ('푹신', 0.6027811765670776)]
data.head()
description | rating | |
---|---|---|
0 | [직원, 서비스, 마인드, 완벽, 노후, 시설, 라운지, 호텔, 이름, 부족] | 10.0 |
1 | [웨스틴, 조선, 면, 최고, 숙소, 생각, 분위기, 편의, 직원, 친절, 인상] | 10.0 |
2 | [서울, 시내, 호, 수, 곳, 아침, 뷔페, 곳, 룸서비스, 요구, 사항, 응대,... | 10.0 |
3 | [가격, 만족] | 10.0 |
4 | [처음, 명, 셋, 점, 직원, 친절, 서비스, 맘, 시설, 불편, 추가, 커피, ... | 10.0 |
good = data[data['rating'] >= 8]['description']
good
0 [직원, 서비스, 마인드, 완벽, 노후, 시설, 라운지, 호텔, 이름, 부족]
1 [웨스틴, 조선, 면, 최고, 숙소, 생각, 분위기, 편의, 직원, 친절, 인상]
2 [서울, 시내, 호, 수, 곳, 아침, 뷔페, 곳, 룸서비스, 요구, 사항, 응대,...
3 [가격, 만족]
4 [처음, 명, 셋, 점, 직원, 친절, 서비스, 맘, 시설, 불편, 추가, 커피, ...
...
89935 [주차료, 하루, 만, 원, 칫솔, 치약, 구비, 주말, 경우, 직원, 명, 체크인...
89936 [매니저, 친절, 상권, 근처, 편리]
89938 [목적지, 인근, 숙소, 것, 예약, 저녁, 시, 도착, 주변, 당황, 때, 것, ...
89939 [호텔, 편안, 오픈, 얼마, 관리, 침구, 편안, 조식, 뷔페, 기대, 샐러드, ...
89940 [소음]
Name: description, Length: 70258, dtype: object
bad = data[data['rating'] <= 7]['description']
bad
15 [가성, 별로, 기대, 실망, 예약, 사전, 메일, 직원, 통화, 객실, 요청, 고...
30 [번, 호텔, 방문, 것, 예전, 호텔, 이번, 실망, 주변, 호텔, 앞, 시위, ...
35 [서비스, 절도, 프로, 느낌]
41 [뷰, 처음, 국내외, 특급, 호텔, 곳, 중, 최악, 당일, 예약, 데이터, 핑계...
43 [고객, 개, 법, 호텔, 역사, 명불허전, 종업원, 모두, 최상, 서비스, 무엇,...
...
89924 [엘레, 베, 이터, 불편]
89928 [객실, 내부, 욕실, 내부, 호텔]
89929 [대체, 만족, 점수, 건, 제, 다음, 출장, 이용, 겁니다]
89932 [샤워기, 수압]
89937 [주차, 유로, 출차, 시간, 불편]
Name: description, Length: 19683, dtype: object
Good 사용자 리뷰 Word2Vec 훈련 결과¶
good_model = Word2Vec(good, size=100, window=5, min_count=5, workers=8, sg=0)
good_result1 = good_model.wv.most_similar('만족')
print(good_result1)
[('마음', 0.5438280701637268), ('만족도', 0.5274006128311157), ('완벽', 0.5268417000770569), ('맘', 0.5239145159721375), ('편', 0.5141220092773438), ('평가', 0.48351436853408813), ('점수', 0.4832049608230591), ('양호', 0.480446994304657), ('중요', 0.47823476791381836), ('룽', 0.47761180996894836)]
good_result2 = good_model.wv.most_similar('친절')
print(good_result2)
[('철', 0.8839036822319031), ('절도', 0.7653276324272156), ('미소', 0.6755515933036804), ('절', 0.6581291556358337), ('내외분', 0.6559974551200867), ('무뚝뚝', 0.6396422982215881), ('교육', 0.6106146574020386), ('친전', 0.6060218811035156), ('응대', 0.6017041802406311), ('덕', 0.5975912809371948)]
good_result3 = good_model.wv.most_similar('조식')
print(good_result3)
[('부페', 0.7725294232368469), ('뷔페', 0.7560708522796631), ('메뉴', 0.7476639747619629), ('양식', 0.729973554611206), ('한식', 0.7243130207061768), ('토스트', 0.7221288681030273), ('종류', 0.7131022214889526), ('샌드위치', 0.7064229249954224), ('식사', 0.7035500407218933), ('가짓수', 0.7028024196624756)]
good_result4 = good_model.wv.most_similar('전망')
print(good_result4)
[('조망', 0.8727686405181885), ('뷰', 0.8471059799194336), ('전경', 0.7999499440193176), ('경치', 0.742769718170166), ('발코니', 0.7260648012161255), ('탁트인', 0.7258808612823486), ('한눈', 0.7099202871322632), ('야경', 0.7016897201538086), ('풍경', 0.6938073039054871), ('시야', 0.6841901540756226)]
BAD 사용자 리뷰 Word2Vec 훈련 결과¶
bad_model = Word2Vec(bad, size=100, window=5, min_count=5, workers=8, sg=0)
bad_result1 = bad_model.wv.most_similar('가격')
print(bad_result1)
[('가성', 0.8661888837814331), ('퀄리티', 0.7893335819244385), ('보통', 0.7809202075004578), ('기대', 0.7612252831459045), ('성비', 0.7566496133804321), ('쏘', 0.7504158616065979), ('생각', 0.7368736267089844), ('그만큼', 0.7330000996589661), ('별로', 0.7289901971817017), ('가격대', 0.7192388772964478)]
bad_result2 = bad_model.wv.most_similar('모텔')
print(bad_result2)
[('여관', 0.9216188788414001), ('일반', 0.918725311756134), ('수준', 0.9162330627441406), ('급', 0.8959892988204956), ('여인숙', 0.8713770508766174), ('동네', 0.8643989562988281), ('개조', 0.836719274520874), ('비지니스', 0.8309047222137451), ('촌', 0.8249487280845642), ('비즈니스', 0.8226108551025391)]
bad_result3 = bad_model.wv.most_similar('사진')
print(bad_result3)
[('실제', 0.844782829284668), ('스위트', 0.7624733448028564), ('디럭스', 0.7574384212493896), ('차이', 0.7350194454193115), ('크기', 0.7218549847602844), ('스탠다드', 0.7125375270843506), ('패밀리', 0.7117784023284912), ('상위', 0.7117235064506531), ('타입', 0.7109248042106628), ('일반', 0.7076314687728882)]
bad_result4 = bad_model.wv.most_similar('방음')
print(bad_result4)
[('옆방', 0.9461838006973267), ('층간', 0.9254038333892822), ('소음', 0.9100062251091003), ('소리', 0.8953380584716797), ('대화', 0.8535889983177185), ('문소리', 0.8529661893844604), ('물소리', 0.8514931201934814), ('코고', 0.8487786650657654), ('윗방', 0.8481355309486389), ('웅', 0.829635739326477)]
bad_result5 = bad_model.wv.most_similar('침대')
print(bad_result5)
[('매트리스', 0.9552134275436401), ('스프링', 0.9094028472900391), ('허리', 0.8933660984039307), ('베개', 0.8753464221954346), ('의자', 0.850537896156311), ('밑', 0.8502031564712524), ('테이블', 0.8311576247215271), ('커버', 0.8266948461532593), ('쿠션', 0.8238529562950134), ('시트', 0.8236831426620483)]
bad_result6 = bad_model.wv.most_similar('최악')
print(bad_result6)
[('역대', 0.8052937984466553), ('가본', 0.7834034562110901), ('경험', 0.7513319253921509), ('지금', 0.7406609058380127), ('생애', 0.6944254636764526), ('이번', 0.6921879649162292), ('디자이너', 0.6883053779602051), ('처음', 0.6866451501846313), ('인생', 0.6848251223564148), ('중', 0.6825853586196899)]
bad_result7 = bad_model.wv.most_similar('불친절')
print(bad_result7)
[('응대', 0.985035240650177), ('태도', 0.9659591913223267), ('대응', 0.9488734006881714), ('교육', 0.9382745027542114), ('말투', 0.9286551475524902), ('인사', 0.925360381603241), ('데스크', 0.9241042137145996), ('고객', 0.923350989818573), ('표정', 0.9121052622795105), ('성실', 0.8999203443527222)]
bad_result8 = bad_model.wv.most_similar('담배')
print(bad_result8)
[('나', 0.9467899203300476), ('남', 0.9257993698120117), ('방향제', 0.9238430261611938), ('하수구', 0.8909512758255005), ('냄새', 0.8889952301979065), ('환기', 0.8800979852676392), ('화학', 0.8797070980072021), ('진동', 0.8755462765693665), ('연기', 0.8714488744735718), ('금연', 0.8700228929519653)]
bad_result9 = bad_model.wv.most_similar('냄새')
print(bad_result9)
[('담배', 0.888995349407196), ('방향제', 0.8857129812240601), ('냄', 0.8804351091384888), ('남', 0.8731814026832581), ('환기', 0.8726521730422974), ('하수구', 0.8604413270950317), ('진동', 0.8579041957855225), ('연기', 0.8502274751663208), ('락스', 0.8435613512992859), ('화학', 0.8432978987693787)]
bad_result10 = bad_model.wv.most_similar('불편')
print(bad_result10)
[('공간', 0.8030064105987549), ('공용', 0.7456557750701904), ('계단', 0.7389194369316101), ('캐리어', 0.7243545055389404), ('콘센트', 0.7238076329231262), ('진입로', 0.719048798084259), ('수납', 0.7172905206680298), ('위험', 0.7135182619094849), ('이중주', 0.7053956389427185), ('힘', 0.6995351910591125)]
bad_result10 = bad_model.wv.most_similar('최악')
print(bad_result10)
[('역대', 0.8052937984466553), ('가본', 0.7834034562110901), ('경험', 0.7513319253921509), ('지금', 0.7406609058380127), ('생애', 0.6944254636764526), ('이번', 0.6921879649162292), ('디자이너', 0.6883053779602051), ('처음', 0.6866451501846313), ('인생', 0.6848251223564148), ('중', 0.6825853586196899)]