Program of Thoughts Prompting (VI)

From Systems analysis Wiki
Jump to navigation Jump to search

Program of Thoughts Prompting (PoT, tiếng Anh: «chương trình suy nghĩ») — là phương pháp prompt engineering cho các mô hình ngôn ngữ lớn (LLM), trong đó mô hình sinh ra mã chương trình như các bước trung gian để giải quyết bài toán thay vì giải thích bằng văn bản[1]. Cách tiếp cận này cho phép tách biệt quá trình suy luận logic khỏi quá trình tính toán số học: mô hình ngôn ngữ xây dựng kế hoạch giải quyết dưới dạng một chương trình (ví dụ bằng Python), còn các phép tính được thực hiện bởi một trình thông dịch mã ngoài có tính tất định.

Phương pháp này được đề xuất vào năm 2022 bởi một nhóm các nhà nghiên cứu do Wenhu Chen dẫn đầu và chủ yếu hướng tới các bài toán có tính chất số học hoặc logic (các bài toán toán học, tính toán tài chính), nơi mà các phương pháp suy luận truyền thống như Chain-of-Thought gặp khó khăn về độ chính xác của phép tính[1].

Tiền đề và khái niệm

Hạn chế của Chain-of-Thought

Phương pháp PoT là sự phát triển của ý tưởng Chain-of-Thought (CoT) (chuỗi suy luận), vốn là cách tiếp cận chính để cải thiện khả năng suy luận logic của LLM trước đây[2]. Trong phương pháp CoT, mô hình sinh ra một chuỗi các bước trung gian bằng ngôn ngữ tự nhiên. Mặc dù chất lượng suy luận được cải thiện đáng kể, cách tiếp cận này có một hạn chế cơ bản: mô hình thực hiện cả logic lẫn bản thân các phép tính theo dạng văn bản. Điều này thường dẫn đến các phép tính số học không chính xác, sai số làm tròn và các sai sót khác, vì các mô hình ngôn ngữ về bản chất không phải là máy tính chính xác.

Ý tưởng cơ bản của Program of Thoughts

Ý tưởng cốt lõi của PoT là ủy thác việc tính toán cho một hệ thống ngoài (trình thông dịch mã), còn yêu cầu mô hình ngôn ngữ chỉ cần hình thức hóa kế hoạch giải quyết dưới dạng một chương trình có thể thực thi được[1]. Mô hình đóng vai trò «lập trình viên» chứ không phải «máy tính».

Quy trình hoạt động như sau:

  1. Mô hình nhận đầu vào là một bài toán (ví dụ, một bài toán toán học dạng văn bản).
  2. Thay vì suy luận bằng văn bản, nó sinh ra một đoạn script bằng ngôn ngữ lập trình (ví dụ Python) để giải quyết bài toán đó.
  3. Mã được sinh ra sẽ được truyền cho trình thông dịch ngoài để thực thi.
  4. Kết quả thực thi của mã chính là câu trả lời cuối cùng.

Như vậy, các phép tính phức tạp và chính xác (các phép toán với số lớn, gọi các thư viện chuyên dụng) không được thực hiện bởi chính mô hình mà bởi chương trình, điều này đảm bảo tính tất định và độ chính xác cao[3].

Triển khai và sử dụng thư viện

Trong việc triển khai PoT, điều then chốt là khả năng của LLM trong việc sinh ra mã chính xác và hiệu quả. Các tác giả của phương pháp đã sử dụng mô hình OpenAI Codex, được huấn luyện đặc biệt cho các bài toán lập trình. Cách tiếp cận PoT cho phép mô hình sử dụng các thư viện ngoài, điều này mở rộng đáng kể lớp bài toán có thể giải được. Ví dụ, khi giải các bài toán toán học ký hiệu, mô hình có thể sinh ra mã sử dụng thư viện SymPy để giải phương trình một cách giải tích, vượt ra ngoài khả năng của các phương pháp thuần ngôn ngữ[1].

Prompt cho PoT có thể được cung cấp theo hai chế độ:

  • Few-shot: Trong prompt chứa một vài ví dụ về các cặp «câu hỏi — chương trình giải».
  • Zero-shot: Trong prompt chỉ đưa ra hướng dẫn mô tả bài toán, không có ví dụ.

Ngay cả ở chế độ zero-shot, PoT cho thấy hiệu quả cao nhờ cấu trúc tường minh mà mô hình cần sinh ra[4].

Kết quả và hiệu quả

