ข้ามไปยังเนื้อหาหลัก

Zero-Shot Classification: ทำงานอย่างไร และควรใช้เมื่อใด

ทำความเข้าใจว่า zero-shot classification คืออะไร ทำงานอย่างไรภายใต้ฝากับโมเดล NLI เปรียบเทียบกับ few-shot และการฟายน์จูน และวิธีใช้กับ Hugging Face Transformers
อัปเดตแล้ว 11 มิ.ย. 2569  · 15 นาที อ่าน

สำรวจด้วย AI

เปิดใน ChatGPTเปิดใน Claudeเปิดใน Perplexity

จะเกิดอะไรขึ้นเมื่อจำเป็นต้องจัดประเภทข้อความเข้าในหมวดใหม่ แต่ไม่มีตัวอย่างที่ติดฉลากแม้แต่ชิ้นเดียวไว้ฝึกโมเดล?

แนวทางคลาสสิฟายเออร์แบบดั้งเดิมใช้ไม่ได้ เพราะต้องการตัวอย่างที่ติดฉลากสำหรับทุกหมวดที่ต้องการพยากรณ์ ซึ่งหมายถึงต้องทำงานติดฉลากกันเป็นสัปดาห์ก่อนเริ่มฝึกได้ และทันทีที่มีหมวดใหม่โผล่มา ก็ต้องกลับไปติดฉลากกันใหม่อีก

Zero-shot classification คือสิ่งที่ควรพิจารณา มันข้ามขั้นตอนการติดฉลากทั้งหมด โดยให้โมเดลกำหนดฉลากที่ไม่เคยเห็นระหว่างการฝึกได้จริง ๆ ในทางปฏิบัติ แปลว่าสามารถจัดเรียงข้อเสนอแนะจากลูกค้าเข้าหมวดอย่าง "billing complaint" หรือ "feature request" ได้โดยไม่ต้องเตรียมตัวอย่างฝึกสักชิ้นสำหรับทั้งสองหมวด

ในบทความนี้ จะพาไปดูว่า zero-shot classification ทำงานอย่างไร เปรียบเทียบกับวิธีดั้งเดิมและแบบ few-shot อย่างไร และจะประยุกต์ใช้กับงาน NLP จริงด้วย Hugging Face Transformers ได้อย่างไร

Hugging Face คืออะไรแน่? สมัครเรียนแทร็ก Hugging Face Fundamentals เพื่อสร้าง AI agents และปรับจูน LLMs

Zero-Shot Classification คืออะไร?

Zero-shot classification คือแนวทางการเรียนรู้ของเครื่องที่ให้โมเดลกำหนดฉลากให้ข้อมูลโดยไม่ได้รับการฝึกเฉพาะบนฉลากเหล่านั้น

ประเด็นสำคัญคือคำว่า "zero-shot" หมายความว่าโมเดลไม่ได้เห็นตัวอย่างฝึกเลยสำหรับหมวดที่ต้องการพยากรณ์ ให้ชิ้นข้อความและรายชื่อฉลากที่เป็นไปได้ แล้วโมเดลจะเลือกคำตอบที่ตรงที่สุดจากความรู้ที่มีอยู่เดิม

ความรู้นี้มาจากการพรีเทรน โมเดลขนาดใหญ่เรียนรู้ความเข้าใจภาษาและแนวคิดในวงกว้างจากคลังข้อความมหาศาล และความรู้ทั่วไปนี่เองที่ถูกนำมาใช้เมื่อขอให้จัดประเภทสิ่งใหม่ ๆ

Zero-Shot Classification ทำงานอย่างไร

เวิร์กโฟลว์เบื้องหลัง zero-shot classification เข้าใจง่ายเมื่อแบ่งเป็นขั้นตอน มีเพียงสี่ขั้น:

  1. ป้อนข้อความหรือข้อมูล: อะไรก็ได้ที่ต้องการจัดประเภท เช่น รีวิวลูกค้า ทิกเก็ตซัพพอร์ต พาดหัวข่าว เอกสารบางส่วน

  2. ระบุฉลากผู้ท้าชิง: ให้โมเดลด้วยรายชื่อหมวดที่เป็นไปได้ เป็นเพียงคำหรือวลีสั้น ๆ เช่น "product question", "refund request", "technical issue" หรือ "general inquiry".

  3. โมเดลประเมินความสัมพันธ์ระหว่างอินพุตกับฉลาก: โมเดลจะพิจารณาแต่ละฉลากและให้คะแนนว่าเข้ากับอินพุตได้ดีเพียงใดจากความเข้าใจภาษาที่ได้จากการพรีเทรน

  4. เลือกฉลากที่เป็นไปได้มากที่สุด: ฉลากที่ได้คะแนนสูงสุดจะถูกส่งกลับเป็นผลพยากรณ์ มักมาพร้อมคะแนนความมั่นใจของแต่ละผู้ท้าชิง

