RAG คืออะไร ใน Gen AI

RAG คืออะไร ใน Gen AI
By Leonardo.ai

ย่อจาก Retrieval Augmented Generation เป็นเทคนิคสำคัญใน Modern Generative AI มีองค์ประกอบหลัก 2 ส่วน:

  1. Retrieval System: ทำหน้าที่ค้นหาข้อมูลที่เกี่ยวข้องจากฐานความรู้
  2. Modern Generative AI: ใช้ข้อมูลที่ค้นคืนมาเพื่อสร้างผลลัพธ์

กระบวนการทำงานของ RAG มีดังนี้:

  1. เมื่อให้ Query หรือข้อความ ระบบจะค้นคืนเอกสารหรือข้อมูลที่เกี่ยวข้อง
  2. ข้อมูลที่ค้นคืนมานี้จะถูกส่งเป็นบริบท (Retrieved context) ให้กับ Generative AI
  3. Model จะใช้ทั้ง Query และ Retrieved context เพื่อสร้างคำตอบ

ข้อดีของ RAG:

  • เพิ่มความแม่นยำโดยอ้างอิงคำตอบจากข้อมูล External ที่เป็นปัจจุบัน
  • ช่วยให้ Model เข้าถึงฐานความรู้ที่กว้างกว่าข้อมูลที่ใช้ในการ Train
  • มีความโปร่งใส (Transparency) โดยสามารถอ้างอิงแหล่งที่มาของข้อมูลได้

RAG มีประโยชน์อย่างมากในการตอบคำถาม การสรุปเอกสาร และงานอื่นๆ ที่ต้องการความรู้ที่เป็นปัจจุบันหรือเฉพาะทาง

การทำงานของ RAG สามารถเปรียบเทียบได้กับวิธีที่มนุษย์ค้นคว้าข้อมูลก่อนตอบคำถาม: เราอาจค้นหาข้อมูลจากหนังสือหรืออินเทอร์เน็ต (ขั้นตอนการค้นคืน) แล้วใช้ข้อมูลนั้นร่วมกับความรู้ที่มีอยู่เพื่อสร้างคำตอบ (ขั้นตอนการสร้าง)

RAG ช่วยแก้ปัญหาสำคัญของโมเดลภาษาขนาดใหญ่ (LLMs) ที่มักจะ "จินตนาการ" หรือให้ข้อมูลที่ไม่ถูกต้องเมื่อต้องตอบคำถามเกี่ยวกับข้อมูลที่เป็นปัจจุบันหรือเฉพาะทาง โดย RAG ช่วยให้โมเดลสามารถอ้างอิงข้อมูลที่เป็นปัจจุบันและถูกต้องมากขึ้น

มีรายละเอียดเพิ่มเติม ดังนี้

  1. Retrieval Component:
    • มักอ้างถึง Dense vector ของเอกสารและคำถาม (Documents & queries)
    • ใช้ Similarity search algorithms เช่น cosine similarity หรือ nearest neighbors
    • อาจใช้เทคนิคเช่น TF-IDF, BM25 หรือ Transformer-based embeddings
  2. Generation Component:
    • โดยทั่วไปเป็น LLMs เช่น GPT, T5 หรือ BART
    • รับทั้ง Query และ Retrieved context เป็น Input
    • สร้าง Response โดยรวบรวมข้อมูลที่ Retrieved มา
  3. Training:
    • สำหรับ Retrieval และ Generation components สามารถ Train แยกกันหรือร่วมกันได้
    • การทำ Fine-tuning กับข้อมูลเฉพาะ Domain สามารถเพิ่มประสิทธิภาพได้
  4. ข้อดี:
    • ลดการสร้างข้อมูลที่ไม่มีอยู่จริง (Hallucination) โดยยึดการตอบสนองจากข้อเท็จจริงที่ค้นคืนมา
    • สามารถ Updates ฐานความรู้ได้โดยไม่ต้องฝึกโมเดลทั้งหมดใหม่
    • สามารถจัดการคำถามเกี่ยวกับเหตุการณ์ล่าสุดหรือหัวข้อเฉพาะทางได้

ตัวอย่าง Python script ที่แสดงการใช้งาน RAG แบบพื้นฐานโดยใช้ Sentence Transformers library สำหรับการค้นคืนและ Hugging Face Transformers library สำหรับการสร้าง:

import torch
from sentence_transformers import SentenceTransformer, util
from transformers import T5Tokenizer, T5ForConditionalGeneration

# Sample knowledge base
documents = [
    "The capital of France is Paris.",
    "The Eiffel Tower is located in Paris.",
    "Paris is known as the City of Light.",
    "The Louvre Museum is in Paris and houses the Mona Lisa."
]

# Initialize retriever model
retriever = SentenceTransformer('all-MiniLM-L6-v2')

# Encode documents
doc_embeddings = retriever.encode(documents, convert_to_tensor=True)

# Initialize generator model
tokenizer = T5Tokenizer.from_pretrained("t5-small")
generator = T5ForConditionalGeneration.from_pretrained("t5-small")

def rag_response(query, top_k=2):
    # Retrieve relevant documents
    query_embedding = retriever.encode(query, convert_to_tensor=True)
    cos_scores = util.cos_sim(query_embedding, doc_embeddings)[0]
    top_results = torch.topk(cos_scores, k=top_k)
    
    # Construct context from retrieved documents
    context = " ".join([documents[i] for i in top_results.indices])
    
    # Generate response
    input_text = f"question: {query} context: {context}"
    input_ids = tokenizer(input_text, return_tensors="pt").input_ids
    
    outputs = generator.generate(input_ids, max_length=100)
    response = tokenizer.decode(outputs[0], skip_special_tokens=True)
    
    return response

# Example usage
query = "What is the capital of France?"
response = rag_response(query)
print(f"Query: {query}")
print(f"Response: {response}")

การทำงานของ Script ดังนี้:

  1. ตั้งค่าฐานความรู้อย่างง่าย (โดยปกติจะใช้ชุดข้อมูลที่ใหญ่กว่านี้)
  2. ใช้ Sentence Transformers สำหรับ Document และ Query encoding
  3. ใช้ Cosine similarity สำหรับการค้นคืน
  4. ใช้ T5 เป็น Generator Model
  5. รวม Query และ Retrieval context มาเป็น Input ให้กับ Generator
  6. สร้าง Response จาก Query และ Context ที่ได้

ด้านบนเป็นการใช้งานพื้นฐาน แต่ RAG system ในโลกแห่งความเป็นจริง มักจะมีส่วนประกอบที่ซับซ้อนกว่านี้ และมีการ Optimization ที่มากกว่านี้


Blog นี้ เขียนร่วมกับ Claude.ai โดยใช้ Prompt

1) Please explain about RAG applying in Gen AI.
2) Please provide more details and sample Python script.