일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 재현율
- Normalization
- sorted
- 백엔드
- 데이터 전처리
- Batch Normalization
- 데이터 프로젝트
- 오차 행렬
- 감정은 습관이다
- ifnull
- 강화학습
- five lines challenge
- CASE WHEN
- beautifulsoup
- DecisionTree
- layer normalization
- SQL
- 정밀도
- NVL
- 웹서비스 기획
- recall
- 데이터 분석
- 빠르게 실패하기
- 지도학습
- NULLIF
- nvl2
- 비지도학습
- 결정트리
- 평가 지표
- LAG
- Today
- Total
Day to_day
AutoRAG 실험해보기 (+ 사용 후기) 본문
들어가며
LLM 프로젝트를 시작하면서 LLM Fine tuning과 RAG를 보게 되었는데, 이번 포스팅에서는 RAG 최적화를 도와주는 AutoRAG 사용법, 데이터 셋 구성, 사용해 본 후기 등 전 과정을 공유하려고 한다. AutoRAG를 직접 사용해보고 싶다면 공식문서를 참고하고, 이 글은 전반적인 과정을 이렇게 진행했구나 정도로 참고하면 좋겠다.
https://github.com/Marker-Inc-Korea/AutoRAG
GitHub - Marker-Inc-Korea/AutoRAG: RAG AutoML Tool - Find optimal RAG pipeline for your own data.
RAG AutoML Tool - Find optimal RAG pipeline for your own data. - Marker-Inc-Korea/AutoRAG
github.com
AutoRAG?
RAG는 자신의 Task와 Dataset의 특징에 따라 다양한 조건으로 구성할 수 있다. 그래서 하나하나 바꿔보면서 평가해야 하는 번거로움이 있다. 이때 AutoRAG가 이 수고를 덜어준다. AutoRAG github 문서를 보면 단계별로 자세히 설명되어 있어 시도해 볼 만하다.
AutoRAG의 목적은 Task와 Dataset에 맞는 최적의 RAG 파이프라인을 찾는 것으로 주요 기능은 다음과 같다.
- 데이터 생성: 자체 원시 문서로 RAG 평가 데이터를 생성하는 것도 지원한다.
- RAG 파이프라인 최적화: 그 평가 데이터로 다양한 RAG 모듈을 자동으로 평가하여 RAG 파이프라인을 최적화 한다.
- Deployment: 단일 yaml 파일로 최적의 RAG 파이프라인을 배포할 수 있고, FastAPI도 지원한다. 또한 web 인터페이스로 최적화된 RAG를 챗 형식으로 확인할 수도 있다
Task 정의
나의 Task는 교과서 pdf를 참고하여 객관식 문제를 만들어주는 LLM을 만드는 것이다. ChatGPT를 이용해 과목, 키워드, 난이도 정보를 주고 문제 생성을 요청했을 때 꽤 괜찮은 답변이 나왔다. 하지만 우리는 더 자세하고 학생들이 배운 교육과정 내에서 해설까지 제공하는 디테일함을 원했기에 RAG를 도입하기로 했다.
데이터 셋 구성하기
AutoRAG에서 쓰이는 데이터셋은 크게 두 가지 종류이다.
- 원본 문서에서 만들어진 Corpus dataset
- RAG 평가에 사용되는 QA dataset
데이터 셋 구성 요소를 자세히 보자.
Corpus dataset
우리는 PDF를 gpt-4o를 이용하여 markdown 형태로 변환하고 MarkdownHeaderTextSplitter와 TokenTextSplitter를 사용하여 문서를 chunking 하여 contents를 만들었다. 이 Corpus dataset 만드는 방법은 공식 문서에 모두 나와있으니, 자세한 내용은 문서를 참고하면 좋겠다.
corpus dataset은 아래와 같이 구성되어 있다. doc_id, contents, metadata로 구성되며, last_modified_datetime 키가 metadata에 반드시 포함되어야 한다는 점을 주의해야 한다.
(AutoRAG에서 제공하는 샘플 corpus dataset)
doc_id | contents | metadata |
doc_1 | will also make the playoffs as wild-card teams. The top two teams with the best records in the regular season get a first round bye, and each of … | { "last_modified_datetime": "2024-02-04T11:20:15.391007" } |
doc_2 | no drive applied to the wheels with the engine running D = Drive - forward motion with full automatic … | { "last_modified_datetime": "2024-02-04T11:20:15.391007" } |
.. | .. | .. |
QA dataset
QA dataset는 Corpus dataset에서 랜덤으로 contents를 가져와 query와 generation_gt를 만들어서 구성한다. 물론 QA dataset을 만드는 코드는 AutoRAG에 구현되어 있으니 참고하여 맞게 구성하면 될 것 같다. 이 프로젝트에서는 문제 난이도의 비율을 맞추기 위해 난이도별로 여러 개의 prompt를 준비하여 QA 데이터셋을 만들었다.
(AutoRAG에서 제공하는 샘플 qa dataset)
qid | retrieval_gt | query | generation_gt |
7faec0f | [[doc_4]] | What type of discrimination did Dr. Ambedkar a... | [Caste-based discrimination.] |
52a1077f | [[doc_3, doc_6],[doc_1, doc_5, doc_4]] | How many placards are needed to represent the ... | [10] |
.. | .. | .. | .. |
QA dataset에서 retrieval_gt는 검색 기준 정보로 어떤 contents를 참고했는지에 대한 정보를 담고 있다. 그래서 corpus dataset의 doc_id가 들어간다. retrieval_gt는 2D 목록으로 저장되며 그 관계를 설명하기 위해 AutoRAG 문서의 예시를 사용하겠다.
query와 generation_gt를 만들기 위해 참고한 문서(retrieval_gt)는 아래와 같다.
[['NewJeans1', 'NewJeans2'],['Aespa1', 'Aespa2', 'Aespa3'],]
같은 리스트 안에는 OR의 관계가 있고, 리스트 간에는 AND의 관계이다.
만약 “Which K-pop girl group has more members, New Jeans or Aespa?”라는 질문이 있다고 할 때,
질문에 답하려면 'NewJeans1', 'NewJeans2' 중 하나와 'Aespa1', 'Aespa2', 'Aespa3' 중 하나를 찾아야 정확한 답변을 생성할 수 있다는 의미이다.
또한 generation_gt는 질문에 대한 답변이 여러 개가 정답일 수 있기 때문에 하나만 들어가지 않아도 된다. 자세한 내용은 샘플 QA dataset을 참고하면 좋겠다.
Yaml 파일로 AutoRAG 실행하기
실행은 그리 어렵지 않고 AutoRAG 튜토리얼도 있기 때문에 가장 기본으로 제공되는 tutorial.yaml 파일로 먼저 돌려보는 것을 추천한다. 이것저것 실험할 수 있는 옵션이 더 많긴 하지만 한 번에 다 넣었다가는 얼마나 오래 걸릴지 모른다..ㅎ
나온 결과는 dashboard로도 결과를 확인할 수 있고, 'autorag run_web --trial_path ./benchmark/0 command'를 통해서 web으로도 최적화된 RAG를 챗 형태로 보면 된다.
GitHub - Marker-Inc-Korea/AutoRAG-tutorial: Super simple tutorial for AutoRAG beginners
GitHub - Marker-Inc-Korea/AutoRAG-tutorial: Super simple tutorial for AutoRAG beginners
Super simple tutorial for AutoRAG beginners. Contribute to Marker-Inc-Korea/AutoRAG-tutorial development by creating an account on GitHub.
github.com
AutoRAG를 사용해 본 후기
AutoRAG가 확실히 문서도 잘 되어있고 사용하기 편했다. 이런 퀄리티 높은 툴이 오픈 소스라는 게 놀라웠다. 여러 가지를 커스텀해서 사용할 수 있는데 그중에 Generation 모델로 GPT 뿐만 아니라 Fine-tuned LLM도 넣어보려 했지만 아쉽게 메모리가 부족해서 그것까진 실험하기 어려웠다.
또한 사실 이번 프로젝트의 Task는 QA dataset의 형태처럼 question, answer로 답변이 나오길 원하는 것이 아니다. subject, grade, chapter, difficulty 등의 정보를 넣으면 그에 맞는 범위 내에서 객관식 question set을 output으로 내주길 원했는데 그렇게 QA dataset을 구성하면 같은 query에 나오는 답변이 여러 개가 정답일 수 있기 때문에 평가에 신뢰도가 떨어진다고 판단하여 QA dataset을 바꿔서 진행했다. 하지만 역시나 그렇게 얻은 RAG 파이프라인이 과연 우리가 원하는 Task, Dataset에 최적화된 것인지 확신할 수 없기 때문에 AutoRAG를 이용한 파이프라인은 하나의 가이드라인으로 생각하고 추가적인 RAG 모듈을 빼거나 넣어보면서 실험하고 있다.
RAG를 경험해 보면서 느끼는 거지만 RAG 파이프라인을 구성하는 것도 어렵지만 그것을 평가하는 게 사실 더 어려운 작업인 것 같다. 그런 의미에서 AutoRAG의 다양한 설정과 모듈을 쉽게 조합하고 테스트할 수 있는 기능은 매우 유용하다. 앞으로 더 많은 프로젝트에서 AutoRAG를 활용해 볼 계획이며, 그 과정에서 얻은 경험과 결과들을 공유해 볼 것이다.
'Project' 카테고리의 다른 글
[체어코치_기획] 새로운 프로젝트 시작! (0) | 2022.12.22 |
---|---|
[하루한끼_데이터] 문서 간 유사도 검사를 통한 추천 시스템 만들기 #2 (1) | 2022.12.21 |
[하루한끼_데이터] 문서 간 유사도 검사를 통한 추천 시스템 만들기 #1 (0) | 2022.12.20 |
[하루한끼_데이터] 이미지 url 크롤링 (0) | 2022.11.09 |
[하루한끼_데이터] 데이터 전처리 2 : 정규표현식 (0) | 2022.11.07 |