ประเด็นคือสามารถสลับฉลากผู้ท้าชิงได้ทุกเมื่อโดยไม่ต้องฝึกใหม่ ถ้าวันพรุ่งนี้อยากเพิ่มหมวดใหม่ ก็แค่ใส่เพิ่มในลิสต์ มันน่าทึ่งมากหากเคยทำแต่งานแบบกำกับดูแล

Zero-Shot Classification เทียบกับการจัดประเภทแบบดั้งเดิม

ทั้งสองแนวทางแก้ปัญหาเดียวกัน (การกำหนดฉลากให้ข้อมูล) แต่ใช้เส้นทางที่ต่างกัน

การจัดประเภทแบบดั้งเดิม

คลาสสิฟายเออร์แบบดั้งเดิมเรียนรู้จากตัวอย่างที่ติดฉลาก รวบรวมชุดข้อมูลที่แต่ละรายการถูกแท็กด้วยหมวดที่ถูกต้อง ฝึกโมเดลบนข้อมูลนั้น แล้วโมเดลจะเรียนรู้รูปแบบที่แยกแต่ละคลาสออกจากกัน

วิธีนี้ใช้ได้ผลมาหลายทศวรรษ แต่มีข้อจำกัดใหญ่สองข้อ:

  • ต้องมีข้อมูลฝึกที่ติดฉลาก: และมักต้องมีจำนวนมาก การรวบรวมและติดฉลากใช้ทั้งเวลาและเงิน ซึ่งเป็นทรัพยากรที่มีจำกัดและมีค่าสูง
  • ชุดฉลากตายตัว: เมื่อฝึกเสร็จ โมเดลจะพยากรณ์ได้เฉพาะหมวดที่เห็นระหว่างการฝึก การเพิ่มคลาสใหม่หมายถึงต้องย้อนกลับไปฝึกใหม่

Zero-shot classification

Zero-shot ทำงานในทางตรงข้าม ไม่มีขั้นตอนการฝึกเฉพาะงานเลย โมเดลใช้ความรู้จากการพรีเทรนเพื่อประเมินฉลากใดก็ตามที่ป้อนให้

สิ่งนี้ให้ข้อได้เปรียบสองประการ:

  • ไม่ต้องฝึกเฉพาะงาน: ข้ามการรวบรวมข้อมูล การติดฉลาก และการฝึกไปทั้งหมด
  • ชุดฉลากยืดหยุ่น: เปลี่ยนหมวดได้ตามต้องการ เพิ่ม ลบ เปลี่ยนชื่อได้ โดยไม่ต้องฝึกใหม่

ข้อแลกเปลี่ยน

ความยืดหยุ่นนี้ไม่ได้มาฟรี คลาสสิฟายเออร์แบบดั้งเดิมที่ฝึกบนชุดข้อมูลติดฉลากที่ดี มักทำผลงานเหนือกว่าโมเดล zero-shot บนงานนั้นโดยเฉพาะ เพราะได้เห็นตัวอย่างตรงกับสิ่งที่ต้องการและปรับจูนตัวเองเพื่อมันแล้ว

โมเดล zero-shot เป็นสายสารพัดประโยชน์ ทำได้ดีหลายอย่าง แต่ไม่ค่อยดีที่สุดในอย่างใดอย่างหนึ่ง ดังนั้นการเลือกขึ้นกับความต้องการ

หากมีข้อมูลติดฉลากและต้องการความแม่นยำสูงสุดบนชุดหมวดที่ตายตัว ให้ฝึกคลาสสิฟายเออร์แบบดั้งเดิม หากไม่มีข้อมูลติดฉลาก หรือหมวดเปลี่ยนบ่อย Zero-shot คือทางที่เร็วกว่าไปสู่โซลูชันที่ใช้งานได้

บทบาทของ Foundation Models และ LLMs

Zero-shot classification ได้รับความนิยมเพราะโมเดลพรีเทรนขนาดใหญ่เก่งพอจะรับมือได้แล้ว

ก่อนมี foundation models จะให้โมเดลรายชื่อฉลากที่ไม่เคยเห็นแล้วหวังผลพยากรณ์ที่สมเหตุสมผลแทบเป็นไปไม่ได้ โมเดลไม่รู้ภาษาเพียงพอจะเชื่อมโยงสิ่งต่าง ๆ การพรีเทรนบนคลังข้อความขนาดมหึมาทำให้ทุกอย่างเปลี่ยน โมเดลที่อ่านอินเทอร์เน็ตส่วนใหญ่มาแล้ว เคยพบคำอย่าง "refund" หรือ "complaint" ในบริบทนับไม่ถ้วน จึงจับคู่กับอินพุตใหม่ได้

