Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리트코드
- POD
- BFS
- 컨설턴트
- Docker
- 생성형 AI
- Python
- 솔루션조사
- 오픈시프트
- Machine Learning
- fast api
- 쿠버네티스
- 도커
- k8s
- 생성형
- SpringBoot
- 컨설팅
- vue.js
- kubernetes
- Redis
- GPT
- vuejs
- 로깅
- fastapi
- 머신러닝
- LLaMa
- LeetCode
- OpenShift
- jpa
- 메세지큐
Archives
- Today
- Total
수 많은 우문은 현답을 만든다
생성형 AI 구축에 필요한 개념 본문
안녕하세요, 조영호입니다.
요즘 LLM이 핫하죠~ LLM을 가지고 생성형 AI 서비스를 개발해보고 있는데요, 관련하여 필요한 개념들을 우선 정리해 공유드리고자합니다. 하나씩 알아보겠습니다.
- LM (언어 모델, Language Model)
인간의 언어를 이해하고 생성하도록 훈련된 일종의 인공지능 모델로, 주어진 언어 내에서 패턴이나 구조, 관계를 학습하여 텍스트 번역과 같은 좁은 AI 작업에서 주로 활용됩니다. - LLM (거대 언어 모델, Large Language Model)
LLM은 사전에 대규모의 언어 데이터를 학습하여 문장 구조나 문법, 의미 등을 이해하고 생성할 수 있습니다. 예를 들어, 주어진 문맥에서 다음 단어를 예측하는 문제에서 LLM은 문장 내의 단어들 사이의 유사성과 문맥을 파악하여 다음 단어를 생성할 수 있습니다. - 환상효과(Hallucination)
잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우 - RAG(Retrieval Augmented Generation)
환상효과를 해결할 수 있는 방안중에 하나.
데이터베이스에 지식을 저장해놓고, LLM이 답을 할 수 없는 경우 데이터 베이스를 검색하여 알맞은 지식을 찾아내서 LLM 응답으로 가공하여 답하는 방법.
RAG는 두가지 핵심 기술이 필요 (벡터 데이터베이스, 임베딩)- 임베딩
- 텍스트 데이터를 벡터로 변환해 저장.
- 벡터는 실수 값의 배열로, 벡터의 각 값은 단어나 문장의 특정 특성을 나타낸다.
- 텍스트 문서도 벡터화(임베딩) 해서 벡터디비에 저장하면 유사도로 검색할 수 있다.
- 벡터 데이터베이스 (파이스 - FAISS)
- 양자화, 압축, 색인 등의 최적화 기법들을 사용해 대량의 고차원 벡터에서 유사 벡터를 빠르게 찾는다.
- 검색, 인덱싱 2개의 주요 컴포넌트로 구성
- 파시스는 벡터 간 유사성을 계산하는 기능에 집중해, 텍스트 같은 비벡터형 데이터에 대해서는 직접적으로 처리할 수 없다는 한계 존재함.
- 한계 극복을 위해 워드임베딩(word embedding)이나 원-핫 인코딩(one-hot encoding)을 직접 구현해야함
- 동작원리
- 데이터를 양자화하여 인덱스를 생성
- 인덱스를 사용하여 유사성 검색을 수행
- 복잡한 벡터 공간을 작은 ‘클러스터’로 분할
- 각 클러스터는 그 안의 벡터들이 서로 유사하며 클러스터링은 원본 벡터 공간을 더 작고, 이해하기 쉽고, 계산하기 편한 공간으로 변환하는 역할을 함
- 검색을 수행할 때는 쿼리 벡터를 입력으로 받고 이와 가장 유사한 벡터들을 인덱스에서 찾아 반환
(가장 유사도가 높은 클러스터가 반환 결과임)
- 사용방법
- 필요한 벡터 데이터를 로드
- 파이스 인덱스 생성
- 인덱스를 학습 (전역 클러스터링, 로컬 클러스터링)
- 유사성 검색을 수행
- 파이스 인덱스 종류
- 플랫(flat) 인덱스
모든 벡터 간의 거리를 계산하는 방식이나 비효율적 - 계층적(hierarchical) 인덱스
벡터 공간을 여러 계층으로 나누어 검색을 최적화 - 제품(product) 인덱스
여러 벡터를 조합하여 더 복잡한 벡터를 생성하고 이를 인덱스화
- 플랫(flat) 인덱스
- 기본 용어
- 양자화
벡터 데이터를 압축하고 저장하기위해 사용 - 유사도검색
- 유클리안 거리
두 벡터간의 거리를 피타고라스 정리를 이용하여 측정한다.
차원이 높아질수록 성능이 저하될 수 있다. - 코사인 유사도
두 벡터간의 각도를 이용하여 유사도를 측정한다.
터의 크기를 고려하지 못하기 때문에 벡터의 크기가 다른 벡터간의 유사도를 측정하기 어렵다. - 내적 기반 유사도
벡터의 내적(곱)으로 벡터간의 방향성과 크기 양쪽을 모두 고려하기 때문에, 벡터의 크기가 달라도 유사도 측정이 가능 - ANN(Approximate Nearest Neighbors)
다차원 임베딩 벡터를 대용량으로 검색할때 사용한다.
- 유클리안 거리
- Vertex AI Vector Search
- 구글에서 제공하는 벡터 데이터 베이스
- ScaNN (Scalable Nearest Neighbors) 알고리즘을 사용하는데, ANN 알고리즘들에 비해서, 많은 데이터가 있을 경우 더 빠른 서치 성능을 보인다.
- LLM 서비스 구현시 (RAG)Embedding DB와 LLM 으로의 조건 분기처리 하는 방법
- langchain agent 에서 특정 문장이 들어오면 RAG를 수행하도록 설정한다.
예제는 링크 참고 - 자원이 부족하다면 상대적으로 가벼운 sentence-transformers을 사용한다.
- langchain agent 에서 특정 문장이 들어오면 RAG를 수행하도록 설정한다.
- 프롬프트 엔지니어링이란?
블로그 참고
- 양자화
- 임베딩
감사합니다.