본문 바로가기

기술/데이터 사이언스

병원을 찾아줘! 병원 한글 리뷰 데이터 기반 병원 추천 시스템

들어가기전

본 과제는 2024년 4월~6월 석사 1학년에 비정형데이터분석 수업(강필성 교수님)에서 작성한 발표자료이다. 네이버 병원 리뷰 데이터를 활용하여 사용자가 프롬프트로 입력한 조건과 가장 잘 어울리는 병원을 추천해주기 위해 텍스트 비정형 데이터에 대해 전처리, 토픽 모델링, 후처리, 워드 임베딩, 감성 분석, 유사도 계산, 유사도 가중치 설계 및 적용을 하여 추천 시스템을 설계하였다. 코드는 아래의 깃허브에서 참고 바란다.

https://github.com/krx0896/Hospital-Recommendation-System-based-on-Hospital-Review-Data_IME653

 

GitHub - krx0896/Hospital-Recommendation-System-based-on-Hospital-Review-Data_IME653: 병원을 찾아줘! 병원 한글 리뷰

병원을 찾아줘! 병원 한글 리뷰 데이터 기반 병원 추천 시스템, 비정형데이터분석(IME653(00)) - krx0896/Hospital-Recommendation-System-based-on-Hospital-Review-Data_IME653

github.com

목차

1.주제 소개
2.최종 프로세스
3.데이터 수집
4.데이터 EDA
5.데이터 전처리
6.토픽 모델링
7.데이터 후처리
8.워드 임베딩
9.감성 분석
10.추천 시스템
11.Discussion
12.Conclusion

1. 주제 소개

병원 한글 리뷰데이터 활용 병원 추천 시스템

  • 기술의 발전과 정보의 손쉬운 접근이 가능해졌지만, 실질적으로 나를 위한 꼭 맞는 정보를 찾기는 더 어려워진 요즘
  • 피부과의 특성상 피부관리 측면에 포커스된 다수의 정보들로 인해 내가 정말 원하는 진료를 하는 병원을 찾기 어려움
  • ID Square Lab의 주요 관심사 중 하나인 Human-centered AI 경험 디자인을 통한 추천 시스템을 제안하고자 함

Task Concept

병원의 리뷰데이터를 바탕으로 내가 원하는 문장을 입력하면, 가장 유사한 리뷰를 참조하여 적절한 병원을 추천

 

2. 최종 프로세스

최종 프레임워크

3. 데이터 수집

  • 활용 데이터셋
    • 공공데이터 병원 정보를 기준으로 서울시 피부과 의원의 리뷰 수집을 목표로 함.
    • 공공 데이터  > 보건의료빅데이터개방시스템 > 전국 병의원 및 약국 현황 데이터 (2023.12 기준)
    • 네이버 지도 방문자 리뷰 활용 (네이버 예약, 주문, 영수증으로 방문 인증된 후기)

전국 병의원 및 약국 현황 데이터

 

네이버 지도 방문자 리뷰 예시

  • Selenium 패키지를 통해 네이버 지도 > [지역명][병원명] 검색을 통해 추천순 리뷰 상위 50개 수집 (전체 리뷰 수 20개 미만인 곳은 수집 제외)
  • 서울시 피부과 의원 총  3331개 병원 중 검색되지 않는 병원 138개를 제외한 3193개 병원의 리뷰 총 14만 5523개 수집
  • 공백, 특수기호, 숫자, 영문, 자음/모음, 불용어를 제거하는 기본적인 전처리 후 14만 2860개 리뷰 활용 
  • 병원 단위로 리뷰 통합 및 토크나이징

4. 데이터 EDA

리뷰 문장 시각화

  • 리뷰 데이터에 전체 토픽에 걸쳐 공통적으로 자주 등장하는 단어들이 존재 (e.g., “친절하다”, “좋다”, “원장” 등)
  • 모든 리뷰에 등장하여 단어에 대한 변별력이 없음
  • 이러한 중복된 단어들은 전처리 파트에서 처리하고자 했음

 

오타 예시 모음

