Program of Thoughts Prompting (TH)

From Systems analysis Wiki
Jump to navigation Jump to search

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] โมเดลทำหน้าที่เป็น «นักเขียนโปรแกรม» ไม่ใช่ «นักคำนวณ»

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

  1. โมเดลรับโจทย์เป็น input (เช่น โจทย์คณิตศาสตร์ในรูปข้อความ)
  2. แทนที่จะใช้การใช้เหตุผลแบบข้อความ โมเดลจะสร้าง script ในภาษาโปรแกรม (เช่น Python) ที่แก้ปัญหานั้น
  3. โค้ดที่สร้างขึ้นจะถูกส่งต่อไปยัง interpreter ภายนอกเพื่อประมวลผล
  4. ผลลัพธ์ของการประมวลผลโค้ดคือคำตอบสุดท้าย

ด้วยวิธีนี้ การคำนวณที่ซับซ้อนและแม่นยำ (การดำเนินการกับตัวเลขขนาดใหญ่, การเรียกใช้ 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. 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]
  2. Wei, J. et al. «Chain-of-Thought Prompting Elicits Reasoning in Large Language Models». arXiv:2201.11903, 2022. [2]
  3. «Program of Thoughts: Everything You Need to Know». The Ministry of AI. [3]
  4. 4.0 4.1 «Program of Thoughts Prompting: Enhancing Accuracy in Reasoning and Computation». Learn Prompting. [4]
  5. «PAL (Program-Aided Language Models)». Prompt Engineering Guide. [5]