ตระกูลโมเดลไม่กี่กลุ่มอยู่เบื้องหลังเวิร์กโฟลว์ zero-shot ส่วนใหญ่ในวันนี้:

  • BERT และสายพันธุ์: โมเดลสไตล์ BERT เรียนรู้ตัวแทนเชิงลึกของข้อความระหว่างการพรีเทรน รุ่นแปรอย่าง RoBERTa และ DeBERTa ผลักดันต่อด้วยวิธีฝึกที่ดีขึ้นและชุดข้อมูลขนาดใหญ่ขึ้น
  • โมเดลสาย NLI: คือโมเดลที่ฟাইনจูนบนงาน natural language inference อยู่เบื้องหลังไปป์ไลน์ zero-shot สำเร็จรูปส่วนใหญ่ และในส่วนถัดไปจะอธิบายเหตุผล
  • LLMs สมัยใหม่: โมเดลภาษาขนาดใหญ่อย่างตระกูล GPT หรือ Claude จัดการ zero-shot classification ได้ผ่านการพรมต์ อธิบายงานเป็นภาษาธรรมดา ระบุหมวด แล้วโมเดลจะเลือก

จุดร่วมคือขนาดและความเป็นสากล โมเดลที่ฝึกบนงานแคบ ๆ ทำได้เพียงงานนั้น โมเดลที่ฝึกบนข้อความทั่วไปกว้างขวางสามารถถูกนำไปทำงานมากมายได้โดยไม่ต้องเห็นตัวอย่างติดฉลากของงานนั้น ๆ

Natural Language Inference (NLI) และ Zero-Shot Classification

คลาสสิฟายเออร์ zero-shot ที่พบเห็นในทางปฏิบัติส่วนมากสร้างบนโมเดล NLI ตรงนี้มักทำให้คนแปลกใจ จึงควรค่อย ๆ ทำความเข้าใจ

Natural language inference เป็นงานเฉพาะตัว เมื่อให้ประโยคสองประโยค (premise และ hypothesis) โมเดลจะตัดสินความสัมพันธ์ระหว่างกัน เอาต์พุตเป็นหนึ่งในสามฉลาก:

  • Entailment: สมมุติฐานตามมาจาก premise
  • Contradiction: สมมุติฐานขัดแย้งกับ premise
  • Neutral: ประโยคทั้งสองไม่เกี่ยวข้องกัน หรือไม่มีข้อมูลพอจะตัดสิน

ตัวอย่าง หาก premise คือ "The team finished the project two weeks early" และ hypothesis คือ "The team delivered on time" โมเดล NLI ควรทำนายว่า entailment หาก hypothesis คือ "The team missed the deadline" ควรทำนายว่า contradiction

การตั้งปัญหาแบบนี้เข้ากันอย่างยิ่งกับ zero-shot classification หากมองอินพุตเป็น premise ก็สามารถแปลงแต่ละฉลากผู้ท้าชิงให้เป็น hypothesis ได้

สมมุติอยากจัดประเภทประโยค "My package never arrived" ให้เป็นหนึ่งในสามหมวด: ปัญหาการจัดส่ง ปัญหาการเรียกเก็บเงิน หรือคำถามเกี่ยวกับสินค้า โมเดลไม่ได้มองสิ่งเหล่านี้เป็นฉลาก แต่มองเป็น hypothesis โดยมักจะห่อด้วยเทมเพลตง่าย ๆ อย่าง "This text is about {label}":

  • Premise: "My package never arrived" | Hypothesis: "This text is about a shipping issue"

  • Premise: "My package never arrived" | Hypothesis: "This text is about a billing issue"

  • Premise: "My package never arrived" | Hypothesis: "This text is about a product question"

โมเดล NLI จะให้คะแนนแต่ละคู่ Hypothesis ที่ได้คะแนน entailment สูงสุดชนะ และฉลากนั้นจะกลายเป็นผลพยากรณ์

โมเดลไม่จำเป็นต้องเรียนรู้ความหมายของ "shipping issue" หรือ "billing issue" ในฐานะฉลากเลย เพียงแค่ต้องเรียนรู้หน้าตาของ "entailment" โดยทั่วไป ซึ่งได้มาจากการฟайнจูนบนงาน NLI

นี่คือเหตุผลที่ zero-shot แบบใช้ NLI ทำงานได้ดี โมเดลกำลังทำงานที่ถูกฝึกมา (ตัดสิน entailment) และคุณเพียงจัดกรอบปัญหาการจัดประเภทให้เป็นชุดคำถาม entailment เท่านั้น

Zero-Shot เทียบกับ Few-Shot และโมเดลที่ฟายน์จูนแล้ว

Zero-shot ไม่ใช่วิธีเดียวที่จะให้โมเดลทำงานจัดประเภทโดยไม่ต้องฝึกเต็มรูปแบบ มาดูเปรียบเทียบกับทางเลือกอื่น

Zero-shot

Zero-shot หมายถึงไม่มีตัวอย่างเลย ให้โมเดลอินพุตและรายชื่อฉลากผู้ท้าชิง แล้วมันจะพยากรณ์จากสิ่งที่เรียนรู้ช่วงพรีเทรน

