Python

[python/development] project Luna 설치 및 1차 개발 완료

2023.11.16
cate-weblab

Project Luna — 매뉴얼 기반 AI 질의응답 시스템

Project Luna

프로젝트 개요

Project Luna는 사용자가 매뉴얼에 대해 질문하면, 보유하고 있는 매뉴얼 콘텐츠와 별도로 구축한 학습 데이터를 기반으로 답변을 제공하기 위해 개발한 매뉴얼 특화 AI/NLP 질의응답 프로토타입이다.

기존 매뉴얼은 이미 HTML 형태로 이미지, 링크, 스타일 등의 콘텐츠를 가지고 있었기 때문에 이를 최대한 활용하고, 기존 콘텐츠에서 직접 답을 찾기 어려운 질문에 대해서는 별도로 구축한 질문·답변 데이터를 이용하도록 설계했다.

단순히 AI 모델을 테스트하는 것에서 끝내지 않고 데이터 구성, 자연어 전처리, 모델 학습, 질문 분류, 기존 HTML 검색, Django Web Application 연동까지 전체 흐름을 직접 구현했다.

Project Summary

Project매뉴얼 기반 AI/NLP 질의응답 시스템
Role기획 · 데이터 구성 · AI/NLP 테스트 · Backend · Web UI 구현
BackendPython 3.11 · Django 4.2
AI / NLPPyTorch · CNN · Word2Vec · soynlp · KoNLPy · Mecab
Data질문·답변 학습 데이터 2,062건
Result기존 HTML 검색 + 학습 데이터 기반 답변 구조 Prototype 구현

개발 배경과 목표

이 프로젝트에서 중요하게 생각했던 부분은 단순한 챗봇을 만드는 것이 아니라, 기존에 보유하고 있는 매뉴얼 콘텐츠를 활용하면서 자연어 질문을 통해 필요한 정보를 찾을 수 있는 구조를 만드는 것이었다.

매뉴얼에는 이미 이미지와 설명, 링크, CSS가 적용된 HTML 콘텐츠가 존재했다. 따라서 같은 내용을 다시 텍스트로 만들어 제공하기보다는 기존 콘텐츠가 있는 경우 이를 우선 활용하는 것이 더 적합하다고 판단했다.

전체적인 응답 방식은 두 단계로 구성했다.

  1. 기존 HTML 매뉴얼에서 질문과 유사한 콘텐츠를 찾을 수 있는 경우
    → 이미지와 CSS가 적용된 기존 HTML 콘텐츠를 답변으로 제공
  2. 기존 HTML에서 적절한 답을 찾지 못하는 경우
    → 별도로 구축한 질문·답변 학습 데이터를 기반으로 텍스트 형태의 답변 제공
사용자 질문
    ↓
질문 분석 및 자연어 전처리
    ↓
기존 HTML 매뉴얼에서 유사 콘텐츠 검색
    ↓
관련 콘텐츠 존재
    ├─ YES → 기존 HTML 콘텐츠 반환
    │
    └─ NO
         ↓
      학습 데이터 분석
         ↓
      유사 질문 분류
         ↓
      텍스트 답변 반환

개발 환경

  • Python 3.11
  • Django 4.2
  • PyTorch
  • Hugging Face Transformers
  • Pandas / openpyxl
  • scikit-learn
  • BeautifulSoup
  • Word2Vec / Gensim
  • soynlp / soyspacing
  • KoNLPy / Mecab
  • NLTK

개발 당시 최신 Python 버전은 3.12였지만 PyTorch 설치 및 호환성 문제로 Python 3.11 환경을 별도로 구성했다.

가상환경 구성

D:\Python\python311\python -m venv vLuna

pip 업데이트

python.exe -m pip install --upgrade pip

PyTorch 설치

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

개발 당시 Transformers 설치 과정에서 의존성 문제가 발생해 PyTorch를 먼저 설치한 뒤 Transformers 환경을 구성했다.

관련 기록 : [python/error] PyTorch 설치 에러 – No matching distribution found for torch

Transformers 설치

pip install transformers

관련 기록 : [python/error] Transformers 설치 에러 – error: subprocess-exited-with-error

데이터 처리 라이브러리

pip install pandas
pip install openpyxl
pip install -U scikit-learn
pip install beautifulsoup4

Pandas와 openpyxl은 Excel 기반 학습 데이터를 관리하기 위해 사용했으며, BeautifulSoup은 기존 HTML 매뉴얼 콘텐츠를 분석하고 필요한 데이터를 처리하기 위해 사용했다.


자연어 처리

한국어 질문을 처리하기 위해 여러 자연어 처리 라이브러리를 설치하고 전처리 방식을 비교했다.

pip install transformers

pip install soynlp
pip install soyspacing

pip install gensim
pip install nltk
python -m nltk.downloader omw-1.4

pip install konlpy

최종 전처리 과정에서는 soynlp, KoNLPy, soyspacing, Mecab 등을 활용했다. 영어 데이터 처리를 위한 라이브러리로 NLTK도 함께 테스트했다.

KoNLPy는 별도의 선행 설치 과정이 필요했기 때문에 설치 방법을 별도 문서로 정리했다.

[설치/패키지] Python – KoNLPy 한국어 정보 처리


Django Web Application

AI/NLP 기능을 단순한 테스트 코드로 끝내지 않고 실제 사용 형태를 확인하기 위해 Django 기반 Web Application을 함께 구성했다.

pip install Django==4.2.7
pip install mysqlclient
pip install django-cors-headers

