RAG Project

[RAG Project] GlobalMacro QA chatbot - Question Process&Evaluation (8)

hibyeys 2024. 9. 20. 22:51

2024.09.17 - [RAG Project] - [RAG Project] GlobalMacro QA chatbot - Retriever&Evaluation (7)

 

[RAG Project] GlobalMacro QA chatbot - Retriever&Evaluation (7)

2024.09.12 - [RAG Project] - [RAG Project] GlobalMacro QA chatbot - Embedding&Vectorstore (6) [RAG Project] GlobalMacro QA chatbot - Embedding&Vectorstore (6)2024.09.11 - [RAG Project] - [RAG Project] GlobalMacro QA chatbot - Data Preprocessing - GraphSta

hibyeys.tistory.com

지난 포스팅에서는 QA chain을 생성하고 평가하는 시간을 가졌다.
이번 포스팅에서 QA chain을 사용하면서 단계를 정의하고 동시에 정성적 평가와 직접 테스트 셋 만들기를 진행해 볼 것이다.

 

각 단계 정의

프로젝트 첫글에서 언급한 것처럼 chatbot을 구축한다고 결론을 도출해 낼 수 있는 게 아니다.

각 단계를 세분화하고 structured 한 아웃풋을 내고 필요한 module에 전달할 필요가 있다. 

 

먼저 이전에 작성했던 흐름은 아래와 같다.

1. 현재 경기 지표 데이터 검색
2. 각 지표 및 발생이벤트 분석 (추세, 상관관계, 과거 영향 등등)
3. 현재 사이클 국면 파악
4. 과거 비슷한 사이클들 분석해 보기
5. 현재 경기 국면에서 적합한 자산군 파악
6. 해당 자산군의 특수성 파악  (공통점과 차이점)

 

위의 1 ~ 3번의 과정을 수행하기 위한 5가지의 관점

  1. 미국 내외 정치의 관점
  2. 미국의 경제정책의 관점
  3. 성장과 물가의 관점
  4. 통화의 관점
  5. 자산시장의 관점

그리고 아래의 이미지와 같은 과정을 거칠 수 있겠다.

 

Streamlit을 통한 Chatbot 구현

실제로 사용해 보면서 정성적 평가와 테스트 데이터셋을 만들기 위해 Multi Turn 대화를 지원하는(k=3) Chatbot을 만들었다.

간략하게 기능 소개를 하면 

  • select session : ChatGPT 처럼 대화내용을 자동으로 저장하고 로드하는 부분 (json 파일로 관리)
  • selet prompt : 여러 prompt를 선택해서 실험할 수 있는 부분
  • select model : 여러 모델을 선택해 테스트할 수 있는 부분 [gpt-4o, gpt-4o-mini, sonnet 3.5]
  • select retriever : 이전에 만들어둔 chain을 선택하는 부분 [BM25, MultiVector, ParentDocument]

Streamlit은 처음 사용해보았는데, 다른 기능을 구현하는 데는 Tutorial들이 잘 나와있어서 편했지만

대화내용을 자동으로 저장하고 불러오는 부분은 Tutorial이 없어서 구현하는데 시간을 꽤 소비했다.

 

 

정성적 평가

LangSmith를 통해 retriever 도 바꿔보고 model도 바꿔보며 테스트를 진행하였다.

LangSmith로 결과물 추적

 

정성적인 테스트 결과 Retriever 의 경우 BM25 의 압승이었고 Model은 claude 가 좋았다.

MultiVector 와 ParentDocument는 Langsmith로 Context를 추적해 보았을 때, Retrieve 한 문서들이 중복되어 있었고
그 내용 마저도 아쉬웠다. 굳이 Evaluation을 해보지 않아도 될 정도로 답변 차이가 났다고 생각한다.

 

Model 부분에서는 gpt-4o-mini 와 sonnet 3.5를 번갈아가며 같은 질문을 넣어본 결과 당연하게도 claude의 압승이었다.

같은 질문이라 분명 같은 context가 들어갔을 텐데, mini는 질문의 요지를 제대로 이해하지 못하는 것 같았다.

아무래도 mini를 쓸려면 역할을 강제해서 (ex. 정치 이벤트만 다루는 역할) 그에 맞게 prompt를 구체적으로 작성해야 할 것 같다.

 

당연한 결론이지만, 모델이 작을 수록 prompt를 구체적이고 구조화해서 작성해줘야 할 것이다.

 

테스트 셋 생성 및 평가

각 단계별로 몇가지 질문과 사실을 작성해보았다.

 

2가지 모델과 3가지의 retriever를 비교해본 결과는 아래와 같았다.

 

예상대로 BM25 retriever의 결과물이 괜찮았고 모델은 gpt-4o-mini 와 sonnet 3.5 이 비슷했다.

실제로 써봤을 때는 sonnet 3.5가 훨씬 대답을 잘한다고 느꼈는데 의외였다. 아마 데이터셋을 만들때 Ground Truth를 간결하게 작성한게 영향이 있지 않나 싶다. Evaluation이 절대 적인게 아니기에 하나의 참고 자료로 생각하자.