โมเดลไม่เคยเห็นข้อมูลติดฉลากสำหรับงานของคุณโดยเฉพาะ ใช้ความรู้ทั่วไปล้วน ๆ

Few-shot

Few-shot ให้โมเดลดูตัวอย่างไม่กี่ตัว มักอยู่ในพรอมต์ แสดงตัวอย่างอินพุตจับคู่กับฉลากที่ถูกต้องสัก 2, 5 หรือ 10 ตัวอย่าง แล้วให้จัดประเภทอินพุตใหม่ในแบบเดียวกัน

ที่นี่ไม่ได้ฝึกโมเดลใหม่ ยังใช้เวตที่พรีเทรนมา ตัวอย่างทำหน้าที่เป็นข้ออ้างอิงสั้น ๆ ว่า "หมวดเหล่านี้หมายถึงอะไร" ก่อนขอพยากรณ์

การฟายน์จูน

การฟายน์จูนคือกระบวนการฝึกโดยเฉพาะ นำโมเดลที่พรีเทรนแล้วมาฝึกต่อบนชุดข้อมูลที่ติดฉลากสำหรับงานของคุณ และอัปเดตเวตจนเก่งในการพยากรณ์หมวดของคุณ

นี่หนักที่สุดในสามแบบ ต้องมีข้อมูลติดฉลาก โครงสร้างพื้นฐานสำหรับฝึก และเวลา แลกกับโมเดลที่เชี่ยวชาญเฉพาะงานของคุณ

การเปรียบเทียบทั้งสาม

ทั้งสามแนวทางต่างกันในสามประเด็นสำคัญต่อการใช้งานจริง: ความแม่นยำ ความยืดหยุ่น และต้นทุน

  ความแม่นยำ ความยืดหยุ่น ต้นทุน
Zero-shot ต่ำสุดในสามแบบ แต่ยังดีพอสำหรับการใช้งั่วไป สูงสุด เปลี่ยนฉลากเมื่อไรก็ได้ ต่ำสุด ไม่ต้องมีข้อมูลและไม่ต้องฝึก
Few-shot ดีกว่า zero-shot โดยเฉพาะเมื่อเลือกตัวอย่างได้ดี สูง เปลี่ยนตัวอย่างและฉลากในพรอมต์ได้ ต่ำ ต้องมีตัวอย่างเพียงเล็กน้อย
การฟายน์จูน สูงสุดบนงานที่ฝึกมาโดยตรง ต่ำสุด ต้องฝึกใหม่เมื่อมีหมวดใหม่ สูงสุด รวมทั้งการเก็บข้อมูล การติดฉลาก และการฝึก

Zero-shot learning เมื่อเทียบกับทางเลือกอื่น

มีหลายประเด็นที่ควรหยิบจากตารางนี้

ความแม่นยำไม่ได้เรียงลำดับได้ชัด การฟายน์จูนชนะเมื่อมีข้อมูลติดฉลากเพียงพอและงานมีเสถียรภาพ แต่บนงานใหม่เอี่ยมที่ไม่มีตัวอย่างให้เรียนรู้ การฟายน์จูนยังทำไม่ได้ และ zero-shot กลายเป็นทางเลือกเดียวที่เป็นจริงได้

ความยืดหยุ่นเป็นไปในทิศตรงข้าม Zero-shot ให้เปลี่ยนหมวดได้ทุกเมื่อ โมเดลที่ฟายน์จูนแล้วถูกล็อกไว้กับชุดฉลากที่ฝึกมา

ต้นทุนเห็นชัดที่สุด Zero-shot แทบไม่ต้องตั้งค่าอะไร Few-shot เพิ่มขั้นตอนติดฉลากเล็กน้อย การฟายน์จูนเป็นโปรเจ็กต์ของมันเองและต้องการโครงสร้างพื้นฐานเฉพาะ

เวิร์กโฟลว์ที่ทีมส่วนใหญ่ใช้คือเริ่มด้วย zero-shot เพื่อตรวจว่าทำได้ไหม ถ้าความแม่นยำยังไม่พอ ไป few-shot ถ้ายังไม่พอและงานสำคัญ ค่อยฟายน์จูน

Zero-Shot Classification ในงาน NLP

Zero-shot classification ปรากฏในเวิร์กโฟลว์ NLP มากมาย โดยเฉพาะงานที่ข้อมูลติดฉลากหายากหรือหมวดหมู่เปลี่ยนไปเรื่อย ๆ ต่อไปนี้คือการประยุกต์ใช้ที่พบบ่อย

การวิเคราะห์อารมณ์ (Sentiment analysis)

เป็นจุดเริ่มต้นตามตำรา ป้อนข้อความให้โมเดลและให้เลือกจากฉลากอย่าง "positive", "negative" และ "neutral".