적은 리뷰 데이터

  • 리뷰 데이터가 짧거나 수가 적은 데이터 발견
  • 임베딩 또는 토픽 모델링 시 리뷰에 대한 맥락 반영이 어려울 것이라 판단

평점 구간별 특징 구분

  • 평점 데이터 약 25%가 결측치로 존재\
  • 평점 구간마다의 리뷰에 대한 차이가 명확하게 보이지 않음

평점 특징 구분

  • 평점 데이터의 문제점
    • 문제 1: 점수 비대칭 문제 대부분의 병원이 4~5점 사이에 분포되어 있어 변별력이 떨어짐
    • 문제 2: 사용자의 니즈에 따라 무조건 평점이 높은 병원이 적합한 병원이라고 볼 수 없음 (e.g., 친절한 병원보다 특정 질환에 전문성이 높고 대기시간이 짧은 병원을 원하는 경우) 
    • 문제 3: 리뷰 워드 임베딩을 한 결과에 대해 t-SNE로 평점을 구간별로 나눠 시각화한 결과 딱히 모이지 않고 패턴이 보이지 않음

  • 해결책: 평점을 가중치로 설정하기 불가하다 판단하여 리뷰 데이터 감성분석을 통해 새로운 가중치를 활용하고자 판단함

5. 데이터 전처리

자연어 처리

 

  • emoji, re 라이브러리를 활용하여 리뷰 데이터 1차 전처리

리뷰 수 적은 병원 데이터 삭제

  • 토큰의 공백(“ ”)이 10개 이하인 데이터 삭제
  • 전체 약 3000개 병원 데이터 중 약 100개 병원 데이터 삭제

 

불용어 처리

  • 한국어 불용어 사전 활용하여 1차 전처리
  • 1차 전처리한 전체 리뷰 데이터를 워드 클라우드로 나타내 빈도 수가 높게 나왔지만 의미가 없는 불용어를 추가 처리

 

6. 토픽 모델링

  • 조건 문장(input)과 유사한 병원을 추천해주기 위해 조건 문장(input)의 토픽을 추론하고 해당 토픽과 비슷한 토픽들 내의 병원을 추천
  • 토픽 모델링을 통해 1차원적으로 유사한 병원끼리 클러스터링
  • LDA와 KoBERTopic의 합집합된 병원들에서 추천을 하고자 함

LDA(Latent Dirichlet Allocation)

  • 단어가 특정 토픽에 존재할 확률과 문서에 특정 토픽이 존재할 확률을 결합확률로 추정하여 토픽을 추출
  • [장점] 토픽의 해석이 비교적 용이하며 다른 모델보다 비교적 학습 시간이 빠름

 

KoBERTopic(Korean BERTopic)

  • BERT는 사전 훈련된 언어 모델로, 텍스트 데이터의 문맥을 잘 이해할 수 있는 능력을 가지고 있음 
  • BERTopic은 BERT를 사용하여 텍스트 데이터를 임베딩한 뒤, 클러스터링 알고리즘을 적용하여 각 문서의 토픽을 추정
  • [장점] BERT를 사용하여 한글 문맥을 고려한 임베딩을 얻을 수 있으며, 다양한 종류의 텍스트 데이터에 적용 가능
  • [장점] 토픽 수를 따로 설정하지 않아도 최적의 토픽 수를 추론해 적용함
  • [장점] KoBERTopic은 한글에 특화된 BERTopic 모델로 한글로 쓰여진 리뷰 데이터를 처리하기에 적합함

 

7. 데이터 후처리

병원 위치 정보 추천에 반영

  • 조건 문장에 위치 정보에 대해서도 원하는 사용자가 있을 수 있다고 판단
  • 병원 위치 정보에 대한 텍스트를 리뷰에 추가하여 임베딩에 반영
  • 토픽 모델링 후 데이터 후처리 과정에서 병원 위치 정보를 토큰화 하여 임베딩할 때만 반영하고자 함
  • 데이터 전처리 과정에서 하지 않고 후처리를 한 이유는 토픽 모델링에 위치 정보가 포함되면 위치정보에 대한 토픽도 같이 관여되는데 토픽 모델링의 목적은 리뷰에 대해서만 유사한 클러스터링을 형성하기 위해서라 토픽 모델링을 완료한 후 후처리 과정에서 위치정보를 반영하여 텍스트 임베딩을 진행하고자 함

