Skip to content

915-Lab/DeuChatbot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LangChain을 이용한 거대언어모델(LLM) 기반의 질의응답 시스템

OO대학교 정시 입시 데이터를 기반으로 구축된 RAG 챗봇


목차

1) 개발 목적
2) 시스템 설계
3) 말뭉치 구축
4) 시스템 구축
5) 실행 방법
6) 실행 화면
7) 실험 전략
8) 실험 결과
9) 결론


1) 개발 목적

  1. LangChain Framework를 이용하여 거대언어모델의 세 가지 한계점을 보완하고자 한다.
  2. 미세조정(Fine-tuning) 기법과 In-context Learning 기법을 비교하고자 한다.
  3. 미세조정된 기존 질의응답시스템과 LangChain을 이용하여 구축한 질의응답시스템을 비교하고자 한다.

1.1) 거대언어모델 한계점

  • 정보 접근 제한
  • 토큰 제한
  • 작화 현상

1.2) 한계점 보완을 위한 기법

  • 미세조정(Fine-tuning)
  • N-shot Learning
  • In-context Learning

1.3) 비교군 스펙

  • 미세조정(Fine-tuning) 기법 사용
  • 거대언어모델 (GPT-3.5-turbo)
  • 데이터셋 - OO대학교 정시 입시 모집 요강(pdf or HTML), 입시 결과(pdf or HTML)

2) 시스템 설계

2.1) 시스템 구조도

image

  • RAG
    1. Document: 데이터셋을 읽어들인다.
    2. TextSplitter: 문서를 설정한 청크 크기로 분할한다.
    3. Embedding: 분할된 문서를 임베딩한다.
    4. VectorStore: 임베딩된 문서를 저장한다.
    5. Question: 사용자의 질문을 입력받는다.
    6. Embedding: 사용자의 질문을 임베딩한다.
    7. Retriever: 사용자의 질문과 가장 유사한 문서를 찾는다.
    8. Answer: 찾은 문서를 기반으로 사용자의 질문에 대답한다.

2.2) 한계점 보완 방법 설계

공통: LangChain Framework를 이용한 RAG 시스템을 구축하여 세 가지 한계점 보완

  • 정보 접근 제한
    • 데이터셋(OO대학교 정시 입시 데이터 및 입시 결과)을 기반으로 질문에 대답하도록 구현
  • 토큰 제한
    • 문서 분할기(TextSplitter)를 통한 토큰 제한 한계점 보완
  • 작화 현상
    • RAG 구조를 이용하여 데이터셋을 기반으로 대답하도록 함으로써 작화 현상 보완

2.3) 데이터셋

  • OO대학교 정시 입시 데이터
    • 정시 입시 데이터: OO대학교 정시 입시 모집 요강
    • 정시 입시 결과 데이터: OO대학교 정시 입시 결과

3) 말뭉치 구축

거대언어모델은 자연어 처리에서는 성능이 우수하지만, 정형데이터에 대한 성능은 떨어진다. 따라서, 정형데이터를 잘 처리하기 위한 전처리 기법을 적용하여 말뭉치를 구축한다. 비교군(듀듀 챗봇) 질의응답 시스템은 전처리 기법을 적용하지 않았다. 정형데이터 인식률을 높이는 전처리 기법은 추후 공개 예정이다.

  • 말뭉치
    • 표 75개
    • 평균 속성 3.84개
    • 평균 행 6.76개

3.1) 전처리 기법 적용 전 형태

image

3.2) 전처리 기법 적용 후 형태

image


4) 시스템 구축

4.1) 거대언어모델 종류

  • Closed Source
    • OpenAI (유료)
      • GPT-3.5-turbo
      • GPT-4-turbo
      • GPT-4o
    • Anthropic (유료)
      • Claude-3-sonnet
      • Claude-3-opus
    • Google (무료)
      • Gemini 1.5 Pro
  • Open Source (HuggingFace)
    • Yanolja
      • EEVE-Korean-Instruct-10.8B-v1.0
    • Maum-AI
      • Llama-3-MAAL-8B-Instruct-v0.1
    • Qwen
      • Qwen1.5-14B-Chat

4.2) 문서 임베딩모델 종류

  • OpenAIEmbedding
    • text-embedding-3-small
    • text-embedding-3-large
    • text-embedding-ada-002
  • HuggingFaceEmbedding
    • snunlp
      • KR-SBERT-V40K-klueNLI-augSTS
    • jhgan
      • ko-sroberta-multitask
      • ko-sbert-multitask
      • ko-sroberta-nli
      • ko-sbert-nli
      • ko-sroberta-sts
      • ko-sbert-sts
    • BAAI
      • bge-m3
    • sentence-transformers
      • LaBSE
      • paraphrase-multilingual-MiniLM-L12-v2
      • paraphrase-multilingual-mpnet-base-v2