ส่วนที่น่าสนใจคือความง่ายในการไปไกลกว่าสามแบบมาตรฐาน คลาสสิฟายเออร์อารมณ์แบบดั้งเดิมถูกล็อกกับสิ่งที่ฝึกมา ด้วย zero-shot สามารถใช้ฉลากเฉพาะทางมากขึ้นอย่าง "frustrated", "satisfied", "confused" หรือ "excited" และโมเดลก็จัดการได้โดยไม่ต้องฝึกใหม่ เหมาะกับฟีดแบ็กผลิตภัณฑ์หรือการมอนิเตอร์โซเชียลที่หมวดอารมณ์ที่สนใจขึ้นกับบริบท

การจัดประเภทหัวข้อ (Topic classification)

จัดเอกสารตามหัวข้อ บทความข่าวลง "politics", "sports", "technology", "finance" ทิกเก็ตซัพพอร์ตลง "billing", "shipping", "account access", "feature request".

Zero-shot ทำให้ตั้งค่าเรื่องนี้ได้ง่ายมาก ไม่ต้องมีชุดข้อมูลติดฉลากสำหรับทุกหัวข้อใหม่ ถ้าผลิตภัณฑ์ปล่อยฟีเจอร์ใหม่และอยากติดตามทิกเก็ตเกี่ยวกับมัน ก็แค่เพิ่ม "new feature feedback" เข้าไปในลิสต์ฉลากผู้ท้าชิงก็เสร็จ

การตรวจจับเจตนา (Intent detection)

หาว่าผู้ใช้กำลังพยายามทำอะไร เป็นกลไกเบื้องหลังแชตบอทและผู้ช่วยเสียงส่วนใหญ่ เมื่อมีคนพิมพ์ "I need to change my password" โมเดลต้องรู้จำเจตนาเป็น "password reset" มากกว่า "general security question" เป็นต้น

จุดนี้ zero-shot โดดเด่น ผลิตภัณฑ์จริงเพิ่มเจตนาผู้ใช้ใหม่ ๆ ตลอดเวลา และการฝึกคลาสสิฟายเออร์เจตนาทุกครั้งที่ทีมผลิตภัณฑ์เพิ่มฟีเจอร์คือภาระงานมาก Zero-shot ช่วยให้คงรายชื่อเจตนาให้ทันสมัยได้โดยไม่ต้องเปลี่ยนโมเดล

การกลั่นกรองเนื้อหา (Content moderation)

ทำเครื่องหมายข้อความที่มีปัญหา เช่น "hate speech", "spam", "harassment" หรือ "misinformation" แพลตฟอร์มต้องปรับนโยบายให้ทัน และหมวดหมู่ก็เปลี่ยนตามการละเมิดรูปแบบใหม่ ๆ

Zero-shot เหมาะมาก ทีมม็อดสามารถปรับคำจำกัดความของฉลากหรือเพิ่มหมวดใหม่ตามนโยบายที่พัฒนา โดยไม่ต้องวนกลับไปหาวิศวกรเพื่อฝึกใหม่ มักจับคู่กับคลาสสิฟายเออร์แบบดั้งเดิมสำหรับเคสปริมาณสูง แต่ zero-shot รับมือหางยาวของหมวดที่ไม่มีข้อมูลติดฉลากพอให้ฝึก

Zero-Shot Classification ด้วย Hugging Face Transformers

ไลบรารี transformers ของ Hugging Face คือวิธีที่ง่ายที่สุดในการลอง zero-shot classification บน Python API pipeline ซ่อนงานโหลดโมเดลแทบทั้งหมด ทำให้ไปจากศูนย์สู่การพยากรณ์ได้ในไม่กี่บรรทัด

ครั้งแรกที่รันโค้ดสไนปเป็ตนี้ โมเดลจะถูกดาวน์โหลด จึงใช้เวลาเล็กน้อย

นี่คือตัวอย่างสมบูรณ์ที่สามารถรันได้:

from transformers import pipeline
from pprint import pprint

# Load a zero-shot classification pipeline
classifier = pipeline(
    "zero-shot-classification",
    model="facebook/bart-large-mnli"
)

# The text you want to classify
text = "My package never arrived and customer support hasn't responded in three days."

# The labels you want the model to choose from
candidate_labels = [
    "shipping issue",
    "billing issue",
    "product question",
    "general inquiry"
]

# Run the classification
result = classifier(text, candidate_labels)

pprint(result)

ผลลัพธ์เป็นดิกชันนารีที่มีสามฟิลด์: อินพุตต้นฉบับ รายชื่อฉลากผู้ท้าชิงที่เรียงจากมีแนวโน้มมากไปน้อย และคะแนนความมั่นใจของแต่ละฉลาก

Pipeline output

ผลลัพธ์จากไปป์ไลน์

"shipping issue" ชนะด้วยความมั่นใจ 0.82 โมเดลไม่เคยเห็นตัวอย่างติดฉลากของเรื่องร้องเรียนการจัดส่งระหว่างการฝึก แต่สามารถจับได้จากโมเดล bart-large-mnli ที่พรีเทรนและฟายน์จูนบนข้อมูล NLI ตามที่อธิบายไว้ก่อนหน้า

