빅데이타 & 머신러닝/생성형 AI (ChatGPT etc)

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1

Terry Cho 2023. 11. 9. 14:07

ChatGPT에 텍스트 검색을 통합하는 RAG와 벡터 데이터 베이스 Pinecone #1

 

조대협 (http://bcho.tistory.com)

RAG의 개념

Open AI의 ChatGPT나 Google의 PaLM 모델, 메타의 LLama 모델과 같은 LLM 모델은 학습 당시에 지식을 저장하여 뉴럴 네트워크 상에 그 지식을 담고 있다. 그래서 학습 당시까지의 지식을 기반으로한 질문에 대해서는 답변을할 수 있지만, 학습이 되지 않은 데이터나 또는 그 이후 나온 데이터에 대해서는 답변을 할 수 없는 제약을 가지고 있다. 

 또한 잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우가 있을 수 있는데, 이를 Hallucination (환상)효과라고 한다. 이러한 두 문제를 해결하려면 최신의 데이터와 질문에 대한 답을 제대로할 수 있는 데이터가 필요한데, 

 

이 문제를 해결하는 기법을 RAG (Retrieval Augmented Generation)이라고 한다. 

개념은 데이터 베이스에 지식을 저장해놓고, LLM이 답을 할 수 없는 지식인 경우 이 데이터 베이스를 검색하여 알맞은 지식을 찾아내서 LLM으로 가공하여 답변하는 방법이다.

 

이를 위해서 필요한 두가지 도구가 벡터 데이터 베이스와 임베딩 기술이다.

먼저 텍스트 문서는 그대로 저장을 하면 유사한 문서를 찾기가 어렵기 때문에 이를 벡터로 변경을 해서 저장하고 검색하는데, 이렇게 데이터를 벡터로 변환하는 과정을 임베딩이라고 한다.

임베딩은 ChatGPT나 PaLM같은 LLM모델에서 임베딩 API를 SDK 형태로 제공한다.

그러면 이렇게 벡터로 변형된 데이터를 저장하고, 유사한 문장들을 검색할 수 있는 기능이 필요한데, 이러한 기능을 하는 솔루션이 벡터 데이터 베이스이다. 

 

<그림 RAG 아키텍처 >

임베딩과 벡터 데이터 베이스가 준비되면 위와 같은 구조로 LLM을 확장할 수 있다. 

먼저 질문이 LLM이 답변할 수 있는지 아니면 벡터데이터 베이스에 있는 지식을 기반으로 답변을 해야하는지를 판단한다. 직접 LLM으로 구현할 수 도 있지만 보통 Langchain 과 같은 LLM 프레임웍에서 LLM으로 질문할지 벡터 데이터베이스로 서치를 할지 결정할 수 있도록 한다. Langchain에서 이 기능을 하는 모듈을 Agent라고 한다.  (Langchain Agent : https://python.langchain.com/docs/modules/agents/ )

 

대표적인 벡터데이터 베이스로는 pinecone이 chatgpt와 함께 널리 사용된다. 로컬 환경에 가볍게 인스톨할 수 있는 오픈소스 솔루션으로는 Qdrant (https://qdrant.tech/) 등이 있다. 

 

ChatGPT와  LangChain 그리고 Pinecone을 이용하여 RAG를 구현한 예제는 다음 링크를 참고하기 바란다.

 

https://github.com/pinecone-io/examples/blob/master/learn/generation/langchain/handbook/08-langchain-retrieval-agent.ipynb

 

다음 글에서는 Pinecone과 같은 벡터 데이터 베이스가 어떻게 데이터를 저장하고 서칭하는지 그리고 텍스트를 벡터로 변환하는 임베딩에 대해서 간단하게 알아보도록 한다.

 

그리드형