การจัดรูปแบบ Gemma และวิธีการของระบบ

การจัดรูปแบบสำหรับการปรับแต่งคำสั่ง

โมเดลที่ปรับแต่งการสอน (ไอที) ได้รับการฝึกด้วยการจัดรูปแบบเฉพาะที่ จะทำคำอธิบายประกอบตัวอย่างการปรับแต่งคำสั่งทั้งหมดด้วยข้อมูลเพิ่มเติม ทั้งที่ ในการฝึกและการอนุมานได้ ตัวจัดรูปแบบมีวัตถุประสงค์ 2 ประการ ได้แก่

  1. การระบุบทบาทในการสนทนา เช่น ระบบ ผู้ใช้ หรือ assistant
  2. การอธิบายเลี้ยวในการสนทนา โดยเฉพาะเมื่อเลี้ยวหลายรอบ การสนทนา

ด้านล่างนี้ เราจะระบุโทเค็นควบคุมที่ Gemma ใช้และกรณีการใช้งานของโทเค็นดังกล่าว หมายเหตุ โทเค็นควบคุมนั้นสงวนไว้และเฉพาะสำหรับเครื่องมือแปลงข้อมูลเป็นโทเค็นของเรา

  • โทเค็นที่จะระบุถึงเลี้ยวของผู้ใช้: user
  • โทเค็นที่จะระบุถึงเทิร์นโมเดล: model
  • โทเค็นที่ระบุจุดเริ่มต้นของการเปิดบทสนทนา: <start_of_turn>
  • โทเค็นที่ระบุการสิ้นสุดของกล่องโต้ตอบ: <end_of_turn>

ต่อไปนี้คือตัวอย่างกล่องโต้ตอบ

<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>

โทเค็น "<end_of_turn>\n" คือตัวคั่นเลี้ยว และคำนำหน้าพรอมต์คือ "<start_of_turn>model\n" ซึ่งหมายความว่า ถ้าคุณต้องการแจ้งให้โมเดล ด้วยคำถามเช่น "กฎของ Cramer คืออะไร" คุณควรป้อน ดังนี้

"<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model"

โปรดทราบว่าหากต้องการปรับแต่งโมเดล Gemma ที่ฝึกไว้แล้วล่วงหน้าด้วยโมเดลของคุณเอง คุณสามารถใช้สคีมาดังกล่าวกับโทเค็นควบคุมได้ ตราบใดที่มีความสอดคล้องกัน ระหว่างการฝึกและกรณีการใช้งานการอนุมาน

คำแนะนำของระบบ

สำหรับทั้งการปรับแต่งโดยมีการควบคุมดูแล (SFT) และการเรียนรู้แบบเสริมกำลังจากมนุษย์ Feedback (RLHF) โมเดลไม่ได้รับการฝึกด้วยคำสั่งของระบบ เพื่อ ผลลัพธ์ โทเค็นการจัดรูปแบบที่เกี่ยวข้องเพียงรายการเดียวสำหรับ Gemma คือ <start_of_turn> <end_of_turn>, user และ model เช่น

<start_of_turn>user
What is Cramer's Rule?<end_of_turn>
<start_of_turn>model
Cramer's Rule is ...<end_of_turn>

การจัดรูปแบบสำหรับงาน FIM

ตัวแปร CodeGemma 2B และ 7B ได้รับการปรับแต่งเป็นพิเศษสำหรับงานใส่โค้ด

โดยเฉพาะอย่างยิ่งการฝึกอบรมเกี่ยวกับโทเค็นควบคุมการจัดรูปแบบ 4 แบบที่คุณสามารถ ใช้เพื่อช่วยสร้างพรอมต์โมเดลสำหรับงานการเขียนโค้ดแบบเติมจุดกลาง (FIM)

บริบทโทเค็น
คำนำหน้า FIM <|fim_prefix|>
คำต่อท้าย FIM <|fim_suffix|>
FIM ตรงกลาง <|fim_middle|>
ตัวคั่นไฟล์ <|file_separator|>

ใช้โทเค็น FIM เพื่อกำหนดตำแหน่งเคอร์เซอร์และบริบทโดยรอบ เพื่อให้ CodeGemma สามารถแทรกโค้ดได้ ใช้โทเค็นตัวคั่นไฟล์สำหรับ ที่มีหลายไฟล์

ตัวอย่าง - สร้างพรอมต์ FIM

ส่วนนี้นำตัวอย่างใน Keras CodeGemma มาใช้ซ้ำ การเริ่มต้นอย่างรวดเร็วเพื่อแสดง วิธีสร้างพรอมต์สำหรับงาน FIM

ลองพิจารณาโค้ดต่อไปนี้

import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
   sys.exit(0) # Line 3

| จะระบุตำแหน่งของเคอร์เซอร์ซึ่งเป็นตำแหน่งที่โค้ดจำเป็นต้องมี เสร็จสมบูรณ์แล้ว โปรดทราบว่าจะมีช่องว่างก่อนเคอร์เซอร์และบรรทัดที่ 1 และ 2 มีการขึ้นย่อหน้าใหม่ตอนท้าย

คำนำหน้าจะเป็น

import

ด้วยการเว้นวรรคในตอนท้าย

คำต่อท้ายคือ

⏎
if __name__ == '__main__':⏎
   sys.exit(0)

โดยมีบรรทัดใหม่ขึ้นต้น

พรอมต์ควรสร้างในลักษณะต่อไปนี้

<|fim_prefix|>import <|fim_suffix|>⏎
if __name == '__main__':⏎
   sys.exit(0)<|fim_middle|>

โปรดทราบว่า

  • ไม่ควรมีช่องว่างเกินเข้ามาระหว่างโทเค็น FIM และคำนำหน้า และคำต่อท้าย
  • โทเค็นกลาง FIM ควรอยู่ส่วนท้ายเพื่อให้โมเดลดำเนินการต่อ กำลังเติม
  • คำนำหน้าหรือคำต่อท้ายอาจว่างเปล่า โดยขึ้นอยู่กับตำแหน่งของเคอร์เซอร์ อยู่ในไฟล์ หรือระดับบริบทที่คุณต้องการระบุโมเดล กับ

การทำความเข้าใจเอาต์พุตของโมเดล

การตอบสนองของโมเดลสำหรับตัวอย่างด้านบนจะเป็นดังนี้

<|fim_prefix|>import <|fim_suffix|>⏎
if __name__ == "__main__":\n    sys.exit(0)<|fim_middle|>sys\n<|file_separator|>

โมเดลนี้จะแจ้งเตือนอินพุตซ้ำและระบุ sys เป็นการเติมโค้ด

เมื่อใช้โมเดล CodeGemma สำหรับงาน FIM ให้สตรีมโทเค็นการตอบกลับและใช้ ใช้ FIM หรือโทเค็นตัวคั่นไฟล์เป็นตัวคั่นเพื่อหยุดสตรีมและรับ ที่ได้มีการกรอกโค้ด