Phương pháp PoT đã chứng minh sự cải thiện đáng kể về chất lượng giải quyết các bài toán đòi hỏi suy luận số học nhiều bước. Trong công trình gốc, nó được kiểm thử trên tám bộ bài toán toán học và tài chính, bao gồm GSM8K, AQUA, SVAMP, FinQA và các bộ khác.

  • Tăng độ chính xác: Trong tất cả các trường hợp, PoT vượt trội hơn cách tiếp cận cơ sở CoT. Trung bình đạt được lợi thế tương đối khoảng ~12% về tỷ lệ giải đúng.
    • Trên bộ bài toán toán học phổ biến GSM8K, độ chính xác của mô hình với PoT đạt 71,6%, trong khi với CoT chỉ là 63,1%.
    • Trong các bài toán tài chính, lợi thế còn đáng kể hơn: trên dataset FinQA, độ chính xác tăng từ 40,4% (CoT) lên 64,5% (PoT)[1].
  • Kết hợp với Self-Consistency: Hiệu quả của PoT có thể được cải thiện thêm khi kết hợp với phương pháp tự nhất quán (self-consistency). Trong trường hợp này, mô hình sinh ra nhiều chương trình giải độc lập, và câu trả lời cuối cùng được chọn theo «nguyên tắc đa số» từ kết quả thực thi của chúng. Kết hợp với self-consistency, PoT đã thiết lập trạng thái nghệ thuật mới (state-of-the-art) tại thời điểm công bố cho tất cả các benchmark toán học và tài chính được kiểm thử[1].

Ưu điểm và hạn chế

Ưu điểm

  • Độ chính xác của phép tính: Ưu điểm chính. Việc thực hiện các phép toán số học bởi trình thông dịch ngoài loại bỏ sai số làm tròn và các sai sót vốn có của LLM.
  • Khả năng sử dụng thư viện: Mô hình có thể sử dụng các thư viện ngoài mạnh mẽ (ví dụ, cho tính toán ký hiệu, phân tích thống kê, xử lý ngày tháng), giải quyết các bài toán trước đây không thể thực hiện được.
  • Khả năng diễn giải và gỡ lỗi: Mã chương trình là biểu diễn hình thức và có cấu trúc của logic giải quyết, giúp việc kiểm tra và gỡ lỗi dễ dàng hơn so với suy luận bằng ngôn ngữ tự nhiên.
  • Tính đa năng: Cách tiếp cận hiệu quả cả trong chế độ few-shot lẫn zero-shot và áp dụng được trong nhiều lĩnh vực khác nhau (toán học, tài chính, khoa học).

Hạn chế

  • Bảo mật: Việc thực thi mã được sinh ra trên trình thông dịch ngoài tạo ra các rủi ro bảo mật. Về mặt lý thuyết, mô hình có thể sinh ra mã độc hại (ví dụ, để xóa tệp). Do đó, việc ứng dụng thực tế PoT đòi hỏi phải cô lập môi trường thực thi (sandbox) và lọc mã cẩn thận[4].
  • Phạm vi ứng dụng hạn chế: Phương pháp hiệu quả nhất với các bài toán có thể hình thức hóa rõ ràng thành thuật toán. Đối với các bài toán đòi hỏi hiểu sắc thái ngôn ngữ, lẽ thường hay tư duy sáng tạo, việc áp dụng trực tiếp PoT gặp khó khăn.
  • Phụ thuộc vào chất lượng mã: Hiệu quả của phương pháp phụ thuộc trực tiếp vào khả năng của LLM trong việc sinh ra mã đúng cú pháp và đúng về mặt logic.

Các cách tiếp cận liên quan

Ý tưởng sử dụng mã để cải thiện khả năng suy luận của LLM cũng được phát triển trong các cách tiếp cận tương tự khác.

  • Program-Aided Language Models (PAL): Phương pháp được đề xuất gần như đồng thời với PoT, cũng sử dụng việc sinh mã Python để giải quyết bài toán[5]. Về mặt khái niệm, PAL và PoT rất gần nhau và đều xác nhận hiệu quả của chiến lược «suy luận thông qua mã».
  • Tree of Thoughts (ToT): Phương pháp phức tạp hơn, đề xuất sinh và khám phá «cây» các bước giải quyết có thể, là sự phát triển của ý tưởng «chuỗi» suy nghĩ tuyến tính. PoT có thể được sử dụng trong các nút của cây này để kiểm tra các giả thuyết.

Liên kết

  • Bài báo khoa học gốc về Program of Thoughts Prompting
  • Hướng dẫn về PoT trên cổng thông tin Learn Prompting

Tài liệu tham khảo

  • 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.

Ghi chú

  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]