django-admin startproject back .

python manage.py startapp web
python manage.py startapp training

python manage.py makemigrations
python manage.py migrate

python manage.py runserver
python manage.py createsuperuser

기능은 사용자 질문과 답변을 처리하는 web 영역과 학습 데이터를 관리하고 모델 학습 기능을 처리하는 training 영역으로 분리했다.

web
 └─ 사용자 질문 및 답변 처리

training
 └─ 학습 데이터 관리 및 모델 학습

질의응답 화면과 학습 관리 기능을 분리함으로써 사용자 기능과 데이터 관리 기능을 독립적으로 확장할 수 있도록 구성했다.


질문 분류 방식

프로젝트 초기에는 여러 NLP 모델을 테스트하면서 질문을 처리하는 방식을 몇 차례 변경했다.

최종적으로는 사용자의 질문을 분석한 뒤 기존 학습 데이터에서 가장 유사한 질문 유형을 찾아 분류하고 해당 답변을 제공하는 방식으로 정리했다.

질문 입력
    ↓
자연어 전처리
    ↓
형태소 및 문장 정규화
    ↓
Word2Vec 기반 단어 표현
    ↓
CNN 기반 질문 분류
    ↓
유사 질문 탐색
    ↓
답변 반환

Word2Vec을 이용해 단어 간 관계와 유사도를 보완하고, CNN 기반 분류 모델을 이용해 질문 유형을 판단하도록 구성했다.


학습 데이터 구성

1차 개발을 마무리할 당시 구축한 질문·답변 데이터는 총 2,062건이었다.

학습 데이터는 Excel을 통해 추가할 수 있도록 구성했으며, 데이터를 추가한 뒤 학습 기능을 실행하면 새로운 데이터를 이용해 모델을 다시 학습할 수 있도록 했다.

질문 데이터를 추가할 때마다 프로그램 코드를 직접 수정하는 것이 아니라, 데이터를 추가하고 재학습하는 방식으로 지속적으로 확장할 수 있는 구조를 만드는 것이 목표였다.

Excel 질문·답변 데이터
        ↓
데이터 전처리
        ↓
모델 학습
        ↓
학습 결과 저장
        ↓
Web Application에서 질문 분류에 활용

Project Luna 1차 결과

Project Luna 실행 화면

1차 개발 결과, 기존 HTML 매뉴얼에서 관련 콘텐츠를 검색해 답변하는 영역은 비교적 높은 정확도를 확인할 수 있었다.

기존 HTML 콘텐츠를 활용하는 방식은 이미 제작된 매뉴얼의 구조와 정보를 그대로 사용할 수 있다는 점에서 효과적이었다.

반면 별도로 학습한 질문 데이터를 이용해 답변하는 영역은 충분한 학습 데이터를 확보하지 못해 정확도가 만족스럽지 않았다.

당시 구축한 데이터는 2,062건 수준이었고 실제 학습 기간도 길지 않았기 때문에, 모델의 구조뿐 아니라 학습 데이터의 양과 품질이 결과에 큰 영향을 준다는 점을 직접 확인할 수 있었다.

추가 데이터를 지속적으로 확보해 학습했다면 정확도를 더 개선할 수 있었겠지만, 프로젝트의 초기 목표였던 매뉴얼 데이터 기반 질의응답 구조의 가능성을 검증하는 단계까지 완료한 시점에서 1차 개발을 마무리했다.

추후 다시 개발할 경우를 고려해 Excel 기반 학습 데이터 추가와 재학습 과정까지 구성해 두었지만 이후 다른 프로젝트를 진행하면서 추가 개발은 중단했다.


프로젝트를 통해 얻은 경험

Project Luna는 내가 처음으로 직접 시도한 AI/NLP 프로젝트였다.

PyTorch와 Transformers 환경 구성부터 자연어 전처리, 학습 데이터 설계, 모델 학습, 질문 분류, 기존 HTML 콘텐츠 검색, Django Web Application 연동까지 대부분 처음 접하는 영역이었기 때문에 개발 과정에서 여러 방법을 직접 테스트하고 구조를 변경했다.

문제 정의
    ↓
데이터 준비
    ↓
자연어 전처리
    ↓
학습 데이터 구성
    ↓
모델 학습
    ↓
결과 검증
    ↓
Web Application 연동

특히 AI 서비스의 결과는 단순히 어떤 모델을 선택하는지만으로 결정되는 것이 아니라 학습 데이터의 구조와 품질, 전처리 방식이 매우 중요하다는 점을 직접 확인할 수 있었다.

또한 AI 기능 자체뿐 아니라 기존 업무 콘텐츠와 AI를 어떤 방식으로 연결할 것인지, 사용자가 실제로 활용할 수 있는 서비스 형태로 어떻게 구성할 것인지까지 함께 고민할 수 있었던 프로젝트였다.

완성된 상용 AI 서비스라기보다는 매뉴얼 콘텐츠와 자연어 질의응답을 연결하는 구조를 직접 설계하고 구현한 AI/NLP Prototype이라는 점에서 의미가 있다.


Reference

PyTorch : https://pytorch.org/

Transformers : https://huggingface.co/docs/transformers/v4.39.0/ko/index

soynlp : https://datascienceschool.net/03%20machine%20learning/03.01.04%20soynlp.html

soyspacing : https://github.com/lovit/soyspacing

Gensim : https://radimrehurek.com/gensim/

NLTK : https://www.nltk.org/

KoNLPy : https://konlpy.org/ko/latest/

Python All