มีหลายประเด็นที่ควรสังเกตเกี่ยวกับเวิร์กโฟลว์นี้:

  • โมเดลคือโมเดล NLI: bart-large-mnli คือ BART ที่ฟายน์จูนบนชุดข้อมูล MultiNLI เมื่อเรียกไปป์ไลน์ มันจะแปลงฉลากของคุณเป็น hypothesis เบื้องหลังและรันผ่านโมเดล

  • เปลี่ยนฉลากเมื่อไรก็ได้: ไม่ต้องเปลี่ยนโมเดลเลย สลับลิสต์ candidate_labels เป็นอีกชุดก็จัดประเภทเป็นหมวดใหม่ได้ทันที

  • มัลติเลเบลทำได้เพียงตั้งแฟลกเดียว: ตั้งค่า multi_label=True ตอนเรียกไปป์ไลน์ แล้วฉลากจะไม่ต้องแข่งขันกัน แต่ละฉลากได้ความน่าจะเป็นอิสระ ดังนั้นอินพุตเดียวอาจอยู่ได้หลายหมวด

result = classifier(text, candidate_labels, multi_label=True)
pprint(result)

Multi label output

ผลลัพธ์แบบหลายฉลาก

ทั้งหมดก็มีเท่านี้ โหลดไปป์ไลน์ กำหนดฉลาก แล้วเรียกคลาสสิฟายเออร์ เร็วและง่ายกว่าสร้างโมเดลจัดประเภทใหม่ตั้งแต่ต้นมาก

ข้อผิดพลาดที่พบบ่อยกับ Zero-Shot Classification

Zero-shot classification ตั้งค่าง่าย และนั่นเองที่ทำให้ถูกใช้ผิดง่าย ต่อไปนี้คือข้อผิดพลาดที่มักเกิดขึ้นในโปรเจ็กต์จริง

เลือกฉลากกำกวม

ฉลากคือวิธีสื่อสารงานกับโมเดล ฉลากกำกวมย่อมนำไปสู่ผลพยากรณ์กำกวม

"good" และ "bad" ไม่ได้บอกโมเดลมากนัก แต่ "customer is happy with the product" และ "customer is reporting a problem with the product" ให้ข้อมูลที่ใช้ได้ ฉลากที่เป็นวลีมีความหมายชัดยิ่งขึ้น โมเดลจะให้คะแนนเทียบกับอินพุตได้ดีกว่า

หลีกเลี่ยงฉลากที่ซ้อนทับกันด้วย หาก "complaint" และ "negative feedback" อยู่ในลิสต์เดียวกัน โมเดลจะเฉลี่ยความมั่นใจระหว่างสองฉลากและไม่มีผู้ชนะที่ชัดเจน

คิดว่า zero-shot ให้ผลเทียบเท่าการฟายน์จูน

นี่คือความเข้าใจผิดที่พบบ่อย Zero-shot ดี แต่ไม่ใช่เวทมนตร์

โมเดลที่ฟายน์จูนบนตัวอย่างติดฉลากหลายพันสำหรับงานของคุณ เกือบจะชนะโมเดล zero-shot บนงานเดียวกันเสมอ หากได้ความแม่นยำ 85% ด้วย zero-shot แต่ต้องการ 95% เพื่อใช้งานจริง การจูนฉลากอย่างไรก็ปิดช่องว่างไม่ลง ถึงจุดนั้นการฟายน์จูนคือคำตอบ

ใช้ zero-shot เมื่อไม่มีข้อมูลติดฉลาก เมื่อหมวดเปลี่ยนบ่อย หรือเมื่อ "พอใช้ได้" ก็ดีพอ อย่าเลือกเพียงเพราะตั้งค่าเร็ว แล้วแปลกใจเมื่อทำผลงานไม่ได้สำหรับงานเดิมพันสูง

ประเมินบนชุดข้อมูลที่แคบเกินไป

สถานการณ์มักเป็นแบบนี้: สร้างคลาสสิฟายเออร์ zero-shot ทดสอบบน 50 ตัวอย่างที่เขียนเอง แล้วมันทายถูกทุกข้อ จากนั้นปล่อยใช้งานจริง แล้วทุกคนบ่นว่าแย่มาก

ตัวอย่าง 50 ชิ้นที่เขียนเองไม่ได้แทนสิ่งที่ผู้ใช้จริงส่งมา มันสะอาดกว่า ชัดกว่า และสอดคล้องกับภาพจำของคุณต่อหมวดนั้น ๆ มากกว่า จงประเมินบนข้อมูลที่เหมือนของจริงที่โมเดลจะเจอ — ข้อความที่ผู้ใช้สร้าง มีพิมพ์ผิด สแลง และเคสขอบ หากยังไม่มีข้อมูลนั้น ให้สุ่มอินพุตจริงสักสองสามร้อยรายการแล้วติดฉลากด้วยมือก่อนที่จะเชื่อผลตัวเลข

