본문 바로가기

AI

RAG 실습 이후 + LLM 추천

728x90

위에서 RAG 실습과, 서울 청년 정책 챗봇을 만들어보면서 관련 내용들을 학습했는데, 추가적으로 더 성장하기 위해서는 어떤것을을 학습해야할지 생각해 보았다.

 

  • 멀티모달 RAG
  • 에이전트 RAG (멀티턴 Function Calling / ReACT Agent / Plan and Execute Agent / Corrective RAG 등)
  • 키워드 기반 검색 : BM-25 와 앙상블 리트리버

 

  • (바이인코더) 임베딩 파인튜닝 (+ 검색 성능 Metric (NDGC, MAP 등 ...))
  • 크로스인코더 임베딩 모델 파인튜닝을 이용한 ReRanking
  • RAG 답변 성능 향상을 위한 LLM 파인 튜닝 (LLaMA, Qwen, Gemma)

 

  • 위 모든 것들을 구현하기 위한 Langchain, LangGraph, Huggingface TRL 및 각종 이론적인 개념들..

이 모든 것들을 학습해야할 것 같다.

 

 

다음으로는 실구현 사례와 함께 LLM추천

 

실 구현 사례 : 이커머스 AI 상담사 에이전트

  • 만약 RAG 에이전트 또는 함수 호출 에이전트를 고려하고 있다면 Qwen-2.5-instruct를 추천함

Qwen-2.5-Instruct

  • 왜 이모델인가?
    • 뛰어난 한글 성능
    • RAG 에이전트 or 함수 호출 에이전트
    • 버클리 펑션콜링 리더보드 상위권 오픈 모델
  • 챗봇의 특징
    • 상황에 따라 적절한 함수를 실행하는 AI 상담사 챗봇을 구현하는 것이 가능
    • 단, 도메인 멀티턴 성능은 파인 튜닝하는 것을 권장함

 

  • 사용자의 요구사항에 대해 실제 실행 가능한 챗봇, 함수는 총 7개 이며 약관 함수는 벡터 DB로 RAG에 해당함
  • 제품 조회
  • 제품 구매
  • 장바구니 관리
  • 제품 추천
  • 주문 관리
  • 사용자 정보 관리
  • 사용자 약관

해당 챗봇은 RAG도 포함함

 

 

실  구현 사례 : text-to-sql 에이전트

  • 사용자가 질문을 던지면 바로 sql 쿼리로 변환하여 답변해주는 사내 벡터 DB 에이전트

 

Qwen-2.5-coder

  • 뛰어난 한글 성능
  • SQL과 같은 문제는 결국 코딩 능력과 연관된 문제임
  • 따라서 코딩 특화 LLM을 사용하는 것이 좋음
  • 단, 회사의 데이터베이스로 직접 파인 튜닝을 권함. 이를 통한 성능 UP!

 

실 구현 사례 : 금융 도메인 RAG 특화 챗봇

  • 보험 약관에 대해서 알려주는 챗봇. LLM 파인튜닝을 통해 검색 문서의 출처를 반드시 표기하도록 강제 되어져 있음
  • 파인 튜닝 전에는 동작하지 않았던 능력

 

meta-llama/Llama-3.1-8B

  • 파인 튜닝을 통해서 RAG 데이터셋을 구축 후 파인 튜닝
  • 학습 데이터 만드는 노하우가 매우 매우 중요한 프로젝트
  • 마찬가지로 도메인, 답변 형식, 멀티턴을 위해서는 파인튜닝을 해야만 성능 UP

 

 

그 외의 사례들 (한글 기준)

 

멀티 모달 : 이미지를 인식하는 모델

  • Qwen21.5-VL-Instruct
    • Task 1 : 멀티 모달 RAG
    • Task 2 : 이미지와 텍스트를 바탕으로 카테고리 분류 (중고거래 플랫폼 등에서 의류 분류, 유해 이미지 감지 등)
    • Task 3 : 멀티모달 Function Calling 에이전트 (컴퓨터 화면을 보며 키보드, 마우스를 스스로 제어하는 Agent 등...)

 

금융 텍스트 Analyzer

  • LLaMA 3..1 or Gemma 3
    • 아래 세개의 테스크는 독립적인 것이 아니라 하나의 모델이 한 번의 호출로서 출력하도록 학습
    • 주어진 금융 뉴스로부터 해당 뉴스가 어떤 종목에 긍정적인 뉴스인지, 부정적인 뉴스인지를 분석 (감성 분석)
    • 해당 뉴스로부터 긍정적인 영향을 받는 회사와 부정적인 영향을 받는 회사 추출 (회사 이름 추출)
    • 해당 뉴스의 주요 요약, 주요 키워드를 추출(요약 및 키워드 추출)

 

 

멀티턴과 멀티 쿼리 대응하기

 

멀티턴 해결 하기

  • 멀티턴이란 이어지는 대화에서 이전 대화를 반영하여 검색을 수행하도록 하는 것을 의미한다.
  • 아래는 GPT-4의 웹 검색 기능의 예시다.

 

  • GPT-4의 웹 검색에서 '어른들 모시고 갈만한 서울 여행지 추천해줘' 라는 질문을 던지면 '서울 어르신 여행지 추천' 이라는 검색어로 정제되어서 검색을 수행 후에 검색 결과를 바탕으로 답변한다.

 

이어지는 대화에서 '제주쪽으로도 알아봐줘'라는 질문을 던진다고 가정해보자.

