repo นี้มีสูตรอาหารแบบ end-to-end เพื่อ pretrain และ finetune the bert (การแสดงตัวเข้ารหัสแบบสองทิศทางจาก Transformers) รูปแบบการแสดงภาษาโดยใช้บริการการเรียนรู้ของเครื่อง Azure
อัปเดตเมื่อวันที่ 7/7/2020 :? การใช้งานล่าสุดสำหรับ Bert pretraining ที่ https://github.com/microsoft/onnxruntime-training-examples/tree/master/nvidia-bert นั้นเร็วกว่าการใช้งานใน repo นี้อย่างมาก การใช้งานนั้นใช้ Runtime ONNX เพื่อเร่งการฝึกอบรมและสามารถใช้ในสภาพแวดล้อมกับ GPU รวมถึงบริการการเรียนรู้ของเครื่อง Azure Machine รายละเอียดเกี่ยวกับการใช้ ONNX Runtime สำหรับการฝึกอบรมและเร่งการฝึกอบรมรุ่นหม้อแปลงเช่น BERT และ GPT-2 มีอยู่ในบล็อกที่ ONNX Runtime Training Technical Deep Dive
เบิร์ตเป็นรูปแบบการแสดงภาษาที่โดดเด่นด้วยความสามารถในการจับความสัมพันธ์ที่ลึกซึ้งและลึกซึ้งในคลังข้อมูลอย่างมีประสิทธิภาพ ในบทความต้นฉบับผู้เขียนแสดงให้เห็นว่าโมเดล BERT สามารถปรับเปลี่ยนได้อย่างง่ายดายเพื่อสร้างโมเดลที่ทันสมัยสำหรับงาน NLP จำนวนหนึ่งรวมถึงการจำแนกประเภทข้อความการจดจำเอนทิตีและตอบคำถาม ใน repo นี้เรามีโน้ตบุ๊กที่อนุญาตให้นักพัฒนาสามารถเตรียมรุ่น Bert ได้ตั้งแต่เริ่มต้นบนคลังข้อมูลรวมถึงการปรับแต่งโมเดลเบิร์ตที่มีอยู่เพื่อแก้ปัญหาพิเศษ การแนะนำสั้น ๆ เกี่ยวกับ Bert มีอยู่ใน repo นี้เพื่อเริ่มต้นอย่างรวดเร็วใน Bert
การปรับรูปแบบการเป็นตัวแทนภาษาเบิร์ตในระดับความแม่นยำที่ต้องการนั้นค่อนข้างท้าทาย เป็นผลให้นักพัฒนาส่วนใหญ่เริ่มต้นจากแบบจำลอง Bert ที่ได้รับการฝึกอบรมล่วงหน้าในคลังมาตรฐาน (เช่น Wikipedia) แทนที่จะฝึกจากศูนย์ กลยุทธ์นี้ทำงานได้ดีหากโมเดลสุดท้ายได้รับการฝึกฝนในคลังข้อมูลที่คล้ายกับคลังข้อมูลที่ใช้ในขั้นตอนก่อนรถไฟ อย่างไรก็ตามหากปัญหาเกี่ยวข้องกับคลังข้อมูลพิเศษที่ค่อนข้างแตกต่างจากคลังมาตรฐานผลลัพธ์จะไม่เหมาะสม นอกจากนี้เพื่อการแสดงภาษาที่เพิ่มขึ้นนอกเหนือจากความแม่นยำของเบิร์ตผู้ใช้จะต้องเปลี่ยนสถาปัตยกรรมแบบจำลองข้อมูลการฝึกอบรมฟังก์ชั่นต้นทุนงานและรูทีนการเพิ่มประสิทธิภาพ การเปลี่ยนแปลงทั้งหมดเหล่านี้จำเป็นต้องมีการสำรวจที่พารามิเตอร์ขนาดใหญ่และขนาดข้อมูลการฝึกอบรม ในกรณีของ Bert-Large สิ่งนี้อาจค่อนข้างสำคัญเนื่องจากมีพารามิเตอร์ 340 ล้านตัวและได้รับการฝึกฝนผ่านคลังเอกสารขนาดใหญ่มาก เพื่อสนับสนุนสิ่งนี้ด้วย GPU วิศวกรการเรียนรู้ของเครื่องจะต้องมีการสนับสนุนการฝึกอบรมแบบกระจายเพื่อฝึกอบรมรุ่นใหญ่เหล่านี้ อย่างไรก็ตามเนื่องจากความซับซ้อนและความเปราะบางของการกำหนดค่าสภาพแวดล้อมแบบกระจายเหล่านี้แม้กระทั่งการปรับแต่งผู้เชี่ยวชาญก็สามารถจบลงด้วยผลลัพธ์ที่ต่ำกว่าจากรุ่นที่ผ่านการฝึกอบรม
เพื่อแก้ไขปัญหาเหล่านี้ repo นี้กำลังเผยแพร่เวิร์กโฟลว์สำหรับรุ่นที่มีขนาดใหญ่ของ Bert นักพัฒนาสามารถสร้างรูปแบบการเป็นตัวแทนภาษาของตนเองเช่น Bert โดยใช้ข้อมูลเฉพาะโดเมนของพวกเขาใน GPU ไม่ว่าจะด้วยฮาร์ดแวร์ของตัวเองหรือใช้บริการการเรียนรู้ของเครื่อง Azure สูตร pretrain ใน repo นี้รวมถึงชุดข้อมูลและสคริปต์การประมวลผลล่วงหน้าเพื่อให้ทุกคนสามารถทดลองกับการสร้างแบบจำลองการแสดงภาษาวัตถุประสงค์ทั่วไปของตนเองนอกเหนือจากเบิร์ต โดยรวมแล้วนี่เป็นสูตรที่เสถียรและคาดการณ์ได้ซึ่งมาบรรจบกันที่ดีที่สุดสำหรับนักวิจัยที่จะลองสำรวจด้วยตนเอง
สูตรการเตรียมการใน repo นี้ขึ้นอยู่กับแพ็คเกจ pytorch pretrained bert v0.6.2 แพ็คเกจจากการกอดใบหน้า การใช้งานในสูตรการเตรียมการนี้รวมถึงเทคนิคการปรับให้เหมาะสมเช่น gradient accumulation (การไล่ระดับสีจะสะสมไว้สำหรับมินิแบทช์ขนาดเล็กก่อนที่จะอัปเดตน้ำหนักรุ่น) และ mixed precision training โมดูลโน้ตบุ๊กและ Python สำหรับการเตรียมการมีอยู่ที่ไดเรกทอรี pretrain
การเตรียมข้อมูลเป็นหนึ่งในขั้นตอนสำคัญในโครงการเรียนรู้ของเครื่องใด ๆ สำหรับเบิร์ตเพรสจำเป็นต้องมีคลังข้อมูลระดับเอกสาร คุณภาพของข้อมูลที่ใช้สำหรับการเตรียมการโดยตรงส่งผลกระทบโดยตรงต่อคุณภาพของโมเดลที่ผ่านการฝึกอบรม เพื่อให้การประมวลผลข้อมูลล่วงหน้าง่ายขึ้นและเพื่อการทำซ้ำของผลลัพธ์รหัสการประมวลผลข้อมูลล่วงหน้าจะรวมอยู่ใน repo มันอาจใช้ในการประมวลผล Wikipedia Corpus หรือชุดข้อมูลอื่น ๆ สำหรับการผ่าตัด อ้างถึงข้อมูลเพิ่มเติมที่การเตรียมข้อมูลสำหรับการเตรียมรายละเอียดเกี่ยวกับเรื่องนั้น
สูตร finetuning ใน repo นี้แสดงวิธีการ finetune รูปแบบการแสดงภาษาเบิร์ตโดยใช้บริการการเรียนรู้ของเครื่อง Azure โมดูลโน้ตบุ๊กและ Python สำหรับ finetuning มีอยู่ที่ไดเรกทอรี Finetune เรา finetune และประเมินจุดตรวจสอบของเรากับสิ่งต่อไปนี้:
เกณฑ์มาตรฐานการประเมินความเข้าใจภาษาทั่วไป (กาว) เป็นชุดของการทำความเข้าใจภาษาคู่หนึ่งประโยคหรือประโยคคู่สำหรับการประเมินและวิเคราะห์ระบบการทำความเข้าใจภาษาธรรมชาติ Notebook BERT_EVAL_GLUE.IPYNB JUPYTER โน๊ตบุ๊คอนุญาตให้ผู้ใช้เรียกใช้หนึ่งในจุดตรวจสอบที่ได้รับการฝึกฝนกับงานเหล่านี้ใน Azure ML
Azure Machine Learning Service ให้บริการสภาพแวดล้อมแบบคลาวด์เพื่อเตรียมข้อมูลรถไฟทดสอบปรับใช้จัดการและติดตามโมเดลการเรียนรู้ของเครื่อง บริการนี้สนับสนุนเทคโนโลยีโอเพนซอร์ซอย่างเต็มที่เช่น Pytorch, Tensorflow และ Scikit-Learn และสามารถใช้สำหรับการเรียนรู้ของเครื่องจักรใด ๆ ตั้งแต่ ML คลาสสิกไปจนถึงการเรียนรู้อย่างลึกซึ้งการดูแลและการเรียนรู้ที่ไม่ได้รับการดูแล
สมุดบันทึก Jupyter สามารถใช้เพื่อใช้ Azureml Python SDK และส่งงาน Pretrain และ Finetune repo นี้มีสมุดบันทึกต่อไปนี้สำหรับกิจกรรมต่าง ๆ
| กิจกรรม | สมุดบันทึก |
|---|---|
| ก่อน | bert_pretrain.ipynb |
| กาว finetune/ประเมิน | bert_eval_glue.ipynb |
| กิจกรรม | สมุดบันทึก |
|---|---|
| กาว finetune/ประเมิน | tensorflow-bert-azureml.ipynb |
โครงการนี้ได้นำรหัสการดำเนินงานของ Microsoft โอเพ่นซอร์สมาใช้ สำหรับข้อมูลเพิ่มเติมโปรดดูจรรยาบรรณคำถามที่พบบ่อยหรือติดต่อ [email protected] พร้อมคำถามหรือความคิดเห็นเพิ่มเติมใด ๆ