Skip to main content

RAG:检索增强生成

RAG

RAG: Retrival Augmented Generation

คุณกําลังพยายามไขคดีที่ซับซ้อน

  • บทบาทของนักสืบคือการรวบรวมเงื่อนงํา หลักฐาน และประวัติบางอย่างที่เกี่ยวข้องกับคดี "หลังจากนักสืบรวบรวมข้อมูลเสร็จ ผู้สื่อข่าวจึงสรุปข้อเท็จจริงเหล่านี้เป็นเรื่องราวที่น่าสนใจและนําเสนอเรื่องราวที่มีความต่อเนื่องกัน

ปัญหาของแอลเอ็ม

  1. ภาพหลอน : ให้ข้อมูลเท็จโดยไม่มีคําตอบ
  2. LLM ใช้เป็นข้อมูลล้าสมัย ซึ่งไม่สามารถเข้าถึงข้อมูลล่าสุดและเชื่อถือได้หลังจากวันกําหนดเส้นตายความรู้ของตน
  3. นอกจากนี้ คําตอบจาก LLM ไม่ได้อ้างอิงถึงแหล่งที่มา ซึ่งหมายความว่า คําสอนนั้นไม่สามารถตรวจสอบความถูกต้องโดยผู้ใช้ได้ และไม่สามารถวางใจได้เต็มที่ ซึ่งเน้นให้เห็นถึงความสําคัญของการตรวจสอบและประเมินด้วยตนเองเมื่อใช้ข้อมูลที่สร้างโดยปัญญาประดิษฐ์ (AI)

您可以将大型语言模型看作是一个过于热情的新员工,他拒绝随时了解时事,但总是会绝对自信地回答每一个问题。

RAG คือวิธีแก้ปัญหาท้าทายบางอย่าง มันจะกําหนดกลับให้ LLM นําข้อมูลที่เกี่ยวข้องจากผู้มีอํานาจและแหล่งความรู้ที่ได้กําหนดไว้ล่วงหน้า องค์กรสามารถควบคุมการแสดงผลข้อความที่สร้างได้ดีขึ้น และผู้ใช้สามารถเรียนรู้เชิงลึกว่า LLM สร้างการตอบสนองอย่างไร

กระบวนการของแอลเอ็ม

image-20240125161258862

(ไม่เข้าใจ) การดึงข้อมูลการสร้างเสริมและการค้นหาความหมายต่างกันอย่างไร?

การค้นหาความหมาย จะช่วยเพิ่มผล RAG สําหรับองค์กรที่ต้องการเพิ่มแหล่งความรู้ภายนอกจํานวนมากในแอพฯ LLM ของตน ธุรกิจสมัยใหม่เก็บข้อมูลมากมายในระบบต่างๆ เช่น คู่มือ ปัญหาทั่วไป รายงานการวิจัย คู่มือการให้บริการลูกค้า และคลังเอกสารด้านทรัพยากรบุคคล เป็นต้น การดึงคอนเทนต์มาใช้งานในระดับที่ท้าทาย จึงจะลดคุณภาพการสร้างเอาท์พุทลง

เทคโนโลยีการค้นหาภาษา : สามารถสแกนฐานข้อมูลขนาดใหญ่ที่มีข้อมูลต่าง ๆ และรับข้อมูลได้อย่างแม่นยํายิ่งขึ้น ยกตัวอย่างเช่น พวกเขาสามารถตอบได้เช่น* "ปีที่แล้วใช้เงินไปเท่าไหร่ในการซ่อมบํารุงเครื่องจักร" * คําถามอื่นๆ เช่น การจับคู่ปัญหากับเอกสารที่เกี่ยวข้องและกลับไปใช้ข้อความเฉพาะแทนผลการค้นหา จากนั้นนักพัฒนาสามารถใช้คําตอบนี้เพื่อนําเสนอคอนเทนท์เพิ่มเติมให้กับ LLM ได้

โซลูชั่นค้นหาคําค้นแบบเก่าหรือคีย์เวิร์ดใน RAG มีผลลัพธ์ที่จํากัดต่องานที่ต้องใช้ความรู้มาก นักพัฒนายังต้องจัดการกับการฝังคํา บล็อกเอกสาร และปัญหาที่ซับซ้อนอื่นๆ ในการเตรียมข้อมูลด้วยตนเอง เทียบกับเทคโนโลยีการค้นหาภาษาที่สามารถทํางานทุกอย่างที่ฐานความรู้เตรียมไว้ได้ ดังนั้นนักพัฒนาจึงไม่จําเป็นต้องทํา พวกเขายังสร้างย่อหน้าและคําเครื่องหมายที่เรียงลําดับตามความเกี่ยวข้อง เพื่อเพิ่มคุณภาพของประจุที่มีประสิทธิภาพสูงสุดของ RAG