8. 워드 임베딩

수정된 임베딩 방법론

  • Doc2Vec(중간발표) → BERT 모델 기반 임베딩(최종 발표)
    • Doc2Vec: 사전 학습 모델 부재, 문맥 고려 부족
    • BERT 기반 모델: 문맥 이해 가능, 사전 학습 모델 존재, 뛰어난 성능

  • 실제로 정성적으로 결과에 대해 본 결과 사용자 프롬프트에 대한 문맥 고려의 차이가 확연하게 보였음

한글 댓글로 학습된 BERT 기반 모델

  • KcELECTRA
    • 한국어 댓글로 pre-training 된 모델로 리뷰 데이터에 사용이 적합함
    • 최대 토큰수 제한으로 max_length를 512개로 설정하여 토큰화

https://github.com/Beomi/KcELECTRA

 

GitHub - Beomi/KcELECTRA: 🤗 Korean Comments ELECTRA: 한국어 댓글로 학습한 ELECTRA 모델

🤗 Korean Comments ELECTRA: 한국어 댓글로 학습한 ELECTRA 모델. Contribute to Beomi/KcELECTRA development by creating an account on GitHub.

github.com

전체 리뷰에 대한 리뷰 토큰 수 분포(토큰화 후 토큰 수는 아님)

 

KcELECTRA 결과

  • 임베딩 결과를 3차원 t-SNE로 시각한 결과 특정한 패턴을 보임
  • 이때 색은 토픽 모델링을 뜻하며 빨간 토픽 부분과 주황 계열의 토픽이 찢어져 있는 것으로 보아 어느정도 임베딩이 잘 된 것으로 판단

9. 감성 분석

Fine-Tuning KcELECTRA

  • 리뷰 문장에 대해 Fine-Tuning KcELECTRA로 감성 분석하여 나온 확률값을 추천 시스템 가중치로 설정
  • 코사인 유사도를 감성 분석 점수보다 더 고려하기위해 감성 분석 점수를 로그 스케일로 치환하여 반영
  • 로그 a값을 하이퍼 파라미터 튜닝하듯 적절히 분산을 줄여주는 값 5로 직접 도출 및 설정함

10. 추천 시스템

Input 문장의 프로세스

  • 사용자들이 입력한 문장을 전처리 및 토큰화
  • Input 문장의 토픽을 LDA, KoBERTopic 모델로 추론하여 해당하는 토픽의 합집합 내에서만 추천함
  • 병원 리뷰에 대한 임베딩 결과와 Input 문장의 KcELECTRA 임베딩 결과의 코사인 유사도를 도출함

 

사용자 Input 문장 예시(Prompt)

"저는 서울특별시 강남구 삼성동에 위치한 병원을 찾고 있습니다. 특히 의사와 간호사들이 친절하고 전문적인 병원을 선호합니다. 진료는 빠르고 정확해야 하며, 병원의 시설은 최신식이고 깨끗해야 합니다. 또한, 의료진의 태도가 친절하고 환자를 배려하는 병원을 원합니다. 만약 피로 회복이나 피부 치료를 전문으로 하는 병원이 있다면 더욱 좋습니다. 대기 시간이 짧고, 예약 시스템이 잘 되어 있는 병원을 추천해 주세요"

 

감성 분석 점수 활용한 가중치 반영

  • 감성 분석 KcELECTRA 모델을 사용하여 병원 리뷰에 대한 점수를 계산하고자 함
  • 감성 분석 점수를 도출한 후 코사인 유사도와 곱하여 가중치를 반영
  • 감성 분석 점수에 로그 스케일링을 진행하여 코사인 유사도의 가중치를 더 반영하고자 함
  • 이를 통해 최종 점수가 높은 순서로 추천

코사인 유사도 기반 추천

  • 입력 받은 조건 문장에 대해 속할 토픽 추론
  • 추론된 토픽과 관련된 토픽들에 속하는 병원의 임베딩 정보를 불러옴
  • 입력 조건 문장과 병원 리뷰 간 코사인 유사도를 계산하여 유사도가 높은 순으로 추천