มองข้ามภาษาที่เฉพาะโดเมน

โมเดล zero-shot ทั่วไปเข้าใจภาษาทั่วไป มันไม่ได้รู้ศัพท์เฉพาะอุตสาหกรรมของคุณ

คำศัพท์การแพทย์ ภาษากฎหมาย ตัวย่อการเงิน สเปกวิศวกรรม ล้วนมีคำศัพท์แคบ ๆ ที่โมเดลพรีเทรนเคยเห็นแต่ไม่ลึก หากขอให้โมเดล zero-shot ทั่วไปจัดประเภทประโยคที่เต็มไปด้วยรหัส ICD-10 หรือข้อความเออร์เรอร์ SQL คาดหวังผลลัพธ์ที่ปะปนได้

มีสองทางเลือก เขียนฉลากของคุณใหม่ให้เป็นภาษาธรรมดาที่โมเดลเข้าใจได้มากขึ้น หรือสลับไปใช้โมเดลที่พรีเทรนบนข้อความในโดเมนของคุณ BioBERT สำหรับข้อความการแพทย์ FinBERT สำหรับการเงิน และโมเดลเฉพาะโดเมนลักษณะเดียวกันมักให้ผลดีกว่าในงานเฉพาะทาง

เหตุใด Zero-Shot Classification จึงสำคัญในยุค AI สมัยใหม่

Zero-shot classification คือหนึ่งในตัวอย่างที่ชัดเจนที่สุดว่าพื้นฐานของ foundation models เปลี่ยนสิ่งที่เป็นไปได้ใน AI อย่างไร

เมื่อทศวรรษก่อน งานจัดประเภททุกงานเริ่มด้วยคำถามเดิม: มีข้อมูลติดฉลากหรือยัง ถ้าไม่ จะหาอย่างไร โครงการติดฉลากใช้เวลาหลายเดือน ต้องใช้บัดเจ็ต ผู้รับจ้าง และการควบคุมคุณภาพ โมเดลสร้างไม่ได้จนกว่าจะมีข้อมูล

สมมติฐานนั้นไม่จริงอีกต่อไป

โมเดลฐานที่ฝึกบนข้อความกว้างขวางรู้เรื่องภาษามากพอจะรับมือกับงานจัดประเภทใหม่ได้ทันทีที่คุณอธิบาย รายชื่อฉลากคือสิ่งเดียวที่ต้องกำหนด

การเปลี่ยนแปลงนี้สำคัญด้วยเหตุผลหลายประการที่เชื่อมโยงกับแนวโน้มใหญ่ของ AI:

  • แสดงให้เห็นว่าพื้นฐานของ foundation models มีไว้เพื่ออะไร: จุดประสงค์ของการพรีเทรนขนาดใหญ่คือสร้างโมเดลที่ทั่วไปพอจะถูกนำไปใช้กับหลายงานโดยไม่ต้องฝึกใหม่ Zero-shot classification คือหนึ่งในตัวอย่างที่สะอาดตาที่สุดของคำมั่นนั้นในทางปฏิบัติ
  • ลดการพึ่งพาชุดข้อมูลกำกับดูแล: ข้อมูลติดฉลากยังมีประโยชน์ แต่ไม่จำเป็นต้องมีเพื่อสร้างคลาสสิฟายเออร์ที่ใช้งานได้ ทีมที่ไม่มีงบสำหรับโครงการติดฉลากยังคงปล่อยฟีเจอร์ AI ที่มีคุณค่าได้
  • เปลี่ยนความเร็วในการดีพลอย: ฟีเจอร์จัดประเภทที่เคยใช้ไตรมาสหนึ่งกว่าจะส่งได้ ตอนนี้ต้นแบบเสร็จในช่วงบ่าย สิ่งนี้ส่งผลต่อสิ่งที่ทีมเลือกสร้าง เพราะต้นทุนในการลองทำอะไรบางอย่างลดลงแทบเป็นศูนย์

แนวโน้มกว้างคือการย้ายจากโมเดลเฉพาะงานไปสู่โมเดลอเนกประสงค์ การฟายน์จูนยังมีที่ทางของมัน และการฝึกตั้งแต่ศูนย์ก็เช่นกันเมื่อจำเป็นต่อภารกิจ แต่จุดเริ่มต้นโดยปริยายได้เปลี่ยนไปแล้ว คว้าโมเดลพรีเทรนมาก่อน และค่อยเฉพาะทางเมื่อข้อมูลสนับสนุน

สรุป

Zero-shot classification เตือนให้เห็นว่าไม่ใช่ทุกปัญหาในงานแมชชีนเลิร์นนิงจะต้องมีการฝึกโมเดลของตัวเองอีกต่อไป โมเดลที่เข้าใจภาษาอยู่แล้วสามารถถูกนำไปใช้กับงานใหม่ได้ด้วยการเปลี่ยนฉลากที่ให้ โดยไม่ต้องมีตัวอย่างหรือการฟายน์จูน

