회사

[RAG] 정리

daykim 2025. 3. 6. 09:46

이전 프젝 경험 기반으로 이해중이다

 

Azure OpenAI

  • contents filtering을 포함해 암호화, 인증, 역할기반 접근제어 등을 지원한다.
  • VNET을 구성이 가능하다.
  • 기업에서 보안 걱정 없이 안전하게 chatGPT를 사용할 수 있게 해준다.
  • contents filtering이란, 사용자에게 답변을 줄 때 답변을 필터링하는 것이다.
    사용자 질의 -> gpt -> 답변 - (필터링) - > 사용자

 

VNET

  • private endpoint
  • private link

 

Fine-tuning

  • 사전에 학습된 모델 (pre-trained model)을 새로운 (보통 더 작은) 데이터셋에 맞추어 추가 학습을 수행하는 과정

 

RAG (Retrieval-Augmented Generation)


RAG

  • RAG는 자연어처리 분야에서 사용되는 기술로, 정보 검색을 통해 언어 생성 과정을 향상시키는 방식이다.
  • 핵심사항
    1. 검색
    2. 생성

 

RAG 작동

  1. 정보 검색
    사용자의 질문이나 입력에 가장 관련성이 높은 정보를 DB나 인터넷에서 찾는다.
    이 과정에서 질문에 답할 수 있는 콘텐츠나 문서를 선택하기 위해 유사도 검색 같은 기술이 사용된다.
  2. 언어 생성
    검색된 정보를 바탕으로, 생성모델이 답변을 생성한다.
    이 때, 생성 모델은 검색된 콘텐츠를 활용해 보다 정확하고 정보에 기반한 답변을 만든다.

 

RAG 장점

  • Fine tuning에 비해 시간, 비용이 적게 소요된다.
  • 특정 도메인에 국한되지 않고, 모델의 일반성을 유지할 수 있다.
  • 정보 출처를 제공해, 답변의 근거를 제시할 수 있어, 신뢰도를 높일 수 있다.
  • 외부 데이터 기반으로 답변을 생성하기 때문에, 할루시네이션 가능성을 줄일 수 있다.

 

파인튜닝 필요한 경우

  • 특정 도메인에 최적화된 모델이 필요한 경우
  • 고유한 비즈니스 요구사항 충족이 필요한 경우
  • 모델이 사실이 아닌 진술을 하는 경우
  • 모델 결과의 정확도가 사용자의 기대치에 미치지 못하는 경우

 

파인튜닝 제약 사항

  • 파인튜닝 위해 GPU 필요 -> 비용문제
  • 얼마나 학습시켜야 원하는 결과가 나오는지 알기 어려움
  • 데이터 변경될 때 마다 추가 학습 필요
  • 질문과 답변으로 구성된 데이터 준비
  • 방대한 분량의 데이터 준비 -> 데이터가 적을수록 정확도가 떨어진다.

 

RAG 제약사항

  • 정보 검색의 정확도
  • 처리 속도와 효율성
  • 복잡도와 자원 요구사항
  • 정보 손실
    1. 임베딩 벡터 변환 과정에서 손실
    2. 검색 과정에서 손실

 

RAG 데이터 흐름

  • 원천데이터 -- Chunks --> 분리된 상태 -- Embeddings --> Vector Store (벡터 DB / 파이스, 크로마?)

 

Chunking


Chunking

  • LLM에서 긴 텍스트 데이터를 작은 단위로 나누는 과정
  • 처리시간 단축
  • 입력 데이터의 크기에 대한 제한 -> LLM 모델 토큰 제약
  • chunk_size : 자르는 사이즈? / 토큰 사이즈 제약
  • chunk_overlap : chunk 사이에 겹치는 부분을 얼마나 가져갈 것인가?
    연결되는 부분인데 그걸 인식하지 못 할 수 있어서 overlap을 둔다. / 연관성 있는것을 보호하기 위해서

 

청킹 고려사항

  • 문맥 손실
    청크 사이 경계처리에서 문장이 짤리면 문맥이 손실될 수 있다.
  • 청크 경계 처리
    청크를 나누는 과정에서 문장이 잘리지 않도록 주의해야한다.
  • 해결 방안
    • 청크 경계가 자연스러운 언어 단위에 맞춰지도록 조정하고, 필요한 경우 일부 중복을 허용해야한다.
    • 적절한 chunk_size, chunk_overlap 값을 찾아야한다.
    • 적절한 splitter 방법을 찾아야한다.

 

청킹 유형

  • CharacterTextSplitter()
    문자?단위로 분할 -> 근데 예시보면 문장단위 같기두
  • RecursiveCharacterTextSplitter()
    문서를 재귀적으로 분할
    ex) 2줄 띄어쓰기 분할 후, 한 줄 띄어쓰기 분할 ...
  • TokenTextSplitter()
    토큰 수를 기준으로 분할

 

검색


검색 유형

  1. 키워드 검색
    사용자가 입력한 키워드를 바탕으로 정보를 찾아내는 과정
  2. 시맨틱 검색
    사용자의 질문이나 검색어의 의미를 이해하려고 시도하는 검색 기술
  3. 벡터 검색
    고차원 벡터 공간에서 유사도를 기반으로 정보를 검색하는 기술
    1. 벡터로 변환
    2. 벡터간 유사도 측정 : 코사인 유사도, 유클리드 거리 등 사용
    3. 유사항목 검색 : 파이스, 엘라스틱 서치 이용
  4. 하이브리드 검색
    앞의 검색들을 조합해서 쓰는 검색 기술

 