입력 문장 예시 1
입력 문장 예시 2
입력 문장 예시 1에 대한 인터페이스 제안

11. Discussion

  • 추천 시스템의 평가 지표를 설계하기 위해 다음과 같은 자료를 참고하여 설계하고자 함
  • 본 추천 시스템이 챗봇 시나리오는 아니지만 조건 문장을 통해 맥락에 맞는 추천을 사용자에게 보여주는 과정에서 비슷하다고 판단하여 챗봇 사용자 평가 지표에 대한 논문들을 바탕으로 본 추천 시스템에 대한 평가지표를 설계하고자 함

3가지 ISO 카테고리에 해당하는 관점 및 지표

  • Effectiveness
    • 기술적 관점에 해당함.
    • 챗봇 작동 기술에 대한 테크닉이 주요 포인트임.
    • 기본 알고리즘 성능이 향상될 때 진전됨.
  • Efficiency
    • 챗봇의 명시적인 목표에 해당함.
    • 챗봇이 해야 할 작업에 달성했는지 여부와 관련이 있음.
  • Satisfaction
    • 챗봇에 대한 사용자의 관심을 평가하거나 상호작용이 좋았는지 평가함.

Casas, J., Tricot, M. O., Abou Khaled, O., Mugellini, E., & Cudré-Mauroux, P. (2020, October). Trends & methods in chatbot evaluation. In Companion Publication of the 2020 International Conference on Multimodal Interaction (pp. 280-286).

 

Evaluation Metrics for Chatbots

  • 시스템 사용성 및 기본적인 기능성을 평가하는 다수의 기준이 여전히 활용되고 있음.
  • 대화라는 상호작용 과정에서 느끼는 주관적인 감정과 더불어 정보 습득을 위해 필요한 노력과 시스템의 대응에 대한 퀄리티를 평가하는 기준도 활용되고 있음.

Ren, R., Zapata, M., Castro, J. W., Dieste, O., & Acuña, S. T. (2022). Experimentation for chatbot usability evaluation: A secondary study. IEEE Access10, 12430-12464.

 

Evaluation Criteria for LLMs

  • LLM 기반 애플리케이션의 performance syntax, semantics, context 측면에서 분석하는 것이 필요하며, 이를 위해 6가지 평가 준거가 개발됨

Chang, Y., Wang, X., Wang, J., Wu, Y., Yang, L., Zhu, K., ... & Xie, X. (2023). A survey on evaluation of large language models. ACM Transactions on Intelligent Systems and Technology.

 

병원 추천 시스템의 평가 기준

  • 정리하자면, 문헌 조사를 바탕으로 병원 추천 시스템의 정성적 평가 메트릭은 다음과 같이 정리될 수 있음
  • 이를 기준으로 추후 모델을 평가한다면 모델이 보다 사용자 중심적 병원 추천 서비스로 거듭날 수 있을 것이라 기대함

12. Conclusion

병원을 찾아줘!

  • 병원을 찾을 때 사용자들이 겪는 어려움을 해결하기 위해 리뷰 데이터 기반 추천 시스템 제공
  • 문장 단위의 입력으로 사용자 개개인이 바라는 맥락 조건을 보다 충실히 반영한 사용자 중심적 접근
  • 두 가지 토픽 모델링 방법론을 결합함으로써 사용자마다 다른 문장 스타일에 대처하는 다양한 매칭 풀 확보
  • 리뷰 기반 병원 추천이라는 태스크를 중심으로 우수한 추천 제공
  • 다양한 도메인에 확장적으로 적용 가능한 방법론

Lessons learned

  • 수업에서 배운 임베딩 방법론들을 직접 활용하며 각 방법론간 차이에 대해 깊이 이해
  • 실제 겪었던 일상 생활에서의 불편함에서 시작하여 사용자 중심적 서비스를 제공하기 위한 고민 과정
  • 정성적 평가 기준을 조사함으로써 인간-컴퓨터 상호작용을 보다 개선할 수 있는 모델에 대해 생각해 볼 수 있는 기회