2024년 7월 4일 목요일

AutoRAG 활용 LLM RAG 최적화하기

이 글은 AutoRAG를 활용해 대형언어모델 LLM RAG를 최적화하는 방법을 보여준다.

머리말
RAG 알고리즘은 매우 다양하다. RAG는 원래부터 잘 학습된 ChatGPT와 같은 파운데이션 모델을 사용해, 학습과정을 거치지 않고, 전문가의 데이터를 효과적으로 검색해, LLM 결과를 증강하기 위한 목적이었으므로, 그 알고리즘이 다양할 수 밖에 없다. 즉, RAG 결과는 RAG에 사용된 데이터를 잘 학습한 LLM에 비해 성능이 높을 수 없다.
RAG 알고리즘

LLM RAG는 질문에 대한 유사 문서를 얼마나 잘 검색할 수 있는 지가 중요하다. 문서 청크 집합에서 질문 관련 자료를 검색하는 방법은 다양한 알고리즘이 존재한다. 이를 자동화할 수 있는 라이브러리가 AutoRAG이다. 

AutoRAG는 다양한 전략을 조합해 튜닝하는 AutoTuning과 유사한 구조를 가지고 있다. 

LLM RAG 전략 조합

다음은 AutoRAG의 설정이다. 전략 파라메터를 먼저 설정해 놓고, 이를 조합해 정확도가 높은 전략을 얻는 식으로 동작한다. 

node_lines:
  - node_line_name: retrieve_node_line
    nodes:
      - node_type: retrieval
        strategy:
          metrics: [ retrieval_f1, retrieval_recall, retrieval_precision ]
        top_k: 3
        modules:
          - module_type: bm25
          - module_type: vectordb
            embedding_model: huggingface_all_mpnet_base_v2
          - module_type: hybrid_rrf
            target_modules: ('bm25', 'vectordb')
            rrf_k: [ 3, 5, 10 ]
          - module_type: hybrid_cc
            target_modules: ('bm25', 'vectordb')
            weights:
              - (0.5, 0.5)
              - (0.3, 0.7)
              - (0.7, 0.3)
          - module_type: hybrid_rsf
            target_modules: ('bm25', 'vectordb')
            weights:
              - (0.5, 0.5)
              - (0.3, 0.7)
              - (0.7, 0.3)
          - module_type: hybrid_dbsf
            target_modules: ('bm25', 'vectordb')
            weights:
              - (0.5, 0.5)
              - (0.3, 0.7)
              - (0.7, 0.3)
  - node_line_name: post_retrieve_node_line
    nodes:
      - node_type: prompt_maker
        strategy:
          metrics: [ meteor, rouge, bert_score ]
        modules:
          - module_type: fstring
            prompt: "Read the passages and answer the given question. \n Question: {query} \n Passage: {retrieved_contents} \n Answer : "
      - node_type: generator
        strategy:
          metrics: [ meteor, rouge, bert_score ]
        modules:
          - module_type: llama_index_llm
            llm: ollama
            model: llama3
            temperature: [ 0.1, 0.5, 1.0 ]
            batch: 1

설정을 확인하면 알 수 있지만, 학습 데이터셋, LLM 모델, RAG 벡터데이터베이스, RAG 정확도를 측정할 메트릭스, RAG 검색 알고리즘, 실행 프롬프트가 파라메터로 정의되어 있다. 

이를 읽어, langchain과 같은 라이브러리를 내부적으로 호출하며, 각 전략 조합 별 정확도 높은 옵션을 제시한다. 

레퍼런스

댓글 없음:

댓글 쓰기