ส่วนประกอบหลักสามประการของ RAG

การรับโมเดลการสร้างเสริมนั้นประกอบด้วยองค์ประกอบหลัก 3 ประการ คือ

  1. เครื่องตรวจ (Retriever) : ทําหน้าที่รับข้อมูลที่เกี่ยวข้องจากแหล่งความรู้ภายนอก
  2. ลําดับ (Ranker) : ประเมินผลการรับข้อมูล และจัดลําดับความสําคัญ
  3. ตัวสร้าง (Generator): ใช้การรับข้อมูลและเรียงลําดับผลลัพธ์ รวมกับการป้อนข้อมูลของผู้ใช้ สร้างคําตอบหรือเนื้อหาสุดท้าย

แผนที่สมอง RAG

原文

ภาพนี้ ละเอียดมาก!

image-20240125161624484

ดัชนีข้อมูล

"การสกัดข้อมูล"

  • การล้างข้อมูล : ได้แก่ ข้อมูล Loader, สกัด PDF, word, markdown และฐานข้อมูล และ API เป็นต้น
  • การประมวลผลข้อมูล: รวมถึงการประมวลผลในรูปแบบข้อมูล, ไม่สามารถระบุข้อมูลได้, การบีบอัดและฟอร์แมต เป็นต้น
  • การดึงข้อมูลกํากับ: การดึงข้อมูลชื่อ, เวลา, บทเฉพาะกาล, title, รูปภาพ alt เป็นต้น ที่สําคัญมาก

เครื่องมือในการดึงข้อมูล

  • UnstructuredIO (ใช้แล้ว)
  • Llama Parse (ใช้แล้ว)
  • Google Document AI
  • AWS Textract
  • Sticker f2image + pytesseract

รับข้อมูล

การปรับแต่งทั่วไปสําหรับการรับข้อมูลแบ่งออกเป็น 5 ส่วนต่อไปนี้:

· * การกรองข้อมูลกํากับภาพ*: เมื่อเราแยกดัชนีออกเป็น chunks มากมาย ประสิทธิภาพในการรับข้อมูลจะกลายเป็นปัญหา ณ เวลานั้น หากสามารถกรองผ่านข้อมูลกํากับได้ก่อน ก็จะช่วยเพิ่มประสิทธิภาพและความเกี่ยวข้องได้มากทีเดียว เช่น เราถามว่า "ช่วยจัดระเบียบให้หน่อยว่า สัญญาทั้งหมดของแผนก XX ในเดือนพ.ค.นี้ มีสัญญาในการจัดซื้ออุปกรณ์ XX มีอะไรบ้าง ณ เวลานั้น หากมีข้อมูลกํากับ เราก็สามารถเข้าไปค้นหาข้อมูลที่เกี่ยวข้องของ "กระทรวง" ได้ "พฤษภาทมิฬ 2023" การตรวจนับนับครั้งไม่ถ้วนอาจกลายเป็น 1 ในหมื่นประการของส่วนรวมได้ ; .

การดึงความสัมพันธ์แบบกราฟ: ถ้าสามารถเปลี่ยนหลายร่างเป็น node และเปลี่ยนความสัมพันธ์ระหว่างมันให้เป็น relation สามารถใช้ความสัมพันธ์ระหว่างความรู้ในการตอบได้อย่างแม่นยํามากขึ้น โดยเฉพาะกับประเด็นการกระโดดเยอะๆ การใช้ดัชนีข้อมูลกราฟจะทําให้ความเกี่ยวข้องในการรับข้อมูลสูงขึ้น

· * เทคนิคในการรับข้อมูล*: ที่กล่าวมาก่อนหน้านี้คือวิธีการจัดการล่วงหน้าซึ่งวิธีการรับข้อมูลหลักหรือวิธีเหล่านี้:

  • การรับคําสําคัญ**: นี่เป็นวิธีการรับข้อมูลแบบดั้งเดิม แต่บางครั้งก็สําคัญเช่นกัน การกรองข้อมูลหลักที่เรากําลังพูดถึงนั้น เป็นอีกวิธีหนึ่งคือ การสรุป chunk ให้สรุปก่อน และค้นหา chunk ที่อาจเกี่ยวข้องด้วยคําสําคัญ เพื่อเพิ่มประสิทธิภาพในการรับข้อมูล ว่ากันว่า ... ... .
  • การรับข้อมูลแบบ SQL*: วิธีนี้ยิ่งเป็นประเพณีมากขึ้น แต่สําหรับแอพพลิเคชั่นสําหรับธุรกิจที่เป็นแบบท้องถิ่น การสืบค้นแบบ SQL เป็นสิ่งจําเป็น เช่น ข้อมูลการขายที่ผมกล่าวถึงก่อนหน้านี้ ต้องทํา SQL ในการรับข้อมูลก่อน
  • อื่นๆ : เทคนิคการรับข้อมูลยังมีอีกเยอะ ด้านหลังใช้จนค่อย ๆ พูดไป

