RAG
by CoriLLM (Large Language Model)의 한계
ChatGPT를 비롯한 여러 LLM 모델들은 자신이 학습한 데이터에 대한 질문은 답을 나쁘지 않게 한다.
하지만 자신이 학습하지 않은 내용을 질문하는 경우, 거짓 정보를 진실된 정보인 것처럼 알려준다 (할루시네이션)
거짓 정보를 발설하는 현상을 개선하기 위해, RAG (Retrieval Augmented Generation) 기법이 등장했다. RAG는 영어 단어에서 유추해볼 수 있듯이 추출, 증강, 생성하는 단계로 이루어지며, 외부 문서에서 추가 정보를 추출하고 추출한 정보를 Prompt Template을 활용해 증강하고 이를 LLM에 전달하여 응답을 생성한다.
추출 단계에서는 사용자가 던진 질문과 관련성이 높은 정보를 외부 문서에서 '추출'해온다. 추출한 정보를 A info라 했을 때, 증강 단계에서 A info와 기존 사용자 질의를 결합해 프롬프트를 새롭게 '증강'한다.
기존 사용자 질의와 증강된 사용자 질의를 LLM에 전달했을 때 생성되는 응답을 비교하면 증강된 사용자 질의를 입력받은 모델의 출력 값이 보다 나은 것을 확인할 수 있다.
전반적인 RAG에 대한 Overview는 다음과 같다.
구축된 RAG 모델 아키텍처
신한은행에 전달하기 위해 스크랩한 데이터 및 자사 내부 규정집을 활용하여 RAG 아키텍처를 1차적으로 구축했다. 스크랩한 데이터를 Embedding 모델을 활용하여 벡터로 변환하고, 변환한 벡터를 데이터베이스에 저장한다. 이후 사용자가 언어 모델에 질의하면, 동일한 Embedding 모델을 활용해 질의를 벡터로 변환하고 변환한 벡터와 관련성이 높은 정보를 데이터베이스에서 추출해온다. 추출한 데이터를 프롬프트 템플릿에 전달해 프롬프트를 증강하고, 증강된 프롬프트는 언어 모델에 전달되어 개선된 응답을 생성한다.
사용 데이터 & 모델
답변 예시
문제점
동작이 잘 하는 것처럼 보이지만, 사용자 발화와 유사한 발화를 잘 인식하지 못하는 문제가 존재한다. 이는 사용자 발화와 관련된 문서를 추출하지 못할 뿐 아니라 의도 파악에도 문제를 초래한다.
로드맵
1단계 RAG Model 개발은 1차적으로 완료한 상태이며, 자체 모델 구축 부분은 현재 GPU 등 서버 자원 이슈로 인해 진행하지 못하고 있는 상황이다 (모델 Training에 필요한 비용은 최소 억단위 예상). 해당 부분은 잠시 스탑해두고, RAG 프로세스 중 데이터를 추출하는 Retrieval 부분 혹은 Naive RAG 프로세스를 Advanced RAG / Modular RAG로 변경하는 방식으로 성능 개선을 진행한다.
RAG 프로세스 개선 (Advanced RAG, Modular RAG) - 재동 (To do)
구현한 RAG 프로세스는 Naive RAG 방식으로, 여러 RAG 기법 중 가장 기초되는 프로세스라 할 수 있다. Naive RAG 방식의 성능상 한계를 겪어본 연구진들이, 보다 개선된 RAG 기법을 하나 둘씩 내놓기 시작했다.
Advanced RAG의 경우 Agent를 두어 입력받은 쿼리를 다듬는 작업을 수행하고, 다듬어진 쿼리와 관련성이 높은 데이터를 데이터베이스에서 추출한다. 또한 Fusion Retrieval을 통해 하나의 리트리벌만 사용하는 것이 아니라, 여러 추출기를 혼합하여 사용한다. 또한 추출한 정보를 바로 증강하는 것이 아니라, 점수를 재순위화하는 과정을 거쳐 점수가 가장 높은 정보를 증강한다.
Modular RAG의 경우 기존의 RAG 프레임워크에서 한 단계 더 나아가 다양한 모듈과 기능을 통합하여 더 큰 다양성과 유연성을 제공하며, RAG 아키텍처를 구축할 때 표준 패러다임이 되었다.
Retrieval 방식 개선 - 인턴 (To do)
데이터의 품질을 개선하는 것만으로도 RAG 모델의 성능 개선을 기대해 볼 수 있다. 날 것의 문서에서 데이터를 추출하는 Retrieval 단계에서, 데이터를 원본 형태를 최대한 유지하며 뽑아낼 수 있다면, 모델의 정확도는 더욱 크게 증가할 것이다.
Table Detection
Layout Analysis
Ref
블로그의 정보
코딩하는 오리
Cori