Menu

Zero-shot prompting: ví dụ và khi nào hiệu quả

Zero-shot prompting là yêu cầu mô hình làm một việc chỉ dựa vào chỉ dẫn, không kèm ví dụ đáp án nào. Đây là cách phần lớn mọi người dùng ChatGPT, Claude và Gemini, và nó hiệu quả khi việc cần làm phổ biến và chỉ dẫn rõ ràng.

Mọi prompt bên dưới đều có thể chỉnh sửa: thay đổi nó, rồi mở trong ChatGPT, Claude hoặc ứng dụng AI khác.

Zero-shot prompting là yêu cầu mô hình làm một việc chỉ dựa vào chỉ dẫn, không cho nó xem ví dụ nào về câu trả lời bạn muốn. "Dịch đoạn này sang tiếng Tây Ban Nha" và "Tóm tắt email này trong hai câu" đều là prompt zero-shot. Đây là cách mặc định mà mọi người dùng mô hình chat, và với những việc phổ biến, thường chỉ cần như vậy là đủ.

Zero-shot nghĩa là gì

Trong học máy, một "shot" là một ví dụ làm sẵn. Các thuật ngữ này có từ trước các mô hình chat, nhưng nghĩa của chúng trong viết prompt được phổ biến nhờ bài báo của Brown và cộng sự năm 2020, "Language Models are Few-Shot Learners", thử nghiệm GPT-3 trong ba thiết lập: mô tả công việc kèm không, một hoặc vài minh họa trong prompt, và không huấn luyện lại ở thiết lập nào. Với mô hình đó, có vài ví dụ thường tốt hơn không có ví dụ nào.

Kể từ đó, các mô hình chat được huấn luyện rất kỹ về việc làm theo chỉ dẫn, nên một yêu cầu đơn giản giờ đây hiệu quả đến vậy. Prompt zero-shot chính là tình huống mà chúng được huấn luyện cho: ai đó mô tả một việc bằng lời và mong nó được làm xong.

Zero-shot không có nghĩa là không có ngữ cảnh. Một prompt zero-shot tốt vẫn nêu rõ người đọc là ai, dán đầu vào, mô tả định dạng và các giới hạn. Thứ duy nhất nó bỏ đi là một ví dụ đầu ra hoàn chỉnh.

Một prompt zero-shot viết tốt

Prompt dưới đây trích các việc cần làm từ biên bản họp mà không có ví dụ đầu ra nào, chỉ có một mô tả chính xác về đầu ra đó. Hãy tắt từng phần để xem dòng nào đang làm việc.

Việc cần làm từ biên bản họp
Parts
Lấy ra các việc cần làm từ biên bản họp này.
Danh sách sẽ được đưa vào công cụ quản lý công việc của nhóm, nên mỗi mục cần đúng một người phụ trách.
Mỗi mục một dòng: người phụ trách, dấu hai chấm, công việc bắt đầu bằng một động từ, rồi hạn chót trong ngoặc đơn nếu biên bản có nêu.
Chỉ đưa vào những việc đã có người nhận làm. Bỏ qua các cuộc thảo luận và ý tưởng chưa ai nhận. Nếu một việc chưa có người phụ trách, ghi "Chưa phân công" ở vị trí người phụ trách.
Họp sprint, thứ Ba Priya sẽ sửa lỗi hết thời gian chờ khi đăng nhập trước thứ Sáu. Bàn về việc chuyển sang nhà cung cấp CI mới, chưa quyết định. Tom viết ghi chú phát hành cho bản 2.4. Ai đó nên cập nhật tài liệu hướng dẫn nhân viên mới. Lena: Mình sẽ duyệt ghi chú của Tom trước thứ Năm.
Try it
Example replyReplies vary between models and runs.

Priya: Sửa lỗi hết thời gian chờ khi đăng nhập (trước thứ Sáu) Tom: Viết ghi chú phát hành cho bản 2.4 Chưa phân công: Cập nhật tài liệu hướng dẫn nhân viên mới Lena: Duyệt ghi chú phát hành của Tom (trước thứ Năm)

Dòng định dạng làm đúng việc mà một ví dụ sẽ làm: nó mô tả chính xác hình dạng của từng dòng, nên không cần gì để bắt chước. Tắt dòng đó đi, câu trả lời sẽ tự chọn hình dạng, thường là một danh sách gạch đầu dòng với tên in đậm, đọc thì ổn nhưng không còn dán gọn gàng vào công cụ quản lý công việc được nữa. Tắt phần giới hạn đi, cuộc thảo luận về CI có thể xuất hiện như một việc cần làm, vì không có gì cho mô hình biết rằng chủ đề chưa quyết định thì không tính.

Khi nào zero-shot là đủ

Zero-shot hiệu quả khi mô hình có thể suy ra mọi thứ từ lời của bạn:

  • Công việc phổ biến. Tóm tắt, dịch, giải thích, sửa ngữ pháp và viết một hàm theo đặc tả rõ ràng đều là những việc mô hình đã gặp vô số lần khi huấn luyện.
  • Bạn mô tả được đầu ra một cách chính xác. "Mỗi mục một dòng, người phụ trách đứng đầu" rõ ràng không kém một ví dụ. Xem đầu ra có cấu trúc để biết cách mô tả định dạng mà một chương trình sẽ đọc.
  • Các nhãn phân loại mang đúng nghĩa của chúng. Phân loại đánh giá thành tích cực và tiêu cực thường không cần ví dụ, vì các nhãn đó có cùng nghĩa với gần như tất cả mọi người.

Khi nào nên thêm ví dụ

