이전 프젝 경험 기반으로 이해중이다
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 작동
- 정보 검색
사용자의 질문이나 입력에 가장 관련성이 높은 정보를 DB나 인터넷에서 찾는다.
이 과정에서 질문에 답할 수 있는 콘텐츠나 문서를 선택하기 위해 유사도 검색 같은 기술이 사용된다. - 언어 생성
검색된 정보를 바탕으로, 생성모델이 답변을 생성한다.
이 때, 생성 모델은 검색된 콘텐츠를 활용해 보다 정확하고 정보에 기반한 답변을 만든다.
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. 유사항목 검색 : 파이스, 엘라스틱 서치 이용 - 하이브리드 검색
앞의 검색들을 조합해서 쓰는 검색 기술
검색 방법
유사도 검색 (Similarity Search)
- 주어진 쿼리 || 데이터 항목에 가장 유사한 항목들을 데이터베이스나 데이터 집합에서 찾는 과정
- 고차원 벡터 공간에서 수행
- 유사성 측정 방법 : 코사인 유사도, 유클리드 거리, 자카드 유사도 등 다양한 메트릭 사용
벡터 데이터베이스
- 고차원 벡터 데이터를 저장하고, 이를 기반으로 유사성 검색을 수행할 수 있는 DB
- 인덱싱 기반
주요 속성
- 벡터 저장 및 검색 지원
- 능숙한 유사도 검색
- 임베딩 지원
- 실시간 처리
- 확장성 : 계산 부하를 분산할 수 있는 수평적 확장 지원
DB 차이
관계형 DB | 벡터 DB | |
데이터 구조 | 테이블 형태의 구조화된 데이터 | 고차원 벡터 데이터 |
쿼리 방식 | SQL을 통한 쿼리 | 유사성 검색에 특화된 쿼리 |
사례 | 전통적인 비즈니스 데이터 관리 | 머신러닝 모델에서 생성된 데이터의 검색과 분석 |
벡터 DB 검색
- 유사도 검색 (Similarity Search)
- 주어진 쿼리 또는 데이터 항목에 대해 가장 유사한 항목들을 데이터베이스나 데이터 집합에서 찾아내는 과정
- 키워드가 아닌 좌표상 거리, 각도 기반으로 검색한다.
- MMR (Maximum Marginal Relevance)
- 검색 결과의 다양성을 강화하는 중요한 방법
- 벡터 저장소에 쿼리해 가장 유사한 fetch_k 응답 (가장 유사한 상위 n개) 을 선택한다.
이후, fetch_k 응답 내에서 가장 다양한 k 응답을 선택한다.
벡터 DB 인덱스
- Faiss 기준 인덱스
- 인덱스 생성 과정
- 데이터 전처리 후 벡터 변환
- 클러스터링 : k-Means clustering 이용
- 인덱스 구축 (Flat Index, IVF, Product Quantization, HNSW)
- 검색
- 후처리 : 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 |