Integrated Development Environments (IDEs) ได้รับการสนับสนุนมายาวนานด้วยพลังและความแม่นยำของฟีเจอร์ autocompletion อย่างไรก็ตาม ผู้ท้าชิงรายใหม่ได้เข้าสู่เวทีแล้ว: Artificial Intelligence (AI) การบูรณาการ AI เข้ากับ IDEs กำลังแพร่หลายมากขึ้น ทำให้เกิดการประเมินเครื่องมือแบบดั้งเดิมใหม่ แม้ว่าวิธีการเก่าเหล่านี้จะยังคงใช้งานได้ แต่ก็อาจไม่ได้ให้ความช่วยเหลือที่ล้ำสมัยที่นักพัฒนาคาดหวังอีกต่อไป
บทความนี้ดัดแปลงมาจากบล็อกโพสต์ของ JetBrains และเจาะลึกลงไปในการฝึกอบรมและความสามารถของ Mellum ซึ่งเป็นโมเดลที่รองรับการเติมข้อความอัตโนมัติบนคลาวด์ JetBrains มีชื่อเสียงในด้าน IDEs และตัวแก้ไขโค้ดที่ปรับแต่งสำหรับโปรแกรมเมอร์ ได้พัฒนา Mellum เพื่อให้การเติมโค้ดอัตโนมัติที่รวดเร็วและมีประสิทธิภาพ Mellum ได้รับการออกแบบมาให้ทำงานได้อย่างมีประสิทธิภาพบนอุปกรณ์ในเครื่อง ทำให้แตกต่างจากโมเดลที่รวดเร็วและกะทัดรัดที่สุดในประเภทเดียวกัน โครงการที่คล้ายกันในเชิงแนวคิดคือ Microsoft Phi
การแก้ไขความท้าทายที่ชัดเจน
วิศวกรของ JetBrains พบกับความท้าทายที่สำคัญหลายประการในการแสวงหาการเติมข้อความอัตโนมัติที่ขับเคลื่อนด้วย AI:
- ความเร็วและค่าใช้จ่าย: โมเดลแชททั่วไปพิสูจน์แล้วว่าไม่สามารถใช้งานได้จริงเนื่องจากต้นทุนการคำนวณที่สูงและเวลาตอบสนองที่ช้า โมเดลเหล่านี้ยังขาดความตระหนักถึงเทคนิคเฉพาะของโค้ด เช่น fill-in-the-middle (FIM) หรือ token healing
- การจัดรูปแบบเอาต์พุต: โมเดลแชทเรือธงมักจะสร้างข้อมูลในรูปแบบที่ไม่สอดคล้องกัน ทำให้ยากต่อการแยกวิเคราะห์การตอบสนองและรวมเข้ากับตัวแก้ไขได้อย่างราบรื่น
- แหล่งที่มาของข้อมูล: การพิจารณาที่มาของข้อมูลการฝึกอบรมและการบรรเทาปัญหาการละเมิดลิขสิทธิ์ที่อาจเกิดขึ้นเป็นอุปสรรคสำคัญ
Mellum: ภาพรวม
ทีมพัฒนาที่ JetBrains ตระหนักว่าการสร้างโมเดลของตนเองเป็นแนวทางที่ดีที่สุด เป้าหมายของพวกเขาคือการออกแบบโมเดลที่สร้างสมดุลระหว่างคุณภาพ ต้นทุนการอนุมาน และเวลาแฝง ในขณะที่ได้รับการฝึกฝนจากข้อมูลที่มีแหล่งที่มาชัดเจน การวิจัยเบื้องต้นชี้ให้เห็นว่าโมเดลที่มีพารามิเตอร์ประมาณ 4 พันล้านพารามิเตอร์สามารถให้ความสามารถในการเติมข้อความอัตโนมัติที่เหมาะสมสำหรับสถานการณ์และผู้ใช้ที่หลากหลาย นอกจากนี้ โดยการฝึกอบรมโมเดลเฉพาะบนโค้ด พวกเขาสามารถสร้างคำศัพท์เฉพาะของโทเค็นได้ โดยปราศจากข้อมูลที่ไม่เกี่ยวข้อง
กระบวนการฝึกอบรมสำหรับโมเดล Mellum ประกอบด้วยสามขั้นตอนที่แตกต่างกัน แต่ละขั้นตอนมีส่วนช่วยในความรู้ใหม่และปรับปรุงคุณภาพของโค้ดที่สร้างขึ้น เฟสเริ่มต้นเกี่ยวข้องกับการฝึกอบรมล่วงหน้าขั้นพื้นฐานบนคลังไฟล์แต่ละไฟล์ขนาดใหญ่ ขั้นตอนที่สองประกอบด้วยการปรับแต่งโมเดลด้วยชุดตัวอย่างเฉพาะทางที่เล็กลง Reinforcement Learning with AI Feedback (RLAIF) ถูกใช้ในขั้นตอนที่สามเพื่อปรับโมเดลให้เข้ากับลักษณะเฉพาะของ IDE และกำจัดเอาต์พุตที่ไม่ต้องการ
การฝึกอบรมล่วงหน้า
เพื่อหลีกเลี่ยงปัญหาที่อาจเกิดขึ้นที่เกี่ยวข้องกับแหล่งที่มาของข้อมูลที่ไม่ชัดเจน โมเดลได้รับการฝึกฝนตั้งแต่เริ่มต้น ซึ่งต้องมีการแนะนำภาษา ไวยากรณ์การเขียนโปรแกรม รูปแบบ และแนวคิดหลักมากมายอย่างครอบคลุม
ชุดข้อมูล
แหล่งข้อมูลหลักสำหรับการฝึกอบรมล่วงหน้าคือ TheStack ชุดข้อมูลนี้ช่วยให้มั่นใจได้ว่าข้อมูลนั้นถูกต้องตามกฎหมายและเป็นประโยชน์ในทางปฏิบัติ
กระบวนการฝึกอบรมล่วงหน้า
ในระหว่างการฝึกอบรมล่วงหน้า ชุดข้อมูลถูกสุ่มตัวอย่างหลายครั้งเพื่อให้เข้าถึงโทเค็นประมาณ 3 ล้านล้านโทเค็น มีการใช้หน้าต่างบริบท 8192 โทเค็น โดยชุดข้อมูลจะถูกแบ่งออกเป็นส่วนๆ ที่มีขนาดนี้ การแปลง fill-in-the-middle (FIM) ถูกนำไปใช้กับครึ่งหนึ่งของไฟล์ในแต่ละส่วน โดยสนับสนุนให้โมเดลพิจารณาทั้งโค้ดที่นำหน้าและโค้ดที่ตามมา เทคนิคนี้เลียนแบบสถานการณ์การสร้างโค้ดในโลกแห่งความเป็นจริงอย่างใกล้ชิด
เฟสการฝึกอบรมล่วงหน้าดำเนินการบนคลัสเตอร์ของสิบหกโหนด โดยแต่ละโหนดติดตั้ง H100 GPUs แปดตัว ขั้นตอนนี้ใช้เวลาประมาณ 15 วันจึงจะเสร็จสมบูรณ์ ส่งผลให้เกิดโมเดล Mellum-base ที่มีพารามิเตอร์ 4 พันล้านพารามิเตอร์
การฝึกอบรมล่วงหน้าสร้างโมเดลเติมโค้ดอัตโนมัติเอนกประสงค์ที่มีความรู้มากมายเกี่ยวกับภาษาโปรแกรมมากมาย อย่างไรก็ตาม ในขั้นตอนนี้ โมเดลได้รับการฝึกฝนให้ทำนายโทเค็นถัดไปในส่วนไฟล์ที่เลือกแบบสุ่มเท่านั้น หากไม่มีบริบทเพิ่มเติม โมเดลจะขาดความตระหนักถึงโครงสร้างโค้ดและไม่มีกลไกในการพิจารณาว่าจะหยุดสร้างโค้ดเมื่อใด
ขั้นตอนการปรับแต่งได้รับการออกแบบมาเพื่อแก้ไขข้อจำกัดเหล่านี้
การปรับแต่งตามบริบท
Fill-in-the-Middle ที่ปรับปรุงแล้ว
แตกต่างจากการฝึกอบรมล่วงหน้า ซึ่งส่วนโค้ดถูกเลือกแบบสุ่มสำหรับการทำนาย การปรับแต่งจะเน้นที่การแบ่งส่วนโค้ดในลักษณะที่มีความหมายมากขึ้น สอนให้โมเดลแยกส่วนโค้ดที่เกิดขึ้น ‘ในป่า’
ตัวอย่างเฉพาะทาง
ในทางปฏิบัติ การเติมโค้ดอัตโนมัติต้องอาศัยความเข้าใจไฟล์โดยรอบและบริบทที่กว้างขึ้น ซึ่งอาจครอบคลุมทั้งโครงการ
สำหรับการประมวลผลข้อมูลล่วงหน้า บริษัทได้เปิดตัวโครงการภายในชื่อรหัส Code Engine: SDK ข้ามแพลตฟอร์มและชุดยูทิลิตี้คอนโซลที่พัฒนาขึ้นเพื่อสร้างบริบทโดยตรงจากไฟล์ธรรมดาโดยไม่ต้องมีการจัดทำดัชนีโครงการทั้งหมด SDK นี้ถูกนำไปใช้บนคลัสเตอร์ MapReduce ภายในและใช้ในการประมวลผลที่เก็บสาธารณะหลายพันแห่ง สร้างตัวอย่างที่เป็นประโยชน์มากมายสำหรับการฝึกอบรมภายในระยะเวลาที่เหมาะสม
การค้นหาอัลกอริทึมที่ถูกต้องต้องใช้การลองผิดลองถูก
การปรับแต่งสำหรับภาษาเฉพาะ
โมเดลขนาดเล็กสามารถได้รับประโยชน์อย่างมากจากการเชี่ยวชาญสำหรับภาษาเฉพาะ ในขณะที่โมเดลพื้นฐานได้รับการฝึกฝนในกว่า 80 ภาษา ผู้ใช้ส่วนใหญ่มักจะทำงานกับเพียงหนึ่งหรือสองภาษา เพื่อแก้ไขปัญหานี้ JetBrains ได้สร้างโมเดลเฉพาะทางหลายแบบ:
- mellum-all: รองรับภาษาและภาษาถิ่นส่วนใหญ่ที่มีอยู่ใน JetBrains IDEs แต่คุณภาพการเติมข้อความอัตโนมัติน้อยกว่าโมเดลเฉพาะทาง
- mellum-python: เชี่ยวชาญด้าน Python และ Jupyter
- mellum-kotlin: เชี่ยวชาญด้าน Java และ Kotlin
- mellum-web: เชี่ยวชาญด้านเทคโนโลยีเว็บ
ขั้นตอนสุดท้าย: RLAIF
สุดท้าย กรณีที่เป้าหมายการเรียนรู้ไม่ตรงกับความคาดหวังของผู้ใช้จะต้องได้รับการแก้ไข เฟสการฝึกอบรมเพิ่มเติม RLAIF — Reinforcement Learning with AI Feedback ใช้เพื่อแก้ไขปัญหาดังกล่าว
โมเดลเรียนรู้จากการโต้ตอบของผู้ใช้และเข้าใจวิธีสะท้อนความต้องการของผู้ใช้ได้ดีขึ้น
แนวทางนี้ไม่เพียงแต่ปรับปรุงคะแนนคุณภาพโดยรวมเท่านั้น แต่ยังช่วยลดจำนวนสิ่งประดิษฐ์รุ่นที่น่ารำคาญอีกด้วย
Mellum ดีแค่ไหน?
โมเดลทำงานได้ดีเป็นพิเศษสำหรับขนาดของมัน นี่คือวิธีการประเมิน:
- ขั้นแรก โมเดลได้รับการประเมินบนเกณฑ์มาตรฐานภายในชื่อรหัส ‘JetBrains BigCode’
- จากนั้นจึงทดสอบกับเกณฑ์มาตรฐานสาธารณะที่รู้จักกันดี เช่น SAFIM
- สุดท้าย สถิติการใช้งานสำหรับคุณสมบัติได้รับการรวบรวม และมีการคำนวณเมตริกผู้ใช้
การประเมินแบบออฟไลน์
การรวบรวมข้อมูลเป็นงานที่ซับซ้อน แต่การสร้างเมตริกที่ดีที่เปรียบเทียบคำแนะนำเดิมกับคำแนะนำใหม่ที่เสนอโดยโครงข่ายประสาทเทียมนั้นท้าทายยิ่งกว่า เราได้ทำการศึกษาเล็กๆ น้อยๆ และในที่สุดก็ตัดสินใจใช้การรวมกันของสองเมตริกหลัก:
EM:
- Exact Match เป็นแนวคิดที่ได้รับความนิยมอย่างมาก
- การทำนายถือว่าดีหากบรรทัดแรกของการเติมข้อความตรงกับบรรทัดแรกของต้นฉบับ โดยมีการประมวลผลล่วงหน้าน้อยที่สุด
KK:
- เมตริกนี้ตั้งชื่อตามผู้เขียน
- จำนวนบรรทัดที่เสนอจากต้นฉบับหารด้วยจำนวนบรรทัดในการเติมข้อความที่เสนอ
JetBrains BigCode
โมเดลได้รับการประเมินเทียบกับชุดข้อมูลเกณฑ์มาตรฐานที่ได้รับโดยใช้เครื่องมือ JetBrains BigCode ภายใน
ด้วยการรักษาการควบคุมชุดข้อมูลของเราอย่างเต็มที่ แทนที่จะพึ่งพาเกณฑ์มาตรฐานสาธารณะ จึงเป็นไปได้ที่จะประเมินคุณภาพของโมเดลสำหรับรูปแบบและแนวทางการเขียนโค้ดต่างๆ ได้อย่างน่าเชื่อถือ
ผลลัพธ์ของการประเมิน JetBrains BigCode ของเราแสดงให้เห็นคุณภาพที่เทียบเท่ากับโมเดลยอดนิยม แต่ Mellum มีขนาดเล็กกว่าและมีประสิทธิภาพมากกว่า
คุณภาพของคำแนะนำบรรทัดเดียว (เมตริก EM)
เกณฑ์มาตรฐานสาธารณะ
โมเดลได้รับการประเมินไม่เพียงแต่ในชุดข้อมูลภายในเท่านั้น แต่ยังรวมถึงเกณฑ์มาตรฐานสาธารณะต่างๆ เช่น เกณฑ์มาตรฐาน SAFIM แบบหลายภาษา (syntax-aware fill in the middle)
การประเมินออนไลน์
เมตริกหลักเรียกว่าอัตราส่วนของโค้ดที่เสร็จสมบูรณ์ (RoCC) กำหนดเป็นอัตราส่วนของอักขระโค้ดที่เขียนโดยใช้การเติมโค้ดอัตโนมัติต่อปริมาณโค้ดทั้งหมดในตัวแก้ไข
อีกเมตริกที่สำคัญคืออัตราการยอมรับ (AR) ซึ่งคำนวณเป็นจำนวนคำแนะนำที่ยอมรับหารด้วยจำนวนคำแนะนำทั้งหมดที่แสดง
นี่เป็นการเดินทางที่ซับซ้อน แต่ผู้เชี่ยวชาญของ JetBrains ได้ทำสำเร็จด้วยศักดิ์ศรี ในท้ายที่สุด มีโมเดลทั่วไปหนึ่งโมเดลและโมเดลเฉพาะทางหลายโมเดลที่ได้รับ ซึ่งมีอยู่ในแพลตฟอร์ม JetBrains AI ขณะนี้พวกเขากำลังทำงานใน JetBrains AI Assistant ได้สำเร็จ
มีอะไรต่อไป?
- วิศวกรของ JetBrains กำลังทำงานกับโมเดลสำหรับภาษาการพัฒนาเว็บ อาจเปิดให้ใช้งานได้ในอนาคตอันใกล้นี้
- มีแผนที่จะเพิ่มทั้งจำนวนพารามิเตอร์และความหลากหลายของข้อมูลไปพร้อมๆ กัน มีงานที่แตกต่างกันมากมายในการเขียนโค้ด — Mellum จะสามารถทำงานเหล่านั้นได้เช่นกัน ประสิทธิภาพของบริการยังคงเป็นเมตริกหลัก ดังนั้นการขยายโมเดลจะอยู่ในขอบเขตที่สมเหตุสมผล