LLM을 활용한 RAG 기반 교내 챗봇
개발기간: 2024년 10월 29일 - 2024년 11월 3일
성과: 교내 AI융합혁신경진대회 개인 출품 (우수상)
배경
학교에서 대회를 하는데, 개인으로도 낼 수 있다는 말을 보고, 하나 내고 싶어서 뭐내지? 하다가 트랜드에 맞춰서 ㅋㅋ RAG 기반 교내 챗봇을 만들면 어떨까 라는 생각에 제작했다
구글 머신러닝 부캠 때 파인튜닝만 해봤지, RAG는 처음 해봤는데 솔직히 부캠때 한 것 보다 응답이 더 잘 나온 것 같다 (애초에 그때 한 주제가 파인튜닝이랑은 안 맞는 것 같다는 생각이..)
설명 & 느낀점
과정은 크게
- 데이터를 load하고
- 불러온 데이터를 split 한 다음
- embedding 해서 vectore store하고
- retriever에 넣어서 llm에 학습 시키는
그런 과정을 거쳤다
데이터는 우리 학교 안내 가이드북 pdf 파일이랑 총학 인스타에 있는 안내 카드 뉴스?를 ocr로 추출해서 사용했다.
하면서 느낀건데, pdf loader가 진짜 중요하더라..
맨 처음엔 pypdfloader가 무난하다고 해서 이걸로 해봤는데, 답변을 너무 이상하게 내놓는거임
그래서 엥.. 뭐지 하고 있다가 문서 안에 이미지랑 그런게 많이 있으면 pdfplumber로 많이 사용한다고들 하셔서 오 그럼 이걸로 ㄱㄱ? 하고 해봤더니?
오.. 레알 좋음. 아무래도 가이드북 안에 사진이 많아서서 그런듯
그래서 pdf loader는 pdfplumber로 사용했고,
split하는건 그냥 recursive로 했었다
embedding은 bge-m3 model로, vectore store는 faiss에 저장했다
retriever는 vectore store 기반 retriever로..
이렇게 학습 다 시키고 gradio에 띄워서 써봤는데 신기했음 대답 잘 하더라
성능 검사하는건 RAGAS 많이들 사용하시던데.. 나는 gemini를 써서 그때 당시엔 이걸로 성능을 테스트 하기가 힘들었었다
근데 이거 하고나서 일주일 뒤인가?에 gemini가 open ai 호환되게 했다고 해서 지금은 또 모르겠음
그래서 난 코사인 유사도로 rag 돌린 llm이 답변한거랑 현재 우리 학교 챗봇 답변을 정답으로 설정해서 비교를 했는데
대충 0.9 이상으로 높게 나왔었다 = 환각이 별로 없다는 의미.
사실 데이터를 딱 세개만 뽑아서 해서 사실 딱히 공신력이 있다고 보긴 어렵지만.. ㅎㅎ 한 거에 의의를.넵
그리고 하면서 프롬프팅도 되게 중요하다고 느꼈는데, 내가 아무리 임베딩 모델을 bge m3로 했어도 프롬프트에 질문한 언어로 답변하란 말을 안 넣으면 지멋대로 답변을 해서 열이 받았었다
결론
데이터에 pdf가 있다면 pdf 안에 들어가 있는 요소들이 뭔지 보고, 이미지가 많다면 pdfplubmer를 사용해보자.
프롬프팅을 잘 하자.
이 글과 번외로.. 교수님은 모르시겠지만.. 이거땜에 어떤 교수님한테 피드백을 받았었는데 너무 좋았었다 어디를 줄여야 하고, 어디를 중점으로 둬야 하는지 확 알 수 있었다 랄까? 감사합니다..
그럼 진짜 ㅃㅇ