การจัดรูปแบบสำหรับการปรับแต่งคำสั่ง
โมเดลที่ปรับแต่งคำสั่ง (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
ตัวแปร 2B และ 7B ของ CodeGemma ได้รับการปรับแต่งมาเป็นพิเศษสำหรับงานการเติมโค้ด
กล่าวโดยละเอียดคือ AI ได้รับการฝึกด้วยโทเค็นการควบคุมการจัดรูปแบบ 4 รายการที่คุณสามารถใช้เพื่อช่วยสร้างพรอมต์รูปแบบสำหรับงานเขียนโค้ดแบบเติมคำกลาง (FIM)
บริบท | โทเค็น |
---|---|
คำนำหน้า FIM | <|fim_prefix|> |
คำต่อท้าย FIM | <|fim_suffix|> |
FIM middle | <|fim_middle|> |
ตัวคั่นไฟล์ | <|file_separator|> |
ใช้โทเค็น FIM เพื่อกำหนดตำแหน่งเคอร์เซอร์และบริบทรอบๆ ให้กับ CodeGemma เพื่อทำการแทรกโค้ด ใช้โทเค็นตัวคั่นไฟล์สำหรับบริบทไฟล์หลายรายการ
ตัวอย่าง - สร้างพรอมต์ FIM
ส่วนนี้จะนําตัวอย่างใน Keras CodeGemma quickstart มาใช้ซ้ำเพื่อแสดงวิธีสร้างพรอมต์สําหรับงาน FIM
ลองดูโค้ดต่อไปนี้
import |⏎ # Line 1
if __name__ == '__main__':⏎ # Line 2
sys.exit(0) # Line 3
|
แสดงตำแหน่งเคอร์เซอร์ซึ่งเป็นตำแหน่งที่ต้องเขียนโค้ดให้เสร็จสมบูรณ์ โปรดทราบว่ามีเว้นวรรคก่อนเคอร์เซอร์ และบรรทัดที่ 1 และ 2 มีบรรทัดส่งท้ายอยู่ท้ายบรรทัด
คำนำหน้าจึงจะเป็น
import
โดยเว้นวรรค 1 ช่องไว้ท้าย
คำต่อท้ายคือ
⏎
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 หรือตัวคั่นไฟล์เป็นตัวคั่นเพื่อหยุดสตรีมและรับโค้ดที่สมบูรณ์