검색 방법

유사도 검색 (Similarity Search)

  • 주어진 쿼리 || 데이터 항목에 가장 유사한 항목들을 데이터베이스나 데이터 집합에서 찾는 과정
  • 고차원 벡터 공간에서 수행
  • 유사성 측정 방법 : 코사인 유사도, 유클리드 거리, 자카드 유사도 등 다양한 메트릭 사용

 

벡터 데이터베이스


  • 고차원 벡터 데이터를 저장하고, 이를 기반으로 유사성 검색을 수행할 수 있는 DB
  • 인덱싱 기반

 

주요 속성

  • 벡터 저장 및 검색 지원
  • 능숙한 유사도 검색
  • 임베딩 지원
  • 실시간 처리
  • 확장성 : 계산 부하를 분산할 수 있는 수평적 확장 지원

 

DB 차이

  관계형 DB 벡터  DB
데이터 구조 테이블 형태의 구조화된 데이터 고차원 벡터 데이터
쿼리 방식 SQL을 통한 쿼리 유사성 검색에 특화된 쿼리
사례 전통적인 비즈니스 데이터 관리 머신러닝 모델에서 생성된 데이터의 검색과 분석

 

벡터  DB 검색

  • 유사도 검색 (Similarity Search)
    • 주어진 쿼리 또는 데이터 항목에 대해 가장 유사한 항목들을 데이터베이스나 데이터 집합에서 찾아내는 과정
    • 키워드가 아닌 좌표상 거리, 각도 기반으로 검색한다.
  • MMR (Maximum Marginal Relevance)
    • 검색 결과의 다양성을 강화하는 중요한 방법
    • 벡터 저장소에 쿼리해 가장 유사한 fetch_k 응답 (가장 유사한 상위 n개) 을 선택한다.
      이후, fetch_k 응답 내에서 가장 다양한 k 응답을 선택한다.

 

벡터 DB 인덱스

  • Faiss 기준 인덱스
  • 인덱스 생성 과정
    1. 데이터 전처리 후 벡터 변환
    2. 클러스터링 : k-Means clustering 이용
    3. 인덱스 구축 (Flat Index, IVF, Product Quantization, HNSW)
    4. 검색
    5. 후처리 : Reranking
  • 클러스터링 : 유사한 의미끼리 군집화 like partition

 

Reranking

  • Query를 하면 유사도 검색을 통해 문서를 반환하게 되는데, 유사도가 높은 순으로 ranking이 매겨진다.
  • RAG는 검색 시간 단축을 위해 ANNs (유사도 검색) 기술을 활용하기 때문에, 질문과 관계없는 문서가 검색될 가능성이 높다.
    • 해결방법
    • 검색으로 반환되는 문서 수 늘리기 but 토큰 제약으로 불가능
    •  Reranking 관련 정보가 컨텍스트 내 상위에 존재하도록 한다.

 

RAG 구현시 고려사항

  • 답변속도
    • Chunk Size
    • 검색속도(파인콘,파이스 > 엘라스틱서치 > 크로마)
    • OpenAI 모델 선택
    • 전반적인 아키텍처
  • 정확도
    • Chunk_overlap
    • 검색 엔진 (하이브리드검색 > 벡터검색 > 시맨틱검색)
    • Reranking
  • 보안
    • 기업 보안 수준에 부합하는 아킽텍처로 도입
    • OpenAI API & Azure OpenAI  비교 검토하여 도입
    • 허용된 데이터 한해서 사용
  • 개인정보 필터링 및 모니터링
  • 질의 / 답변 모니터링
    • 적정성 / 정확성
    • 최신 데이터를 근거로 한 답변 유무
  • 토큰 사용량
    • 인프라 사용 비용
    • 토큰 사용 비용
  • 서비스 성능 (응답시간, 처리량 등)
  • 사용자 피드백

 

참고자료


https://www.youtube.com/watch?v=moIAT5FWNzU

Q.기존의 RAG 시스템이 있는데, 데이터를 추가하는 것이 아니라 분야별로 개발하는 이유?

  • 로스트인더미들? -> GPT에서 너무 많은 정보를 주면 어디서 찾아야 하는지 모른다.
    어느 분야의 문서인지 AI가 헷갈린다.
  • 명확히하기 위해선 사용자가 질문을 정말 잘 해야하는데, 과연 그것을 요구하는 것이 맞을까?
  • 이 때문에 시스템을 분리하는 이유중 하나다.
  • 관련있는 데이터만 주는거다. 그러면 빠르게 찾을 수 있다.

  

https://www.youtube.com/watch?v=zybyszetEcE

Chain

  • 생성단계는 이전의 과정을 모두 하나로 묶어 하나의 RAG 파이프라인으로 조립해 완성하는 단계

 

 

 

 

 

'회사' 카테고리의 다른 글

[Test]  (0) 2024.12.16
동일 도메인 인스턴스간 HTTP 세션 충돌 방지  (0) 2024.06.05
JSP + JqGrid + Spring + SQL + ... + 암튼 공부  (0) 2023.10.24
10월 후기  (0) 2023.10.16
9월 후기  (0) 2023.10.16