Bỏ qua tới nội dung
Bài 6/12 · Prompt engineering từ cơ bản đến trung cấp (DAIR.AI)

Zero-shot và few-shot prompting

Zero-shot prompting dựa vào khả năng làm theo chỉ dẫn của model; few-shot prompting đưa ví dụ minh hoạ để học trong ngữ cảnh, cùng các mẹo và giới hạn của nó.

Cơ bản@shine19047 phút đọc

Bài này trình bày hai kỹ thuật prompt nền tảng: zero-shot prompting (không đưa ví dụ) và few-shot prompting (đưa vài ví dụ minh hoạ), kèm khi nào dùng và giới hạn của chúng.

Zero-shot prompting

Video kèm phần này: Zero-Shot Prompting trên YouTube.

Các LLM ngày nay, như GPT-3.5 Turbo, GPT-4 và Claude 3, được tinh chỉnh để làm theo chỉ dẫn và được huấn luyện trên lượng dữ liệu lớn. Huấn luyện quy mô lớn giúp các model này làm được một số tác vụ theo kiểu "zero-shot". Zero-shot prompting nghĩa là prompt dùng để tương tác với model không chứa ví dụ hay minh hoạ nào. Prompt zero-shot chỉ dẫn trực tiếp model làm tác vụ mà không có ví dụ bổ sung nào để dẫn dắt.

Chúng ta đã thử vài ví dụ zero-shot ở bài trước. Đây là một trong số đó (phân loại văn bản):

Prompt:

code
Classify the text into neutral, negative or positive. 

Text: I think the vacation is okay.
Sentiment:

Đầu ra:

code
Neutral

Lưu ý rằng trong prompt trên, chúng ta không đưa cho model ví dụ văn bản nào kèm phân loại của nó; LLM đã hiểu sẵn "sentiment" (cảm xúc), đó chính là khả năng zero-shot đang hoạt động.

Instruction tuning (tinh chỉnh theo chỉ dẫn) đã được chứng minh cải thiện khả năng học zero-shot Wei et al. (2022). Về bản chất, instruction tuning là việc fine-tuning model trên các bộ dữ liệu được mô tả qua chỉ dẫn. Ngoài ra, RLHF (reinforcement learning from human feedback, học tăng cường từ phản hồi của con người) đã được áp dụng để mở rộng instruction tuning, trong đó model được căn chỉnh để phù hợp hơn với sở thích của con người. Bước phát triển gần đây này là nền tảng của các model như ChatGPT.

Khi zero-shot không hiệu quả, nên đưa minh hoạ hoặc ví dụ vào prompt, dẫn tới few-shot prompting.

Few-shot prompting

Video kèm phần này: Few-Shot Prompting trên YouTube.

Dù LLM thể hiện khả năng zero-shot đáng kể, chúng vẫn chưa làm tốt các tác vụ phức tạp hơn khi dùng thiết lập zero-shot. Few-shot prompting có thể dùng như một kỹ thuật cho phép học trong ngữ cảnh (in-context learning), trong đó chúng ta đưa minh hoạ vào prompt để dẫn dắt model đạt hiệu năng tốt hơn. Các minh hoạ đóng vai trò điều kiện cho những ví dụ tiếp theo mà ta muốn model sinh câu trả lời.

Theo Touvron et al. 2023, đặc tính few-shot xuất hiện lần đầu khi model được mở rộng tới kích thước đủ lớn (Kaplan et al., 2020).

Chúng ta hãy minh hoạ few-shot prompting qua một ví dụ được trình bày trong Brown et al. 2020. Trong ví dụ, tác vụ là dùng đúng một từ mới trong câu.

Prompt:

markdown
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:

Đầu ra:

code
When we won the game, we all started to farduddle in celebration.

Có thể thấy model bằng cách nào đó đã học được cách làm tác vụ chỉ với một ví dụ (tức 1-shot). Với tác vụ khó hơn, chúng ta có thể thử tăng số minh hoạ (ví dụ 3-shot, 5-shot, 10-shot…).

