สร้างข้อมูลสังเคราะห์สำหรับงานวิจัย AI ด้านการเงิน ด้วย NVIDIA NeMo
การปรับแต่งโมเดลภาษาขนาดใหญ่ (LLMs) สำหรับงานประมวลผลภาษาธรรมชาติ (NLP) ด้านการเงินมักประสบปัญหาข้อจำกัดเรื่องข้อมูลที่มีอยู่อย่างจำกัดและไม่สมดุล ข้อมูลข่าวสารทางการเงินในโลกแห่งความเป็นจริงมักจะเน้นไปที่รายงานผลประกอบการและการเคลื่อนไหวของหุ้นเป็นส่วนใหญ่ ในขณะที่เหตุการณ์ที่เกิดขึ้นได้ยากกว่า เช่น การเปลี่ยนแปลงอันดับความน่าเชื่อถือ, การอนุมัติผลิตภัณฑ์, หรือประเด็นด้านแรงงาน กลับเป็นข้อมูลที่หาได้ยากและรวบรวมได้ในปริมาณน้อย
การสร้างข้อมูลสังเคราะห์ (Synthetic Data Generation) จึงเป็นอีกหนึ่งแนวทางสำคัญที่เข้ามาช่วยเติมเต็มช่องว่างเหล่านี้ สำหรับการวิจัยด้านการซื้อขาย (trading research), การสร้างแบบจำลองความเสี่ยง (risk modeling), และการเฝ้าระวัง (surveillance) แต่การจะให้ได้ข้อมูลที่มีความหลากหลายนั้น จำเป็นต้องอาศัยกระบวนการที่มากกว่าการสร้างข้อมูลเพียงครั้งเดียว
บทความนี้จะแนะนำขั้นตอนการสร้างชุดข้อมูลข่าวพาดหัวทางการเงินสังเคราะห์ที่มีความหลากหลายกว่า 500,000 หัวข้อ ครอบคลุม 13 หมวดหมู่ โดยใช้ NVIDIA NeMo Data Designer สำหรับการสร้างพาดหัวตามน้ำหนักของแต่ละหมวดหมู่, NVIDIA NeMo Curator สำหรับการกำจัดข้อมูลที่ซ้ำซ้อนกันในเชิงความหมาย (semantic deduplication) ในระดับที่ปรับขนาดได้, และโมเดล NVIDIA Nemotron สำหรับการสังเคราะห์พาดหัวด้วยปริมาณงานที่สูง พร้อมทั้งกลยุทธ์การเลือกตัวอย่างแบบ "farthest-from-centroid" เพื่อนำทางการสร้างข้อมูลให้มีความแปลกใหม่ในแต่ละรอบ
ปัญหาของข้อมูลจริง และความจำเป็นในการสร้างข้อมูลสังเคราะห์
ในโลกของการเงิน ข้อมูลจริงมักมีปัญหาเรื่องความสมดุลของข้อมูล เช่น ข่าวเกี่ยวกับผลประกอบการและราคาหุ้นมักจะเยอะเป็นพิเศษ ทำให้ข้อมูลเกี่ยวกับเหตุการณ์สำคัญอื่นๆ ที่เกิดขึ้นได้ยากกว่า เช่น การปรับอันดับเครดิต การอนุมัติสินค้า หรือประเด็นด้านแรงงาน กลับมีไม่เพียงพอต่อการนำไปใช้ในการฝึกฝนโมเดล AI ที่ต้องการความแม่นยำและครอบคลุม
การทดลองสร้างข้อมูลแบบง่ายๆ โดยสร้างข่าวพาดหัว 50,000 หัวข้อ พบว่า 65% ถูกตัดออกไปเพราะมีความซ้ำซ้อนกันสูง นี่แสดงให้เห็นว่าการเพิ่มปริมาณการสร้างข้อมูลเพียงอย่างเดียว ไม่ได้ช่วยเพิ่มความหลากหลายของข้อมูลได้ตามสัดส่วน
กระบวนการสร้างข้อมูลสังเคราะห์แบบวนซ้ำ (Iterative Pipeline)
เพื่อแก้ปัญหานี้ กระบวนการที่ใช้คือการสร้างข้อมูลแบบวนซ้ำ (iterative pipeline) ซึ่งประกอบด้วยขั้นตอนหลักๆ ดังนี้:
- สร้างข้อมูล (Generate): สร้างชุดข้อมูลพาดหัวข่าวทางการเงินตามน้ำหนักของแต่ละหมวดหมู่
- กรองคุณภาพ (Quality Filtering): ตรวจสอบและกรองข้อมูลที่ผิดรูปแบบออกไป
- กำจัดข้อมูลซ้ำซ้อนเชิงความหมาย (Semantic Deduplication): เปรียบเทียบข้อมูลใหม่กับข้อมูลทั้งหมดที่มีอยู่แล้ว เพื่อกำจัดข้อมูลที่ซ้ำซ้อนในเชิงความหมาย
- เลือกตัวอย่างที่หลากหลาย (Select Diverse Few-Shot Examples): เลือกตัวอย่างข้อมูลที่โดดเด่นและแตกต่างจากข้อมูลเดิม เพื่อนำไปใช้ในการสร้างข้อมูลรอบถัดไป
- ปรับปรุงการกระจายหมวดหมู่ (Dynamic Distribution Correction): ปรับน้ำหนักของแต่ละหมวดหมู่ให้สมดุล เพื่อให้การสร้างข้อมูลรอบถัดไปมีความหลากหลายตามเป้าหมาย
กระบวนการนี้จะทำซ้ำไปเรื่อยๆ จนกว่าจะได้ปริมาณข้อมูลตามที่ต้องการ ซึ่งในตัวอย่างนี้ สามารถสร้างข่าวพาดหัวที่ไม่ซ้ำกันได้กว่า 502,536 หัวข้อ ครอบคลุม 13 หมวดหมู่ โดยใช้เวลาประมาณ 6 วันบนโหนด NVIDIA B200 เพียงโหนดเดียว
สถาปัตยกรรมหลักและส่วนประกอบ
1. การสร้างพาดหัวด้วย NVIDIA NeMo Data Designer 🛠️
- โมเดลที่ใช้: Nemotron 3 Nano (30B parameters) ทำงานผ่าน vLLM ด้วย tensor parallelism 4-way สามารถรองรับคำขอพร้อมกันได้ 448 รายการ
- NeMo Data Designer: ทำหน้าที่ควบคุมการสร้างข้อมูล โดยกำหนดน้ำหนักของแต่ละหมวดหมู่ (12 หัวข้อหลัก + "อื่นๆ") และใช้ LLM สร้างพาดหัวข่าวตามหมวดหมู่ที่สุ่มได้ พร้อมทั้งใช้ตัวอย่างข้อมูล (few-shot examples) ที่ได้จากรอบก่อนหน้า
- การตั้งค่าการสร้าง: ใช้การสุ่มแบบ high-diversity (temperature=0.95) และอาศัยการกรองและการกำจัดข้อมูลซ้ำซ้อนในภายหลังเพื่อจัดการกับข้อมูลที่ผิดพลาดหรือไม่สมบูรณ์
- โครงสร้าง Prompt: ประกอบด้วยระบบตั้งค่าบทบาท (role-setting system prompt), ตัวอย่างข้อมูลที่จัดกลุ่มตามหมวดหมู่ (few-shot examples), และคำสั่งสำหรับหมวดหมู่ที่สุ่มได้
2. การกรองคุณภาพ (Quality Filtering) 🔍
ขั้นตอนนี้เป็นการกรองเบื้องต้นอย่างง่าย โดยใช้กฎเกณฑ์เพื่อคัดกรองข้อมูลที่มีรูปแบบผิดพลาด เช่น ข้อความที่ขาดหาย, ไม่สมบูรณ์, หรือผิดเพี้ยน ซึ่งในทางปฏิบัติ ขั้นตอนนี้จะกำจัดข้อมูลออกไปน้อยกว่า 1% โดยการควบคุมคุณภาพส่วนใหญ่จะมาจากขั้นตอนถัดไป
3. การกำจัดข้อมูลซ้ำซ้อนด้วย NVIDIA NeMo Curator 🧹
นี่คือกลไกหลักในการควบคุมคุณภาพ:
- การฝังข้อมูล (Embedding): ใช้โมเดล all-MiniLM-L6-v2 ในการแปลงข้อความให้เป็นเวกเตอร์
- การจัดกลุ่ม (Clustering): ใช้ K-means ในการจัดกลุ่มเวกเตอร์คำที่คล้ายกัน (กำหนด 500 clusters)
- การเปรียบเทียบความคล้ายคลึง (Similarity Comparison): เปรียบเทียบเวกเตอร์ภายในกลุ่ม โดยใช้ค่า cosine similarity หากค่าสูงกว่า 90% จะถือว่าเป็นข้อมูลซ้ำซ้อนและถูกกำจัดออกไป
- การกำจัดซ้ำซ้อนทั่วทั้งคลังข้อมูล (Global Deduplication): ข้อมูลใหม่จะถูกเปรียบเทียบกับข้อมูลทั้งหมดที่สะสมไว้ ไม่ใช่แค่ภายในชุดข้อมูลที่สร้างขึ้นใหม่ เพื่อป้องกันการซ้ำซ้อนข้ามชุดข้อมูล
การใช้จำนวนคลัสเตอร์ที่มากขึ้น (500 clusters) ช่วยให้การกำจัดข้อมูลซ้ำซ้อนทั่วทั้งคลังข้อมูลสามารถทำได้ในระดับที่จัดการได้ เมื่อจำนวนข้อมูลสะสมมากขึ้น
4. การเลือกตัวอย่างที่หลากหลายสำหรับรอบถัดไป 💡
หลังจากกำจัดข้อมูลซ้ำซ้อนแล้ว จะมีการเลือกตัวอย่างข้อมูล (few-shot examples) สำหรับการสร้างข้อมูลในรอบถัดไป โดยมีเป้าหมายเพื่อนำโมเดลให้สร้างข้อมูลที่แตกต่างจากที่เคยสร้างไปแล้ว
- การเลือกแบบ Farthest-from-Centroid: จัดอันดับข้อมูลตามระยะห่างจากจุดศูนย์กลางของคลัสเตอร์ (centroid) และเลือกข้อมูลที่อยู่ห่างที่สุด ซึ่งเป็นข้อมูลที่ผิดแปลกไปจากเพื่อนบ้านในเชิงความหมาย และมีประโยชน์ในการกระตุ้นให้เกิดผลลัพธ์ใหม่ๆ
- การกรองเชิงความหมายข้ามรอบ (Cross-iteration Semantic Filtering): ข้อมูลที่ถูกเลือกมาจะต้องไม่ซ้ำซ้อนกับตัวอย่างข้อมูลที่เคยใช้ไปแล้วในรอบก่อนหน้า (cosine similarity ไม่เกิน 80%) เพื่อป้องกันการส่งสัญญาณที่ซ้ำซ้อนกันใน prompt
5. การปรับปรุงการกระจายหมวดหมู่แบบไดนามิก (Dynamic Distribution Correction) ⚖️
แม้จะมีการกำหนดน้ำหนักหมวดหมู่ตั้งแต่ต้น แต่โมเดลอาจมีแนวโน้มที่จะสร้างข้อมูลในหมวดหมู่ที่ "ง่าย" กว่า เช่น "อื่นๆ" หรือ "ราคาหุ้น" บ่อยกว่าหมวดหมู่อื่นๆ ดังนั้น จึงต้องมีการปรับปรุงการกระจายหมวดหมู่หลังแต่ละรอบ:
- เปรียบเทียบสัดส่วน: เปรียบเทียบสัดส่วนหมวดหมู่เป้าหมายกับสัดส่วนที่สร้างได้จริง
- เพิ่มหมวดหมู่ที่ขาด: เพิ่มน้ำหนักให้กับหมวดหมู่ที่มีสัดส่วนน้อยกว่าเป้าหมาย
- จำกัดค่าสุดขั้ว: ควบคุมไม่ให้สัดส่วนของหมวดหมู่ใดหมวดหมู่หนึ่งสูงหรือต่ำเกินไป
- ปรับให้เป็นมาตรฐาน: ปรับน้ำหนักทั้งหมดให้รวมกันเป็น 1 เพื่อใช้ในการสร้างข้อมูลรอบถัดไป
กระบวนการนี้ช่วยให้หมวดหมู่ที่เกิดขึ้นได้ยาก เช่น "อันดับเครดิต" หรือ "การอนุมัติผลิตภัณฑ์" มีสัดส่วนใกล้เคียงกับเป้าหมาย 1% แม้ว่าหมวดหมู่ "อื่นๆ" จะยังคงมีสัดส่วนสูงกว่าก็ตาม
สรุปผลลัพธ์และประโยชน์ 🚀
กระบวนการสร้างข้อมูลสังเคราะห์แบบวนซ้ำนี้ สามารถสร้างชุดข้อมูลข่าวพาดหัวทางการเงินที่มีความหลากหลายและครอบคลุมเหตุการณ์ที่เกิดขึ้นได้ยาก ซึ่งเป็นประโยชน์อย่างยิ่งสำหรับ:
- การกลั่นกรองโมเดล (Model Distillation): ชุดข้อมูลที่สร้างขึ้นสามารถนำไปใช้ในการฝึกฝนโมเดลขนาดเล็ก (student models) ให้มีประสิทธิภาพใกล้เคียงกับโมเดลขนาดใหญ่ (teacher models) โดยสามารถทำคะแนน F1 ได้สูงถึง 95% ของโมเดลครู แม้จะมีขนาดเล็กกว่ามาก
- การเพิ่มประสิทธิภาพการฝึกฝน: การมีข้อมูลที่หลากหลายและสมดุล ช่วยให้โมเดลนักเรียนได้เรียนรู้จากเหตุการณ์ทางการเงินที่เกิดขึ้นได้ยากและกรณีขอบ (edge cases) ซึ่งยากต่อการรวบรวมจากแหล่งข้อมูลจริง
- การวิจัยและการพัฒนา: เป็นเครื่องมือสำคัญสำหรับนักวิจัยในการทดสอบและพัฒนาโมเดล AI ด้านการเงินให้มีความแม่นยำและครอบคลุมมากยิ่งขึ้น
หลักการสำคัญ 4 ประการที่ได้จากกระบวนการนี้ คือ การสร้างข้อมูลแบบวนซ้ำ, การกำจัดข้อมูลซ้ำซ้อนทั่วทั้งคลังข้อมูล, การเลือกตัวอย่างที่หลากหลาย, และการปรับปรุงการกระจายหมวดหมู่อย่างไดนามิก ซึ่งเป็นแนวทางที่มีประสิทธิภาพในการสร้างชุดข้อมูลสังเคราะห์ขนาดใหญ่ที่มีคุณภาพสูงสำหรับงานวิจัย AI ด้านการเงิน
#AI #NVIDIA #NeMo #SyntheticData #FinancialAI
ขอบคุณ แหล่งข้อมูล
https://developer.nvidia.com/blog/synthetic-data-generation-for-financial-ai-research-with-nvidia-nemo/