← Back to All Projects
CASE STUDY 03/2023.10 — 2023.11
친구들의 메신저 대화 데이터를 학습해 인물별 말투를 재현하고, 웹 채팅 화면에서 대화하도록 설계한 개인화 AI 챗봇 프로젝트.

SunrinGPT

5인 팀이 메신저 DM 기록을 정제해 질문·답변 형태의 학습 데이터를 구성하고, 인물별 한국어 언어모델을 파인튜닝한 프로젝트다. 발표자료에는 ‘나린봇’과 ‘하람봇’의 응답 테스트 및 두 캐릭터를 선택할 수 있는 Next.js 기반 채팅 UI가 제시되어 있다. 전체 서비스의 실제 배포·운영 여부는 확인되지 않았다.

Period2023.10 — 2023.11
Role & Contribution5인 팀 참여 · 개인 담당 범위 확인 필요5명
Tech Stack
PythonPyTorchHugging Face TransformersGPT-2Polyglot-Ko 5.8BbitsandbytesNext.js 14ReactTypeScriptstyled-componentsRecoilTanStack QueryAxios
01SunrinGPT 채팅 메인 화면
02나린봇·하람봇 선택에 따른 채팅 테마 비교
03모바일·태블릿·데스크톱 채팅 레이아웃
04인물 선택·메시지·입력창 컴포넌트 설계
05발표자료에 제시된 인물별 모델 학습 완료 기록
01 / Project Details

만들게 된 배경

기존의 범용 챗봇과 달리 실제 지인의 말투와 대화 습관을 반영하는 AI를 만들어 보고자 시작한 프로젝트다. 친구들의 DM 데이터를 분석·학습해 개인화된 대화 모델을 만들고, 이를 누구나 조작할 수 있는 웹 채팅 인터페이스와 결합하는 것을 목표로 했다.

개발 기간

2023.10 — 2023.11

02 / Project Details

해결하려던 문제와 목표

메신저 기록에는 인코딩 문제와 URL·이모티콘·시스템 메시지 등의 잡음이 섞여 있어 그대로 모델 학습에 사용하기 어렵다. 이 데이터를 인물별 발화 및 질문·답변 쌍으로 재구성하고, 한국어 언어모델을 추가 학습해 대상 인물의 말투가 드러나는 응답을 생성하는 것이 핵심 목표였다. 최종적으로 인물 선택, 채팅 내역, 메시지 입력을 갖춘 웹 UI에서 이용하도록 설계했다.

03 / Project Details

주요 기능

  1. 메신저 대화 전처리: JSON 대화 기록에서 발화자와 내용을 추출하고, 한글 인코딩 복원·불필요한 메시지 필터링·텍스트 정규화 과정을 거쳐 학습용 데이터로 가공. 단순 발화 추출과 인접 메시지 기반 질문·답변 쌍 생성은 제공 소스코드에서 확인됨.
  2. 인물별 언어모델 학습: 발표자료 기준 Polyglot-Ko 5.8B에 질문·답변 데이터를 매핑하고 4-bit 양자화 설정 및 Hugging Face Trainer로 하람봇·나린봇을 학습. 별도로 제공된 소스에는 GPT-2 기반 텍스트 파인튜닝·저장·CLI 추론 코드가 존재함.
  3. 인물 선택형 채팅 화면: 나린봇/하람봇 선택, 메시지 말풍선, 입력창, 채팅 세션 목록 등 채팅 UI를 발표 화면으로 확인. 선택한 인물에 따라 분홍색·파란색 테마가 바뀌도록 상태를 구성한 코드 예시가 제시됨.
  4. 채팅 API 연동 구조: Axios를 통한 채팅 목록 조회·개별 대화 조회·메시지 전송·대화 삭제 메서드 및 Bearer 토큰 헤더를 발표자료에서 확인. 실제 백엔드 구현과 데이터 영속 저장 여부는 미검증.
  5. 반응형 레이아웃: 모바일·태블릿·데스크톱 화면에 맞춘 UI 구성을 발표자료의 화면 예시로 확인.
04 / Project Details

내가 직접 구현하거나 담당한 부분

확인된 개인 기여: 오유성이 5인 팀의 구성원이었다는 사실까지 확인된다. 발표자료에 역할 분담표나 작성자별 커밋 기록이 없어 아래 구현을 오유성이 직접 담당했다고 확정할 수는 없다.

프로젝트에서 확인된 기술 작업(개인 담당자 확인 필요):

  • 데이터 파이프라인: readjson.py에서 발화자 이름을 기준으로 메시지를 추출하고 latin1 → UTF-8 복원 처리. readjson2.py에서 이전 메시지와 특정 인물의 답변을 묶어 질문·답변 쌍 생성. clean_txt.py에서 빈 줄 정리.
  • 모델 학습·추론: main.py에서 GPT-2 토크나이저·모델을 불러와 TextDataset 및 Trainer로 학습·저장; test.py에서 저장된 모델을 불러와 프롬프트와 사용자 입력에 대한 텍스트 생성 테스트.
  • 발표자료에 제시된 추가 개발: 정규표현식·Unicode 정규화를 적용한 고도화된 데이터 정제, Polyglot-Ko 파인튜닝, Next.js 채팅 컴포넌트·상태 관리·API 요청 처리.

팀 구성과 역할

5명(박시원·오유성·이나린·이하람·주현영) / 오유성 팀원 참여 확인. 개인별 담당 기능·개발 범위는 확인 필요.

05 / Project Details

설계 구조 / 기술을 선택한 이유

