การจัดรูปแบบสำหรับการปรับแต่งการสอน
โมเดลที่มีการปรับแต่งการสอน (IT) จะได้รับการฝึกด้วยตัวจัดรูปแบบเฉพาะซึ่งจะใส่คำอธิบายประกอบตัวอย่างการปรับแต่งการสอนทั้งหมดด้วยข้อมูลเพิ่มเติม ทั้งในช่วงการฝึกและการอนุมาน ตัวจัดรูปแบบมีจุดประสงค์ 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) และการเรียนรู้แบบเสริมแรงจากความคิดเห็นของมนุษย์ (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 ตัวที่คุณสามารถใช้ช่วยสร้างข้อความแจ้งของโมเดลสำหรับงานเขียนโค้ดแบบFill-In-The-Middle (FIM)
บริบท | โทเค็น |
---|---|
คำนำหน้า FIM | `< |
คำต่อท้าย FIM | `< |
FIM ปานกลาง | `< |
ตัวคั่นไฟล์ | `< |
ใช้โทเค็น 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 หรือโทเค็นตัวคั่นไฟล์เป็นตัวคั่นเพื่อหยุดสตรีมมิงและรับรหัสที่สำเร็จ