대구 관광지 리뷰 데이터를 활용하여여 사용자의 여행 키워드에 맞는 관광지를 추천하는 NLP 기반 프로젝트이다. 리뷰 데이터 수집 → 전처리 → TF-IDF 키워드 추출 → KLUE BERT 감정 분석 → Word2Vec 키워드 매칭 → 감정 점수 기반 추천까지의 파이프라인을 완성하였다.
관광지 선택은 단순 키워드 매칭만으로는 만족스럽지 않다. 동일한 키워드라도 실제 방문자 리뷰의 긍정·부정 경향이 관광지마다 다르기 때문이다.
본 프로젝트는 다음 문제를 해결하는 것을 목표로 하였다.
- 대구 지역 관광 리뷰를 한국어 NLP 파이프라인으로 정제한다.
- BERT 기반 감정 분석으로 관광지별 리뷰 긍정도를 정량화한다.
- 사용자 입력 키워드와 Word2Vec 유사도로 여행 테마를 매칭한다.
- 감정 점수와 키워드-관광지명 유사도를 결합해 최종 추천 결과를 제공한다.
| 항목 | 내용 |
|---|---|
| 분석 지역 | 대구광역시 |
| 관광지 수 | 115개 (감정 분석 기준) |
| 리뷰 데이터 개수 | 2,969건 |
| 여행 키워드 | 10개 (산책, 공원, 벚꽃, 야경, 시장, 체험 등) |
| 감정 모델 | KLUE BERT-base 2모델 앙상블 |
| 임베딩 모델 | 여행·레저 말뭉치 Word2Vec (300차원) |
본 repository에서는 리뷰 원문이 포함된 대용량 CSV는 포함하지 않으며, 관광지별 집계 감정 점수(data/sentiment/attraction_sentiment_summary.csv)만 제공한다.
관광지 리뷰 데이터 수집
→ 형태소 분석 / 불용어 제거 / 표제어 추출
→ TF-IDF 키워드 추출 → 키워드-관광지 매핑
→ KLUE BERT 감정 분석 → 관광지별 평균 감정 점수
→ 사용자 키워드 입력
→ Word2Vec 유사 키워드 Top 2 제안
→ 후보 관광지 감정 점수 Top 3 / 최종 Top 1 추천
- 사용자 키워드(예:
꽃)와 Word2Vec 유사도로 여행 키워드 2개 제안 (벚꽃0.552,산책0.288) - 사용자가 선택한 키워드에 연결된 관광지 후보군 생성
- 방법 A: 감정 점수 평균 Top 3 추천
- 방법 B: 감정 상위 50% 후보 중 키워드-관광지명 유사도 최고 1곳 추천
- 2,969건 리뷰, 115개 관광지, 168개 관광지-주소 조합에 대해
Sentiment_Lemma점수 산출 - 점수는 BERT positive-class probability (0~1), 값이 높을수록 긍정적 리뷰 비중이 큼
| 방식 | 결과 |
|---|---|
| 감정 Top 3 | 영남제일관 (0.574), 대구수목원 (0.573), 2·28기념중앙공원 (0.573) |
| 하이브리드 Top 1 | 두류공원 (키워드-관광지명 유사도 0.192) |
- Python, Jupyter Notebook, Google Colab
- KoNLPy (Okt), NLTK, scikit-learn (TF-IDF)
- Hugging Face Transformers (KLUE BERT, RoBERTa)
- gensim Word2Vec, pandas
TourismRecommendationSystem/
├── README.md
├── requirements.txt
├── .gitignore
├── data/
│ ├── README.md
│ ├── keywords/
│ │ └── attraction_keyword_mapping.csv # 키워드-관광지 매핑
│ └── sentiment/
│ └── attraction_sentiment_summary.csv # 관광지별 감정 점수 집계
├── docs/
│ └── presentation/
│ └── [24_과정]NLP_대구관광지추천시스템.pdf
├── notebooks/
│ ├── 01_preprocessing_tfidf.ipynb # 전처리 + TF-IDF 프로토타입
│ ├── 02_sentiment_analysis.ipynb # KLUE BERT 감정 분석
│ └── 03_recommendation_system.ipynb # 최종 추천 시스템
└── src/
├── __init__.py
├── config.py # 경로 및 모델 상수
├── preprocessing.py # 한국어 리뷰 전처리
└── recommendation.py # 키워드 매칭·감정 기반 추천
| 파일 | 설명 |
|---|---|
docs/presentation/[24_과정]NLP_대구관광지추천시스템.pdf |
NLP 과정 최종 보고서 (방법론, 실험, 결과 정리) |
| Streamlit 시연 영상 (YouTube) | Streamlit 추천 시스템 직접 촬영·업로드 시연 영상 |
from src.recommendation import (
get_most_similar_keywords,
get_spots_for_keyword,
recommend_top_by_sentiment,
recommend_hybrid,
)추천 로직은 src/recommendation.py에, 리뷰 전처리는 src/preprocessing.py에 정리되어 있다.