Có những thứ khó diễn đạt bằng lời, và đó là chỗ prompt zero-shot bắt đầu trượt:

  • Ranh giới riêng của bạn. Nếu nhóm hỗ trợ của bạn xếp "không đăng nhập được" vào vấn đề tài khoản chứ không phải bug, mô hình không thể biết điều đó. Nó sẽ chọn cách hiểu mà phần lớn mọi người chọn.
  • Văn phong riêng. Commit message của nhóm hay giọng văn của bản tin dễ cho xem hơn là mô tả.
  • Lặp đi lặp lại kiểu suýt đúng. Nếu bạn đã viết lại chỉ dẫn hai lần mà đầu ra vẫn hơi lệch theo cùng một kiểu, hãy thôi viết lại và cho xem hai ba câu trả lời đúng.

Đó chính là few-shot prompting. Một thói quen hợp lý là bắt đầu với zero-shot, xem kết quả trả về, rồi chỉ thêm ví dụ cho đúng điểm mà nó làm sai.

Zero-shot chain of thought

Kojima và cộng sự năm 2022, trong "Large Language Models are Zero-Shot Reasoners", phát hiện rằng thêm một câu, "Let's think step by step" (Hãy suy nghĩ từng bước), giúp các mô hình lớn làm tốt hơn rõ rệt với bài toán số học, ký hiệu và logic, mà không cần ví dụ nào. Câu này khiến mô hình viết ra các bước trung gian trước câu trả lời, và mỗi bước nó viết trở thành ngữ cảnh cho bước tiếp theo. Phương pháp của họ dùng hai lần gọi: lần đầu tạo ra phần suy luận, lần thứ hai yêu cầu câu trả lời cuối cùng.

Trong khối bên dưới, tab thứ nhất bắt mô hình trả lời ngay, còn tab thứ hai cho mô hình không gian để tính toán.

Một chuyến tàu dự kiến khởi hành lúc 9:40. Tàu khởi hành trễ 25 phút. Chuyến đi bình thường mất 2 giờ 35 phút, nhưng trên đường tàu bù lại được 10 phút. Tàu đến nơi lúc mấy giờ? Chỉ trả lời bằng giờ.
Try it
Example replyReplies vary between models and runs.

12:40

Câu trả lời đầu tiên đã bỏ sót 10 phút tàu bù lại: kiểu sơ suất xảy ra khi mô hình phải chốt câu trả lời ngay trong vài token đầu tiên. Một mô hình hiện nay có thể trả lời đúng câu này dù theo cách nào; khoảng cách lớn dần theo số bước của bài toán. Phiên bản thứ hai còn một lợi thế nữa: mọi bước đều hiện ra, nên bạn thấy được câu trả lời sai ở đâu.

Những mô hình tự suy luận bên trong trước khi trả lời đã làm việc này mà không cần được yêu cầu, nên "Let's think step by step" gần như không thêm gì cho chúng ngoài một câu trả lời dài hơn. Chain of thought prompting trình bày kỹ thuật này chi tiết hơn, kể cả phiên bản few-shot.

So sánh nhanh zero-shot và few-shot

Zero-shotFew-shot
Prompt chứa gìChỉ dẫn, ngữ cảnh và đầu vàoNhư vậy, cộng thêm vài cặp đầu vào và câu trả lời
Phù hợp nhất choViệc phổ biến với đầu ra dễ mô tảNhãn tự đặt, định dạng khác thường, văn phong riêng
Chi phíPrompt ngắnPrompt dài hơn, nhiều token hơn mỗi lần gọi
Lỗi thường gặpChọn cách hiểu phổ biến nhất, không phải cách của bạnBắt chước những mẫu vô tình có trong ví dụ

Câu hỏi thường gặp

Zero-shot prompting là gì?

Zero-shot prompting là giao cho mô hình ngôn ngữ một việc chỉ bằng chỉ dẫn, không kèm ví dụ đầu ra làm sẵn. "Tóm tắt email này trong hai câu" là một prompt zero-shot. Các mô hình chat hiện đại được huấn luyện để làm theo chỉ dẫn, nên prompt zero-shot xử lý tốt phần lớn công việc hằng ngày.

Zero-shot và few-shot prompting khác nhau thế nào?

Prompt zero-shot mô tả công việc bằng lời. Prompt few-shot thêm vài ví dụ, mỗi ví dụ là một đầu vào đi kèm câu trả lời bạn muốn, để mô hình có thể bắt chước theo mẫu. Hãy bắt đầu với zero-shot; chuyển sang few-shot khi đầu ra cứ trượt một định dạng hoặc một sự phân biệt mà cho xem thì dễ hơn mô tả.

Vì sao gọi là zero-shot?

Trong học máy, một "shot" là một ví dụ làm sẵn. Bài báo GPT-3 năm 2020 của Brown và cộng sự, "Language Models are Few-Shot Learners", đã thử mô hình với không, một hoặc vài minh họa của một công việc trong prompt, và từ đó các tên gọi này trở thành chuẩn trong viết prompt: zero-shot, one-shot và few-shot.

Khi nào zero-shot prompting không hiệu quả?

Nó gặp khó khi công việc phụ thuộc vào những quy tắc chỉ bạn biết, như cách phân loại riêng của nhóm hay văn phong của công ty, khi định dạng đầu ra khác thường, và với suy luận nhiều bước khi mô hình trả lời quá vội. Ví dụ giải quyết được hai trường hợp đầu; yêu cầu mô hình làm từng bước giúp với trường hợp thứ ba.

Zero-shot chain of thought là gì?

Đó là một prompt zero-shot yêu cầu mô hình suy luận trước khi trả lời, nổi tiếng nhất là thêm câu "Let's think step by step." (Hãy suy nghĩ từng bước). Năm 2022, Kojima và cộng sự cho thấy chỉ một câu này, không cần ví dụ nào, đã cải thiện kết quả của các mô hình lớn với bài toán số học và logic.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu