728x90
랭체인을 이용한 RAG 임베딩 파인튜닝 실습
임베딩과 검색기
임베딩(Embedding)
- 텍스트를 AI를 이용해 숫자, 특히 벡터로 변환하는 것이 임베딩이다.
- 여기서 벡터란 숫자들이 나열된 형태를 의미하고 있다.
- '사과' -> 단어 임베딩 -> 벡터 : [0.12, 0.34, 0.75, -0.12]
- '안녕하세요' -> 문장 임베딩 -> 벡터 : [0.57, 0.25, 0.85, 3.24]
- '서울 청년 정책이 ... ' -> 문장 임베딩 -> 벡터 : [0.54, 0.84, 0.28, 0.59]
- 임베딩 지나는것이 벡터로 변환하는 과정임
- 임베딩 모델은 직접 공개된 모델을 다운로드하여 사용하는 것과 API로 제공받는 것 총 두 가지가 존재
- 공개된 모델을 다운로드 하여 사용하는 경우 '보안', '직접 도메인에 맞게 학습하여 성능 최적화' 등 이유가 있다.
임베딩 모델 (공개 모델 vs API로 사용)
- 도메인에 맞게 학습하여 성능 최적화 (ex) 금융 데이터를 bge-m3에 추가 학습)
- 다운로드 가능한 오플 임베딩 모델 'bge-m3' (능력만 있다면 내 데이터로 추가 학습도 가능함)
- OpenAI 에서 제공하는 유료 임베딩 API들 (기본 성능 이상이 보장되며, 유료, 내 데이터로 추가 학습을 진행하는 것은 불가능함)
임베딩을 하는 이유
- 텍스트 임베딩을 하고 나면 텍스트끼리의 유사도를 구하는 것이 가능함. 즉 '검색기'를 만들 수 있게됨
- 현재 설명하는 것은 특별한 의미의 검색을 설명한 것은 아니고 일반적인 네이버의 '검색' 같은 것을 의미함
임베딩 벡터는 유사도를 구할 수 있음
- 텍스트가 벡터가 되고나면 임베딩 벡터 간의 유사도를 구할 수 있어서 이를 이용하여 '검색기'를 구현한다.
- 대표적인 예로 두 벡터의 유사도를 구하는 방법은 코사인 유사도(Cosine Similarity)가 존재함.
예시로 6개의 텍스트를 전부 임베딩(Embedding)한 후, '아무것도 안 먹었더니 꼬르륵 소리가 나네'라는 임의의 검색어가 들어오면 임베딩 유사도 계산을 진행해 보면 아래와 같다.
- 6개의 텍스트가 주어졌을 때, Query가 주어지면 가장 유사도라 높은 top-3를 추출하는 모습이다.
RAG(Retrieval-Augmented Generation)
• R(Retrieval): 검색
• A(Augemented): 증강되었다
• G(Generation): 생성한다
RAG: 검색으로 증강된 답변을 생성한다. 즉, LLM의 지식에 외부의 지식을 추가하여 답변하는 것.
RAG 에서는 사용자가 질문을 던지면 질문과 연관되어져 있는 문서들을 찾아낸다 (즉, 검색기가 존재한다는 것)
검색 결과를 바탕으로 LLM에게 질문에 대한 답변을 요구 하는 것이다.
검색된 내용을 바탕으로 '답변' 하므로 내 데이터만을 이용해 답변하는 챗봇을 구현이 가능하다.
이를 통해 챗봇이 거짓말하는 현상인 '할루시네이션'을 급감 할 수 있는 효과를 지닌다.
임베딩을 이용하여 검색기를 구현한다는 것은 기존 문서들의 임베딩을 보관할 장소가 필요하게 된다.
이때 이용할 수 있는 것이 벡터 데이터 베이스이다.
Vector Database
- 벡터 데이터베이스는 벡터(숫자들의 나열)을 저장하는 저장소로
- 벡터를 저장, 관리, 검색(유사성 기반)하는 일을 한다.
- 코사인 유사도와 같은 유사성 검색을 기반으로 상위 N개의 벡터를 반환한다.
벡터 데이터베이스가 좋은 점
- 갖고 있는 데이터가 수천, 수만 건 정도라면 큰 차이가 없을 수 있음. (대부분의 경우 여기에 속함)
- 밀버스는 은근 장애가 많이 발생한다.
- 수천, 수억 단위의 문서를 백업, 재배치, 재저장을 빈번하게 하는 상황에서는 Qdrant가 가장 안정적이었다. 따라서 10만에서 1000만 이내의 문서라면 Qdrant 추천
- Chroma 와 Pinecone 은 튜토리얼 용으로 많이 사용되기 때문에 아래 통계에서 사용량이 많은 것으로 추정된다.
- 프로덕션에서는 FALSS가 많이 사용되며, 배치성 추천작업등이 있고 수억-수십억 이라면 FALSS를 추천한다.
728x90
'AI' 카테고리의 다른 글
RAG 서울 청년 정책 챗봇 실습 (0) | 2025.04.03 |
---|---|
벡터 스토어와 RAG 실습 (0) | 2025.04.03 |
Deep Learning GPU and CPU (0) | 2025.03.28 |
Deep Learning 텐서(Tensor) (0) | 2025.03.28 |
Deep Learning 개론 (0) | 2025.03.28 |