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