Data science

บทเรียนที่ได้รับ: การฝึกอบรมและการปรับใช้โมเดล Transformer ที่ทันสมัยที่ Digits

ในบล็อกโพสต์นี้ เราต้องการให้ข้อมูลเบื้องหลังวิธีที่เราดึงข้อมูลด้วยการประมวลผลภาษาธรรมชาติ (NLP) คุณจะได้เรียนรู้วิธีนำโมเดล Transformer อันล้ำสมัยมาใช้กับปัญหานี้ และวิธีเปลี่ยนจากแนวคิดโมเดล ML ไปสู่การรวมในแอป Digits ข้อมูลแผนของเราสามารถดึงมาจากข้อความที่ไม่มีโครงสร้างผ่านกระบวนการที่เรียกว่า Named Entity Recognition (NER) แนวคิด NLP นี้มีมานานหลายปีแล้ว และเป้าหมายของมันคือการจัดประเภทโทเค็นเป็นหมวดหมู่ที่กำหนดไว้ล่วงหน้า เช่น วันที่ บุคคล สถานที่ และเอนทิตี ตัวอย่างเช่น ธุรกรรมด้านล่างสามารถเปลี่ยนเป็นรูปแบบที่มีโครงสร้างดังต่อไปนี้: Named Entity Recognition in action เราเห็นผลลัพธ์ที่โดดเด่นจากการนำ NER ไปใช้กับอุตสาหกรรมอื่น ๆ และเรากระตือรือร้นที่จะใช้โมเดล NER ที่เกี่ยวข้องกับการธนาคารของเราเอง แทนที่จะใช้โมเดล NER ที่ผ่านการฝึกอบรมมาแล้ว เรามองเห็นโมเดลที่สร้างขึ้นโดยมีการพึ่งพาจำนวนน้อยที่สุด ช่องทางดังกล่าวจะช่วยให้เราอัปเดตโมเดลได้อย่างต่อเนื่องในขณะที่ยังคงควบคุม “ชิ้นส่วนที่เคลื่อนไหวทั้งหมด” ได้ ด้วยเหตุนี้ เราจึงละทิ้งเครื่องมือที่มีอยู่ เช่น การใช้งาน SpaCy NER หรือรุ่น HuggingFace สำหรับ NER ในที่สุดเราก็สร้างโมเดล NER ภายในโดยอิงตาม TensorFlow 2.x และ TensorFlow Text ของไลบรารีระบบนิเวศ โปรเจ็กต์ Data Every Machine Learning เริ่มต้นด้วยข้อมูล และโปรเจ็กต์นี้ก็เช่นกัน เราตัดสินใจว่าข้อมูลใดที่เกี่ยวข้องที่เราต้องการดึงออกมา (เช่น สถานที่ URL เว็บไซต์ ชื่อปาร์ตี้ ฯลฯ) และในกรณีที่ไม่มีชุดข้อมูลสาธารณะที่มีอยู่ เราจึงตัดสินใจใส่คำอธิบายประกอบข้อมูลด้วยตนเอง มีเครื่องมือเชิงพาณิชย์และโอเพ่นซอร์สจำนวนหนึ่งสำหรับการทำหมายเหตุประกอบข้อมูล รวมถึง: Explosion's Prodigy (ทำงานได้ดีในการเชื่อมต่อกับ Python's SpaCy)Label Studio (เครื่องมือโอเพนซอร์สฟรี)AWS Mechanical Turk (บริการเชิงพาณิชย์ที่จัดการการสรรหาบุคลากร ผู้อธิบายและการจัดการงาน) Scale AI (บริการคำอธิบายประกอบที่มีการจัดการเต็มรูปแบบ) เครื่องมือที่เหมาะสมจะแตกต่างกันไปในแต่ละโครงการ และเป็นคำถามเกี่ยวกับต้นทุน ความเร็ว และ UI ที่มีประโยชน์ สำหรับโครงการนี้ ตัวขับเคลื่อนหลักสำหรับการเลือกเครื่องมือของเราคือคุณภาพของ UI และความเร็วของการประมวลผลตัวอย่าง และเราเลือก doccano ตัวอย่างคำอธิบายประกอบข้อมูลด้วยตนเอง ผู้ตรวจสอบที่เป็นมนุษย์อย่างน้อยหนึ่งคนได้ประเมินแต่ละธุรกรรมที่เลือก และบุคคลนั้นจะทำเครื่องหมายสตริงย่อยที่เกี่ยวข้องดังที่แสดงด้านบน ผลิตภัณฑ์ขั้นสุดท้ายของขั้นตอนการประมวลผลนี้คือชุดข้อมูลของธุรกรรมที่มีหมายเหตุประกอบพร้อมกับอักขระเริ่มต้นและสิ้นสุดของแต่ละเอนทิตีภายในสตริง การเลือกสถาปัตยกรรม ในขณะที่โมเดล NER สามารถอ้างอิงตามวิธีการทางสถิติ แต่เราได้สร้างโมเดล NER ของเราบนสถาปัตยกรรม ML ที่เรียกว่า Transformers การตัดสินใจนี้ขึ้นอยู่กับสองปัจจัยหลัก: Transformers ให้การปรับปรุงที่สำคัญใน NLP เมื่อพูดถึงความเข้าใจภาษา แทนที่จะประเมินประโยคโทเค็นต่อโทเค็น วิธีที่เครือข่ายที่เกิดซ้ำจะทำงานนี้ หม้อแปลงใช้กลไกความสนใจเพื่อประเมินการเชื่อมต่อระหว่างโทเค็น หม้อแปลงอนุญาตให้ประเมินได้ถึง โทเค็นพร้อมกัน (ด้วยการประเมินโทเค็นบางรายการมากยิ่งขึ้น) สถาปัตยกรรมแบบจำลองตามความสนใจเริ่มต้นคือ Bidirectional Encoder Representation จาก Transformers (เรียกสั้นๆ ว่า BERT) ซึ่งตีพิมพ์ใน 2019 ในบทความต้นฉบับโดย Google AI ผู้เขียนได้เน้นย้ำถึงการใช้งานที่เป็นไปได้กับ NER ซึ่งทำให้เรามั่นใจว่าแนวทางของหม้อแปลงไฟฟ้าอาจใช้งานได้ กระดาษต้นฉบับ BERT ที่เน้นการใช้งาน NER: https://arxiv.org/pdf/1810.04805.pdf นอกจากนี้ ก่อนหน้านี้เราได้นำแอปพลิเคชันการเรียนรู้เชิงลึกอื่น ๆ มาใช้โดยอิงจากสถาปัตยกรรมของ BERT และเราสามารถนำไลบรารี่ที่ใช้ร่วมกันที่มีอยู่ของเรากลับมาใช้ใหม่ได้ ทำให้เราสามารถพัฒนาต้นแบบได้ในระยะเวลาอันสั้น โมเดล BERT สามารถใช้เป็นโมเดลที่ฝึกไว้ล่วงหน้าได้ ซึ่งในขั้นต้นได้รับการฝึกฝนเกี่ยวกับคอร์ปิแบบหลายภาษาสำหรับงานทั่วไปสองอย่าง: การทำนายโทเค็นหน้ากากและการทำนายว่าประโยคถัดไปมีความเกี่ยวข้องกับประโยคก่อนหน้าหรือไม่ การฝึกอบรมทั่วไปดังกล่าวจะสร้างความเข้าใจภาษาทั่วไปภายในแบบจำลอง โมเดลที่ได้รับการฝึกอบรมล่วงหน้านั้นให้บริการโดยบริษัทต่างๆ เช่น โดย Google ผ่าน TensorFlow Hub โมเดลที่ได้รับการฝึกอบรมล่วงหน้าจะสามารถปรับแต่งได้ในระหว่างขั้นตอนการฝึกอบรมเฉพาะงาน สิ่งนี้ต้องการทรัพยากรในการคำนวณน้อยกว่าการฝึกโมเดลตั้งแต่เริ่มต้น สถาปัตยกรรม BERT สามารถคำนวณโทเค็นได้สูงสุด 512 พร้อมกัน BERT ต้องใช้ WordPiece tokenization ซึ่งแยกคำและประโยคออกเป็นคำๆ บ่อยๆ ประโยคตัวอย่างต่อไปนี้จะถูก tokenized ดังนี้ Digits builds a real-time engine มีโมเดล BERT ที่ผ่านการฝึกอบรมมาแล้วมากมายทางออนไลน์ แต่แต่ละรุ่นมีจุดเน้นที่แตกต่างกัน บางรุ่นมีเฉพาะภาษา (เช่น CamemBERT สำหรับภาษาฝรั่งเศสหรือ Beto สำหรับภาษาสเปน) และรุ่นอื่นๆ ได้ลดขนาดลงผ่านการกลั่นหรือตัดแต่งแบบจำลอง (เช่น ALBERT หรือ DistilBERT) เวลาในการสร้างต้นแบบ โมเดลต้นแบบของเราได้รับการออกแบบมาเพื่อจำแนกลำดับของโทเค็นซึ่งแสดงถึงธุรกรรมที่เป็นปัญหา เราแปลงข้อมูลที่มีหมายเหตุประกอบเป็นลำดับป้ายกำกับที่ตรงกับจำนวนโทเค็นที่สร้างจากธุรกรรมสำหรับการฝึกอบรม จากนั้น เราฝึกโมเดลเพื่อจำแนกแต่ละป้ายกำกับโทเค็น: ต้นแบบคาดการณ์หมวดหมู่ NER สำหรับแต่ละโทเค็น ในรูปด้านบน คุณสังเกตเห็นโทเค็น “O” โทเค็นดังกล่าวแสดงถึงโทเค็นที่ไม่เกี่ยวข้อง และเราฝึกอบรมตัวแยกประเภทเพื่อตรวจหาโทเค็นเหล่านั้นเช่นกัน โมเดลต้นแบบช่วยให้เราแสดงให้เห็นความเหมาะสมทางธุรกิจของโซลูชัน ML ก่อนที่จะมีส่วนร่วมในการผสานรวมโมเดลทั้งหมด ที่ Digits เราพัฒนาต้นแบบของเราในโน้ตบุ๊ก Jupyter ที่รองรับ GPU กระบวนการดังกล่าวช่วยให้เราทำซ้ำได้อย่างรวดเร็ว จากนั้น เมื่อเรายืนยันกรณีการใช้งานทางธุรกิจสำหรับโมเดล เราจะเน้นที่การรวมโมเดลและระบบอัตโนมัติของการอัปเดตเวอร์ชันโมเดลผ่านไปป์ไลน์ MLOps ของเรา การย้ายไปสู่การผลิต โดยทั่วไป เราใช้ TensorFlow Extended (TFX) เพื่ออัปเดตเวอร์ชันโมเดลของเรา ในขั้นตอนนี้ เราแปลงโค้ดโน้ตบุ๊กเป็น TensorFlow Ops และที่นี่ เราแปลงขั้นตอนการประมวลผลข้อมูลต้นแบบก่อนประมวลผลเป็น TensorFlow Transform Ops ขั้นตอนพิเศษนี้ช่วยให้เราฝึกเวอร์ชันโมเดลของเราได้อย่างมีประสิทธิภาพในภายหลัง หลีกเลี่ยงการบิดเบือนในการฝึกอบรม และยิ่งไปกว่านั้น ยังช่วยให้เราสามารถ “หลอม” ตรรกะทางธุรกิจภายในของเราลงในโมเดล ML ของเราได้ ประโยชน์สุดท้ายนี้ช่วยให้เราลดการพึ่งพาระหว่างโมเดล ML กับไปป์ไลน์ข้อมูลหรือการรวมส่วนแบ็คเอนด์ เวิร์กโฟลว์วิศวกรรมการเรียนรู้ของเครื่องหลัก เรากำลังเรียกใช้ไปป์ไลน์ TFX ของเราบนไปป์ไลน์ Vertex AI ของ Google Cloud บริการที่มีการจัดการนี้ทำให้เราไม่ต้องดูแลรักษาคลัสเตอร์ Kubernetes สำหรับ Kubeflow Pipelines (ซึ่งเราได้ดำเนินการไปแล้วก่อนที่จะใช้ Vertex AI) โมเดลการผลิตของเราถูกจัดเก็บไว้ในบัคเก็ต Google Cloud Storage และ TFServing ช่วยให้เราโหลดเวอร์ชันของโมเดลได้โดยตรงจากที่เก็บข้อมูลบนคลาวด์ เนื่องจากการโหลดแบบไดนามิกของเวอร์ชันโมเดล เราจึงไม่จำเป็นต้องสร้างคอนเทนเนอร์แบบกำหนดเองสำหรับการตั้งค่าการแสดงโมเดลของเรา เราสามารถใช้รูปภาพที่สร้างไว้ล่วงหน้าจากทีม TensorFlow นี่คือการตั้งค่าขั้นต่ำสำหรับการปรับใช้ Kubernetes: apiVersion: apps/v1 kind: Deployment metadata: … ชื่อ: tensorflow-serving-deployment spec: … template: … spec: คอนเทนเนอร์: – ชื่อ: tensorflow-serving-container image: tensorflow/serving :2.5.1 คำสั่ง: – /usr/local/bin/tensorflow_model_server args: – –port=8500 – –model_config_file=/serving/models/config/models.conf – –file_system_poll_wait_seconds=120 … สังเกตอาร์กิวเมนต์เพิ่มเติม –file_system_poll_wait_seconds ในรายการด้านบน โดยค่าเริ่มต้น TFServing จะตรวจสอบระบบไฟล์สำหรับรุ่นใหม่ทุก 2 วินาที สิ่งนี้สามารถสร้างค่าใช้จ่าย Cloud Storage จำนวนมากได้ เนื่องจากทุกการตรวจสอบจะทริกเกอร์การดำเนินการของรายการ และค่าใช้จ่ายด้านพื้นที่จัดเก็บจะถูกเรียกเก็บตามปริมาณเครือข่ายที่ใช้ สำหรับแอปพลิเคชันส่วนใหญ่ เป็นการดีที่จะลดการตรวจสอบระบบไฟล์ทุกๆ 2 นาที (ตั้งค่าเป็น วินาที) หรือปิดใช้งานทั้งหมด ( ตั้งค่าเป็น 0) สำหรับการบำรุงรักษา เราเก็บการกำหนดค่าเฉพาะรุ่นทั้งหมดไว้ใน ConfigMap เฉพาะ ไฟล์ที่สร้างขึ้นจะถูกใช้โดย TFServing เมื่อบูตเครื่อง apiVersion: v1 ชนิด: ConfigMap metadata: เนมสเปซ: ml-deployments ชื่อ: -config data: models.conf: |+ model_config_list: { config: { name: “”, base_path: “gs:///”, model_platform: “tensorflow ”, model_version_policy: { เฉพาะ: { รุ่น: 1607628093, รุ่น: 1610301633 } } version_labels { คีย์: 'canary', ค่า: 1610301633 } version_labels { คีย์: 'release', ค่า: 1607628093 } } } หลังจากการปรับใช้ครั้งแรก เราเริ่มต้น การวนซ้ำเพื่อเพิ่มประสิทธิภาพสถาปัตยกรรมแบบจำลองสำหรับปริมาณงานสูงและผลลัพธ์เวลาแฝงต่ำ นี่หมายถึงการปรับการตั้งค่าการปรับใช้ของเราให้เหมาะสมสำหรับสถาปัตยกรรมที่เหมือน BERT และปรับโมเดล BERT ที่ผ่านการฝึกอบรมให้เหมาะสม ตัวอย่างเช่น เราเพิ่มประสิทธิภาพการผสานรวมระหว่างงาน Dataflow การประมวลผลข้อมูลและการปรับใช้ ML ของเรา และแบ่งปันแนวทางของเราในการพูดคุยครั้งล่าสุดที่ Apache Beam Summit 512 ผลลัพธ์ โมเดล NER ที่ปรับใช้ช่วยให้เราสามารถดึงข้อมูลจำนวนมากจากข้อความที่ไม่มีโครงสร้างและทำให้พร้อมใช้งานผ่าน Digits Search ต่อไปนี้คือตัวอย่างบางส่วนของการแยกโมเดล NER ของเรา: การดึงผลลัพธ์จากธุรกรรมตัวอย่าง The Final Product At Digits โมเดล ML ไม่เคยเป็นผลิตภัณฑ์ขั้นสุดท้าย เรามุ่งมั่นที่จะสร้างความพึงพอใจให้กับลูกค้าด้วยประสบการณ์ที่ออกแบบมาอย่างดีซึ่งผสานเข้ากับโมเดล ML อย่างแน่นหนา จากนั้นเราจะได้เห็นผลิตภัณฑ์ขั้นสุดท้ายเท่านั้น มีปัจจัยเพิ่มเติมหลายอย่างเข้ามาเกี่ยวข้อง: ความหน่วงแฝงกับความแม่นยำ โมเดลที่ผ่านการฝึกอบรมล่วงหน้าที่ใหม่กว่า (เช่น BART หรือ T5) อาจให้ความแม่นยำของแบบจำลองที่สูงขึ้น แต่ก็จะทำให้เวลาแฝงของโมเดลเพิ่มขึ้นอย่างมากด้วย เนื่องจากเรากำลังประมวลผลธุรกรรมหลายล้านรายการทุกวัน จึงเห็นได้ชัดเจนว่าเวลาแฝงของแบบจำลองมีความสำคัญสำหรับเรา ดังนั้นเราจึงใช้เวลาอย่างมากในการเพิ่มประสิทธิภาพของแบบจำลองที่ได้รับการฝึกอบรมของเรา การออกแบบสำหรับสถานการณ์ที่เป็นบวกที่ผิดพลาด จะมีผลบวกที่ผิดพลาดอยู่เสมอ ไม่ว่าความแม่นยำของแบบจำลองจะมีความตื่นตาตื่นใจเพียงใดในการปรับใช้ก่อนการสร้างแบบจำลอง ความพยายามในการออกแบบผลิตภัณฑ์ที่เน้นการสื่อสารผลลัพธ์ที่คาดการณ์ไว้ของ ML กับผู้ใช้ปลายทางถือเป็นเรื่องสำคัญ ที่ Digits สิ่งนี้มีความสำคัญอย่างยิ่งเนื่องจากเราไม่สามารถเสี่ยงต่อความเชื่อมั่นของลูกค้าในวิธีที่ Digits จัดการข้อมูลทางการเงินของพวกเขา ระบบอัตโนมัติของการปรับใช้แบบจำลอง การลงทุนในการตั้งค่าการปรับใช้แบบจำลองอัตโนมัติของเราช่วยให้เราให้การสนับสนุนการย้อนกลับแบบจำลอง การเปลี่ยนแปลงทั้งหมดในโมเดลที่ปรับใช้จะได้รับการควบคุมเวอร์ชัน และการปรับใช้จะถูกดำเนินการโดยอัตโนมัติจากระบบ CI/CD ของเรา ซึ่งให้เวิร์กโฟลว์การปรับใช้ที่สม่ำเสมอและโปร่งใสสำหรับทีมวิศวกรของเรา กำหนดกลยุทธ์การกำหนดเวอร์ชันสำหรับรีลีสและย้อนกลับ เพื่อช่วยให้การเปิดตัวโมเดลราบรื่นและการวิเคราะห์เชิงปริมาณแบบองค์รวมก่อนการเปิดตัว เราปรับใช้โมเดล ML เดียวกันสองเวอร์ชันและใช้ป้ายกำกับเวอร์ชันของ TFServing (เช่น แท็ก “รีลีส” และ “ก่อนรีลีส”) เพื่อแยกความแตกต่างระหว่างพวกเขา นอกจากนี้ เราใช้ตารางเวอร์ชันที่ใช้งานอยู่ซึ่งอนุญาตให้มีการย้อนกลับเวอร์ชัน ทำได้ง่ายๆ เหมือนกับการอัปเดตระเบียนฐานข้อมูล ช่วยเหลือลูกค้า อย่าทำให้พวกเขาแปลกแยก สุดท้ายแต่ไม่ท้ายสุด เป้าหมายสำหรับโมเดล ML ของเราควรเป็นการช่วยเหลือลูกค้าของเราในงานของพวกเขาแทนที่จะทำให้พวกเขาแปลกแยก นั่นหมายความว่าเป้าหมายของเราไม่ใช่เพื่อแทนที่มนุษย์หรือหน้าที่ของพวกเขา แต่เพื่อช่วยเหลือลูกค้าของเราในงานที่ยุ่งยาก แทนที่จะขอให้ผู้คนดึงข้อมูลด้วยตนเองจากทุกๆ ธุรกรรม เราจะช่วยเหลือลูกค้าของเราด้วยการกรอกผู้ขายที่แยกออกมาล่วงหน้า แต่พวกเขาจะควบคุมอยู่เสมอ หากเราทำผิดพลาด Digits จะทำให้การเขียนทับคำแนะนำของเราเป็นเรื่องง่าย อันที่จริง เราจะเรียนรู้จากความผิดพลาดของเราและอัปเดตโมเดล ML ของเราตามนั้น การอ่านเพิ่มเติม ตรวจสอบแหล่งข้อมูลที่ยอดเยี่ยมเหล่านี้สำหรับรุ่น NER และ Transformer มากขึ้น: กระดาษ BERT เบื้องต้น: “BERT: การฝึกอบรมล่วงหน้าของหม้อแปลงสองทิศทางเชิงลึกเพื่อการทำความเข้าใจภาษา” การประมวลผล TensorFlow 2.xText ที่มีประสิทธิภาพในแบบจำลอง TensorFlowTensorFlow ในการผลิต เกี่ยวกับผู้เขียน Hannes Hapke เป็นวิศวกรการเรียนรู้ของเครื่องที่ Digits ในฐานะผู้เชี่ยวชาญด้านนักพัฒนาซอฟต์แวร์ของ Google Hannes ได้ร่วมเขียนสิ่งพิมพ์แมชชีนเลิร์นนิงสองฉบับ: “NLP in Action” โดย Manning Publishing และ “Building Machine Learning Pipelines” โดย O'Reilly Media ที่ Digits เขามุ่งเน้นไปที่วิศวกรรม ML และใช้ประสบการณ์ของเขาใน NLP เพื่อพัฒนาความเข้าใจในการทำธุรกรรมทางการเงิน ลงทะเบียนเพื่อรับจดหมายข่าว InsideBIGDATA ฟรี เข้าร่วมกับเราบน Twitter: @InsideBigData1 – https://twitter.com/InsideBigData1

วิทยาศาสตร์ข้อมูล

  • 1607628093การตลาด
  • Leave a Reply

    Your email address will not be published. Required fields are marked *

    Back to top button