데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      OpenLab - LLMOps, AutoRAG에서 지원하는 다양한 노드&모듈

      sysmoon 24.07.19
      827 4 0
      DEVOTEE 요약
      OpenLab LLMOps 모임에서 AutoRAG의 다양한 노드와 모듈들을 정리했습니다. 주로 쿼리 확장 및 검색 과정에 관련된 노드와 모듈들이 포함되어 있는데, 여기엔 BM25, Vectordb, 하이브리드 검색 모듈들이 있습니다. 이들은 각각의 특성과 파라미터를 통해 검색 결과의 정확성, 리콜, 정밀도 등을 평가하고 개선하는 데 사용됩니다.
      DEVOTEE 추천 블로그

      OpenLab LLMOps 모임에서 살펴본 AutoRAG에서 지원하는 다양한 노드와 모듈에 대해 정리했습니다.

      스크린샷 2024-07-19 오후 2.26.42.png


      Introduce

      AutoRAG 에서 지원하는 다양한 모듈에 대해서 살펴봅니다.


      Nodes & Modules

      Supporting Nodes & modules

      image.png


      1. Query Expansion

      사용자 쿼리를 즉시 검색에 사용하지 않고 쿼리에 담긴 표현을 변형하여 검색결과의 관련성을 향상시키는 과정 → 다양한 쿼리 유형에 대응가능 & RAG 정확도 향상

      Node Params

      • N/A

      Strategy

      • query_expansion 노드 결과만으로 노드의 성능을 측정할 수 없음

      • query_expansion이 적용된 쿼리로 검색 후에 검색 결과로 성능평가

      Strategy Params

      1. Metrics

        1. retreival_f1

        2. retreival_recall

        3. retrieval_precision

      2. Speed Threshold

        1. speed_threshold 모든 노드에 적용되어 쿼리의 평균처리 시간을 초과하는 메서드가 사용되지 않도록 한다.

      3. Top_k

        1. 검색 평가단계에서 고려할 상위 결과의 수

      4. Retrieval_Modules


        bm25


        vectordb


        hybrid_rrf


        hybrid_cc


      2. Retrieval(검색)

      Definition

      쿼리를 사용해서 corpus로부터 관련있는 컨텐츠를 가져오는 과정

      Parameters

      • 노드 파라미터

        • Top_k

          • 노드 수준에서 코퍼스에서 검색할 상위 k개

      • 전략(Strategy) 파라미터

        1. Metrics

          1. retrieval_f1, retrieval_recall, retrieval_precision

          2. 검색 과정의 효율성 평가지표

          3. 검색된 컨텐츠의 정확성, 리콜 및 정밀도 측정

        2. Speed Threshold

          1. 쿼리의 평균 처리시간 초과 메서드 사용 X

          2. 모든 노드에 적용

      - node_line_name: retrieve_node_line
      	node:
      		- node_type: retrieval
      			strategy: 
      				metrics: [retrieval_f1, retrieval_recall, retrieval_precision]
      				speed_threshold: 10
      			top_k: 10
      			modules:
      			- module_type: bm25
      			- module_type: vectordb
      				embedding_model: openai
      			- module_type: hybrid_rrf
      				target_module: ('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)


      BM25

      • 단어가 문서에 얼마나 중요한지를 반영하는 검색의 가장 일반적인 TF-IDF 방법 (a.k.a sparse retrieval, ≠ dense retrieval)

      • 단어의 수를 사용해서 유사도 검색

      • 특정 도메인 문서를 사용하는 경우 vectordb를 사용하는 것보다 유리

      • passage의 랭킹과 스코어링에 BM25Okapi 알고리즘 사용

      Module Parameters

      • bm25_tokenizer bm25에서 사용할 토큰화 방식 선택 가능

        • porter_stemmer (default)

          • 영어에 최적화된 방법

          • 문장 → 단어 → stem 추출

          • studying, studies → study 가 된다

        • ko_kiwi

          • 한국어에 최적화

          • ‣

        • space

          • 공백을 기준으로 토큰화

          • Multilingual 문서에 최적화

        • Huggingface AutoTokenizer

          • 허깅페이스의 AutoTokenizer 사용가능

          • 허깅페이스 레포 경로 입력하면 된다.

      Example config.yaml

      modules:
        - module_type: bm25
          bm25_tokenizer: [ porter_stemmer, ko_kiwi, space, gpt2 ]


      Vectordb

      • 벡터DB를 백엔드로 사용하는 검색모듈

      • Dense Retrieval

      • 임베딩 모델로 임베딩하여 벡터DB에 저장 → 검색시 쿼리가 임베딩 모델로 임베딩 되어 벡터 DB에서 가장 유사한 벡터 검색 후 반환

      Backend Support

      • 현재 vectordb 모듈은 ChromaDB만 지원

        • 인터넷 연결, 서버 비용, API 키 필요 X, 오픈소스

      Module Parameters

      • embedding_model

        • 지원하는 임베딩 모델 목록: openai 임베딩모델, 일부 로컬모델, 커스텀모델

          import autorag
          from llama_index.embeddings.huggingface import HuggingFaceEmbedding
          
          autorag.generator_models['kosimcse'] = HuggingFaceEmbedding("BM-K/KoSimCSE-roberta-multitask")

      Example config.yaml

      modules:
        - module_type: vectordb
          embedding_model: openai


      Hybrid-rrf

      • multiple retrievals에서 passage를 검색

      • 최종 유사도 점수 계산에 RRF(Reciprocal Rank Fusion) 알고리즘 사용

      • 각 검색에서 passage의 랭킹(순위)를 기반으로 검색 점수를 매김

      rrf

      • Reciprocal Rank Fusion

      • 관련성이 다른 여러 결과 집합을 결합하는 방식

      • 각 검색의 점수가 아닌 순위만을 가지고 계산이 이루어지기 때문에 관련성이 다른 여러 결과 집합을 결합하는 것이 가능

      • $RRF \rm{score}(d\in D) = \sum_{r \in R} \frac{1}{k+r(d)}$

      score = 0.0
      for q in queries:
          if d in result(q):
        	    score += 1.0 / ( k + rank( result(q), d ) )
      return score
      
      # k는 순위에 대한 상수입니다.
      # q는 질의(query)의 집합에서 하나의 질의를 의미합니다.
      # d는 q의 결과 집합에서의 문서(document)를 나타냅니다.
      # result(q)는 질의 q의 결과 집합을 의미합니다.
      # rank(result(q), d)는 d가 result(q)에서의 순위를 나타냅니다. 순위는 1부터 시작합니다.
      • 각 쿼리(query)에 대해서 순회하면서 해당 문서(d)가 질의의 결과 집합(result(q))에 존재한다면 점수(score)에 1.0을 해당 문서의 순위의 역수로 더한다.

      • 여기서 순위는 1부터 시작하는데 순위가 낮을수록 높은 점수를 얻게 된다.

      Elasticsearch RRF(Reciprocal Rank Fusion)

      [IR] RRF(Reciprocal Rank Fusion) 설명과 파이썬 코드

      Module Parameters

      • target_modules hybrid_rrf 모듈을 적용할 대상 모듈

      • rrf_k 각 검색순위가 최종 순위에 미치는 영향력

      • target_module_params

      Example config.yaml

      modules:
        - module_type: hybrid_rrf
          target_modules: ('bm25', 'vectordb')
          rrf_k: [3, 5, 10]


      Hybrid-cc

      • multiple retrievals에서 passage를 검색

      • CC(Convex Combination) 알고리즘 사용

      • 각 검색 간에 가중치를 다르게 주어서 점수 계산

      CC

      • Convex Combination

      • 검색 알고리즘이나 다양한 최적화 문제에서 여러 개의 후보 해답이나 데이터 포인트를 결합하여(두 개 이상의 벡터를 결합) 더나은 결과를 도출하는 방법

      • $y=λ_1​x_1​+λ_2​x_2​+⋯+λ_n​x_n​$

        • $x_i$ 결합하고자 하는 벡터들

        • $\lambda_i$ 가중치(가중치의 합은 1이 되어야함)

      • 즉, 원래 벡터들로부터 생성된 선형 결합 중 가장 간단한 형태

      Module Parameters

      • target_modules

      • weights

      • target_module_params

      Example config.yaml

      modules:
        - module_type: hybrid_cc
          target_modules: ('bm25', 'vectordb')
          weights:
            - (0.5, 0.5)
            - (0.3, 0.7)
            - (0.7, 0.3)


      Hybrid-rsf

      • multiple retrievals에서 passage를 검색

      RSF

      • Relative Score Fusion(RSF)

      • target_modules 검색으로 출력되는 메트릭을 각각 정규화하여 각 개체 점수를 도출

      • 가장 높은 값은 1, 가장 낮은 값 0

      • 총 점수는 정규화된 target_modules 점수의 스케일링된 합으로 계산

      Unlocking the Power of Hybrid Search - A Deep Dive into Weaviate's Fusion Algorithms | Weaviate - Vector Database

      Module Parameters

      • target_modules

      • weight

      • target_module_params

      Example config.yaml

      modules:
        - module_type: hybrid_rsf
          target_modules: ('bm25', 'vectordb')
          weights:
            - (0.5, 0.5)
            - (0.3, 0.7)
            - (0.7, 0.3)


      Hybrid-dbsf

      • multiple retrievals에서 passage를 검색

      dbsf

      • Distribution-based Score Fusion

      • 각 임베딩의 분포 꼬리(tails)를 고려하여 서로 다른 인코더의 검색 점수를 커스텀 피처 범위가 있는 MinMax 스케일링을 사용해 정규화

      Distribution-Based Score Fusion (DBSF), a new approach to Vector Search Ranking

      Module Parameters

      • target_modules

      • weight

      • target_module_params

      Example config.yaml

      modules:
        - module_type: hybrid_dbsf
          target_modules: ('bm25', 'vectordb')
          weights:
            - (0.5, 0.5)
            - (0.3, 0.7)
            - (0.7, 0.3)

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sysmoon 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기