Theo phát hiện của Min et al. (2022), đây là vài mẹo thêm về minh hoạ/ví dụ mẫu khi làm few-shot:

  • "không gian nhãn và phân phối của văn bản đầu vào do các minh hoạ xác định đều quan trọng (bất kể nhãn có đúng với từng đầu vào hay không)"
  • định dạng bạn dùng cũng đóng vai trò then chốt với hiệu năng; ngay cả khi chỉ dùng nhãn ngẫu nhiên, vẫn tốt hơn nhiều so với không có nhãn nào.
  • các kết quả bổ sung cho thấy chọn nhãn ngẫu nhiên từ phân phối nhãn thực (thay vì phân phối đều) cũng có ích.

Thử vài ví dụ. Trước hết là ví dụ với nhãn ngẫu nhiên (nghĩa là nhãn Negative và Positive được gán ngẫu nhiên cho đầu vào):

Prompt:

code
This is awesome! // Negative
This is bad! // Positive
Wow that movie was rad! // Positive
What a horrible show! //

Đầu ra:

code
Negative

Chúng ta vẫn nhận được câu trả lời đúng, dù nhãn đã bị xáo ngẫu nhiên. Để ý rằng chúng ta vẫn giữ định dạng, điều đó cũng giúp ích. Thực tế, qua thử nghiệm thêm, có vẻ các model GPT mới hơn đang trở nên vững vàng hơn ngay cả với định dạng ngẫu nhiên. Ví dụ:

Prompt:

code
Positive This is awesome! 
This is bad! Negative
Wow that movie was rad!
Positive
What a horrible show! --

Đầu ra:

code
Negative

Định dạng ở trên không nhất quán nhưng model vẫn dự đoán đúng nhãn. Cần phân tích kỹ hơn để xác nhận điều này có đúng với các tác vụ khác, phức tạp hơn, gồm cả các biến thể prompt khác nhau hay không.

Giới hạn của few-shot prompting

Few-shot prompting tiêu chuẩn hoạt động tốt với nhiều tác vụ nhưng chưa phải kỹ thuật hoàn hảo, nhất là với tác vụ suy luận phức tạp. Hãy minh hoạ vì sao. Bạn còn nhớ ví dụ trước với tác vụ sau:

code
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 

A: 

Nếu thử lại, model xuất ra:

code
Yes, the odd numbers in this group add up to 107, which is an even number.

Đây không phải câu trả lời đúng, điều đó không chỉ cho thấy giới hạn của các hệ thống này mà còn cho thấy cần prompt engineering nâng cao hơn.

Thử thêm vài ví dụ xem few-shot prompting có cải thiện kết quả không.

Prompt:

code
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: The answer is False.

The odd numbers in this group add up to an even number: 17,  10, 19, 4, 8, 12, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 16,  11, 14, 4, 8, 13, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 17,  9, 10, 12, 13, 4, 2.
A: The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 
A: 

Đầu ra:

code
The answer is True.

Không hiệu quả. Có vẻ few-shot prompting không đủ để có câu trả lời đáng tin cậy cho loại bài toán suy luận này. Ví dụ trên chỉ cung cấp thông tin cơ bản về tác vụ. Nhìn kỹ hơn, loại tác vụ này đòi hỏi thêm vài bước suy luận. Nói cách khác, có thể sẽ có ích nếu chúng ta chia bài toán thành các bước và minh hoạ điều đó cho model. Gần đây, chain-of-thought (CoT) prompting đã trở nên phổ biến để giải các tác vụ suy luận số học, thường thức và ký hiệu phức tạp hơn.

Nhìn chung, đưa ví dụ có ích cho việc giải một số tác vụ. Khi zero-shot và few-shot prompting đều chưa đủ, điều đó có thể có nghĩa là những gì model đã học chưa đủ để làm tốt tác vụ. Từ đây, nên bắt đầu nghĩ tới việc fine-tuning model hoặc thử các kỹ thuật prompt nâng cao hơn. Tiếp theo, chúng ta sẽ nói về một kỹ thuật prompt rất phổ biến là chain-of-thought prompting.

Nguồn