Định dạng Gemma và hướng dẫn về hệ thống

Định dạng để điều chỉnh hướng dẫn

Các mô hình được điều chỉnh theo hướng dẫn (IT) được huấn luyện bằng một định dạng cụ thể, chú giải tất cả các ví dụ điều chỉnh lệnh bằng thông tin bổ sung, cả trong thời gian huấn luyện và dự đoán. Trình định dạng có hai mục đích:

  1. Cho biết các vai trò trong một cuộc trò chuyện, chẳng hạn như vai trò hệ thống, người dùng hoặc trợ lý.
  2. Mô tả xu hướng trong một cuộc trò chuyện, đặc biệt là trong một cuộc trò chuyện nhiều lượt.

Dưới đây, chúng tôi 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 chúng. Xin lưu ý rằng các mã thông báo điều khiển đượ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 cho biết lượt của người dùng: user
  • Mã thông báo cho biết ngã rẽ mô hình: model
  • Mã thông báo cho biết bắt đầu lượt hộp thoại: <start_of_turn>
  • Mã thông báo cho biết kết thúc lượt hộp thoại: <end_of_turn>

Dưới đây là một hộp 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 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 cấp dữ liệu cho 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 muốn tinh chỉnh các mô hình Gemma đã huấn luyện trước cơ sở 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 điều khiển, miễn là giản đồ đó nhất quán giữa các trường hợp sử dụng trong quá trình huấn luyện và dự đoán.

Hướng dẫn hệ thống

Đối với cả tính năng 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 theo hướng dẫn của hệ thống. Do đó, các mã thông báo định dạng phù hợp duy nhất cho Gemma là <start_of_turn>, <end_of_turn>, usermodel. 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ụ điền mã.

Cụ thể, họ sẽ được huấn luyện về 4 mã thông báo kiểm soát định dạng mà bạn có thể dùng để xây dựng lời nhắc mô hình cho các tác vụ lập trình điền vào giữa (FIM).

Bối cảnh Mã thông báo
Tiền tố FIM `<
Hậu tố FIM `<
FIM giữa `<
Dòng phân cách tệp `<

Sử dụng mã thông báo FIM để xác định vị trí con trỏ và ngữ cảnh xung quanh để CodeGemma thực hiện việc điền mã. Sử dụng mã thông báo dòng phân cách tệp cho bối cảnh nhiều tệp.

Ví dụ – Tạo lời nhắc FIM

Phần này sử dụng lại ví dụ trong phần khởi động 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à các dòng 1 và 2 có ký tự trả về 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 phải có cấu trúc 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ố cũng như hậu tố
  • Mã thông báo giữa FIM phải ở cuối để giúp mô hình tiếp tục điền
  • Tiền tố hoặc hậu tố có thể trống tuỳ thuộc vào vị trí hiện tại của con trỏ trong tệp hoặc tuỳ thuộc vào lượng ngữ cảnh mà bạn muốn cung cấp cho mô hình

Tìm hiểu đầ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 này lặp lại lời nhắc nhập và cung cấp sys dưới dạng hoàn tất mã.

Khi sử dụng mô hình CodeGemma cho các nhiệm vụ FIM, mã thông báo phản hồi theo luồng và dùng mã thông báo FIM hoặc mã phân tách tệp làm dấu phân cách để dừng truyền trực tuyến và nhận kết quả mã hoàn tất.