1. 데이터 사이언스 SCHOOL
프로젝트 목표
- 문제인식: [사진1]과 같이 긍정 리뷰내의 부정적인 평가 존재
이러한 현상의 원인은 맛집을 평가하는 요소가 다양하기 때문이라고 판단
맛집의 속성별로 리뷰를 파악하는 방법이 없음에 문제를 느낌
[사진 1. 맛집의 속성별로 긍.부정적 평가가 혼재되어 이루어지는 예]
- 해결 방안: 자연어 처리 기술(NLP)로 리뷰를 분석하여
맛집을 평가하는 속성인, “ 맛. 분위기. 서비스. 가성비. 재방문의사”, 로
음식점을 재평가해본다
맛집 리뷰로 속성별 감성 분석하기
개인 project / 2016.03~ 2016.04
포트폴리오 개요
Source Code: https://github.com/haesoly/estimate_review_of_restaurant
- 프로젝트 목표
- Workflow
- 분석 과정
- 결과 화면
2. 데이터 사이언스 SCHOOL
Workflow
①. 크롤링: Selenium 패키지
- M 맛집 검색 사이트에서 2112개의 음식점의
35000개 이상의 리뷰 크롤링
②. AWS서버내의 Mongodb, Redis에 DB저장
①. konlpy패키지의 twitter 형태소 분석기 이용해
리뷰 stemming
②. CountVectorizer 이용해 BOW방식으로 인코딩
③. 어절 N-gram 사용
①. LDA 로 속성별 키워드 선정
②. 키워드가 포함된 N-gram 추출
③. CountVectorizer, anova분석 이용해
속성별 긍/부정 감정 단어 구하기
①. 수동으로 속성별 긍/부정 언급을 구한뒤
분석 결과와 비교하여 성능 평가
Data구하기
전처리
분석
검증
3. 데이터 사이언스 SCHOOL
분석 과정 1. 키워드 추출
LDA를(Latent Dirichlet Allocation) 이용해 토픽별 (맛, 분위기, 서비스, 가성비,
재방문의사) 키워드를 구하기
[사진 2]는 가성비와 관련한 단어들을 LDA로 구한 것이다. 이를 통해 ‘양’, ‘가격대비’,’
가격’, ‘가성비’라는 키워드를 뽑아낼 수 있다.
● ISSUE
맛에 관한 키워드를 뽑아내는데, 그 수가 무한대에 가까워 위와 같은 방법을 활용하는데
어려움이 있었다
ex) 파스타, 피자, 샐러드, 팟타이…
해결 방안 : 키워드를 먼저 뽑아내고, 그것에 대한 감정단어를 찾아내는 방식 대신
맛에 대한 감정단어를 먼저 찾았다
[사진 2. LDA를 활용한 토픽 모델링의 예]
대부분의 감정 단어가
-가 없다/ -하지 않다/ 안 - 형태로 표현할 수 있는 단어라는 것을 발견
[사진 3]과 같은 방식으로, 해당 패턴의 구문을 찾은뒤,
CountVectorizer로 많이 언급된 맛 표현 감정단어를 찾을 수 있었다
[사진 3. 맛 표현 감정단어 찾기 ]
4. 데이터 사이언스 SCHOOL
분석 과정 2. 속성별 감정단어 찾기
대부분의 긍.부정 언급이
“keyword가 정말 -하다”, “keyword가 -하지 않다” 와 같은 형태의 3-gram형태
혹은, “-한 keyword 와 같은 2-gram형태로 이루어진다는 것을 발견
-> N-gram내에서 keyword와 함께 자주 언급되는 단어를 찾아, 속성별 감정 단어를 구함
분석 과정 3. 부정어 처리
'안','않','못','없','아닌','아니' 와 같은
부정 단어가 나오면
긍정 단어 -> 부정으로
긍정 단어 -> 긍정으로
감정 변환함
[사진 4. 키워드별 N-gram 구하기]
[사진 5. 부정어 처리]
5. 데이터 사이언스 SCHOOL
결과 화면
- 서울시내의 250개 음식점을 평가
총 리뷰가 50개 이상인 음식점을 분석 대상으로 함 (일정길이 이하인 리뷰는 제외)
[사진6. 음식점별로 속성별 감정지수 파악] [사진7. 리뷰별 감정 분석]
[사진8. 감정분석 결과 시각화]