AI
RAG หรือ Retrieval Augmented Generation คือเทคนิคที่ช่วยให้ Large Language Models (LLMs) อย่าง ChatGPT หรือ Bard สามารถดึงข้อมูลจากแหล่งภายนอก (External Knowledge Source) มาประกอบการสร้างคำตอบได้ ทำให้คำตอบมีความถูกต้อง แม่นยำ และเป็นปัจจุบันมากขึ้น สมัยผมทำร้านเน็ตเคยเจอเด็กมาถามหาข้อมูลเกมส์ที่เพิ่งออกใหม่ๆ ซึ่งข้อมูลใน LLM อาจจะยังไม่อัปเดต RAG นี่แหละที่จะช่วยแก้ปัญหาได้
ลองนึกภาพว่าคุณถาม ChatGPT ว่า "ราคาทองคำวันนี้เท่าไหร่?" ถ้า ChatGPT ไม่มี RAG มันก็อาจจะตอบข้อมูลเก่า หรือไม่ก็ตอบแบบกำกวม แต่ถ้ามี RAG มันจะไปดึงข้อมูลราคาทองคำจากแหล่งข้อมูลที่น่าเชื่อถือมาให้คุณได้เลย นี่คือเหตุผลว่าทำไม RAG ถึงสำคัญ:
สมัยก่อนตอนทำร้านเน็ต ผมเคยเจอเคสลูกค้าถามหาข้อมูลเฉพาะทางมากๆ ซึ่ง Google ก็ยังหาให้ไม่ได้ RAG นี่แหละที่จะเป็นตัวช่วยสำคัญในการตอบคำถามเหล่านั้น
การทำ RAG อาจจะดูซับซ้อน แต่จริงๆ แล้วมีขั้นตอนหลักๆ ไม่กี่อย่าง ลองมาดูกัน:
ขั้นตอนนี้คือการเตรียมข้อมูลที่เราต้องการให้ LLM ใช้ในการตอบคำถาม อาจจะเป็นเอกสาร Text, PDF, CSV หรืออะไรก็ได้ สิ่งสำคัญคือต้องแปลงข้อมูลให้อยู่ในรูปแบบที่ LLM เข้าใจได้ และสร้าง Index เพื่อให้ค้นหาได้รวดเร็ว
สมมติว่าเรามีเอกสาร Text เกี่ยวกับประวัติบริษัท:
บริษัท SiamCafe.net ก่อตั้งขึ้นในปี 1997 โดยคุณกิตติทัศน์ เจริญพนาสิทธิ์...
เราอาจจะแบ่งเอกสารนี้เป็น chunk เล็กๆ และสร้าง Index โดยใช้เทคนิค Vector Embeddings เพื่อให้ LLM สามารถค้นหา chunk ที่เกี่ยวข้องกับคำถามได้
เมื่อมีคำถามเข้ามา เราต้องค้นหาข้อมูลที่เกี่ยวข้องจาก Index ที่เราสร้างไว้ เช่น ถ้ามีคนถามว่า "SiamCafe.net ก่อตั้งเมื่อไหร่?" เราก็จะค้นหา chunk ที่มีข้อมูลเกี่ยวกับการก่อตั้งบริษัท
การค้นหาข้อมูลสามารถทำได้หลายวิธี เช่น Semantic Search ซึ่งเป็นการค้นหาโดยพิจารณาความหมายของคำ แทนที่จะดูแค่คำที่เหมือนกัน
เมื่อได้ข้อมูลที่เกี่ยวข้องแล้ว เราจะนำข้อมูลนั้นมาประกอบการสร้างคำตอบ โดยใส่เข้าไปใน Prompt ของ LLM
ตัวอย่าง Prompt:
Context: บริษัท SiamCafe.net ก่อตั้งขึ้นในปี 1997 โดยคุณกิตติทัศน์ เจริญพนาสิทธิ์...
Question: SiamCafe.net ก่อตั้งเมื่อไหร่?
Answer:
LLM ก็จะตอบคำถามโดยอ้างอิงข้อมูลจาก Context ที่เราให้ไป
หลายคนอาจจะสงสัยว่า RAG กับ Fine-tuning ต่างกันยังไง และควรเลือกใช้อะไรดี ลองมาดูตารางเปรียบเทียบกัน:
| คุณสมบัติ | RAG (Retrieval Augmented Generation) | Fine-tuning |
|---|---|---|
| การอัปเดตข้อมูล | ง่ายและรวดเร็ว สามารถอัปเดต Index ได้ตลอดเวลา | ซับซ้อนและใช้เวลานาน ต้องเทรนโมเดลใหม่ |
| ความสามารถในการปรับตัว | ปรับตัวได้ดีกับข้อมูลใหม่ๆ | ปรับตัวได้ดีกับรูปแบบข้อมูลที่เฉพาะเจาะจง |
| ทรัพยากรที่ใช้ | ใช้ทรัพยากรน้อยกว่า | ใช้ทรัพยากรมากกว่า (GPU, เวลา) |
| ความซับซ้อน | ซับซ้อนน้อยกว่า | ซับซ้อนมากกว่า |
| เหมาะสมกับ | ข้อมูลมีการเปลี่ยนแปลงบ่อย, ต้องการความถูกต้องแม่นยำสูง, ข้อมูลเฉพาะทาง | ต้องการปรับแต่งพฤติกรรมของโมเดล, ต้องการให้โมเดลเข้าใจรูปแบบข้อมูลที่ซับซ้อน |
สรุปง่ายๆ คือ ถ้าข้อมูลมีการเปลี่ยนแปลงบ่อย หรือต้องการความถูกต้องแม่นยำสูง RAG จะเป็นตัวเลือกที่ดีกว่า แต่ถ้าต้องการปรับแต่งพฤติกรรมของโมเดล หรือต้องการให้โมเดลเข้าใจรูปแบบข้อมูลที่ซับซ้อน Fine-tuning อาจจะเหมาะสมกว่า
สนใจเรื่อง AI และเทคโนโลยีเพิ่มเติม? เข้าไปอ่านบทความอื่นๆ ได้ที่ SiamCafe Blog
ดูวิดีโอเพิ่มเติมเกี่ยวกับRAG คืออะไร Retrieval Augmente:
มีคำถามอะไรเกี่ยวกับ RAG อีกบ้าง? ลองดูคำถามที่พบบ่อยเหล่านี้:
RAG เหมาะกับ Use Case ที่ต้องการความถูกต้องแม่นยำของข้อมูลสูง และข้อมูลมีการเปลี่ยนแปลงบ่อย เช่น:
ถึงแม้ว่า RAG จะมีข้อดีหลายอย่าง แต่ก็มีข้อเสียอยู่บ้าง เช่น:
RAG สามารถใช้ได้กับ LLM หลายตัว เช่น:
เทคโนโลยี AI พัฒนาไปเร็วมาก ตามข่าวสารวงการไอทีได้ที่ SiamCafe Blog
สมัยผมทำร้านเน็ตฯ ก็เหมือนกัน เลือก OS, เลือกเกม, เลือกโปรแกรมคิดเงิน ต้องดูให้ดีว่ามันเข้ากับร้านเราไหม RAG ก็เหมือนกัน เลือก Vector DB ต้องดู data size, query speed, cost และ feature ที่ support ด้วยนะ
บางทีใช้ Pinecone ก็ดี แต่ถ้า data ไม่ใหญ่ Faiss ก็เหลือๆ แล้ว ประหยัดเงินไปได้เยอะเลย
Text ที่เอามายัดใส่ Vector DB สำคัญมาก ต้อง clean & transform ให้ดีก่อน ไม่งั้น query ออกมาก็เละเทะ เคยเจอไหม database ขยะ เข้าไปก็เจอแต่ขยะออกมา นั่นแหละ preprocessing ไม่ดี
ลองใช้พวก NLTK หรือ spaCy ช่วยดูนะ แต่สุดท้ายต้องดู data เราเองด้วยว่าต้องการอะไร
Model ที่ OpenAI ให้มาก็ดีระดับนึง แต่ถ้าอยากได้ performance สุดๆ ต้อง fine-tune กับ data ของเราเอง สมัยผม mod เกม counter strike ก็ต้องปรับ config ให้เข้ากับสเปคเครื่องลูกค้าแต่ละคน RAG ก็เหมือนกัน
ลองใช้ library พวก Sentence Transformers ดูครับ
ทำ RAG เสร็จแล้ว อย่าลืมวัดผลด้วยนะครับ วัดว่ามันตอบคำถามได้ถูกต้องไหม เร็วแค่ไหน กิน resource เยอะไหม ถ้าไม่วัดก็เหมือนซื้อเครื่องคิดเงินมาราคาแพง แต่คิดเงินผิดๆ ถูกๆ
มี metric หลายตัวให้วัดนะ Recall, Precision, F1-score ลองศึกษาดู
RAG เหมาะกับงานที่ต้องการความรู้เฉพาะทาง หรือข้อมูลที่มีการเปลี่ยนแปลงบ่อยๆ เช่น Chatbot ตอบคำถามเกี่ยวกับ product catalog, Search engine หาข้อมูลในเอกสารภายในองค์กร
ถ้าเป็นความรู้ทั่วไป LLM เพียวๆ ก็อาจจะพอ
Fine-tuning คือการ train model ใหม่ทั้งหมด เหมาะกับกรณีที่ต้องการเปลี่ยน behavior ของ model ไปเลย แต่ RAG คือการเอาข้อมูลภายนอกมาเสริม เหมาะกับกรณีที่ต้องการให้ model รู้ข้อมูลใหม่ๆ โดยไม่ต้อง train ใหม่
RAG เหมือนการเอาโพยเข้าห้องสอบ Fine-tuning เหมือนเรียนใหม่ทั้งเทอม
RAG ช่วยลด Hallucination ได้ในระดับหนึ่ง เพราะมันดึงข้อมูลจากแหล่งที่เชื่อถือได้มาให้ LLM ใช้ แต่ก็ไม่ได้แก้ได้ 100% LLM ก็ยังมีโอกาส "มั่ว" ได้อยู่ดี
เหมือนเด็กนักเรียนที่อ่านหนังสือมาแล้วก็ยังตอบผิดได้แหละครับ
ขึ้นอยู่กับ requirement ของแต่ละงานครับ Pinecone, Weaviate, Milvus, Faiss มีข้อดีข้อเสียต่างกันไป ลองศึกษาดูว่าอันไหนเหมาะกับ data size, query speed, cost และ feature ที่ต้องการ
สมัยผมเลือก server ร้านเน็ตฯ ก็ปวดหัวแบบนี้แหละ
ถ้าใช้ library สำเร็จรูปก็ไม่ยากมากครับ แต่ถ้าอยากได้ performance สุดๆ ต้องลงลึกไปถึง algorithm ข้างใน ต้องมีความรู้เรื่อง Machine Learning, Vector Database พอสมควร
เหมือนทำเว็บสมัยก่อน ถ้าใช้ Dreamweaver ก็ง่าย แต่ถ้าอยากเทพต้องเขียน HTML เองเป็น
อย่าลืมแวะไปอ่านบทความอื่นๆ ที่ SiamCafe Blog นะ
RAG เป็นเทคนิคที่น่าสนใจในการเพิ่มความสามารถของ LLM ให้ตอบคำถามได้ฉลาดขึ้น โดยการดึงข้อมูลจากภายนอกมาเสริม แต่ก็ต้องเข้าใจข้อจำกัดของมันด้วย และต้องเลือกเครื่องมือให้เหมาะสมกับงาน
เหมือนทำร้านเน็ตฯ สมัยก่อน ต้องเลือกสเปคเครื่องให้เข้ากับเกมที่ลูกค้าเล่น ต้อง balance ระหว่าง performance กับ cost
ถ้าสนใจเรื่องลงทุน forex ลองดู iCafeForex นะครับ