ความยืดหยุ่นนี่แหละคือหัวใจ หมวดที่สนใจวันนี้อาจไม่ใช่หมวดที่สนใจเดือนหน้า และโมเดล zero-shot เปิดโอกาสให้เปลี่ยนใจได้

ดังนั้นก่อนเริ่มโครงการติดฉลากข้อมูล ลองตั้งค่า zero-shot เป็นเส้นฐาน จะรู้ภายในบ่ายเดียวว่างานนั้นแก้ได้เลย แก้ได้บางส่วน หรือยังต้องใช้แนวทางที่หนักกว่า เท่านั้นเอง

หากยังใหม่กับ LLMs สมัครเรียน หลักการของ Large Language Models (LLMs) คอร์สนี้สอนทุกอย่างที่ต้องรู้เกี่ยวกับการประยุกต์ใช้ LLM วิธีการฝึก และงานวิจัยล่าสุด

FAQs

อธิบาย zero-shot classification แบบเข้าใจง่ายคืออะไร?

Zero-shot classification คือวิธีการกำหนดฉลากให้ข้อความโดยไม่ต้องฝึกโมเดลบนฉลากเหล่านั้นโดยเฉพาะ ป้อนอินพุตและรายชื่อหมวดที่เป็นไปได้ แล้วโมเดลจะเลือกคำตอบที่ตรงที่สุดจากสิ่งที่เรียนรู้ระหว่างการพรีเทรน คำว่า "zero" หมายถึงจำนวนตัวอย่างฝึกที่ต้องใช้ต่อหมวด ซึ่งเท่ากับศูนย์

ควรใช้ zero-shot classification แทนการฝึกโมเดลเองเมื่อใด?

ใช้ zero-shot เมื่อลองแนวทางเบื้องต้น ไม่มีข้อมูลติดฉลาก หมวดเปลี่ยนบ่อย หรือจำเป็นต้องปล่อยต้นแบบอย่างรวดเร็ว เหมาะกับงานสำรวจที่ยังหาว่าหมวดควรเป็นอะไร หากมีชุดฉลากนิ่งและตัวอย่างติดฉลากพอ การฟายน์จูนคลาสสิฟายเออร์แบบดั้งเดิมมักให้ความแม่นยำดีกว่า

Zero-shot classification แม่นยำแค่ไหน?

ความแม่นยำขึ้นกับโมเดลที่ใช้ ความชัดเจนของฉลาก และความเหมาะสมของงานกับความเข้าใจภาษาทั่วไป โมเดล zero-shot บนงานที่นิยามดีอาจให้ผลตั้งแต่ใช้ได้จนถึงพร้อมใช้งานจริง แต่เกือบจะด้อยกว่าโมเดลที่ฟายน์จูนบนข้อมูลติดฉลากเพียงพอสำหรับงานเดียวกัน จงมอง zero-shot เป็นเส้นฐานที่แข็งแกร่ง

ความต่างระหว่าง zero-shot classification กับ NLI คืออะไร?

Natural language inference (NLI) เป็นงานที่โมเดลตัดสินว่าประโยคหนึ่งตามอีกประโยคหนึ่ง ขัดแย้ง หรือเป็นกลาง Zero-shot classification ใช้โมเดล NLI เป็นกลไกเบื้องหลัง อินพุตของคุณกลายเป็น premise และฉลากผู้ท้าชิงแต่ละตัวจะถูกแปลงเป็น hypothesis ฉลากที่ hypothesis ได้คะแนน entailment สูงสุดจะชนะ

ใช้ zero-shot classification กับข้อความที่ไม่ใช่ภาษาอังกฤษได้ไหม?

ทำได้ แต่ต้องใช้โมเดลหลายภาษา โมเดลอย่าง xlm-roberta-large-xnli ถูกฝึกบนข้อมูล NLI หลายภาษาและสามารถทำ zero-shot classification ได้หลายสิบภาษา ใช้ bart-large-mnli และรุ่นภาษาอังกฤษสำหรับข้อความอังกฤษ และสลับไปเวอร์ชันหลายภาษาเมื่ออินพุตไม่ใช่ภาษาอังกฤษ

หัวข้อ

เรียนรู้กับ DataCamp

Tracks

นักวิทยาศาสตร์การเรียนรู้ของเครื่อง ใน Python

85 ชม.
ค้นพบการเรียนรู้ของเครื่องด้วย Python และมุ่งสู่การเป็นนักวิทยาศาสตร์การเรียนรู้ของเครื่อง สำรวจการเรียนรู้แบบมีผู้สอน การเรียนรู้แบบไม่มีผู้สอน และการเรียนรู้เชิงลึก
ดูรายละเอียดRight Arrow
เริ่มหลักสูตร
ดูเพิ่มเติมRight Arrow