'제주쪽으로도 알아봐줘'를 그대로 검색어로 사용할 경우에는 아무런 의미가 없는 검색이 이루어진다.

 

 

하지만 GPT-4는 실제로는 이전 대화를 반영하여 '제주 어르신 여행지 추천'이라는 검색어로 검색을 진행한다.

이와 같이 현재의 질문을 그대로 검색어로 던지는 것이 아니라 과거 대화를 반영하도록 하는 것이 멀티턴이다.

 

 

멀티턴 해결하기 - 가장 기본적인 해결책

  • 멀티턴 RAG를 구현하는 방법은 여러 가지 방법이 있지만(Function Calling 에이전트 등...)
  • 기본적으로는 이전 대화를 누적 입력으로 사용하여 검색어를 정제하도록 하는 것은 동일한 원리

 

  • 다음은 이전 대화를 반영하여 검색어를 새로 생성하는 별도의 모델을 보여줌 (GPT-4 or Qwen 튜닝 등)
  • 이 과정을 항상 검색하기 전에 수행하도록 파이프라인을 구성하면 멀티턴을 수행할 수 있다.

 

멀티 쿼리의 경우 'A와 B와 C를 알려줘' 를 동시에 알려달라고 하였을 때 이를 적절하게 쿼리를 분리하여 수행하는 능력을 의미한다.

 

 

멀티 쿼리 또한 멀티턴과 마찬가지로 별도의 모델을 두는 것이 가능하다.

(설계에 따라 멀티턴과 멀티 쿼리를 동시에 수행하는 모델을 개발하는 것도 가능)

 

에이전트 사용하기 - 보통 멀티턴, 멀티 쿼리 지원 가능 구조

  • 기본적으로 Function Calling / ReACT 에이전트 / Plan and Execute 에이전트 구조를 사용하면 앞에서 언급한 바와 같이 검색 전에 검색어 조정을 하는 것이 보통이므로 에이전트에서는 보통 지원된다.

 

 

이후에는 이런것도 학습하면 좋음

 

키워드 기반의 검색

  • 임베딩 기반의 검색에만 의존할 필요가 없다
  • 기존의 검색 엔진에서 사용하고 있는 키워드 기반의 검색(BM 25)를 함께 사용하는 것도 좋은 전략이라 할 수 있다.

 

멀티 모달 RAG

  • 테이블,이미지가 존재하는 복잡한 데이터를 임베딩하고 RAG를 수행할 수 있을까?
  • 셀 병합이 있는 복잡한 테이블을 어떤 식으로 전처리해야 '최고 성능'으로 오차 없이 답변할 수 있을까?
  • Unstructured.io 를 사용하는 방법과 VLM(CLaude, Qwen2-VL 등)을 사용하는 방법을 학습함

 

멀티 모달 RAG를 위한 전처리 : 클로드 API

  • 클로드 API는 기본적으로 이미지와 표에 대한 인식률이 매우 뛰어난 편
  • PDF 페이지 전체를 이미지로 변경한 후에 호출하는 것도 현업에서 쓸 수 있는 방법 중 하나이다.

 

고급 Chunking - 랭체인에서 벗어나라!!!!

  • 사실 문맥을 고려하여 자르는 모델은 큰 회사에서는 따로 1개씩 구현을 하고 갖고 있는 경우가 많을 만큼 Chunker 자체는 생각보다 중요한 모델이다. (Langchain에 있는 것만 써서는 절대 안됨!!)
  •  

 

PLM Based Chuncker (Fine - tuning 사례)

  • 사실 문맥을 고려하여 자르는 모델은 큰 회사에서는 따로 1개씩 구현을 하고 갖고 있는 경우가 많을 만큼 Chunker 자체는 생각보다 중요한 모델이다. (아래는 카카오 엔터프라이즈 발표 중 슬라이드 발췌)

 

시멘틱 Chunking - LLM 한테 문맥에 맞게 잘라달라고 하는 경우

  • 간단 예) LLM에게 직접 재용을 잘라달라고 하는 경우

 

고급 Chunking - 합성 데이터 QA 방식

  • 간단 예) 복잡한 문서를 다음과 같이 다수의 합성 데이터로 재작성 하고 이를 검색 문서로 지정

 

Reranking : 두 번의 검색으로 검색 성능 Up

  • Reranking : 검색을 두 번 수행하여 검색 성능을 높이는 방법. 두번째 모델은 '크로스 인코더'를 사용
  • 첫 번째 임베딩 모델(바이 인코더)와 두 번째 임베딩 모델(크로스 인코더) 둘 다 파인 튜닝 가능.

 

HyDE : 질문에 대한 답변으로 검색해서 검색 성능 UP

  • LLM이 사용자의 질문에 대해서 임의로 '답변'을 하고 그 '답변'으로 검색을 하도록 하는 방법
  • 질문과 답변의 유사도가 아니라 답변과 답변의 유사도를 구하므로 검색 성능을 올릴 수 있다.
  • 구현 방법 또한 굉장히 간단하다.

 

임베딩 파인튜닝 : 추가 학습을 통해서 검색 성능 Up

  • Reranking 까지 사용한다면 두 개의 임베딩 모델을 전부 추가 학습하여 내 데이터 최적화 가능
  • 파인 튜닝 이라는 용어로 부르는 추가 학습의 개념을 위해서는 몇 가지 노하우가 필요

 

다음 포스팅에서 간단한 임베딩 파인 튜닝 실습을 진행해볼 것이다.

728x90

'AI' 카테고리의 다른 글