데이터·모델 흐름: 메신저 JSON → 발화자/내용 추출 → 인코딩 복원 및 불필요한 메시지 제거 → 질문·답변 텍스트 구성 → 토큰화 → 언어모델 추가 학습 → 프롬프트 기반 응답 생성. 발표자료에는 같은 날짜의 메시지 처리, 특수 토큰 부여, ### 질문/### 답변 포맷, Polyglot-Ko 5.8B 로딩 및 NF4 4-bit 양자화 설정이 나타난다. 학습 진행 화면에서는 하람봇·나린봇 각각 500/500 스텝 완료를 확인할 수 있다.

웹 인터페이스 흐름: Next.js 14 화면에서 챗봇 선택과 메시지 표시를 담당하고, Recoil로 테마를 관리하며, Axios 요청 함수를 통해 외부 채팅 API와 통신하도록 구성한 예시가 발표되어 있다. TanStack Query는 데이터 요청·캐싱 라이브러리로 선정되었으나 실제 사용 범위는 원본 코드가 없어 확인되지 않는다.

기술 선정의 범위: 발표에서 GPT 계열과 LLaMA·KoAlpaca 등을 비교·조사한 흔적은 확인되지만, 최종 모델의 선택 이유가 명시적으로 설명되지는 않는다. NLP_GPT2_Custom-main의 GPT-2 학습 코드는 별도 경로이며, 이 코드가 발표 속 Polyglot 모델이나 웹서비스에 직접 연결되었다는 근거는 없다.

기술 구성과 확인 범위

  • AI / 데이터 처리: Python, PyTorch, Hugging Face Transformers, GPT-2(제공 소스코드), Polyglot-Ko 5.8B(발표자료의 파인튜닝 코드), Hugging Face Datasets, bitsandbytes 기반 4-bit 양자화·8-bit 옵티마이저(발표자료)
  • Frontend: Next.js 14, React, TypeScript, styled-components, Recoil, TanStack Query, Axios(발표자료에서 확인; 프론트엔드 원본 소스 미제공)
  • 개발·학습 환경: Google Colab Pro+, NVIDIA Quadro RTX 8000 48GB, Windows Server 2022(발표자료에 기재된 환경)
  • Backend / Database: 구체적 서버 구현과 DB 기술은 확인 필요. 발표자료에는 Bearer 토큰을 사용하는 HTTP API 호출 예시가 제시됨.
06 / Project Details

가장 어려웠던 문제

가장 어려웠던 문제: 실제 메신저 기록을 한국어 언어모델이 학습할 수 있는 데이터 형태로 변환하는 과정.

문제의 원인: 대화 기록의 한글 문자열이 인코딩된 형태로 저장되어 있었고, URL·이모티콘·영상통화·삭제 안내 등 학습에 불필요한 내용이 섞여 있었다. 원본 대화의 발화 순서만으로는 질문과 답변의 관계도 명확하지 않았다.

해결 방법: JSON의 발화자·메시지 필드를 읽고 latin1 바이트를 UTF-8로 디코딩하는 처리를 적용했다. 발표자료에는 추가로 정규표현식 필터링, Unicode NFKC 정규화, 길이 조건 및 같은 날짜 기준 대화 정리, 질문·답변 포맷 변환이 제시된다. 제공 ZIP에서는 발화자별 메시지 추출 및 인접 메시지 기반 질문·답변 변환이 실제 코드로 확인된다.

해결 결과: 정제된 텍스트 예시와 인물별 모델 학습·응답 테스트 화면이 발표되었다. 다만 생성 결과 일부에는 반복 문장과 깨진 문자가 남아 있어, 자연스러운 대화 품질까지 완전히 해결되었다고 보기는 어렵다.

07 / Project Details

최종 결과 / 실제 사용 여부

발표자료 기준 두 인물의 모델 학습 진행(각 500스텝 완료 화면), 한국어 입력에 대한 응답 테스트, 인물별 테마가 적용된 채팅 UI 및 화면 크기별 레이아웃을 확인했다. ZIP에는 GPT-2 전처리·학습·CLI 추론 스크립트가 들어 있지만 학습된 가중치·원본 데이터는 포함되지 않는다. 웹서비스의 실배포, 최종 백엔드 연결, 외부 사용자 이용 실적은 확인되지 않는다.

08 / Project Details

배운 점

자료에서 확인되는 기술적 학습 경험: 실제 사용자 대화를 모델 학습에 활용하려면 문자 인코딩 복원뿐 아니라 노이즈 제거와 질문·답변 구조화가 선행되어야 한다. 또한 학습 스텝 완료 여부와 실제 대화의 자연스러움은 별도 문제임을 응답 테스트에서 확인할 수 있다. 데이터 처리·모델 학습·웹 UI·API 호출을 서로 다른 계층으로 나눠 구성한 경험이 드러난다. 개인적으로 무엇을 배웠는지에 관한 직접 진술은 확인 필요.

09 / Project Details

앞으로 개선하고 싶은 점

자료 기반 개선 제안(확정된 개발 계획 아님): 생성 결과에 남은 반복·문자 깨짐을 줄이기 위해 데이터 정제 규칙과 답변 품질 평가를 보완할 수 있다. 대화의 화자·시간 간격을 고려해 질문·답변 쌍의 정확도를 높이고, 원본 데이터와 학습 설정을 재현 가능한 파이프라인으로 정리하는 작업도 필요하다. 서비스화한다면 백엔드 연동 및 저장 동작을 검증하고, 개인 대화 데이터의 동의·비식별화·접근 통제 정책을 마련해야 한다.