본문 바로가기
인공지능/LangChain

[LangChain] 1. LangChain에 대해서

by 이준언 2024. 7. 16.

(youtube 모두의AI 님의 영상을 보며 공부한 내용을 정리)

 

전체 학습 목표: LLM의 구동 원리를 이해하고, LangChain을 통해 실무 활용 가능한 챗봇 구축하기

배경 지식

  • LLM (Large Language Model)
    • 초거대 언어모델
    • 특징
      • 대규모 데이터 학습
      • 딥러닝 기술트랜스포머: 셀프 어텐션 메커니즘을 사용하여 문맥을 이해하고, 병렬 처리 능력이 뛰어나 대규모 데이터를 효과적으로 학습할 수 있음
      • 주로 트랜스포머(Transformer) 구조를 기반으로 구축
  • Transformer
    • “Attention is All You Need”
    • 특징
      1. 병렬 처리
        • 순차적 계산에 의존하지 않기 때문에 병렬 처리가 가능하여 훈련 속도가 빠름
        • 기존 순환신경망(RNN) 및 LSTM(Long Short-Term Memory) 보다 효율적
      2. 셀프 어텐션 (Self-Attention) 메커니즘
        • 각 단어의 표현을 다른 모든 단어와의 관계를 고려하여 계산 → 문맥을 더 잘 이해
      3. 스케일 가능성
        • 모델의 크기와 복잡성을 쉽게 확장할 수 있어 더 많은 데이터를 학습하고 더 복잡한 언어 구조를 이해할 수 있음
    • 구조

        1. 인코더 (encoder)

         입력 시퀀스를 받아 내부 표현 생성

  • 입력 인베딩: 단어를 고정된 크기의 벡터로 변환
  •  포지셔널 인코딩: 순서를 나타내기 위해 입력 임베딩에 위치 정보를 추가
  •  멀티헤드 셀프 어텐션: 여러 셀프 어텐션 메커니즘을 병렬로 적용하여 다양한 시각으로 문맥을 이해
  •  피드 포워드 네트워크: 각 위치에서 독립적으로 적용되는 완전 연결 신경망
  •  잔차 연결 및 층 정규화 각 서브층의 출력에 원래 입력을 더한 후 정규화

 

        2. 디코더 (decoder)

  • 출력 임베딩: 출력 시퀀스의 단어를 고정된 크기의 벡터로 변환
  • 포지셔널 인코딩: 출력 시퀀스에도 위치 정보 추가
  • 마스크드 멀티헤드 셀프 어텐션: 현재 위치 이후의 정보가 보이지 않도록 마스킹을 적용
  • 인코더-디코더 어텐션: 인코더의 출력을 디코더의 입력과 결합하여 문맥을 반영

 

  • Self-Attention 메커니즘
    • 각 단어를 다른 모든 단어와 비교하여 중요도를 계산
    • 단계
      1. 쿼리, 키, 값 계산
      2. 입력 임베딩을 세 개의 다른 가중치 행렬에 곱하여 쿼리, 키, 값을 생성
      3. 어텐션 스코어 계산
      4. 쿼리와 키의 내적을 계산하여 각 단어 쌍의 중요도를 나타내는 어텐션 스코어를 획득
      5. 스케일링 및 소프트맥스
      6. 어텐션 스코어를 스케일링하고 소프트맥스 함수를 적용하여 확률 분포를 생성
      7. 어텐션 가중치 적용
      8. 값을 어텐션 가중치와 곱하여 각 단어의 최종 표현을 계산

1. ChatGPT의 개념과 원리

  • LangChain의 개념
    • 언어 모델로 구동되는 어플리케이션을 개발하기 위한 프레임워크 (공식 문서)
    • 데이터 인식 기능
      • 언어 모델을 다른 데이터 소스에 연결 가능
    • 에이전트 기능
      • 언어 모델이 환경(사용자 등)과 상호작용 가능

 

  • LangChain을 써야하는 이유
    • ChatGPT의 한계 (2023년 10월 기준)
      1. 정보 접근 제한→ Vectorstore 기반 정보 탐색 또는 Agent를 활용한 검색을 결합하여 해결 가능
      2. 학습 기간 이후의 정보에 대해서는 답변을 하지 못하거나 거짓된 답변을 제공
      3. 토큰 제한→ TextSplitter를 활용한 문서 분할을 통해 해결 가능
      4. 입력 토큰의 제한 존재
      5. 환각 현상→ 주어진 문서에 대해서만 결과를 출력하도록 Prompt 입력
      6. Fact에 대한 질문을 했을 때, 엉뚱한 대답을 하거나 거짓된 정보를 알려주는 경우 존재
    • ChatGPT의 한계를 해결하는 방법
      • Fine-tuning
        • 기존 딥러닝 모델의 weight를 조정하여 원하는 용도의 모델로 업데이트
        • 고비용
      • N-shot Learning
        • 0~n개의 출력 예시를 언어 모델에 제공하여, 딥러닝이 용도에 알맞은 출력을 하도록 조정
      • In-context Learning (→ LangChain)
        • 문맥을 제시하고, 이 문맥을 기반으로 결과값을 출력하도록 조정

 

            → LangChain을 활용하면 LLM의 문제를 해결하고 활용도를 높일 수 있다!

 

 

2. LangChain의 개념과 원리

  • LangChain의 구조
    • LLM
      • 초거대 언어모델
      • 생성 모델의 핵심 구성 요소
      • ex) GPT-3.5, PALM-2, LLAMA, StableVicuna, WizardLM, MPT 등
    • Prompts
      • 초거대 언어모델에게 지시하는 명령문
      • 요소
        • Prompt Templates, Chat Prompt Template, Example Seletors, Output Parsers
    • Index
      • 초거대 언어모델(LLM)이 문서를 쉽게 탐색할 수 있도록 구조화하는 모듈
      • ex) Document Loaders, Text Splitters, Vectorstores, Retrievers 등
    • Memory
      • 채팅 이력을 기억하도록 하여, 이를 기반으로 대화가 가능하도록 하는 모듈
      • ex) ConversationBufferMemory, Entity Memory, Conversation Knowledge Graph Memory
    • Chain
      • LLM 사슬을 형성하여, 연속적인 LLM 호출이 가능하도록 하는 핵심 구성 요소
      • ex) LLM Chain, Question Answering, Summarization, Retrieval Question/Answering 등
    • Agents
      • LLM이 기존 Prompt Template로 수행할 수 없는 작업을 가능케하는 모듈
      • Custom Agent, Custom MultiAction Agent, Conversatoin Agent 등

 

  • LangChain의 기본 작동 원리
    • ex: PDF 챗봇 구축 (PDF 문서를 기반으로 챗봇을 구축할 경우)

    1. 문서 업로드 (Document Loader)

    PyPDFLoader를 활용한 문서 가져오기

 

    2. 문서 분할 (Text Splitter)

    PDF 문서를 여러 문서로 분할

 

    3. 문서 임베딩 (Embed to Vectorstore)

    LLM이 이해할 수 있도록 문서 수치화

 

    4. 임베딩 검색 (VectorStore Retriever)

    사용자가 질문을 주면, 질문과 연관성이 높은 문서 추출

 

    5. 답변 생성 (QA Chain)

    질문과 연관성이 높은 문서 추출(prompt 1) → 추출한 문장을 가공(prompt 2) → 답변

 

 

3. LangChain으로 나만의 챗봇 만들기