-
vectorDB 없이 검색api만으로 RAG app만들기DEV 2024. 11. 10. 09:45
사진: Unsplash 의 Roger Starnes Sr
이전글simple RAG pipeline
RAGRetrieval augmented generation (RAG: 검색 증강 생성)할루시네이션, 학습되지 않은 최신 데이터, 메모리 이슈해결RAG의 간단한 인덱싱 파이프라인 4단계원본 데이터에서 데이터 로딩(load data)큰 문서를
developer-as-job.tistory.com
advanced RAG
RAG overviewNaive RAGhttps://developer-as-job.tistory.com/48 simple RAG pipelineRAGRetrieval augmented generation (RAG: 검색 증강 생성)할루시네이션, 학습되지 않은 최신 데이터, 메모리 이슈해결RAG의 간단한 인덱싱 파이
developer-as-job.tistory.com
RAG application을 만들고 싶지만, 벡터디비가 없거나, 검색 api만 사용할 수 있다면 어떻게 앱을 만들고 개선해 나갈 수 있을까?
step-by-step1. Standard RAG
유저 질의를 search API 호출 후 검색된 문서와 질의를 프롬프트에 담아 모델에게 생성요청
Standard RAG Daum 검색 api
https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide#search-doc
Kakao Developers
카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.
developers.kakao.com
requestcurl -v -G GET "https://dapi.kakao.com/v2/search/web" \ --data-urlencode "query=이효리" \ -H "Authorization: KakaoAK ${REST_API_KEY}"
responseHTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "meta": { "total_count": 897323, "pageable_count": 775, "is_end": false }, "documents": [ { "datetime": "2017-06-14T00:00:00.000+09:00", "contents": "이름 <b>이효리</b>(李孝利) 출생 1979년 5월 10일, 충청북도 청주시 흥덕구 오송읍[1] 나이 39세 (만 38세) 본관 광주 이씨 [2] 신체 164cm, 53kg, A형 학력 서울동작초등학교 서문여자중학교 서문여자고등학교...", "title": "<b>이효리</b> - 나무위키", "url": "https://namu.wiki/w/%EC%9D%B4%ED%9A%A8%EB%A6%AC" }, ... ] }
- vector 기반 유사도 검색이 아니고, keyword 기반 검색 API이기 때문에 특정 키워드에 매칭된 결과들도 포함
- 어떻게 keyword 기반 검색 API로 vector 검색과 비슷한 역할을 하면서 콘텍스트를 잘 포함한 문서들을 모델에게 전달할 수 있을까?
2. Standard RAG + multi_query
- 유저 쿼리를 확장해 최대한 많은 API 결과를 가져오자.
multiQueryRetriever
- 유저 질의를 모델을 통해 유사한 질문을 생성하고 '유저질의 + 모델이 생성한 질의'로 검색
- https://python.langchain.com/docs/how_to/MultiQueryRetriever/
적용
as-is
- q=초딩 스마트폰 추천해줘
to-be
- q=[초딩 스마트폰 추천, 초딩 스마트폰, 초등학생 스마트폰 추천, 가성비 좋은 초등학생 스마트폰, 안전한 초등학생 스마트폰]
- 쿼리당 3개의 문서 = 총 15개 문서
Standard RAG + multi_query 3. Standard RAG + multi_query + rerank
모델의 아키텍처에 관계없이 검색된 문서를 10개 이상 포함하면 성능이 크게 저하된다는 연구결과
- https://arxiv.org/abs/2307.03172
- 입력 컨텍스트의 시작이나 끝에서 관련 정보가 발생할 때 성능이 가장 높으며, 모델이 긴 콘텍스트 중간에 관련 정보에 액세스해야 하는 경우 명시적으로 긴 콘텍스트 모델의 경우에도 성능이 크게 저하된다는 것을 관찰
rerank Rerank
사용자의 질문과 처음에 검색된 모든 문서를 입력으로 사용하고 질문과 얼마나 일치하는지에 따라 문서의 순위를 다시 지정
Bi-Encorder model : 백터 유사도 검색
Cross-Encoder model: 검색된 문서 순위 재지정
rerank with cross-encoder model Bi-Encoder Model
vector 유사도 검색vector similarity search - 수많은 문서중 유사도 높은 문서를 효율적, 빠르게 검색
- 유사성 검색을 위해 임베딩은 빠르지만, 텍스트를 압축한 임베딩 표현 → 정보의 손실
Cross-Encoder Model
Bi-Encoder Model(벡터검색)결과를 통해 가져온 문서를 Cross-Encoder Model로 순위 재지정
text similarity scores Reorder
- 입력 컨텍스트의 시작이나 끝에서 관련 정보가 발생할 때 성능이 가장 높으며, 모델이 긴 콘텍스트 중간에 관련 정보에 액세스해야 하는 경우 명시적으로 긴 콘텍스트 모델의 경우에도 성능이 크게 저하된다는 것을 관찰
- 정확도가 높은 문서를 문서 리스트의 앞, 뒤에 배치
LangChain Long-Context Reorder
적용
쿼리당 3개 문서 → 5개 문서
- 총 검색 문서 25개
검색된 문서처리
- 중복문서 제거(distinct) → 내용 적거나, 문서 score 낮거나, 중요 키워드를 충분히 포함하지 않는 문서 필터(fitler) → 순위 재정렬(reranking) → 정확도 높은 문서 위치변경 (reorder)
Standard RAG + multi_query + rerank 4. Standard RAG + multi_query+ rerank + chunk_size
검색 api의 문서 내용이 본문 전체를 포함하지 않기 때문에 증강할 데이터 부족
HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "meta": { "total_count": 897323, "pageable_count": 775, "is_end": false }, "documents": [ { "datetime": "2017-06-14T00:00:00.000+09:00", "contents": "이름 <b>이효리</b>(李孝利) 출생 1979년 5월 10일, 충청북도 청주시 흥덕구 오송읍[1] 나이 39세 (만 38세) 본관 광주 이씨 [2] 신체 164cm, 53kg, A형 학력 서울동작초등학교 서문여자중학교 서문여자고등학교...", "title": "<b>이효리</b> - 나무위키", "url": "https://namu.wiki/w/%EC%9D%B4%ED%9A%A8%EB%A6%AC" }, ... ] }
q=스마트폰 추천- 본문보다 댓글에 중요한 정보가 있을 확률이 높은 문서들도 존재
검색결과 url에 접속하여 웹페이지 전체 로드
- 본문과 관계없는 노이즈, 컨텍스트 사이즈 증가
- 할루시네이션 발생, 문서 참조하지 않고, 모델 자체 답변을 하는 이슈
Standard RAG + multi_query+ rerank + chunk_size 추가개선 방향
- 전체 본문 결과를 가져오면서 발생한 노이즈 제거, 중요 청크 구분
- 질의에 대한 검색이 1번만 실행되기 때문에 1번의 검색품질이 만족스럽지 못하면 좋은 결과를 줄 수 없음.
- 간단한 질문에는 잘 대답하지만, 여러 개념이 섞인 복잡한 질문에 어떻게 답할 것인가?
다음글
2024.11.11 - [DEV] - RAG 개선, 평가 방법
RAG 개선, 평가 방법
2024.11.10 - [DEV] - vectorDB 없이 검색 api만으로 RAG app만들기 vectorDB 없이 검색api만으로 RAG app만들기이전글 simple RAG pipelineRAGRetrieval augmented generation (RAG: 검색 증강 생성)할루시네이션, 학습되지 않은
developer-as-job.tistory.com
728x90'DEV' 카테고리의 다른 글
Chunking in RAG application (0) 2024.11.12 RAG 개선, 평가 방법 (0) 2024.11.11 advanced RAG (0) 2024.11.09 simple RAG pipeline (2) 2024.11.08 LLM 기반 챗봇 설계, 구조 변화 (1) 2024.11.07