LLM & LangChain

김은배·2024년 1월 21일
0

LLM 총정리

목록 보기
9/10

1. Transformer 아키텍처

- 현재 NLP 모델의 거의 대부분은 Transformer 아키텍처를 기반으로 함
- 모델의 용도에 따라 Transformer의 Encoder, Decoder를 개별 또는 통합하여 사용
- 즉, Transformer의 발전 양상이 곧 LLM의 발전의 양상
- Decoder 중심으로 빠른 발전이 있었음  ex) Chat-GPT, BARD 등등

2. Closed Source, Open Source

- Closed Source(OpenAI, Google)
	- 뛰어난 성능, API 방식의 편리한 사용성
    - But, 보장할 수 없는 보안, API 호출 비용

- Open Source(LLaMA)
	- Closed Source 못지 않은 성능, 높은 보안성, 낮은 비용
    - But, 개발 난이도가 높고 사용하기 위한 GPU 서버 필요 

3. Prompt Template이란 무엇인가?

- Prompt는 모델에 대한 입력을 의미
- Prompt Template은 이 입력의 구성을 담당
- LangChain은 Prompt를 쉽게 구성하고 작업할 수 있도록 여러 클래스와 함수 제공
- ex) "{재료}가 들어간 음식을 추천하고, 그것의 레시피를 알려줘?" 
- 위의 예시와 같이 고정적이고 반복적인 Prompt를 제시할 경우 Template을 이용
- Few-Shot Learning에서 Prompt Template을 활용하면 편리함

4. RAG(Retrieval Augmented Generation)

- 외부 데이터를 참조해 LLM이 답변하도록 하는 프레임워크

5. LangChain - Retrieval

- LangChain의 Retrieval은 RAG 대부분의 구성요소를 아우름

- 구성 요소 하나하나가 RAG의 품질을 좌우 

- Document Loader, Text Splitter, Vector Embeddings, Retrievers가 있음

6. Retrieval - Document Loader

- 다양한 형태의 문서를 RAG 전용 객체로 불러들이는 모듈 

- Page_content, Metadata를 가지게 됨

- Page_content: 문서의 내용

- Metadata: 문서의 위치, 제목, 페이지 넘버 등의 출처

7. Retrieval - Text Splitters

- 토큰 제한이 있는 LLM이 여러 문장을 참고해 답변할 수 있도록 문서를 분할하는 역할

- 문서를 Chunk라는 글 덩어리로 바꾸는 역할

- Chunk가 임베딩 되어 Vector Store로 들어감

- LangChain에서 대부분 RecursiveCharacterTextSplitter(이하 RCTS)를 통해 분할

- 구분자 1개 기준으로 분할하는 CharacterTextSplitter는 max_token 문제 발생 가능성 존재

- 하지만 RCTS는 줄바꿈, 마침표, 쉼표 순으로 재귀적으로 분할하여 max_token 지켜 분할 

- Chunk Overlap: 앞의 문단과 의미가 이어지는 내용일 때, Overlap을 통해 연관시킬 수 있음

- 이렇게 글자 수를 기준으로 Text를 나누는 것은 LLM의 토큰 제한을 고려한 것 

8. Retrieval - Text Embeddings

- 텍스트를 의미와 순서에 따라 실수 형태의 벡터로 변환하여 문장 간의 유사성을 비교할 수 있도록 함 

- 대부분의 경우 대용량의 말뭉치를 통해 사전학습된 모델을 통해 쉽게 임베딩

- 사전학습 임베딩 모델에는 대표적으로 OpenAI에서 제공하는 ada모델, HuggingFace의 모델이 있음

- 유료 임베딩 모델은 편리하고 많은 언어 임베딩을 지원하며, GPU를 필요로 하지 않음

- 하지만, 비용 및 API 통신에 따른 보안에 대한 우려가 있음

- 무료 임베딩 모델은 구축하기 다소 어렵지만, 오픈소스 모델로 보안이 우수함

9. Retrieval - Vectorstores

- 임베딩된 값을 저장하는 Vector 저장소

- 대표적으로 Chroma, FAISS가 있음 

- Pure vector database: DB의 업데이트, 삭제, 이동 등에 특화(Chroma) 

- Vector libraries: Vector 유사도 계산에 특화(FAISS)

- 특히, FAISS는 고밀도 Vector의 유사도 계산 및 클러스터링을 위한 라이브러리

10. Retrieval - Retrievers

- Chain의 종류 
	- stuff: 분할된 텍스트 청크를 Context에 그대로 주입, 토큰 이슈 발생할 수 있으므로 주의를 요함 
    
    - Map reduce
    	- Map: Text Chunk들 각각의 요약이 생김(병렬적 수행)
        - Reduce: 생성된 요약들에 대해 최종 요약 생성 
        - 다수 호출이 필요하고 속도가 느림
        
	- Refine
    	- 분할된 Text Chunk를 순회하면서 누적 답변을 생성
        - 품질이 뛰어나지만 시간이 오래 걸림 
        
	- Map re-rank
    	
        
profile
hello!

0개의 댓글