Program of Thoughts Prompting (TH)
Program of Thoughts Prompting (PoT, อังกฤษ: «program of thoughts» — โปรแกรมแห่งความคิด) — คือวิธีการ prompt engineering สำหรับ large language models (LLM) ซึ่งโมเดลจะสร้างโค้ดโปรแกรมเป็นขั้นตอนกลางในการแก้ปัญหา แทนที่จะเป็นคำอธิบายในรูปแบบข้อความ[1] แนวทางนี้ช่วยแยกการใช้เหตุผลเชิงตรรกะออกจากการคำนวณทางคณิตศาสตร์ โดย language model จะสร้างแผนการแก้ปัญหาในรูปของโปรแกรม (เช่น บน Python) ส่วนการคำนวณจะดำเนินการโดย interpreter โค้ดภายนอกที่เป็น deterministic
วิธีการนี้ถูกเสนอขึ้นในปี 2022 โดยกลุ่มนักวิจัยนำโดย เวินหู เฉิน (Wenhu Chen) และมุ่งเน้นไปที่งานที่มีลักษณะเป็นตัวเลขหรือเชิงตรรกะเป็นหลัก (โจทย์คณิตศาสตร์, การคำนวณทางการเงิน) ซึ่งวิธีการใช้เหตุผลแบบดั้งเดิม เช่น Chain-of-Thought ประสบปัญหาด้านความแม่นยำในการคำนวณ[1]
พื้นหลังและแนวคิด
ข้อจำกัดของ Chain-of-Thought
วิธี PoT เป็นการพัฒนาต่อยอดจากแนวคิด Chain-of-Thought (CoT) (ลูกโซ่แห่งการใช้เหตุผล) ซึ่งเดิมเป็นแนวทางหลักในการปรับปรุงการอนุมานเชิงตรรกะของ LLM[2] ในวิธี CoT โมเดลจะสร้างลำดับขั้นตอนกลางเป็นภาษาธรรมชาติ แม้คุณภาพการใช้เหตุผลจะดีขึ้นอย่างมีนัยสำคัญ แต่แนวทางนี้มีข้อจำกัดเชิงพื้นฐาน คือโมเดลต้องรับผิดชอบทั้งการใช้ตรรกะและการคำนวณในรูปแบบข้อความ ซึ่งมักนำไปสู่การดำเนินการเลขคณิตที่ไม่แม่นยำ ความผิดพลาดในการปัดเศษ และความคลาดเคลื่อนอื่น ๆ เนื่องจาก language models โดยธรรมชาติแล้วไม่ใช่เครื่องคำนวณที่แม่นยำ
แนวคิดหลักของ Program of Thoughts
แนวคิดหลักของ PoT คือการมอบหมายการคำนวณให้กับระบบภายนอก (interpreter โค้ด) และกำหนดให้ language model ทำหน้าที่เพียงการกำหนดรูปแบบแผนการแก้ปัญหาในรูปของโปรแกรมที่ประมวลผลได้[1] โมเดลทำหน้าที่เป็น «นักเขียนโปรแกรม» ไม่ใช่ «นักคำนวณ»
กระบวนการทำงานมีดังนี้:
- โมเดลรับโจทย์เป็น input (เช่น โจทย์คณิตศาสตร์ในรูปข้อความ)
- แทนที่จะใช้การใช้เหตุผลแบบข้อความ โมเดลจะสร้าง script ในภาษาโปรแกรม (เช่น Python) ที่แก้ปัญหานั้น
- โค้ดที่สร้างขึ้นจะถูกส่งต่อไปยัง interpreter ภายนอกเพื่อประมวลผล
- ผลลัพธ์ของการประมวลผลโค้ดคือคำตอบสุดท้าย
ด้วยวิธีนี้ การคำนวณที่ซับซ้อนและแม่นยำ (การดำเนินการกับตัวเลขขนาดใหญ่, การเรียกใช้ library เฉพาะทาง) จะไม่ถูกดำเนินการโดยตัวโมเดลเอง แต่โดยโปรแกรม ซึ่งรับประกัน determinism และความแม่นยำสูง[3]
การนำไปใช้งานและการใช้ library
ในการนำ PoT ไปใช้งาน ความสามารถของ LLM ในการสร้างโค้ดที่ถูกต้องและมีประสิทธิภาพเป็นสิ่งสำคัญ ผู้เสนอแนวทางนี้ใช้โมเดล OpenAI Codex ซึ่งได้รับการฝึกฝนเป็นพิเศษในงานโปรแกรมมิ่ง แนวทาง PoT ช่วยให้โมเดลสามารถใช้ library ภายนอกได้ ซึ่งขยายขอบเขตของโจทย์ที่แก้ได้อย่างมีนัยสำคัญ ตัวอย่างเช่น เมื่อแก้โจทย์คณิตศาสตร์เชิงสัญลักษณ์ โมเดลสามารถสร้างโค้ดที่ใช้ library SymPy เพื่อแก้สมการเชิงวิเคราะห์ ซึ่งอยู่นอกเหนือความสามารถของวิธีภาษาล้วน ๆ[1]
การกำหนด prompt สำหรับ PoT สามารถทำได้ในสองโหมด:
- Few-shot: ใน prompt มีตัวอย่างคู่ «คำถาม — โปรแกรมแก้ปัญหา» หลายตัวอย่าง
- Zero-shot: ใน prompt มีเพียงคำสั่งที่อธิบายโจทย์โดยไม่มีตัวอย่าง
แม้แต่ในโหมด zero-shot PoT ก็แสดงประสิทธิภาพสูงเนื่องจากโครงสร้างที่ชัดเจนที่โมเดลต้องสร้างขึ้น[4]
ผลลัพธ์และประสิทธิภาพ
วิธี PoT แสดงให้เห็นการปรับปรุงคุณภาพการแก้ปัญหาอย่างมีนัยสำคัญในโจทย์ที่ต้องการการใช้เหตุผลเชิงตัวเลขหลายขั้นตอน ในงานวิจัยต้นฉบับ วิธีนี้ได้รับการทดสอบบน dataset คณิตศาสตร์และการเงินแปดชุด ได้แก่ GSM8K, AQUA, SVAMP, FinQA และอื่น ๆ
- การเพิ่มความแม่นยำ: ในทุกกรณี PoT เหนือกว่าแนวทางพื้นฐาน CoT โดยเฉลี่ยแล้วได้รับผลกำไรสัมพัทธ์ประมาณ ~12% ในสัดส่วนของคำตอบที่ถูกต้อง
- บน dataset คณิตศาสตร์ยอดนิยม GSM8K ความแม่นยำของโมเดลด้วย PoT สูงถึง 71.6% ในขณะที่ด้วย CoT อยู่ที่ 63.1%
- ในโจทย์การเงิน ผลกำไรยิ่งมีนัยสำคัญมากขึ้น: บน dataset FinQA ความแม่นยำเพิ่มขึ้นจาก 40.4% (CoT) เป็น 64.5% (PoT)[1]
- การรวมกับ Self-Consistency: ประสิทธิภาพของ PoT สามารถปรับปรุงเพิ่มเติมได้เมื่อรวมกับวิธี self-consistency (ความสอดคล้องด้วยตนเอง) ในกรณีนี้โมเดลจะสร้างโปรแกรมแก้ปัญหาอิสระหลายโปรแกรม และคำตอบสุดท้ายจะถูกเลือกตาม «หลักการเสียงข้างมาก» จากผลลัพธ์การประมวลผล เมื่อรวมกับ self-consistency PoT ได้สถาปนา state-of-the-art ใหม่ ณ เวลาที่ตีพิมพ์สำหรับ benchmark คณิตศาสตร์และการเงินทั้งหมดที่ทดสอบ[1]
ข้อดีและข้อจำกัด
ข้อดี
- ความแม่นยำในการคำนวณ: ข้อได้เปรียบหลัก การดำเนินการทางคณิตศาสตร์โดย interpreter ภายนอกขจัดข้อผิดพลาดการปัดเศษและความไม่แม่นยำที่มีอยู่ใน LLM
- ความสามารถในการใช้ library: โมเดลสามารถใช้ library ภายนอกที่ทรงพลัง (เช่น สำหรับการคำนวณเชิงสัญลักษณ์, การวิเคราะห์ทางสถิติ, การทำงานกับวันที่) แก้โจทย์ที่ไม่สามารถทำได้มาก่อน
- การตีความและการแก้ไขข้อบกพร่อง: โค้ดโปรแกรมเป็นการแสดงแทนตรรกะการแก้ปัญหาที่เป็นทางการและมีโครงสร้าง ซึ่งทำให้ง่ายต่อการตรวจสอบและแก้ไขข้อบกพร่องเมื่อเทียบกับการใช้เหตุผลในภาษาธรรมชาติ
- ความหลากหลาย: แนวทางนี้มีประสิทธิภาพทั้งในโหมด few-shot และ zero-shot และใช้ได้กับหลายโดเมน (คณิตศาสตร์, การเงิน, วิทยาศาสตร์)
ข้อจำกัด
- ความปลอดภัย: การประมวลผลโค้ดที่สร้างขึ้นบน interpreter ภายนอกก่อให้เกิดความเสี่ยงด้านความปลอดภัย โมเดลอาจสร้างโค้ดที่เป็นอันตรายในทางทฤษฎี (เช่น เพื่อลบไฟล์) ดังนั้นการนำ PoT ไปใช้งานจริงจึงต้องการการแยกสภาพแวดล้อมการประมวลผล (sandbox) และการกรองโค้ดอย่างรอบคอบ[4]
- ขอบเขตการใช้งานที่จำกัด: วิธีนี้มีประสิทธิภาพสูงสุดสำหรับโจทย์ที่สามารถกำหนดรูปแบบเป็นอัลกอริทึมได้อย่างชัดเจน สำหรับโจทย์ที่ต้องการความเข้าใจในความละเอียดอ่อนของภาษา, สามัญสำนึก หรือความคิดสร้างสรรค์ การนำ PoT ไปใช้โดยตรงเป็นเรื่องยาก
- การพึ่งพาคุณภาพโค้ด: ประสิทธิภาพของวิธีนี้ขึ้นอยู่กับความสามารถของ LLM ในการสร้างโค้ดที่ถูกต้องทางไวยากรณ์และถูกต้องเชิงตรรกะโดยตรง
แนวทางที่เกี่ยวข้อง
แนวคิดการใช้โค้ดเพื่อปรับปรุงการใช้เหตุผลของ LLM ได้รับการพัฒนาในแนวทางอื่น ๆ ที่คล้ายกันด้วย
- Program-Aided Language Models (PAL): วิธีที่เสนอขึ้นเกือบพร้อมกันกับ PoT ซึ่งใช้การสร้าง Python โค้ดเพื่อแก้ปัญหาเช่นกัน[5] ในเชิงแนวคิด PAL และ PoT ใกล้เคียงกันมากและยืนยันประสิทธิผลของกลยุทธ์ «การใช้เหตุผลผ่านโค้ด»
- Tree of Thoughts (ToT): วิธีที่ซับซ้อนกว่า ซึ่งเสนอให้สร้างและสำรวจ «ต้นไม้» ของขั้นตอนการแก้ปัญหาที่เป็นไปได้ ซึ่งเป็นการพัฒนาแนวคิดของ «ลูกโซ่» ความคิดเชิงเส้น PoT สามารถนำมาใช้ภายในโหนดของต้นไม้นี้เพื่อการตรวจสอบสมมติฐาน
อ้างอิง
- บทความวิจัยต้นฉบับเกี่ยวกับ Program of Thoughts Prompting
- คู่มือ PoT บนพอร์ทัล Learn Prompting
บรรณานุกรม
- Chen, W. et al. (2023). Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks. arXiv:2211.12588.
- Wei, J. et al. (2022). Chain of Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903.
- Wang, X. et al. (2022). Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171.
- Gao, L. et al. (2022). PAL: Program-Aided Language Models. arXiv:2211.10435.
- Cobbe, K. et al. (2021). Training Verifiers to Solve Math Word Problems. arXiv:2110.14168.
- Chen, Z. et al. (2021). FinQA: A Dataset of Numerical Reasoning over Financial Data. arXiv:2109.00122.
- Zhu, F. et al. (2021). TAT-QA: A Question Answering Benchmark on a Hybrid of Tabular and Textual Content in Finance. arXiv:2105.07624.
- Patel, A. et al. (2021). Are NLP Models Really Able to Solve Simple Math Word Problems? (Introducing SVAMP). arXiv:2103.07191.
- Xu, F. et al. (2023). RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation. arXiv:2310.04408.
- Mu, J. et al. (2023). Learning to Compress Prompts with Gist Tokens. arXiv:2304.08467.
หมายเหตุ
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Chen, W. et al. «Program of Thoughts Prompting: Disentangling Computation from Reasoning for Numerical Reasoning Tasks». arXiv:2211.12588, 2023. [1]
- ↑ Wei, J. et al. «Chain-of-Thought Prompting Elicits Reasoning in Large Language Models». arXiv:2201.11903, 2022. [2]
- ↑ «Program of Thoughts: Everything You Need to Know». The Ministry of AI. [3]
- ↑ 4.0 4.1 «Program of Thoughts Prompting: Enhancing Accuracy in Reasoning and Computation». Learn Prompting. [4]
- ↑ «PAL (Program-Aided Language Models)». Prompt Engineering Guide. [5]