· * การเรียงลําดับหนัก (Rerank)*: หลายครั้งที่ผลการรับข้อมูลของเราไม่สู้ดีนัก เพราะ chunks มีจํานวนมากในระบบ และมิติที่เรารับมานั้นไม่จําเป็นต้องดีที่สุดเสมอไป และผลลัพธ์ในการรับข้อมูลครั้งเดียวอาจไม่ได้ดีเท่าบนค่าความเกี่ยวข้อง ช่วงเวลานี้เราจําเป็นต้องมีกลยุทธ์ในการเรียงลําดับผลลัพธ์ในการรับข้อมูล เช่น การใช้ plan B เรียงลําดับหนัก หรือปรับองค์ประกอบต่างๆ ที่เกี่ยวข้อง ให้ลงตัว และได้รับการเรียงลําดับที่สอดคล้องกับฉากธุรกิจของเรามากขึ้น เพราะหลังจากขั้นตอนนี้ไปแล้วเราก็จะส่งผลลัพธ์ให้ LLLM ดําเนินการในที่สุด ดังนั้นผลลัพธ์ในส่วนนี้จึงมีความสําคัญมาก ข้างในจะมีตัวตัดสินภายใน เพื่อตัดสินความเกี่ยวข้อง กระตุ้นการเรียงลําดับซ้ํา

-***: เป็นวิธีหนึ่งในการสืบค้นการรับข้อมูล ซึ่งโดยทั่วไปจะมีหลายวิธี:

· *การสืบค้นย่อย: *สามารถใช้กลยุทธ์การสืบค้นต่างๆ ในฉากต่าง ๆ เช่น สามารถใช้การสืบค้นจากกรอบของ Lllama Index ได้ โดยใช้การสืบค้นต้นไม้ (จากจุดสิ้นสุดของใบ การสืบค้นทีละขั้น การควบรวม) การสืบค้นแบบวัดปริมาณ หรือลําดับเดิมสุดของ chunks เป็นต้น ****

"HyDE: " เป็นวิธีการลอกงาน สร้างต้นแบบ prompt ที่คล้ายคลึงกันหรือมาตรฐานกว่า" *

参考1

Re-Rank

ฐานข้อมูลวัดค่าส่วนใหญ่จะเสียสละความถูกต้องในระดับหนึ่ง เพื่อประสิทธิภาพในการคํานวณ ซึ่งทําให้การดึงผลลัพธ์ออกมามีความสุ่มเสี่ยง และ Top K ที่กลับมาเดิมอาจไม่ได้เกี่ยวข้องกันมากที่สุด

使用BAAI/bge-reranker-baseBAAI/bge-reranker-large等开源模型来完成Re-Rank操作。

ยังมี bce-reranker-base ที่ใช้งานง่ายในเน็ต และสนับสนุน นัมยอง ฮัง

เรียกใช้/ ผสมการเรียกข้อมูล

สอบถามทางคู่ :

