본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
*_1. 학습 인증샷 4장 이상 포함
*_① 오늘자 날짜, 공부 시작 시각 포함 사진 1장
② 오늘자 날짜, 공부 종료 시각 포함 사진 1장
③ 1개 클립 수강 인증 사진 (강의장 목록 캡쳐, 강의 내용이 담긴 수강화면이 보이지 않도록) 1장
④ 학습 인증샷 1장 이상 (ex. 필기 촬영, 작업물, 등)
2. 학습 후기 700자 이상 (공백 제외)
RAG 파이프라인 실습
- PDF 파일을 다운로드
!pip install langchain langchain_openai chromadb transformers sentence-transformers pypdf langchain-community from langchain.text\_splitter import RecursiveCharacterTextSplitter from langchain.vectorstores import Chroma from langchain.document\_loaders import PyPDFLoader from langchain.embeddings import HuggingFaceEmbeddings !wget [https://wdr.ubion.co.kr/wowpass/img/event/gsat\_170823/gsat\_170823.pdf] (https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf)
- Langchain의 PyPDFLoader로 PDF 파일을 읽어서 페이지 별로 저장
- 예를 들어 27페이지의 PDF 파일이라면 27개의 문서를 얻게 됩니다.
## pdf 파일로드 하고 쪼개기 loader = PyPDFLoader('https://wdr.ubion.co.kr/wowpass/img/event/gsat_170823/gsat_170823.pdf') pages = loader.load_and_split()
- 27개의 문서들은 길이가 제각각이기 떄문에, 특정 길이(여기서는 500)로 제한하고 더 잘라줌
- 총 69개의 문서가 나오게 됨
## chunk로 쪼개기 text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0) splited_docs = text_splitter.split_documents(pages) print(len(splited\_docs))
- 69개의 문서를 전부 임베딩(Embedding)하여 벡터 데이터베이스에 적재
`model_huggingface = HuggingFaceEmbeddings(model_name='BAAI/bge-m3')` # Chroma 를 통해 벡터 저장소 생성. OpenAIEmbeddings()를 사용하거나 HuggingFaceEmbeddings()를 사용하면 된다.
chroma_db = Chroma.from_documents(splited_docs, HuggingFaceEmbeddings())
~
- 벡터 데이터베이스는 Chroma 또는 Faiss를 사용
- 질문을 입력하면 69개의 문서 중 가장 유사도가 높은 문서 4개를 출력
# 유사도 검색(쿼리)
similar_docs = chroma_db.similarity_search("사용자의 질문")
## Chroma 기반 pdf(docs 벡터화)
db = Chroma.from_documents(splited_docs, model_huggingface)
print('문서의 수:', db._collection.count())
## 질의하기
question = '삼성전자의 주요 사업영역은?'
docs = db.similarity_search(question, k=4)
for doc in docs:
print(doc)
print('--' * 100)
db_toFiles = Chroma.from_documents(splited_docs, model_huggingface, persist_directory = './samsumg.db')
print('문서의 수:', db_toFiles._collection.count())
db_fromfile = Chroma(persist_directory = './samsumg.db',embedding_function=model_huggingface)
print('문서의 수:', db_fromfile._collection.count())
## 질의하기
question = '삼성전자의 주요 사업영역은?'
docs = db_fromfile.similarity_search(question, k=4)
print('검색된 문서의 수:', len(docs))
url : https://abit.ly/lisbva
'스타트업 투자 > 데이터 + 테크' 카테고리의 다른 글
패스트캠퍼스 환급챌린지 15일차 : Function Calling (0) | 2025.04.15 |
---|---|
패스트캠퍼스 환급챌린지 14일차 : ReAct 에이전트 (0) | 2025.04.14 |
패스트캠퍼스 환급챌린지 12일차 : 거대 언어 모델의 답변 (0) | 2025.04.12 |
패스트캠퍼스 환급챌린지 11일차 : 임베딩 (0) | 2025.04.11 |
패스트캠퍼스 환급챌린지 10일차 : RAG (0) | 2025.04.10 |
댓글