Post

LLM을 활용한 RAG 기반 교내 챗봇

image

배경

학교에서 대회를 하는데, 개인으로도 낼 수 있다는 말을 보고, 하나 내고 싶어서 뭐내지? 하다가 트랜드에 맞춰서 ㅋㅋ RAG 기반 교내 챗봇을 만들면 어떨까 라는 생각에 제작했다

구글 머신러닝 부캠 때 파인튜닝만 해봤지, RAG는 처음 해봤는데 솔직히 부캠때 한 것 보다 응답이 더 잘 나온 것 같다 (애초에 그때 한 주제가 파인튜닝이랑은 안 맞는 것 같다는 생각이..)

설명 & 느낀점

과정은 크게

  1. 데이터를 load하고
  2. 불러온 데이터를 split 한 다음
  3. embedding 해서 vectore store하고
  4. retriever에 넣어서 llm에 학습 시키는

그런 과정을 거쳤다

데이터는 우리 학교 안내 가이드북 pdf 파일이랑 총학 인스타에 있는 안내 카드 뉴스?를 ocr로 추출해서 사용했다.

하면서 느낀건데, pdf loader가 진짜 중요하더라..

맨 처음엔 pypdfloader가 무난하다고 해서 이걸로 해봤는데, 답변을 너무 이상하게 내놓는거임

그래서 엥.. 뭐지 하고 있다가 문서 안에 이미지랑 그런게 많이 있으면 pdfplumber로 많이 사용한다고들 하셔서 오 그럼 이걸로 ㄱㄱ? 하고 해봤더니?

image

오.. 레알 좋음. 아무래도 가이드북 안에 사진이 많아서서 그런듯

그래서 pdf loader는 pdfplumber로 사용했고,

split하는건 그냥 recursive로 했었다

embedding은 bge-m3 model로, vectore store는 faiss에 저장했다

retriever는 vectore store 기반 retriever로..

이렇게 학습 다 시키고 gradio에 띄워서 써봤는데 신기했음 대답 잘 하더라

성능 검사하는건 RAGAS 많이들 사용하시던데.. 나는 gemini를 써서 그때 당시엔 이걸로 성능을 테스트 하기가 힘들었었다

근데 이거 하고나서 일주일 뒤인가?에 gemini가 open ai 호환되게 했다고 해서 지금은 또 모르겠음

그래서 난 코사인 유사도로 rag 돌린 llm이 답변한거랑 현재 우리 학교 챗봇 답변을 정답으로 설정해서 비교를 했는데

image

대충 0.9 이상으로 높게 나왔었다 = 환각이 별로 없다는 의미.

사실 데이터를 딱 세개만 뽑아서 해서 사실 딱히 공신력이 있다고 보긴 어렵지만.. ㅎㅎ 한 거에 의의를.넵

그리고 하면서 프롬프팅도 되게 중요하다고 느꼈는데, 내가 아무리 임베딩 모델을 bge m3로 했어도 프롬프트에 질문한 언어로 답변하란 말을 안 넣으면 지멋대로 답변을 해서 열이 받았었다

결론

  1. 데이터에 pdf가 있다면 pdf 안에 들어가 있는 요소들이 뭔지 보고, 이미지가 많다면 pdfplubmer를 사용해보자.

  2. 프롬프팅을 잘 하자.

이 글과 번외로.. 교수님은 모르시겠지만.. 이거땜에 어떤 교수님한테 피드백을 받았었는데 너무 좋았었다 어디를 줄여야 하고, 어디를 중점으로 둬야 하는지 확 알 수 있었다 랄까? 감사합니다..

그럼 진짜 ㅃㅇ

image

This post is licensed under CC BY 4.0 by the author.