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
- 포아송분포
- 통계학입문
- 누적분포함수
- Anaconda
- 확률밀도함수
- 모평균
- 표본평균
- 모수
- 조건부확률
- 기본행연산
- 연속확률변수
- 절삭평균
- pmf
- 이산확률질량함수
- 행사다리꼴
- 이산형
- 수학적확률
- 통계학개론
- 사조사
- 균일분포
- 범주형자료
- 첨가행렬
- 표본공간
- 수치형자료
- 베르누이분포
- 이변량자료
- 피어슨상관계수
- 기댓값과 분산
- jupyter notebook
- 이항분포
Archives
- Today
- Total
summ의 블로그
[Langchain] retrieval augmented generation 본문
retrieval augmented generation
거대언어
- hallucination 환각 문제 발생
- 거대언어의 문제점: 최신 정보의 부재
- -> 극복방안: 분야의 제한 없이 광범위한 주제의 질문을 받고 답변하는 질의응답 시스템을 응용해서 RAG
- 거대언어 이전: Q&A쌍을 만들어 둠
- 쿼리 들어오면 제일 유사한 쿼리를 찾아냄. ex) 코사인 유사도이용 후 tf-idf를 이용한 벡터형으로 변환하여 저장
RAG
: 검색된 정보를 바탕으로 언어 모델이 텍스트를 생성하는 방식으로 작동
- 수집한 데이터를 일정 단위(문서 혹은 그보다 작은 단위)로 임베딩(Document Indexing)
- 쿼리가 들어오면 임베딩하고 수집된 데이터 임베딩과 유사도를 비교해 가장 유사한 데이터 검색(Retriever)
- 쿼리 + 데이터(문서)로 프롬프트를 작성해 LLM으로부터 결과를 받음(Generator)
구성 요소
- Document loaders: 대상 문서 읽어오기
- Text Splitting: 문서를 chunk 단위로 splitting
- Text Embedding: 벡터로 임베딩
- Vector Stores: 벡터(+원본) 저장
- Retrievers: 쿼리에 대해 유사벡터 / 문서검색 및 반환
document loader
from langchain.document_loaders import TextLoader
loader = TextLoader('.txt')
documents = loader.load() # Document 객체 리스트를 반환
text splitting 종류
- Character Splitting: 문서를 n개의 문자 단위로 split
- Recursive Character Text Splitting: chunk size를 넘지 않는 범위에서 separator 기준으로 분리
- Document Specific Splitting: Level 2를 기반으로 하여, 문서의 종류에 따라 특성에 맞게 각기 다른 separator 적용
- Semantic Splitting: 하나의 Chunk가 의미적으로 최대한 유사하도록 split. 유사도를 계산함
- Agentic Splitting: 첫 문장의 주제 파악 후 현재 문장의 주제를 파악. 이전 문장의 주제와 비교해서 동일하면 chunk 유지하며 진행. 주제가 달라지면 새로운 chunk 생성. 2로 돌아가서 마지막 문장까지 반복
* 보통 2를 제일 많이 사용해보인다.
Text Embedding
: 텍스트 데이터를 숫자 벡터로 변환
Vector Store
- 임베딩 벡터 저장
- query에 대해 가장 유사한 벡터를 반환하는 retrieve 기능을 함께 제공
- query와 유사한 문서의 내용을 store에 검색해서 이를 바탕으로 답변을 생성
- ids: 쿼리된 문서들의 고유 ID를 포함하는 리스트
- distances: 쿼리된 문서들과 입력 쿼리 문서 간의 유사도 점수(거리). 거리 값이 작을수록 두 문서가 유사함
- metadatas: 쿼리된 문서들의 메타데이터
- embeddings: 쿼리된 문서들의 임베딩 벡터를 포함하는 리스트
- documents: 쿼리된 문서들의 실제 텍스트 내용을 포함하는 리스트
- uris: 문서들의 URI(Uniform Resource Identifier)를 포함하는 리스트
- data: 추가적인 데이터를 포함하는 리스트
- included: 쿼리 결과에 포함된 필드를 나타내는 리스트
* Chroma와 같은 벡터 스토어를 사용할 때 데이터를 로드할 때 임베딩 함수를 지정해야 한다는 것은 텍스트 데이터를 벡터로 변환하는 함수가 필요하다는 의미
Retriever를 이용한 Q&A 구현
- Retriever
- 주어진 query를 벡터로 변환하고 vector store에서 유사도가 높은 벡터들을 반환.
- 일반적으로 vector store가 기능을 함께 제공.
- Q&A 구현
- Retriever가 반환한 Context와 원래 query로 프롬프트를 생성하고 이를 LLM에 입력하여 답변을 생성.
- Context의 내용만 이용해 답변하도록 하는 프롬프트 템플릿이 필요함.
- 추가로 LangChain hub: LLM의 효율적인 관리를 위해 제공되는 라이브러리
- RetrievalQA Chain: RAG 파이프라인 예제들
- Runnable PromptTemplate: 프롬프트 템플릿 예제들
chain
- RAG를 위한 Chain 생성
- RunnableParallel(): 두 개 이상의 Runnable 이 (sequential이 아닌) parallel 하게 실행되어야 하는 상황에 사용
- StrOutputParser() : 출력이 AIMessage 객체가 아닌 문자열이 되도록 변경
- 프롬프트 템플릿 대신 RetrievalQA / RetrievalQAWithSourcesChain
'langchain' 카테고리의 다른 글
[Langchain] rag multiquery & LCEL (0) | 2024.09.10 |
---|---|
[Langchain] Streaming (0) | 2024.09.06 |
[Langchain] AI agent (0) | 2024.09.04 |
[Langchain] Retrieval Agents (0) | 2024.08.21 |
[Langchain] chain (0) | 2024.07.15 |