Định dạng để điều chỉnh hướng dẫn
Các mô hình được điều chỉnh hướng dẫn (IT) được huấn luyện bằng một trình định dạng cụ thể. Trình định dạng này chú thích tất cả các ví dụ về việc điều chỉnh hướng dẫn bằng thông tin bổ sung, cả tại thời điểm huấn luyện và suy luận. Trình định dạng có hai mục đích:
- Cho biết vai trò trong cuộc trò chuyện, chẳng hạn như vai trò hệ thống, người dùng hoặc trợ lý.
- Xác định lượt nói trong một cuộc trò chuyện, đặc biệt là trong một cuộc trò chuyện nhiều lượt nói.
Dưới đây, chúng ta chỉ định mã thông báo điều khiển mà Gemma sử dụng và các trường hợp sử dụng của mã thông báo đó. Xin lưu ý rằng các mã thông báo điều khiển được dành riêng cho trình tạo mã thông báo của chúng tôi.
- Mã thông báo cho biết lượt chuyển của người dùng:
user
- Mã thông báo cho biết một lượt chuyển đổi mô hình:
model
- Mã thông báo cho biết thời điểm bắt đầu lượt thoại:
<start_of_turn>
- Mã thông báo cho biết thời điểm kết thúc lượt trò chuyện:
<end_of_turn>
Dưới đây là một ví dụ về cuộc trò chuyện:
<start_of_turn>user
knock knock<end_of_turn>
<start_of_turn>model
who is there<end_of_turn>
<start_of_turn>user
Gemma<end_of_turn>
<start_of_turn>model
Gemma who?<end_of_turn>
Mã thông báo "<end_of_turn>\n"
là dấu phân cách lượt rẽ và tiền tố lời nhắc là "<start_of_turn>model\n"
. Điều này có nghĩa là nếu muốn nhắc mô hình bằng một câu hỏi như "Quy tắc Cramer là gì?", bạn nên cung cấp cho mô hình như sau:
"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"
Xin lưu ý rằng nếu muốn tinh chỉnh các mô hình Gemma được huấn luyện trước bằng dữ liệu của riêng mình, bạn có thể sử dụng bất kỳ giản đồ nào như vậy cho mã thông báo kiểm soát, miễn là giản đồ đó nhất quán giữa các trường hợp sử dụng huấn luyện và suy luận.
Hướng dẫn về hệ thống
Đối với cả phương pháp tinh chỉnh có giám sát (SFT) và học tăng cường từ phản hồi của con người (RLHF), các mô hình không được huấn luyện bằng hướng dẫn của hệ thống. Do đó, các mã định dạng duy nhất có liên quan cho Gemma là <start_of_turn>
, <end_of_turn>
, user
và model
. Ví dụ:
<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>
Định dạng cho các tác vụ FIM
Các biến thể 2B và 7B của CodeGemma được điều chỉnh đặc biệt cho các tác vụ điền mã.
Cụ thể, chúng được huấn luyện trên 4 mã thông báo kiểm soát định dạng mà bạn có thể sử dụng để giúp tạo lời nhắc mô hình cho các nhiệm vụ lập trình điền vào giữa (FIM).
Ngữ cảnh | Mã thông báo |
---|---|
Tiền tố FIM | <|fim_prefix|> |
Hậu tố FIM | <|fim_suffix|> |
Trung tâm FIM | <|fim_middle|> |
Dấu phân cách tệp | <|file_separator|> |
Sử dụng mã thông báo FIM để xác định vị trí con trỏ và ngữ cảnh xung quanh con trỏ đó để CodeGemma thực hiện việc điền mã. Sử dụng mã thông báo dấu phân cách tệp cho các ngữ cảnh nhiều tệp.
Ví dụ – Tạo câu lệnh FIM
Phần này sử dụng lại ví dụ trong phần Bắt đầu nhanh Keras CodeGemma để hướng dẫn bạn cách tạo lời nhắc cho các tác vụ FIM.
Hãy xem xét mã sau:
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
cho biết vị trí của con trỏ, là nơi cần hoàn tất mã. Lưu ý rằng có một khoảng trắng trước con trỏ và dòng 1 và 2 có dấu xuống dòng ở cuối.
Tiền tố là then,
import
có một dấu cách ở cuối.
Hậu tố là:
⏎
if __name__ == '__main__':⏎
sys.exit(0)
với một dòng mới ở đầu.
Bạn nên tạo câu lệnh như sau:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
sys.exit(0)<|fim_middle|>
Lưu ý:
- Không được có khoảng trắng thừa giữa bất kỳ mã thông báo FIM nào và tiền tố cũng như hậu tố
- Mã thông báo giữa FIM phải ở cuối để chuẩn bị cho mô hình tiếp tục điền vào
- Tiền tố hoặc hậu tố có thể để trống tuỳ thuộc vào vị trí con trỏ hiện tại trong tệp hoặc lượng ngữ cảnh bạn muốn cung cấp cho mô hình
Tìm hiểu về đầu ra của mô hình
Phản hồi của mô hình cho ví dụ trên sẽ là:
<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n sys.exit(0)<|fim_middle|>sys\n<|file_separator|>
Mô hình lặp lại lời nhắc nhập và cung cấp sys
làm mã hoàn tất.
Khi sử dụng mô hình CodeGemma cho các tác vụ FIM, hãy truyền trực tuyến mã thông báo phản hồi và sử dụng mã thông báo FIM hoặc mã thông báo dòng phân cách tệp làm dấu phân cách để ngừng truyền trực tuyến và nhận kết quả hoàn tất mã.