· การรับข้อมูลทางภาษา (Vector Search)/** การเรียกคืนข้อมูลไปยังฐานข้อมูลวัด*

  • การเรียกใช้คีย์เวิร์ด (Keyword Search) / การเรียกกลับคําสําคัญ

image-20240204140848656

Youtube教程

关键词&语义的混合检索实现

การเรียกคืนฐานข้อมูลปริมาณและการรับคําสําคัญต่าง ๆ มีข้อได้เปรียบและข้อด้อยของแต่ละคน ดังนั้นผลลัพธ์การเรียกคืนทั้ง 2 แบบจึงจะช่วยเพิ่มความถูกต้องและประสิทธิภาพในการรับข้อมูลโดยรวม นับถอยหลังการเรียงลําดับการรวมตัว (Reciprocal Rank Fusion, RRF)อัลกอริทึมของอัลกอริทึม ผ่านการร้องขอสิทธิในการจัดอันดับของเอกสารแต่ละฉบับในวิธีการเรียกคืนที่แตกต่างกัน โดยคํานวณคะแนนรวมหลังจากหลอมรวมเข้าด้วยกัน

เมื่อคุณเลือกที่จะรับการเรียกกลับโดยใช้คําสําคัญ คือ * Keyword Retrival* เลือก * Keyword Ensembled** * PAI จะใช้อัลกอริธึม RRF ผสมผสานกับการเรียกกลับหลายเส้นทางโดยปริยายกับผลการเรียกกลับฐานข้อมูลวัดค่าและผลการเรียกกลับคําสําคัญ (Keyword Retrival*) ของ Keyword Ensembled*

สร้าง

กรอบมี Langlia และ Llama Index

รูปแบบของเทคโนโลยีการนับเลข

กรอบ

สิ่งที่ยากคือ: text-to-sql คืออะไร?

图片

แยกข้อความ:

การแยกข้อความ: แบ่งเอกสารออกเป็นชิ้นเล็กกว่าเพื่อความสะดวกในการทํา Embedding ของข้อความต่อไป เพื่อความสะดวกในการรับเอกสารต่อไป

สถานการณ์ในอุดมคติ : นําคลิปข้อความที่เกี่ยวข้องในความหมายมาประกอบกันตามลําดับ

"วิธีการแยกชิ้นส่วน"

  • ตามกฎ : (วิธีที่ง่ายที่สุด) แยกเอกสารตามประโยค มีการแบ่งส่วนกับเอกสารตามสัญลักษณ์ที่พบเห็นได้ทั่วไปทั้งภาษาจีนและภาษาอังกฤษ เช่น อักษรเดี่ยว อักษรย่อ อักษร อักษรกลาง อักษรคู่ เป็นต้น
  • ตามความหมาย:
  1. เริ่มจากการแยกชิ้นส่วนเอกสารเป็นระดับประโยค โดยใช้กฎในการแยกเอกสาร
  2. จากนั้นใช้แบบจําลองเพื่อผนวกรวมบล็อกเอกสารตามความหมาย และในที่สุดก็ได้บล็อกเอกสารที่ใช้ภาษา

"จําลองการแยกข้อความตามความหมาย"

เปิดตัว "SEQ_MODEL" ที่ อ.อาลีดาโม โมเดลนี้อาศัยหน้าต่างเลื่อนแบบ BERT+ โดยทํานายว่าประโยคหลังการแยกชิ้นส่วนเป็นกรอบของย่อหน้าหรือไม่

ข้อความไปยังเชิงปริมาณ: เลือกแบบจําลอง Embedding

โมเดล BBA ของหัวเว่ย (Bedge-base-zh) หรือเลือกจากแบบอย่าง MTEB

จัดเก็บค่าปริมาณ

  • Fais: การใช้งานส่วนตัว

  • Milvus: ระดับการผลิต

หาจุดความรู้ที่ตรงกันตามการใช้คําถาม

Top_k

Fiss: ค้นหาส่วนขยายใกล้ผลการค้นหาเพื่อให้ได้เอกสารที่ใกล้เคียงกันน้อยกว่า chunk_ size (ทั่วไปคือ 500 คํา)

Milvus: topk รับข้อมูล "bge-base-zh" ย่อหน้าคล้ายกัน แบบจําลองการรวมตัว

ความคิด : วิเคราะห์ความคิดการรับส่วนขยายจาก topk การรับข้อมูล เราพบว่าส่วนใหญ่แล้ว ส่วนใหญ่จะเพิ่มลูกเล่นในการตอบด้วยการขยายขอบเขตของภาษา เพื่อให้โมเดลขนาดใหญ่ได้ข้อมูลที่เป็นประโยชน์มากที่สุดในการตอบ

แนวคิด:

  1. เริ่มจากการแยกชิ้นส่วนเอกสารเป็นระดับประโยค โดยใช้กฎในการแยกเอกสาร
  2. จากนั้นใช้แบบจําลองเพื่อผนวกรวมบล็อกเอกสารตามความหมาย และในที่สุดก็ได้บล็อกเอกสารที่ใช้ภาษา
  3. การรวมรุ่นการใช้ข้อความ embedding ของเอกสารตามลําดับอีกครั้งตามความเหมือนของภาษา เทียบเท่ากับการรวมเอกสารในระดับประโยคเดิม 2 ครั้ง ด้วยวิธีการที่แตกต่างกัน

สร้าง Prompt

你现在是一个智能助手了,现在需要你根据已知内容回答问题

已知内容如下:

"{context}"



通过对已知内容进行总结并且列举的方式来回答问题:"{question}",在答案中不能出现问题内容,并且不允许编造内容,并且使用简体中文回答。

如果该问题和已知内容不相关,请回答 "根据已知信息无法回答该问题" 或 "没有提供足够的相关信息"。

สร้างคําตอบ: เลือก LLM

ชุดทดสอบ

image-20240125144002221

参考

จุดเจ็บและทางออกของ RAG

链接

ตัวอย่าง

LamaIndex官方提供了一个范例(SEC Insights),用来展示高级查询技术

บริการ RAG ใน AWS

Amazon Bedrock

Amazon Kendra

参考

阿里云大模型RAG对话系统最佳实践