ChatGPT Series 7.1: Prompt Engineering (1)
Tổng quan
- Mục đích bài viết này giúp mọi người hiểu cơ bản về kỹ thuật Prompt Engineering và những phương pháp cơ bản, nâng cao được ứng dụng rộng rãi trong phát triển các ứng dụng GenAI gần đây.
- Không giống như các mô hình Machine learning truyền thống, Large Language Models (LLMs) có một khả năng độc đáo để cung cấp những insights mới mà không cần phải retraining. Sự cải tiến mới này thực sự đã khơi mào một làn sóng thay đổi, đã làm cho việc lập trình trở nên dễ dàng tiếp cận hơn nhiều, vì người dùng chỉ cần sử dụng ngôn ngữ tự nhiên để hướng dẫn máy tính thực hiện các tác vụ.
- Kỹ thuật Prompt Engineering là một kỹ thuật nhằm hướng các phản hồi của LLMs tới các kết quả cụ thể mà không làm thay đổi trọng số (weights) hoặc tham số (parameters) của mô hình, chỉ dựa vào chiến lược/ cách thức prompting trong ngữ cảnh nào đó (in-context). Nó đòi hỏi nghệ thuật giao tiếp hiệu quả với AI để đạt được kết quả mong muốn.
- Phương pháp này được áp dụng cho nhiều tác vụ khác nhau từ question-answering tới reasoning. Nó phục vụ như một công cụ để khám phá giới hạn và tiềm năng của LLMs.
Prompts
- Để nắm bắt được khái niệm về Prompt Engineering, chúng ta cần hiểu được prompt là gì và vai trò của nó như thế nào?
- Prompt hiểu đơn giản là những đoạn văn bản hoặc câu hỏi ban đầu mà bạn đưa cho một mô hình AI như ChatGPT. Mô hình sẽ sử dụng những đoạn văn bản này để tạo ra các phản hồi hoặc hoàn thành các nhiệm vụ mà bạn yêu cầu.
- Đây là tập hợp các chỉ dẫn, hướng dẫn hoặc lệnh (instructions) được cung cấp cho AI hoặc các chatbot như ChatGPT để thực hiện rất nhiều các tác vụ đa dạng bao gồm việc tóm tắt, giải toán học, và phổ biến nhất là chắc chắn là Question and Answering (QnA).
- Do đó, mục tiêu của kỹ thuật Prompt Engineering là tinh chỉnh những prompts này để mô hình tạo ra các đầu ra có độ chính xác cao hơn và tính liên quan cao hơn.
- Trong phần tiếp theo, chúng ta sẽ xem xét một số loại prompts phổ biến, trong đó hai phương pháp prompting được sử dụng rộng rãi nhất: zero-shot và few-shot prompting.
Zero-shot Prompting
-
Zero-shot learning là việc đưa nhiệm vụ cho mô hình mà không cung cấp bất kỳ ví dụ nào về kết quả mong muốn, do đó nó được gọi là zero-shot. Ví dụ, chúng ta có thể đưa cho mô hình một câu nói của user (message) và mong đợi nó xác định cảm xúc của message đó.
-
Ví dụ đơn giản như sau:
- Prompt:
Classify the text into neutral, negative, or positive. Text: I think the vacation is okay.
- Output:
Neutral
Nguồn: DAIR-AI
Few-shot Prompting
-
Few-shot learning cung cấp cho mô hình một số lượng nhỏ ví dụ minh họa chất lượng bao gồm cả input và output mong muốn của tác vụ đó. Bằng cách nhìn vào những ví dụ minh họa này, mô hình có thể hiểu rõ hơn ý định và tiêu chí mong muốn của mình để tạo ra kết quả đầu ra chính xác. Dẫn tới thông thường, việc sử dụng few-shot learning sẽ mang lại kết quả tốt hơn so với zero-shot learning. Tuy nhiên, cách tiếp cận theo hướng Few-shot này sẽ bắt buộc phải ngốn nhiều tokens hơn và có thể gặp phải vấn đề giới hạn về độ dài ngữ cảnh khi xử lý input/ output và tốn kém về chi phí nếu sử dụng API. Nhưng hiện nay, các mô hình ngôn ngữ lớn hỗ trợ với context-length lên tới hàng tăm nghìn, hàng triệu tokens nên mình thấy đây cũng phải là vấn đề quá lớn.
-
Các mô hình ngôn ngữ lớn, chẳng hạn như ChatGPT, GPT-4, gần đây là GPT-4o trong họ nhà OpenAI, hay các mô hình khác như Gemeni, Mistral, LLama-3, ... với khả năng zero-shot đã mang lại kết quả đáng kinh ngạc. Tuy nhiên, đối với những tác vụ phức tạp mà chúng ta thấy với zero-shot thì hiệu suất suy giảm đi, thì phương pháp Few-shot learning là một giải pháp cứu cánh hữu hiệu. Để cải thiện hiệu suất, chúng ta thực hiện in-context learning sử dụng Few-shot prompting bằng cách cung cấp một vài ví dụ hướng dẫn trong prompt, từ đó giúp mô hình thực hiện tác vụ tốt hơn. Nói cách khác, việc điều chỉnh mô hình bằng cách đưa vào một số ví dụ cụ thể về tác vụ đó sẽ giúp cải thiện hiệu suất của mô hình.
-
Ví dụ minh họa:
- Prompt:
A "whatpu" is a small, furry animal native to Tanzania. An example of a sentence that uses the word whatpu is: We were traveling in Africa and we saw these very cute whatpus. To do a "farduddle" means to jump up and down really fast. An example of a sentence that uses the word farduddle is:
- Output:
When we won the game, we all started to farduddle in celebration.
Nguồn: DAIR-AI
-
Chúng ta có thể ở ví dụ trên là mô hình đã được cung cấp một ví dụ và sau đó được yêu cầu tạo ra câu trả lời cho ví dụ tiếp theo. Như vậy sẽ hướng cho model đưa ra câu phản hồi theo mong muốn của mình hơn.
Chain-of-Thought (CoT) Prompting
- Khi chúng ta giải một bài toán phức tạp, chúng ta thường suy nghĩ từng bước một để tìm ra câu trả lời đúng. Trong LLMs, có một cách giúp LLMs suy nghĩ giống như vậy gọi là "chain-of-thought prompting" (gợi ý theo chuỗi suy nghĩ).
- Kỹ thuật CoT này được giới thiệu bởi Wei et al. (2022), cho phép LLM giải quyết các tác vụ phức tạp bằng cách chia chúng thành các bước (steps) cần thiết trước khi phản hồi. Nói một cách đơn giản là CoT Prompting cho phép mô hình thực hiện khả năng suy luận phức tạp thông qua các bước suy luận trung gian. Ví dụ minh họa như ảnh bên dưới:
-
Chúng ta có thể kết hợp với Few-shot prompting để có kết quả tốt hơn đối với các tác vụ phức tạp hơn đòi hỏi phải suy luận trước khi phản hồi.
-
Ví dụ minh họa: -Prompt:
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1. A: Adding all the odd numbers (9, 15, 1) gives 25. The answer is False. The odd numbers in this group add up to an even number: 17, 10, 19, 4, 8, 12, 24. A: Adding all the odd numbers (17, 19) gives 36. The answer is True. The odd numbers in this group add up to an even number: 16, 11, 14, 4, 8, 13, 24. A: Adding all the odd numbers (11, 13) gives 24. The answer is True. The odd numbers in this group add up to an even number: 17, 9, 10, 12, 13, 4, 2. A: Adding all the odd numbers (17, 9, 13) gives 39. The answer is False. The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. A:
- Output:
Adding all the odd numbers (15, 5, 13, 7, 1) gives 41. The answer is False.
- Chúng ta có thể thấy một kết quả ok hơn khi chúng ta cung cấp bước suy luận. Trên thực tế, chúng ta có thể chỉ cần cung cấp ít ví dụ hơn, tức là chỉ 1-2 ví dụ có vẻ cũng đủ.
Zero-shot CoT
- Zero-shot CoT được giới thiệu bởi Kojima et al. (2022) phát hiện rằng thêm câu "Let’s think step by step" (Hãy suy nghĩ step-by-step) vào prompt dẫn tới mô hình LLM đưa ra được câu trả lời chính xác hơn bằng đưa ra suy luận từng bước rõ ràng thay vì đưa ra câu trả lời cuối cùng luôn. Bạn xem ví dụ minh hoạ như ảnh bên dưới để hiểu được cách mà LLM output ra khi áp dụng phương pháp này:
- Đặc biệt trong các tác vụ đổi hỏi khả năng suy luận cao như toán học chẳng hạn, LLM không có khả năng tính toán nên rất dễ gặp vấn đề về hallucination. Về câu chuyện liên quan tới hallucination, sắp tới mình sẽ viết thêm bài nói về nó.
- Một ví dụ minh hoạ khác:
- Prompt:
I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. How many apples did I remain with?
- *Output:"
11 apples
- Câu trả lời này là sai. Nếu chúng ta thử Zero-shot CoT Prompting thì kết quả sẽ thay đổi như thế nào?
- Prompt:
I went to the market and bought 10 apples. I gave 2 apples to the neighbor and 2 to the repairman. I then went and bought 5 more apples and ate 1. How many apples did I remain with? Let's think step by step.
- Output:
First, you started with 10 apples. You gave away 2 apples to the neighbor and 2 to the repairman, so you had 6 apples left. Then you bought 5 more apples, so now you had 11 apples. Finally, you ate 1 apple, so you would remain with 10 apples.
Few-shot CoT
-
Few-shot CoT là một phương pháp giúp LLMs cải thiện khả năng suy luận bằng cách cho nó xem qua một vài ví dụ về các chuỗi suy luận được chuẩn bị chất lượng. Điều này giúp mô hình học hỏi cách giải quyết qua các bước suy luận rõ ràng và logic.
-
Ví dụ minh hoạ:
Question: Tom and Elizabeth have a competition to climb a hill. Elizabeth takes 30 minutes to climb the hill. Tom takes four times as long as Elizabeth does to climb the hill. How many hours does it take Tom to climb up the hill? Answer: It takes Tom 30*4 = <<30*4=120>>120 minutes to climb the hill. It takes Tom 120/60 = <<120/60=2>>2 hours to climb the hill. So the answer is 2. === Question: Jack is a soccer player. He needs to buy two pairs of socks and a pair of soccer shoes. Each pair of socks cost $9.50, and the shoes cost $92. Jack has $40. How much more money does Jack need? Answer: The total cost of two pairs of socks is $9.50 x 2 = $<<9.5*2=19>>19. The total cost of the socks and the shoes is $19 + $92 = $<<19+92=111>>111. Jack need $111 - $40 = $<<111-40=71>>71 more. So the answer is 71. === Question: Marty has 100 centimeters of ribbon that he must cut into 4 equal parts. Each of the cut parts must be divided into 5 equal parts. How long will each final cut be? Answer:
-
Nhìn chung, Kỹ thuật Chain-of-Thought (CoT) prompting giúp mô hình LLMs tạo ra các chuỗi suy luận theo từng bước để giải thích và dự đoán một cách rõ ràng, mà không cần phải huấn luyện lại mô hình. Điều này giúp cải thiện khả năng của mô hình trong việc giải quyết các vấn đề phức tạp bằng cách suy nghĩ có hệ thống và logic.
-
Các chuỗi suy luận (reasoning logic) step-by-step này mô tả quá trình suy nghĩ từng bước một cách logic dẫn đến câu trả lời cuối cùng một cách rõ ràng và logic. Phương pháp này đặc biệt hữu ích cho các tác vụ đòi hỏi suy luận phức tạp và khi được áp dụng cho các mô hình ngôn ngữ càng lớn, hiệu suất cải thiện càng rõ rệt hơn.
Automatic Chain-of-Thought (Auto-CoT)
- Khi ứng dụng CoT Prompting được cung cấp thêm những ví dụ minh hoạ thì quá trình này thường yêu cầu chúng ta chuẩn bị các ví dụ (examples) đó một cách thủ công (manual) và thường yêu cầu phải đa dạng để đạt hiệu quả tốt nhất. Tất nhiên, công việc này sẽ đòi hỏi tốn thời gian và efforts, đồng thời việc đảm bảo được tính đa dạng cũng là một thác thức. Zhang et al. (2022) cũng nghiên cứu và giới thiệu một phương pháp tiếp cận để loại bỏ những bước thủ công đó bằng cách sử dụng LLMs kết hợp với prompt "Let's think step by step" để tự động tạo ra các chuỗi suy luận (reasoning chains), tuy nhiên quá trình tự động này sẽ gặp phải những lỗi trong chuỗi suy luận được tạo ra. Để giảm thiểu được tác động của những lỗi này thì người ta sẽ làm đa dạng các mẫu ví dụ. Phương pháp Auto-CoT sẽ thực hiện việc chọn lọc các câu hỏi với sự đa dạng và tạo ra các chuỗi suy luận để xây dựng các ví dụ được bổ sung vào prompt.
- Auto-CoT sẽ bao gồm 2 quá trình chính:
- Stage 1: (Question clustering - Phân cụm câu hỏi) Phân các câu hỏi của một tập dataset có sẵn thành một vài clusters.
- Stage 2: (Demonstration sampling - Lấy mẫu minh hoạ) Chọn một câu hỏi đại diện từ mỗi cluster và tạo chuỗi suy luận sử dụng Zero-shot CoT với các tiêu chí heuristics đơn giản.
- Các tiêu chí heuristics đơn giản có thể là độ dài của câu hỏi (ví dụ như 60 tokens) và số lượng steps (ví dụ như 5 steps để reasoning chẳng hạn). Điều này để khuyến khích LLMs tạo ra các ví dụ minh hoạ đơn giản và chính xác.
- Ví dụ minh hoạ:
- Bạn có thể tham khảo source-code cho phương pháp Auto-CoT mình có tìm thấy ở đây.
Trong phần mở đầu của chuỗi bài viết về kỹ thuật Prompt Engineering trong loạt bài ChatGPT Series 7 này, tôi đã giới thiệu những khái niệm cơ bản và một số kỹ thuật phổ biến đang được áp dụng rộng rãi trong cộng đồng phát triển sản phẩm AI ngày nay. Trong thế giới đang đua nhau về AI và LLMs, với sự xuất hiện liên tục của các mô hình ngôn ngữ lớn, việc sử dụng chúng một cách hiệu quả trở thành một kỹ năng bắt buộc mà mọi kỹ sư AI cần phải sở hữu. Trong các bài viết tiếp theo, tôi sẽ đưa ra những hướng tiếp cận tiên tiến hơn cho kỹ thuật này. Hãy cùng đón chờ nhé!
All rights reserved