본문 바로가기

IT, Computer

Retrieval Augmented Generation(RAG) 복습 (1) RAG의 개념

반응형

 

 

목차


    썸네일

    RAG란?

    Retrival : (언어 모델이 갖고 있지 않은 정보) 데이터를 가져오는 것.

    Augmented : AR/VR에서의 A도 Augmented임. 마치 있는 것처럼.

    Generation : 컴퓨터가 생성하는거 llm이 알아서 하는부분이다.

    여기서 R,A 까지가 우리가 해야되는 것이다. 그러므로 데이터를 잘 가져와서 잘 정제하는것이 우리의 역할이자 RAG의 핵심이다.


    프롬프트(Prompt)

    LLM에서 자주 나오는 용어다. LLM과 소통할 수 있는 방법으로, 우리가 모델과 소통하는 창구라고 생각하면 된다. 프롬프트를 어디에 놓느냐에 따라 답변이 달라진다. 데이터가 정확해도 잘 전달하지 않으면 결과가 마음에 들지 않을 수 있다. lang-chain은 이러한 프롬프트를 어디에, 어떤것을 써야되는지 알려주기에 아주 좋은 도구라고 보면 된다.


     

    벡터(Vector)

    우리는 답변을 사용자가 원하는 정보를 주는것이 목표다. 그렇기에 사용자 질문과 관련있는 데이터를 사용해야되는데, 얼마나 관련있는가를 알려면 벡터를 생성해야된다. 벡터로 얼마나 유사한지 파악하는 것이다. 이러한 백터를 사용하기 위해 나는 임베딩 모델을 활용할 것이다. 임베딩 모델은 문장에서 비슷한 단어가 자주 붙어있는것을 학습하는 모델이다. 가령 basketball을 검색하면 football 같은 놈들이 나올것이다. 같이 붙어 있는 경우가 많이 때문이다.

    basketball 예시


     

    벡터 DB

    위와 같이 임베딩 모델을 활용해 생성된 벡터를 저장한 곳이다. 이때, 벡터와 함께 메타데이터(문서의 이름과 같은)를 저장해야된다. 출처를 적음으로써 어디에서 가져왔는지 분명히 하는것으로 이 과정에서 halluciantion(ai의 환각 현상)을 방지할 수 있다. 즉, 답변의 퀄이 상승하는 것이다. 


     

     

    벡터 유사도 검색

    우리의 목표는 사용자의 질문과 가장 비슷한 문서를 가져오는 것이다. 이 때, 문서 전체를 가져오면 속도가 굉장히 느려지기에, 문서를 잘라서 집어넣어야된다. 이 과정을 청킹(chunking)이라고 한다. llm은 토큰수를 보는데, 한국말은 같은 단어여도 영어보다 많은 토큰을 사용한다. 보통 같은 양의 문서여도 영어대비 7~9배 정도 되는 토큰을 사용한다고 보면 된다고 한다. 

     

    위 과정을 요약한다면 .. 1. 사용자 질문과 가장 유사한 문서를 가져와(Retrival) -> 2. 프롬프트를 통해 LLM에 넣고(Augmented), 그 후 3. LLM이 프롬프트를 활용해 답변을 생성(Generation)하는 과정을 RAG라고 한다.


    추가로 임베딩 시에는 업스테이지 임베딩이 좋다. 임베딩 api는 싸다. 심지어 30불 크래딧 주기에 업스테이지 api를 사용하는걸 추천한다고 하니 참고할 것. 다음 포스팅에서는 RAG 실습 관련 복습을 할 예정이다.