<현대자동차 챗봇 구현기>
사이드 프로젝트로 현대자동차 설명서 RAG를 구현하며,
경험을 공유하고 있습니다.
2. 현대자동차 챗봇 구현기 - PDF를 잘 추출해야 하는 이유
문제 : RAG의 평가 데이터셋 구축의 어려움
초등학생 때부터 지금 까지, 그리고 앞으로도 우리는 끊임없이 시험을 치르게 됩니다. 시험 기간만 되면 모두들 좋은 성적을 받기 위해 밤낮을 새곤 하죠. 하지만, 여기에는 시험을 치르는 사람보다 어쩌면 더 고통을 받는 분들이 계십니다. 바로 시험 문제 출제자들이죠.
지정된 범위 내에서 풀 수 있는가?
중복 정답이 있지는 않은가?
출제 의도가 분명한가?
고려해야 할 요소가 상당히 많습니다. 덕분에 시험기간만 되면 출제자들은 문제 출제에 감금이 되곤 하죠. RAG의 성능을 평가하기 위해, 평가데이터셋을 구축하는 것도 마찬가지 입니다. 어쩌면 RAG 시스템을 구축하는 것 보다도 더 어려운 작업인것 같습니다. 간혹, 질문을 하나만 툭 던지고는 이 RAG보다 저 RAG가 더 좋네! 하시는 분들이 종종 있습니다. 이는 마치 시험 문제 하나만으로 대학 입시가 결정되는 것과 같은 평가 방법입니다. 우리는 꼭 양질의 n개 데이터로 평가를 진행해야만 하죠.
이번 포스팅에서는 제가 현대자동차 챗봇을 고도화하는 과정에서 평가데이터셋을 구축해 온 과정을 공유드리고자 합니다.
RAG 평가 데이터셋 생성 과정
RAG의 성능은 기본적으로 사용자 질문에 대해서 1. 관련된 말뭉치를 잘 검색했는가? 와 2. 답변을 잘 생성했는가? 이 2가지 관점에서 성능이 평가됩니다.
고로 RAG를 평가하기 위해서는 질문, 관련된 말뭉치, 답변 이 3가지의 쌍을 구성해야 하죠. 이 3가지의 쌍을 사람이 일일이 구축하기엔 너무 많은 비용과 시간이 들테니, 저희는 LLM을 활용해 위의 3가지 쌍을 임의로 생성해 낼 것입니다. 아래는 LLM이 평가 데이터셋을 생성해 내는 파이프라인입니다.
1️⃣ 청킹 된 단락들 중에서 랜덤으로 특정 단락을 선택합니다.
2️⃣ 선택된 단락에서 사용자가 질문해 볼 수 있는 내용으로 LLM이 질문을 생성해 냅니다.
아래는 AutoRAG에서 질문 생성 시 기본으로 제공하는 프롬프트입니다.
<당신은 주어진 Text를 '사실 질문'으로 변환하는 AI입니다.
사실 질문(factoid questions)이란 사실적인 정보를 요구하는 질문으로,
쉽게 검증할 수 있는 답변을 필요로 합니다.
일반적으로 예/아니오 답변이나 간단한 설명을 요구하며,
날짜, 이름, 장소 또는 사건과 같은 구체적인 세부사항에 대해 묻는 질문입니다.
사실 질문의 예는 다음과 같습니다:
• 프랑스의 수도는 어디입니까?
• 전구를 발명한 사람은 누구입니까?
• 위키피디아는 언제 설립되었습니까?
지침:
1. 질문은 반드시 주어진 Text를 기반으로 작성되어야 합니다.
2. 질문은 Text를 기반으로 가능한 한 구체적으로 작성되어야 합니다.
3. Text에서 사실적 정보를 요구하는 질문을 만들어야 합니다.
즉, Text를 기반으로 사실 질문을 만드세요.
4. 질문에 “주어진 Text에서” 또는 “제공된 단락에서”와 같은 표현을 포함해서는 안 됩니다.
사용자는 질문의 출처가 Text라는 것을 모르기 때문에 반드시 그 출처를 언급해서는 안 됩니다.
5. 질문을 한국어로 작성하세요.
3️⃣ 생성된 질문을 선택된 단락을 기반으로 LLM이 답변을 생성해 냅니다. 아래는 AutoRAG에서 답변 생성 시 기본으로 제공하는 프롬프트입니다.
당신은 주어진 질문에 대해 제공된 Text 내에서 답을 찾는 AI 비서입니다.
질문에 대한 답을 Text에서 찾아 적절한 답변을 작성하세요.
답변은 간결하고 질문에 관련된 내용만 포함해야 합니다.
불필요하게 길게 답변하지 말고, 명확하게 작성하세요.
완전한 문장이 아니어도 되며, 답은 단어나 요약일 수 있습니다.
LLM의 한계 : 사람의 검수가 필요하다
하지만, 이렇게 LLM에 의존한 평가 데이터셋은 여러 문제가 있을 수 있습니다. 때문에 꼭 도메인 전문가가 직접 검수를 진행해야만 하죠. 이 과정이 RAG 평가에서 가장 중요한 단계라 볼 수 있습니다. 힘들게 성능을 올려놨는데, 이 성능이 엉뚱한 평가데이터셋으로 도출된 것이라면 아무 의미가 없기 때문이죠. 아래는 제가 직접 마주친 평가데이터셋의 문제 사례입니다.
전문 용어가 난무하는 경우
LLM은 다음과 같이 질문을 생성했습니다.
“TMK를 사용할 때, 실런트 용기를 어떻게 연결해야 하나요?”
하지만, 타이어 응급 처치 키트가 TMK라는 용어로 쓰인다는 사실을 일반 사용자가 알고 있을 까요?
일반 사용자를 대상으로 RAG를 설계한다면, 이러한 전문용어가 들어간 질문은 적절하지 않을 수 있습니다. 전문용어가 난무하는 상황에서는 BM25(키워드 기반 일치성으로 검색을 하는 알고리즘)의 검색 방법이 항상 더 좋은 결과를 나타낼 수 있기 때문이죠.
엉뚱한 단락이 선택된 경우
위의 경우, 랜덤으로 선택된 단락이 설명서의 목차 부분인 사례입니다. 챗봇을 만드는 목적이 두꺼운 설명서를 직접 읽지 않고 챗 형식으로 내용을 알려주는 데에 있는데, 실제 설명서의 목차와 페이지가 나열된 단락은 의미가 없을 수 있습니다. RAG가 목차를 보고 직접 설명서의 해당 페이지를 찾아갈 수도 없는 노릇이고요. 이 사례 또한 저의 서비스관점에선 적절하지 않은 평가 데이터였습니다.
위의 두 사례처럼, LLM이 다소 적절하지 않은 평가 데이터를 생성할 수 있습니다. 귀찮더라도 서비스 관계자나 도메인 전문가가 직접 검수 및 수정을 해줄 필요가 있죠.
효율적인 검수 도구가 있으면 좋겠다.
하지만, 수백 개의 평가 데이터를 일일이 검수하고 수정을 하다 보니, 조금 더 효율적인 방법을 추구하고 싶었습니다. 수정, 삭제, 재생성, 이어서 하기 등 검수하는 과정에서 편리한 기능이 더해진 도구가 있으면 어떨까?
Streamlit을 활용해 간단한 검수 도구를 구현해 봤습니다.
검수 대시보드
대시보드 기능 설명
제가 직접 검수를 하며, 있으면 좋겠다 싶은 기능들을 포함해 GUI환경에서 효율적으로 검수를 진행해 볼 수 있었습니다. 이러한 툴이 있다면 수많은 평가데이터를 비교적 효율적으로 전처리 할 수 있으며, 데이터의 관리와 협업 관점에서 생산성 향상을 기대할 수 있습니다. 또는 LLM의 생성 내용을 빠르게 훑어보며 프롬프트를 개선하는 데에도 도움이 될 수 있죠.
현대자동차 챗봇, 성능 최적화 결과
이렇게 구축한 평가데이터를 활용해 다양한 기법들을 평가해 볼 수 있었으며, 성능을 최적화할 수 있었습니다. 아래는 제가 처음 RAG를 구축했을 때와, AutoRAG를 활용해 최적화 한 RAG의 성능 비교입니다.
문서 검색 성능
답변 생성 성능
최적화 과정에서 성능에 큰 영향을 준 요소를 정리해 보면 아래와 같습니다.
- 검색 시 키워드 기반 검색 알고리즘인 BM25와 의미론적 검색이 가능한 Vector Search를 rrf 하이브리드 방식으로 융합한 것이 검색 성능에 큰 영향을 주었습니다.
- VectorSearch 단계에서 openAI의 임베딩 모델이 가장 성능이 좋다고 생각하였지만, 실험결과 BGE-M3의 임베딩 모델이 가장 성능이 뛰어났습니다. 다국어에 강하다는 인식이 있는 BGE-M3 모델이 아무래도 한국어로 이루어진 현대자동차 설명서에서 더 좋은 성능을 낼 수 있었던 게 아닌가 싶습니다.
- 검색 결과를 재 정렬하는 과정에서, 한국어로 파인튜닝 되어잇는 KoReranker 모델이 가장 성능이 좋았습니다. 위에서도 마찬가지지만, 해당 모델이 어떤 언어에 강력한가? 가 전체적으로 성능에 많은 영향을 끼치는 걸 볼 수 있었습니다.
- 답변 생성 과정에서 gpt-4 모델과 gpt-4o, gpt-4o-mini 모델을 비교해 본 결과, 이들 간의 성능차이가 크지 않았습니다. 이러한 상황에서는 api 비용이 많이 저렴한 gpt-4o-mini모델이 가장 합리적인 선택이 될 수 있습니다.
마무리
RAG는 단순히 구현에서 그치지 않고, 꼭 위와 같이 최적화 과정이 필수입니다. 이 과정에서 어떻게 효율적으로 최적화할 수 있을까? 라는 관점에서 평가데이터셋을 효율적으로 검수하는 툴을 구현해 봤으며, 실험을 자동화하기 위해 AutoRAG를 활용해 봤습니다.
Reference
'Tech > 현대자동차 설명서 챗봇' 카테고리의 다른 글
RAG | 현대자동차 챗봇 구현기 - PDF를 잘 추출 해야 하는 이유 (0) | 2024.06.23 |
---|---|
RAG | 현대자동차 챗봇 구현기 (2) | 2024.05.26 |