1) 개발 목적
2) 시스템 설계
3) 말뭉치 구축
4) 시스템 구축
5) 실행 방법
6) 실행 화면
7) 실험 전략
8) 실험 결과
9) 결론
- LangChain Framework를 이용하여 거대언어모델의 세 가지 한계점을 보완하고자 한다.
- 미세조정(Fine-tuning) 기법과 In-context Learning 기법을 비교하고자 한다.
- 미세조정된 기존 질의응답시스템과 LangChain을 이용하여 구축한 질의응답시스템을 비교하고자 한다.
- 정보 접근 제한
- 토큰 제한
- 작화 현상
- 미세조정(Fine-tuning)
- N-shot Learning
- In-context Learning
- 미세조정(Fine-tuning) 기법 사용
- 거대언어모델 (GPT-3.5-turbo)
- 데이터셋 - OO대학교 정시 입시 모집 요강(pdf or HTML), 입시 결과(pdf or HTML)
- RAG
- Document: 데이터셋을 읽어들인다.
- TextSplitter: 문서를 설정한 청크 크기로 분할한다.
- Embedding: 분할된 문서를 임베딩한다.
- VectorStore: 임베딩된 문서를 저장한다.
- Question: 사용자의 질문을 입력받는다.
- Embedding: 사용자의 질문을 임베딩한다.
- Retriever: 사용자의 질문과 가장 유사한 문서를 찾는다.
- Answer: 찾은 문서를 기반으로 사용자의 질문에 대답한다.
공통: LangChain Framework를 이용한 RAG 시스템을 구축하여 세 가지 한계점 보완
- 정보 접근 제한
- 데이터셋(OO대학교 정시 입시 데이터 및 입시 결과)을 기반으로 질문에 대답하도록 구현
- 토큰 제한
- 문서 분할기(TextSplitter)를 통한 토큰 제한 한계점 보완
- 작화 현상
- RAG 구조를 이용하여 데이터셋을 기반으로 대답하도록 함으로써 작화 현상 보완
- OO대학교 정시 입시 데이터
- 정시 입시 데이터: OO대학교 정시 입시 모집 요강
- 정시 입시 결과 데이터: OO대학교 정시 입시 결과
거대언어모델은 자연어 처리에서는 성능이 우수하지만, 정형데이터에 대한 성능은 떨어진다. 따라서, 정형데이터를 잘 처리하기 위한 전처리 기법을 적용하여 말뭉치를 구축한다. 비교군(듀듀 챗봇) 질의응답 시스템은 전처리 기법을 적용하지 않았다. 정형데이터 인식률을 높이는 전처리 기법은 추후 공개 예정이다.
- 말뭉치
- 표 75개
- 평균 속성 3.84개
- 평균 행 6.76개
- Closed Source
- OpenAI (유료)
- GPT-3.5-turbo
- GPT-4-turbo
- GPT-4o
- Anthropic (유료)
- Claude-3-sonnet
- Claude-3-opus
- Google (무료)
- Gemini 1.5 Pro
- OpenAI (유료)
- 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
- Yanolja
- 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
- snunlp
- Python 3.10.x
- PyCharm
- Git
- LM Studio
pip install -r requirements.txt
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"
- OpenAIEmbedding
- OpenAI API 호출에 필요한 양의 크레딧이 필요하다.
- HuggingFaceEmbedding
- 무료이기 때문에 바로 사용 가능하다.
- 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
- Yanolja
- LM Studio에 아래 거대언어모델 목록의 GGUF 파일 다운로드 하여 실행하기
질문 내용을 입력하면 거대언어모델을 통해 응답 받을 수 있다.
- 입시 관련 질문, 모범 응답을 qna.xlsx 파일로 저장 후 프로그램을 실행한다.
- 결과 파일 엑셀 저장(거대언어모델을 통한 응답과 모범 응답의 유사도, 질의, 응답, 모범 응답)
- 사람이 직접 작성한 데이터셋을 사용하여 성능 비교
- OO대학교 정시 입시 문서를 기반 질문 100개, 모범 응답 100개
- 대학 입시 관련 커뮤니티 질문 + 모범 응답
- 재학생 질문 + 모범 응답
- OO대학교 입학처 직원 질문 + 모범 응답
- OO대학교 정시 입시 문서를 기반 질문 100개, 모범 응답 100개
- AI가 OO대학교 정시 입시 문서를 기반으로 생성한 데이터셋을 사용하여 성능 비교
- AI가 생성한 질문 100개, 모범 응답 100개
- 질문 생성에 사용될 거대언어모델: GPT-4o (2024-06-11 기준 가장 좋은 성능인 모델)
- AI가 생성한 질문 100개, 모범 응답 100개
- 청크 사이즈 조절 실험 (최적의 청크 사이즈 찾기)
- 오버랩 조절 실험
임베딩 모델별 성능 비교 (한국어, 정형데이터에 최적인 임베딩 모델 찾기)
- 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
- snunlp
기본 검색기부터 다양한 검색기를 추가했을 때 성능 변화를 확인하기 위한 실험
- 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