5) 실행 방법

5.1) 환경 설정

5.1.1) 설치 프로그램

  1. Python 3.10.x
  2. PyCharm
  3. Git
  4. LM Studio

5.1.2) 패키지 설치

pip install -r requirements.txt

5.1.3) deuChatbot > .env 파일 생성

OPENAI_API_KEY="your OpenAI API Key"
ANTHROPIC_API_KEY="your Anthropic API Key"
GOOGLE_API_KEY="your Google API Key"
UPSTAGE_API_KEY="your Upstage API Key"

LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT="https://api.smith.langchain.com"
LANGCHAIN_API_KEY="your LangChain API Key"

LM_URL="your LM Studio Server URL"
LM_LOCAL_URL="http://localhost:1234/v1"

5.2) 임베딩모델 선택

  • OpenAIEmbedding
    • OpenAI API 호출에 필요한 양의 크레딧이 필요하다.
  • HuggingFaceEmbedding
    • 무료이기 때문에 바로 사용 가능하다.

5.3) 거대언어모델 선택

  • Closed Source
    • 잔여 크레딧이 있을 경우 API 요청을 통해 사용 가능하다.
  • Open Source (HuggingFace)
    • LM Studio에 아래 거대언어모델 목록의 GGUF 파일 다운로드 하여 실행하기
      • Yanolja
        • EEVE-Korean-Instruct-10.8B-v1.0
      • Maum-AI
        • Llama-3-MAAL-8B-Instruct-v0.1
      • Qwen
        • Qwen1.5-14B-Chat

5.4) 입시 관련 질문 (수동 or 자동) - 자동의 경우 응답 결과가 엑셀로 저장됨

5.5) 프로그램 종료 후 결과 확인


6) 실행 화면

6.1) 임베딩모델 선택

image

6.2) 거대언어모델 선택

image

6.3) 질문 입력 방식 선택 (수동 or 자동)

image

6.3.1) 수동 입력

질문 내용을 입력하면 거대언어모델을 통해 응답 받을 수 있다.

6.3.2) 자동 입력

  1. 입시 관련 질문, 모범 응답을 qna.xlsx 파일로 저장 후 프로그램을 실행한다. image
  2. 결과 파일 엑셀 저장(거대언어모델을 통한 응답과 모범 응답의 유사도, 질의, 응답, 모범 응답) image

7) 실험 전략

7.1) Corpus

  • 사람이 직접 작성한 데이터셋을 사용하여 성능 비교
    • OO대학교 정시 입시 문서를 기반 질문 100개, 모범 응답 100개
      • 대학 입시 관련 커뮤니티 질문 + 모범 응답
      • 재학생 질문 + 모범 응답
      • OO대학교 입학처 직원 질문 + 모범 응답
  • AI가 OO대학교 정시 입시 문서를 기반으로 생성한 데이터셋을 사용하여 성능 비교
    • AI가 생성한 질문 100개, 모범 응답 100개
      • 질문 생성에 사용될 거대언어모델: GPT-4o (2024-06-11 기준 가장 좋은 성능인 모델)

7.2) TextSplitter

  • 청크 사이즈 조절 실험 (최적의 청크 사이즈 찾기)
  • 오버랩 조절 실험

7.3) Embedding

임베딩 모델별 성능 비교 (한국어, 정형데이터에 최적인 임베딩 모델 찾기)

  • OpenAIEmbedding
    • text-embedding-3-small
    • text-embedding-3-large
    • text-embedding-ada-002
  • HuggingFaceEmbedding
    • snunlp
      • KR-SBERT-V40K-klueNLI-augSTS
    • jhgan
      • ko-sroberta-multitask
      • ko-sbert-multitask
      • ko-sroberta-nli
      • ko-sbert-nli
      • ko-sroberta-sts
      • ko-sbert-sts
    • BAAI
      • bge-m3
    • sentence-transformers
      • LaBSE
      • paraphrase-multilingual-MiniLM-L12-v2
      • paraphrase-multilingual-mpnet-base-v2

7.4) Retriever

기본 검색기부터 다양한 검색기를 추가했을 때 성능 변화를 확인하기 위한 실험

  • Vector-store-backed retriever (기본)
  • Ensemble Retriever
  • Long-Context Reorder
  • Self-querying
  • MultiQueryRetriever
  • Contextual compression
  • Custom Retriever
  • MultiVector Retriever
  • Parent Document Retriever
  • Time-weighted vector store retriever

8) 실험 결과


9) 결론

Releases

No releases published

Packages

No packages published

Languages