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