1. RAG - Retrieval Augmented Generation
: ๊ฒ์ ์ฆ๊ฐ ์์ฑ
: ์๋ก์ด ์ง์์ ๊ดํ ํ ์คํธ ๋ฐ์ดํฐ ์์ค๋ฅผ Embeddingํด์ Vector stores์ ์ ์ฅํ๊ณ , ํ๋กฌํํธ ๊ตฌ์ฑ์ ์งํํ ๋ ์ธ๋ถ ๋ฐ์ดํฐ ์์ค๋ก๋ถํฐ ๊ฐ์ ธ์จ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ์ด์ฉํด์ ํ๋กฌํํธ๋ฅผ ๊ตฌ์ฑํ ๋ค LLM์ผ๋ก๋ถํฐ ๋ต๋ณ์ ์ป์ด๋ธ๋ค.
- ์ฌ์ฉ์ ์ง๋ฌธ
- ์ง๋ฌธ ์๋ฒ ๋ฉ ๋ฐ ๋ด ๋ฐ์ดํฐ๋ ์๋ฒ ๋ฉ ์งํ
- ์ดํ, ๋ฒกํฐ DB(์ ์ฅ์)์ ์๋ฒ ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- ์ง๋ฌธ์ ์ด์ฉํด ์ ์ฅํด๋์ DB ์ ์ฅ์์์ ๊ฒ์
- ์ง์ ํ๋กฌํํธ ๊ตฌ์ฑ + ์ง๋ฌธ(query ์ฌ์์ฑ) + ๊ฒ์ ๊ฒฐ๊ณผ n๊ฐ > ์ธ์ด๋ชจ๋ธ GPT์๊ฒ ์ ๊ณต
- ์ธ์ด ๋ชจ๋ธ์ด ๋ต๋ณ ์์ฑ
- ๋ต๋ณ ์ถ๋ ฅ
2. RAG Review
์๋ฆฌ : LLM์ ํ๊ณ๋ฅผ ๋ณด์ํ๊ณ ์, ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ค์ผ๋ก์จ ๋ณด๋ค ๊ทผ๊ฑฐ ์๋ ๋ต๋ณ๊ณผ ์ ํํ ๋ต๋ณ์ ํตํด LLM์ ํ๊ฐ ํ์์ ์ค์ด๊ณ ์ ํจ (+ํ ํฐ๊ธธ์ด ํ๊ณ)
[ DB ๊ตฌ์ถ vs ์ค์๊ฐ ๋ฐ์ ]
→ ์ฌ์ฉ ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ ๋ณด ์์ฝ or ์ฃผ์ ์ ๋ณด ์ถ์ถ or ์ผํ์ฑ Demo ์ ๊ณต ⇒ document + query
์๋น์ค ์ธก๋ฉด ⇒ DB ๊ตฌ์ถ
๋ ผ๋ฌธ(์ฐ๊ตฌ) : ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋๋, ์ฑ๋ฅ์ด ์ฌ๋์ด์! ์ ์ด์ ํ๋ ์ฐ๊ตฌ์ด๋ค๋ณด๋, ์คํํ document + ์ง๋ฌธ์ input์ผ๋ก ์คํ์ ํ๊ฒ ๋ ๊ฒ
์ ์ฉ(์๋น์ค) : ์๋น์ค ๋์ ์ ํ๋๋ฐ ์์ด์๋, DB๋ฅผ ๊ตฌ์ถํด์ RAG ๋ฐฉ๋ฒ๋ก ์ ์จ๋จน์ด๋ณด์! ๋ก ๋ณํ์ด ๋๊ธฐ ์์ํจ ⇒ ‘RAG๋ฅผ ํ์ฉํ~’
⇒ ๋ฐ๋ผ์, ์๋ฌธ์ ๊ธฐ์ค์ผ๋ก ๊ตฌํ์ ํ ์ฌ๋๋ค์ ๊ฒฝ์ฐ ์ ์์ ๊ฐ๋ ์, ๊ธฐ์ /์๋น์ค ์ธก์์๋ ํ์์ ๊ฐ๋ ์ ์ง๋๊ณ ์์์ ์ฐจ์ด๊ฐ ์กด์ฌํ ์ ๋ฐ์ ์์๋ค.
⇒ ์ฐ๊ตฌ ์ธก๋ฉด ↔ ์๋น์ค ์ธก๋ฉด
โป ๋ ผ๋ฌธ ์คํ ์์)
: (์ฌ๋ฌ ๋ฌธ์๋ค์ ํตํฉํ ๋ฌธ์๋ฅผ ๋ฒกํฐํ + ์ฌ์ฉ์ ์ง๋ฌธ) ~
- ์ํคํผ๋์(18๋ ๋๊น์ง์ ์ง๋์)๊ฐ ํ์ต๋ LLM์ ํ๊ตญ์ ๋น์จ์? ์ด๋ผ๋ ์ง๋ฌธ์ ํ์ ๊ฒฝ์ฐ, 34%
- ํ์ง๋ง ์๋ก์ด ์ ๋ณด(23๋ ๋๊น์ง์ ์ง๋์)๋ฅผ ์ถ๊ฐํ LLM์๊ฒ ์ง๋ฌธ์ ํ์ ๊ฒฝ์ฐ, ํ๊ตญ ์ง๋์์ ๋น์จ์ 56%
์ ๊ฐ์ด ๋ณด๋ค ๋ ์ต์ ํ ๋๊ณ , ์ ํํ ์ ๋ณด๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ์ฅ์ ์ ๋ณด์ฌ์ค
3. RAG ์งํ Process
1. ๋ฌธ์๋ฅผ ํ ์คํธ ์๋ฒ ๋ฉ์ผ๋ก ๋ณํํ์ฌ Vector DB์ ์ ์ฅํ๊ธฐ
- ๋ฌธ์๋ฅผ ์ฝ์ด์์(Load) ๋ถํ (Split)ํ๊ณ ํ์ฑ(Parsing-๊ตฌ๋ฌธ๋ถ์)ํ๊ธฐ
- Loadํ๊ธฐ
- PDF Loader
- Fitz
- ๋จ์ํ๊ฒ ๋ชจ๋ Text๋ฅผ ์ฝ์ด์ ํ๋์ ๋ฌธ์์ด์ ํฉ์น ๋ ์ ์ฉ
- ํ์ด์ง๋ฅผ ์ฝ๋ ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฅด๋ค
- ์ฌ์ฉ์๊ฐ ๋ฌธ์๋ฅผ ๋ฃ๊ณ ์ค์๊ฐ์ผ๋ก ์์ฝ๋ณธ์ ๋ฐ๊ณ ์ถ์ ๋ fitz๋ฅผ ์ฌ์ฉํ๋ค
- ํ์ด์ง ๋ฒํธ ์ ๊ณต(Meta Data) ↔ ํ์ด์ง ๋ฒํธ๋ฅผ ์ ์ธํ metadata๋ ์ง์ํ์ง ์๋๋ค
- import fitz
- PyPDFLoader
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ Loader
- ํ๊ธ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ ์ฐ์
- page ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํจ
- ex) 20 page PDF ํ์ผ ๋ก๋์ : 20๊ฐ์ ๋ฌธ์๋ก ๋ก๋
- metadata
- source : ํ์ผ๋ช
- page : ํ์ด์ง ๋ฒํธ
- from langchiain.document_loaders import PyPDFLoader
- UnstructuredPDFLoader
- ๊ฐ์ฅ ๋ง์ metadata ์ ๋ณด ์ ๊ณต
- ์๋๊ฐ ๋ค๋ฅธ Loader ๋๋น ๋๋ฆผ
- page ๋ฒํธ๋ง ํ์ํ๋ค๋ฉด ํด๋น ๋ชจ๋์ ๊ตณ์ด ์ฌ์ฉํ ํ์๋ ์์
- loader = UnstructuredPDFLoader('pdf์ ์ฅ๋งํฌ') docs = loader.load()
- PDFPlumber
- ํ๊ธ ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ฐ์, ๋ค์ํ meta data๋ฅผ ์ ๊ณตํจ
- ๋ค์ํ metadata ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์์
- ์ฝ๊ธฐ ์๋๊ฐ ๊ฐ์ฅ ๋๋ฆผ(UnstructuredPDFLoader ๋น์ท)
- from langchain_community.document_loader import PDFlumberLoader loader = PDFPlumberLoader('pdf์ ์ฅ๋งํฌ') docs = loader.load()
- Fitz
- PDF Loader
- Text Split
- CharacterTextSplitter - ๊ถ์ฅ x
- ๋ถํ ์ด ๊ฐ๋ฅํ ์ต์์ ๋จ์๋ก ๋ถํ ์๋(๊ณต๋ฐฑ์ด๋ ‘.’๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถํ )
- ๋ฌธ์ฅ์ด ์์ฑ๋์ง ๋ชปํ๊ณ ์งค๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ ์ ์์.. (๊ณต๋ฐฑ์ด๋ .์ ๊ธฐ์ค์ผ๋ก ๋ถํ ํ๊ธฐ ๋๋ฌธ์)
- ๋ถํ ์ด ๊ฐ๋ฅํ ์ต์์ ๋จ์๋ก ๋ถํ ์๋(๊ณต๋ฐฑ์ด๋ ‘.’๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ถํ )
- RecursiveCharacterTextSplitter - ์ถ์ฒ ๋ชจ๋
- ๋ฒ์ฉ์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ ๋ถํ ๋ฐฉ์
- ๋จ๋ฝ → ๋ฌธ์ฅ → ๋จ์ด ์์๋ก ๋ถํ ํ๋ ค๊ณ ์๋ (๋จ๋ฝ ์์ฒด๊ฐ ํฐ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ)
- TokenTextSplitter
- ํ๊ธ ์ฒ๋ฆฌ๊ฐ ๋ชจํธํจ
- HuggingFace
- ๋ค์ํ ํ ํฌ๋์ด์ ์ฌ์ฉ
- BPE
- Subword Tokenizer
- WordPiece
- SentencePiece
- spaCy
- Moses
- ๋ค์ํ ํ ํฌ๋์ด์ ์ฌ์ฉ
- SemanticChunker(experimental)
- ์๋ฏธ ์ ์ฌ์ฑ์ ๋ฐ๋ผ ๋ถํ
- OpenAIEmbedding ์ ์
- CharacterTextSplitter - ๊ถ์ฅ x
- Loadํ๊ธฐ
- Dense Vector ํํ์ Sentence Embedding ๋ณํํ๊ธฐ
- Document Embedding / Query Embedding → ๋์ผํ ์๋ฒ ๋ฉ ๋ชจ๋ธ(๋ฒ์ )์ ์ฌ์ฉํด์ผ ์ ์ฌ๋ ์ฐพ๋ ๋ถ๋ถ์์ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- OpenAIEmbedding(์ ๋ฃ) - CacheBackedEmbeddings(๊ฐ์ธ์ ์ฌ์ฉํ ๊ฒ)
- GPU๋ฅผ ์ธ ํ์๊ฐ ์์
- text-embedding-3-small
- text-embedding-3-large
- text-embedding-ada-002
- OpenSource(HuggingFace)
- BGE
- Mistral
- Open LLM Leaderboard - a Hugging Face Space by HuggingFaceH4
- ๋์ค์ Retrieval ๋จ๊ณ์์ ๋น ๋ฅด๊ฒ ๊ฒ์ํด์ ์ฌ์ฉํ ์ ์๋๋ก Indexingํ์ฌ Vector DB์ ์ ์ฅ(Store)ํ๊ธฐ
- FAISS
2. ์ ๋ ฅ ์์ (Input Reception)
3. ๋ฌธ์ ๊ฒ์ (Document Retrieval)
- ๊ฒ์ ์์คํ ํ์ฑํ (Retrieval System Activation): ์ฒซ ๋ฒ์งธ ์ฃผ์ ๋จ๊ณ๋ ๊ฒ์ ์์คํ ์ ํ์ฑํํ๋ ๊ฒ์ ๋๋ค. ์ด ์์คํ ์ ๋๊ท๋ชจ ๋ฌธ์ ์ฝํผ์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์ํคํผ๋์๋ ์ ๋ฌธํ๋ ๋ฐ์ดํฐ์ ๊ณผ ๊ฐ์)๋ฅผ ๊ฒ์ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- ์ฟผ๋ฆฌ ์ฒ๋ฆฌ (Retrieval System Activation): ์
๋ ฅ ์ฟผ๋ฆฌ๋ ๊ฒ์ ์์คํ
์ด ์ดํดํ ์ ์๋ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ํ์ฑํ๊ธฐ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค.
- ํ๋ก์ธ์ค๋ ์ ๋ ฅ ์ฟผ๋ฆฌ ๋๋ ํ๋กฌํํธ๋ฅผ ๋ฐ๋ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์ด ์ฟผ๋ฆฌ๊ฐ RAG ํ๋ก์ธ์ค๋ฅผ ํ์ฑํํฉ๋๋ค.
- ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ (Document Fetching): ๊ฒ์ ์์คํ
์ ์ฒ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝํผ์ค๋ฅผ ๊ฒ์ํ๊ณ ๊ด๋ จ ๋ฌธ์๋ ์ ๋ณด ์ค๋ํซ์ ๊ฒ์ํฉ๋๋ค.
- Multi-Query Retriever
- ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ ๋ฒกํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์์ ์ ์ฌํ Embedding๋ ๋ฌธ์๋ฅผ ์ฐพ์
- Query ๋ฌธ๊ตฌ๊ฐ ๋ฏธ๋ฌํ๊ฒ ๋ณ๊ฒฝ๋๊ฑฐ๋ Embedding์ด ๋ฐ์ดํฐ์ ์๋ฏธ๋ฅผ ์ ๋๋ก ํฌ์ฐฉํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ, ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์
- ๊ฒฐ๊ณผ : Page Rank ์๊ณ ๋ฆฌ์ฆ์ ์๋ ์๋ฆฌ๋? / Rank ์ฌ์ฉํ๋ ์ด์ ์ ํจ๊ณผ์ ๋ํด์ ์ค๋ช ํ๋ผ / Rank ๊ธฐ์ ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํด์ค๋ผ
- Ensemble Retriever(Spare + Dense)
- Semantic Search๊ฐ ์ ์ฌ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋ฌธ์์ ๊ฒ์์์๋ ์ ๋ฆฌํ์ง๋ง, ํน์ ํค์๋๊ฐ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ ๊ฒ์ ์ ์ ์ฌ ๋จ์ด๊ฐ ํฌํจ๋ ๋ฌธ์๊ฐ ๊ฒ์๋ ์ ์์
- ex) ๋นํ๋ฏผ A ์์์ ์ถ์ฒํด์ค → ๊ฒ์๊ฒฐ๊ณผ๋ก๋ ๋นํ๋ฏผ D, ๋นํ๋ฏผ C๊ฐ ๋์ฌ ์๋ ์๋ค๋ ๊ฒ.
- ⇒ ์๋ฏธ ๊ฒ์์ ํ๊ณ ์ถ์ ๋์๋ ์ผ๋ฐ์ ์ผ๋ก Dense Retriever(FAISSRetriever)์ ์ฌ์ฉ
- Semantic Search๊ฐ ์ ์ฌ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๋ฌธ์์ ๊ฒ์์์๋ ์ ๋ฆฌํ์ง๋ง, ํน์ ํค์๋๊ฐ ๋ฐ๋์ ํฌํจ๋์ด์ผ ํ๋ ๊ฒ์ ์ ์ ์ฌ ๋จ์ด๊ฐ ํฌํจ๋ ๋ฌธ์๊ฐ ๊ฒ์๋ ์ ์์
- Multi-Vector Retriever
- ์ฌ๋ฌ VectorStore์ Retriever๋ฅผ ์์๋ธ
- ContextualCompressor
- ๊ธด ๊ธธ์ด์ ๋ฌธ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์ถ
- LLMChainFilter
- ๋ฌธ์์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋ง
- Multi-Query Retriever
4. ์ ๋ณด ์ฆ๊ฐ (Information Augmentation)
- ๋งฅ๋ฝ ํตํฉ (Context Integration): ๊ฒ์๋ ๋ฌธ์๋ ์ ๋ ฅ ์ฟผ๋ฆฌ๋ฅผ ์ฆ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๋จ๊ณ๋ ์๋ ์ ๋ ฅ๊ณผ ๋ฌธ์์์ ์ถ์ถ๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ๊ฒฐํฉํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
- ์ฆ๊ฐ๋ ์ ๋ ฅ ํ์ฑ (Context Integration): ์ฆ๊ฐ๋ ์ ๋ ฅ์ด ํ์ฑ๋๋ฉฐ, ์ด์ ์๋ ์ฟผ๋ฆฌ์ ๊ฒ์๋ ๋ฌธ์์ ์ถ๊ฐ ๋งฅ๋ฝ์ ๋ชจ๋ ํฌํจํ๊ฒ ๋ฉ๋๋ค.
5. ์ธ์ด ๋ชจ๋ธ์ด ๋ต๋ณ ์์ฑ (Language Model Generation)
- ์ฆ๊ฐ๋ ์ ๋ ฅ ๊ณต๊ธ (Feeding Augmented Input): ์ด ์ฆ๊ฐ๋ ์ ๋ ฅ์ ์ผ๋ฐ์ ์ผ๋ก GPT๋ BART์ ๊ฐ์ ์ํ์ค-ํฌ-์ํ์ค ๋ชจ๋ธ์ธ ์ธ์ด ๋ชจ๋ธ์ ๊ณต๊ธ๋ฉ๋๋ค.
- ์๋ต ์์ฑ (Response Generation): ์ธ์ด ๋ชจ๋ธ์ ์ฆ๊ฐ๋ ์ ๋ ฅ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํฉ๋๋ค. ์ด ์๋ต์ ๋ชจ๋ธ์ ์ฌ์ ํ๋ จ๋ ์ง์๋ฟ๋ง ์๋๋ผ ๊ฒ์ ๋จ๊ณ์์ ๊ฐ์ ธ์จ ์ธ๋ถ ์ ๋ณด์ ์ํด ์ ๋ณด๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค.
6. ์ถ๋ ฅ ์์ฑ (Output Production)
- ์ ์ ๋ฐ ํ์ํ (Refinement and Formatting): ์์ฑ๋ ์๋ต์ ํ์์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ์ ์ ๋๊ฑฐ๋ ํ์ํ๋ ์ ์์ต๋๋ค.
- ์์ํ ์ ๋ฌ (Output Delivery): ์ต์ข ์๋ต์ RAG ํ๋ก์ธ์ค์ ์ถ๋ ฅ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์ด ์ถ๋ ฅ์ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ์ธ์ด ๋ชจ๋ธ์ ์ํด ์์ฑ๋ ์๋ต๋ณด๋ค ๋ ์ ๋ณด์ ๊ทผ๊ฑฐํ๊ณ ์ ํํ๋ฉฐ ๋งฅ๋ฝ์ ์ผ๋ก ๊ด๋ จ์ฑ์ด ๋์ต๋๋ค.
https://www.youtube.com/watch?v=KDM6UM-msZk
๊ฒ์ ์ฆ๊ฐ ์์ฑ(Retrieval-augmented generation, RAG) - Google Search
๐ ๊ฒ์ ์ฆ๊ฐ ์์ฑ(Retrieval-augmented generation, RAG): Google ๊ฒ์
www.google.com