Few-shot prompting là cho mô hình xem vài ví dụ mẫu của một tác vụ, mỗi ví dụ gồm một đầu vào kèm câu trả lời bạn muốn, trước khi đưa cho nó đầu vào thật. Mô hình đọc khuôn mẫu và tiếp tục theo đó. Ví dụ là cách nhanh nhất để chốt những điều khó diễn đạt bằng lời: ranh giới giữa hai nhóm phân loại nằm ở đâu, hình thức chính xác của đầu ra, hay giọng văn mà nhóm của bạn dùng.
Few-shot prompting hoạt động thế nào
Brown và cộng sự năm 2020, trong "Language Models are Few-Shot Learners", cho thấy GPT-3 có thể nắm được một tác vụ mới từ vài ví dụ minh họa đặt trong prompt mà không cần huấn luyện lại. Điều này gọi là in-context learning (học trong ngữ cảnh): mô hình không thay đổi gì, và các ví dụ chỉ ảnh hưởng đến câu trả lời cho đúng prompt đó. Lần sau, các ví dụ phải có mặt lại.
Tên gọi dựa trên số lượng ví dụ. Một prompt zero-shot không có ví dụ nào, prompt one-shot có một, và prompt few-shot có vài ví dụ, thường từ hai đến dăm ví dụ.
Zero-shot và few-shot, đặt cạnh nhau
Cả hai tab bên dưới yêu cầu cùng một việc với cùng một chỉ dẫn. Khác biệt duy nhất là tab thứ hai thêm bốn ví dụ đã gắn nhãn trước ticket thật.
Phân loại: bug
Người dùng đã đặt lại mật khẩu, nhưng mật khẩu mới bị từ chối khi đăng nhập. Điều đó cho thấy có vấn đề trong luồng đặt lại mật khẩu, nên nhiều khả năng đây là bug trong hệ thống xác thực.
Các ví dụ đã thay đổi hai điều. Thứ nhất là định dạng: câu trả lời zero-shot thêm một tiêu đề in đậm và một lời giải thích, còn câu trả lời few-shot làm theo các ví dụ và chỉ đưa ra một từ, thứ mà một script có thể đọc trực tiếp. Thứ hai là quyết định. "Bug" là một cách hiểu hợp lý về ticket này, và đa số mọi người sẽ chọn nó. Nhưng nhóm này xếp các vấn đề đăng nhập vào account, và ví dụ thứ ba nói lên điều đó mà không cần một lời giải thích nào. Không chỉ dẫn nào nhắc đến quy tắc đó; chính các ví dụ đã truyền tải nó.
Nên dùng bao nhiêu ví dụ
Hãy bắt đầu với hai đến năm ví dụ. Chừng đó là đủ cho hầu hết các tác vụ định dạng và phân loại, mà prompt vẫn ngắn gọn.
- Một ví dụ cho thấy định dạng, nhưng mô hình có xu hướng bắt chước quá sát. Nếu ví dụ duy nhất là một bản tóm tắt 30 từ về việc thay đổi giá, bản tóm tắt tiếp theo có thể cũng dài 30 từ và tập trung vào tiền một cách kỳ lạ.
- Hai hoặc ba ví dụ khác nhau giúp mô hình thấy điểm chung (khuôn mẫu) và điểm thay đổi (chi tiết).
- Với bài toán phân loại, đưa vào ít nhất một ví dụ cho mỗi nhãn, rồi thêm các trường hợp ranh giới từng bị làm sai khi chưa có ví dụ.
- Quá vài ví dụ, lợi ích thường giảm dần trong khi mọi request đều dài hơn, tốn thêm token và thời gian. Nếu cần đến hàng chục ví dụ mới làm đúng, có lẽ tác vụ cần một chỉ dẫn rõ hơn hoặc một cách tiếp cận khác hẳn.
Chọn ví dụ tốt
Mô hình học từ mọi điểm chung của các ví dụ, không chỉ điều bạn định dạy.
- Bao quát các trường hợp khó. Ví dụ dễ dạy được rất ít. Những ví dụ hữu ích nhất nằm ở ranh giới, như ticket đăng nhập ở trên.
- Đa dạng hóa bề ngoài. Trộn đầu vào ngắn và dài, chủ đề khác nhau và cách diễn đạt khác nhau. Nếu mọi đánh giá tích cực trong các ví dụ đều ngắn, mô hình có thể coi độ dài là tín hiệu.
- Cân bằng các nhãn và xáo trộn thứ tự. Mô hình có xu hướng nghiêng về nhãn xuất hiện nhiều nhất trong các ví dụ và về nhãn xuất hiện cuối cùng.
- Kiểm tra từng ví dụ. Một lỗi trong ví dụ chính là một chỉ dẫn để mắc lỗi đó.
- Dùng đầu vào thật. Ví dụ lấy từ dữ liệu thực tế của bạn khớp với những gì mô hình sẽ gặp hơn hẳn so với ví dụ tự nghĩ ra.
Giữ định dạng giống hệt nhau
Mọi ví dụ nên dùng cùng nhãn, cùng ký tự phân tách và cùng cách viết hoa, và đầu vào thật nên trông giống hệt các đầu vào mẫu. Trong prompt phân loại ticket, mỗi ví dụ là "Ticket:" rồi đến "Label:", và prompt kết thúc bằng một dòng "Label:" để trống, khiến chỉ còn một thứ tự nhiên để viết tiếp.
Với ví dụ dài hơn, hãy bọc mỗi ví dụ trong ký hiệu rõ ràng như thẻ <example> để mô hình biết ví dụ này kết thúc ở đâu và ví dụ sau bắt đầu ở đâu; xem dấu phân cách và thẻ XML. Trong API, bạn cũng có thể đưa ví dụ dưới dạng các lượt trước đó của cuộc trò chuyện: một tin nhắn user chứa đầu vào mẫu, rồi một tin nhắn assistant chứa câu trả lời, lặp lại cho từng ví dụ.
Prompt few-shot rất hợp để làm prompt template dùng lại nhiều lần: chỉ dẫn và ví dụ giữ cố định, chỉ có đầu vào thay đổi. Khối bên dưới viết lại một commit message theo phong cách của một nhóm. Gõ commit message của bạn vào ô và tắt phần ví dụ để xem chúng truyền tải được bao nhiêu phần phong cách.
feat(search): cho ô tìm kiếm không phân biệt chữ hoa chữ thường
Không quy tắc nào được viết ra: loại commit viết thường, phạm vi trong ngoặc đơn, câu mệnh lệnh ngắn gọn, không có dấu chấm cuối. Các ví dụ thể hiện cả bốn, và câu trả lời làm theo. Khi tắt các ví dụ, mô hình vẫn cải thiện commit message, nhưng phải đoán phong cách, và không có gì đảm bảo nó đoán trúng phong cách của bạn.
Ví dụ few-shot còn có thể minh họa cách suy luận, không chỉ câu trả lời. Các ví dụ mẫu trình bày từng bước chính là cách chain of thought prompting được giới thiệu lần đầu. Với các mô hình tự suy luận bên trong trước khi trả lời, hãy giới hạn ví dụ ở đầu vào, câu trả lời và định dạng: các bước suy luận viết sẵn có thể kéo mô hình ra khỏi một hướng đi tốt hơn, và một số nhà cung cấp khuyên nên thử zero-shot trước với những mô hình đó.
Câu hỏi thường gặp
Few-shot prompting là gì?
Few-shot prompting là đưa vào prompt vài ví dụ của một tác vụ, mỗi ví dụ gồm một đầu vào kèm đầu ra đúng, trước đầu vào thật. Mô hình tiếp tục theo khuôn mẫu mà các ví dụ đặt ra. Cách này hữu ích nhất với các nhóm phân loại tự định nghĩa, định dạng khác thường và văn phong riêng, những thứ dễ cho xem hơn là mô tả.
Một prompt few-shot nên có bao nhiêu ví dụ?
Từ hai đến năm ví dụ là điểm khởi đầu tốt cho hầu hết các tác vụ. Với bài toán phân loại, hãy đưa vào ít nhất một ví dụ cho mỗi nhãn, cộng thêm các trường hợp ranh giới mà mô hình làm sai khi không có ví dụ. Quá vài ví dụ, mỗi ví dụ thêm vào thường ít giúp ích hơn trong khi làm mọi request dài hơn.
One-shot prompting là gì?
One-shot prompting đưa cho mô hình đúng một ví dụ. Một ví dụ là đủ để cho thấy định dạng, nhưng mô hình có xu hướng bắt chước ví dụ duy nhất đó quá sát, cả độ dài, cách dùng từ và thậm chí chủ đề. Một ví dụ thứ hai, khác với ví dụ đầu, cho mô hình biết đặc điểm nào là khuôn mẫu và đặc điểm nào chỉ là ngẫu nhiên.
Mô hình có học từ các ví dụ của tôi không?
Chỉ trong request hiện tại. Các ví dụ định hình câu trả lời nhờ nằm trong ngữ cảnh; trọng số của mô hình không thay đổi, và không có gì được ghi nhớ sang cuộc trò chuyện tiếp theo. Đây gọi là in-context learning (học trong ngữ cảnh), và là lý do một prompt few-shot phải mang theo các ví dụ của nó mỗi lần bạn dùng.
Ví dụ kém có làm đầu ra tệ hơn không?
Có. Mô hình bắt chước mọi điểm chung của các ví dụ, kể cả lỗi sai, độ dài và giọng điệu mà bạn không chủ ý. Nếu phần lớn ví dụ cùng một nhãn, mô hình cũng có xu hướng nghiêng về nhãn đó. Hãy kiểm tra để các ví dụ đúng, đa dạng và cân bằng.