นี่คือหน้าเอกสาร Markdown สำหรับข้อมูลเพิ่มเติม โปรดดูการอ้างอิง Markdown (go/documentation-reference) และคู่มือสไตล์เอกสารประกอบ (go/documentation-style)
พื้นหลัง
อัลกอริธึมการเรียนรู้ของ Decision Forest ทำงานแตกต่างจากโมเดลที่ใช้การไล่ระดับสี เช่น โครงข่ายประสาทเทียมหรือตัวทำนายเชิงเส้น ความแตกต่างเหล่านี้แสดงให้เห็นในการตัดสินใจในการสร้างแบบจำลองต่างๆ แต่จะเด่นชัดเป็นพิเศษเมื่อชุดข้อมูลประกอบด้วยคุณลักษณะหมวดหมู่ที่มีความยาวผันแปรได้ เช่น คุณลักษณะข้อความโทเค็น ซึ่งมักจะต้องใช้วิศวกรรมคุณลักษณะเฉพาะทางสถาปัตยกรรม คู่มือนี้จะสรุปข้อดีข้อเสียระหว่างกลยุทธ์ทางวิศวกรรมฟีเจอร์ต่างๆ สำหรับฟีเจอร์ข้อความในโมเดลฟอเรสต์การตัดสินใจ
ในส่วนต่อไปนี้ เราจะอ้างถึงชุดข้อมูลที่มีคุณสมบัติเหล่านี้ และสมมติว่าเรากำลังคาดการณ์ว่าผู้ใช้จะซื้อผลิตภัณฑ์เฉพาะเจาะจงหรือไม่:
คุณสมบัติ | รหัสผู้ใช้ | การซื้อครั้งก่อน | ชื่อผลิตภัณฑ์ | รายละเอียดสินค้า |
ข้อมูลตัวอย่าง | 1234 | [“ทีวี”, “สุญญากาศ”] | “เราเตอร์ไร้สาย” | “เราเตอร์นี้คือ…” |
ในตัวอย่างนี้ "การซื้อก่อนหน้า" เป็นคุณลักษณะข้อความแบบกระจาย (หรือชุดของรายการที่เป็นหมวดหมู่) “ชื่อผลิตภัณฑ์” ก็เช่นกัน แต่ไม่ได้รับโทเค็นในตัวอย่างนี้ “รายละเอียดสินค้า” เป็นคุณลักษณะภาษาธรรมชาติซึ่งมีคุณสมบัติแตกต่างจากคุณลักษณะอื่นๆ เนื่องจากเราคาดหวังว่าคำศัพท์จะมีขนาดใหญ่ (หรือไม่จำกัด) เพื่อให้การเรียงลำดับคำมีความสำคัญ และมีคุณสมบัติทางความหมายและคำศัพท์อื่นๆ ที่มีอยู่ในตัว ภาษา. กลยุทธ์ที่เราอธิบายด้านล่างนี้เหมาะสมกับคุณสมบัติทั้งหมดเหล่านี้ แต่จะมีข้อดีที่แตกต่างกันในแต่ละคุณสมบัติ
การอ้างอิงด่วน
ทางออกที่ดีที่สุด หากไม่ต้องกังวลเรื่องต้นทุนการฝึกอบรมและการอนุมาน ก็คือการใช้ทั้งชุดหมวดหมู่และการฝังที่ได้รับการฝึกอบรมล่วงหน้าสำหรับฟีเจอร์ข้อความแต่ละรายการ เนื่องจากมีจุดแข็งและจุดอ่อนที่เสริมกัน เราขอแนะนำสิ่งนี้ เว้นแต่จะมีข้อจำกัดข้อใดข้อหนึ่งที่กล่าวถึงด้านล่างนี้
ความเร็วในการอนุมาน | ความเร็วการฝึกอบรม | ความสามารถในการจดจำความสัมพันธ์ของป้ายกำกับ <> โทเค็น | ลักษณะทั่วไป | |
หลายหมวดหมู่ | เร็วที่สุด (++) | เร็วที่สุด (++) | จำกัด | จำกัด (+) |
หลายร้อน | รวดเร็ว (+) | รวดเร็ว (สมมติว่าคำศัพท์มีขนาดค่อนข้างเล็ก) (++) | ดี | จำกัด (+) |
หมวดหมู่ชุด | เร็วที่สุด (+++) | ช้าลง (+) | ดีที่สุด | จำกัด (++) |
การฝัง | ช้าที่สุด (สมมติว่าใช้ตัวเข้ารหัสที่ไม่สำคัญ เช่น การคูณเมทริกซ์) (+ ถึง +++) | เร็วที่สุด (สมมติว่ามีขนาดคำศัพท์ >> มิติการฝัง) (+++) | แย่ | ดี (++ ถึง +++) |
เอ็น-แกรม
N-grams (เช่น {"the", "cat", "is", "blue"} -> {"<start> the", "the cat", "cat is", "is blue", "blue < end>"}) อาจมีประโยชน์ในหลายกรณี และรวบรวมข้อมูลคำศัพท์ในท้องถิ่น วิธีการทั้งหมดด้านล่างนี้ได้รับการสนับสนุน แต่ต้องแลกมาด้วยขนาดคำศัพท์ที่ใหญ่ขึ้นอย่างมาก ซึ่งทำให้ทำไม่ได้เนื่องจากค่าใช้จ่ายในการฝึกอบรม
กลยุทธ์ท้อแท้
การเข้ารหัสแบบร้อนเดียว / หลายร้อน / ถุงคำ
การเข้ารหัสแบบร้อนแรงเป็นกลยุทธ์คลาสสิกในการลดความหนาแน่นของข้อความที่กระจัดกระจาย ที่นี่เราถือว่าส่วนขยายที่คุณลักษณะข้อความกระจัดกระจายแสดงด้วย multi-hot (1 วินาทีสำหรับโทเค็นที่มีอยู่ทั้งหมด) หรือ vectorization แบบนับตาม (จำนวนสำหรับแต่ละโทเค็นในคำศัพท์)
ตัวอย่างเช่น หากคำศัพท์มี 4 รายการ และจัดทำดัชนี เช่น ["TV", "Vacuum", "Wifi", "Router"] คุณลักษณะ "Preor Purchases" จะเป็นเวกเตอร์หนาแน่น <1, 1, 0, 0 >. หากคำนึงถึงการนับและคุณสมบัติคือ ["TV", "TV", "Vacuum"] มันจะเป็น <2, 1, 0, 0>
ข้อดี
- เนื่องจากการเรียนรู้การแยกฟอเรสต์การตัดสินใจจากคุณสมบัติแต่ละรายการ จึงมีราคาถูกกว่าเวลาฝึกอบรมมากกว่าชุดตามหมวดหมู่
- ต่างจากแบบแรกตรงที่ไม่จำเป็นต้องตัดหรือเสริมใดๆ และโทเค็นมีความหมายเหมือนกันในตัวอย่างต่างๆ (เช่น "TV" จะคงที่ตลอดการแยกโดยไม่คำนึงถึงตำแหน่ง)
ข้อเสีย
- กลยุทธ์นี้มักจะนำไปสู่การแยกที่ไม่สมดุลและกระจัดกระจายอย่างมาก ซึ่งอาจทำให้อัลกอริทึมการเรียนรู้ DF รวมตัวกันช้าลงหรือต่ำกว่ามาตรฐาน นี่เป็นเพราะว่า:
- จำเป็นต้องแยกเพิ่มเติมเพื่อเรียนรู้ข้อมูลเดียวกัน
- ต้นไม้กระจัดกระจายมากมักแย่กว่าต้นไม้ที่มีความสมดุล มักส่งผลให้แบบจำลองมีความแม่นยำน้อยลง
- ไม่คำนึงถึงข้อมูลตำแหน่ง ซึ่งอาจส่งผลเสียต่อประสิทธิภาพการทำงานของฟีเจอร์ภาษาธรรมชาติ
- การเรียนรู้การแยกตัวเลขจากข้อมูลเชิงหมวดหมู่นั้นไม่ค่อยเหมาะสมนัก มีการเพิ่มประสิทธิภาพสำหรับการค้นหาการแยกตามหมวดหมู่ที่ไม่ได้ใช้ประโยชน์ที่นี่
- ความซับซ้อนในการคำนวณการฝึกอบรมจะปรับขนาดเป็นเส้นตรงกับจำนวนรายการคำศัพท์ (ซึ่งแต่ละรายการจะถูกใช้เป็นคุณลักษณะเชิงตัวเลข) ในทางปฏิบัติ เว้นแต่ชุดข้อมูลจะมีขนาดเล็กมาก (ซึ่งในกรณีนี้คำศัพท์ขนาดใหญ่อาจกระตุ้นให้มีการติดตั้งมากเกินไป) จะทำให้การฝึกคำศัพท์ที่มีมากกว่า 5,000 รายการช้ามาก
- การใช้หน่วยความจำการฝึกอบรมจะเป็น 1 ไบต์ (สำหรับหนึ่งฮอต) หรือ 4 ไบต์ (สำหรับการนับ) ต่อรายการคำศัพท์ต่อตัวอย่าง เนื่องจาก ณ เวลาจัดทำดัชนี ข้อมูลจะถูกจัดเก็บเป็นข้อมูลที่กระจัดกระจายในเวอร์ชันหนาแน่น สิ่งนี้สามารถขยายใหญ่ขึ้นอย่างมากสำหรับคำศัพท์และชุดข้อมูลขนาดใหญ่
คุณสมบัติหมวดหมู่หลายรายการพร้อมความยาวคงที่
เนื่องจากคุณลักษณะเชิงหมวดหมู่สามารถเรียนรู้ได้อย่างมีประสิทธิภาพโดยอัลกอริธึมการตัดสินใจของฟอเรสต์ วิธีธรรมชาติวิธีหนึ่งในการใช้โทเค็นแบบกระจายคือการแพด/คลิปเพื่อให้มีจำนวนโทเค็นอินพุตคงที่ต่อตัวอย่าง และแต่ละตำแหน่งโทเค็นเป็นคุณลักษณะที่แยกจากกันและเป็นอิสระ ในตัวอย่างด้านบน หาก “การซื้อก่อนหน้า” มีโทเค็นสูงสุด 5 รายการ เราสามารถสร้างฟีเจอร์ f1...f5 ที่แสดงถึงโทเค็น 1-5 และละทิ้งโทเค็นใดๆ > 5 และเพิ่มค่าที่หายไปสำหรับตัวอย่างที่มี < 5
ข้อดี
- นี่เป็นวิธีที่มีประสิทธิภาพในการฝึกอบรม
- สิ่งนี้อาจไม่ส่งผลเสียต่อคุณภาพของโมเดล หากจำนวนโทเค็นต่อตัวอย่างมีความแปรปรวนต่ำ และโทเค็นมีความเป็นอิสระ
- ซึ่งอาจจับความหมายเพิ่มเติม (เช่นใบสั่งซื้อในตัวอย่าง) ได้อย่างเป็นธรรมชาติมากกว่าวิธีอื่นๆ
ข้อเสีย
- เพิ่มความหมายลงในโทเค็นบุนวมที่ "หายไป" ซึ่งจะทำหน้าที่เป็นสัญญาณรบกวนให้กับโมเดล สิ่งนี้จะเด่นชัดเป็นพิเศษหากมีความแตกต่างอย่างมากในจำนวนโทเค็นต่อตัวอย่าง ซึ่งอาจเกิดขึ้นได้ เช่น กับฟีเจอร์ "คำอธิบายผลิตภัณฑ์"
- ต้นไม้ที่เรียนรู้จะมีความไวสูงต่อการจัดลำดับ กล่าวคือ หากคุณลักษณะคือ ["A", "B"] การทำนายจะแตกต่างจากการทำนายสำหรับ ["B", "A"] และหากไม่เคยเห็นต้นไม้หลังนี้มาก่อน ในข้อมูลตัวแบบจะไม่สามารถสรุปจากตัวแบบเดิมได้ โดยทั่วไป การดำเนินการนี้จะต้องมีข้อมูลเพิ่มเติมมากในการเรียนรู้ความแปรปรวนของตำแหน่ง
- ตามค่าเริ่มต้น แต่ละโทเค็นจะแสดงด้วยฟีเจอร์ที่มีคำศัพท์ต่างกัน แม้ว่าคุณจะบังคับให้การใช้งานพิจารณาชุดคำศัพท์เดียวกันต่อฟีเจอร์ f1=”TV” จะเป็นรายการคำศัพท์ที่แตกต่างจาก f2=”TV” ซึ่งหมายความว่าอัลกอริทึมจะมีประสิทธิภาพน้อยลงในการเรียนรู้ความสัมพันธ์ระหว่างโทเค็น "ทีวี" และป้ายกำกับ โดยจะต้องเรียนรู้แยกกันสำหรับแต่ละตำแหน่งโทเค็น
กลยุทธ์ที่ดีกว่า
ชุดหมวดหมู่
ชุดหมวดหมู่ ( https://arxiv.org/pdf/2009.09991.pdf ) เป็นการแสดงคุณสมบัติเริ่มต้นของ TF-DF สำหรับข้อความแบบกระจาย ชุดหมวดหมู่คือชุดคำที่มีประสิทธิภาพ โดยไม่สนใจคำซ้ำและการเรียงลำดับ ตัวอย่างเช่น คุณลักษณะ "ทีวีดีที่สุด" จะแสดงด้วยชุดหมวดหมู่ {"ดีที่สุด", "เป็น", "the", "ทีวี}
ตัวแยกชุดหมวดหมู่เนทิฟตามการวัดประสิทธิภาพในงานต่างๆ (ดูกระดาษ) มักจะมีประสิทธิภาพเหนือกว่าคุณสมบัติการจัดหมวดหมู่แบบหลายร้อนและความยาวคงที่ ตามทฤษฎีแล้ว ทั้งการแยกชุดตามหมวดหมู่และการแยกบูลีนในฟีเจอร์ที่เข้ารหัสแบบร้อนแรงสามารถเรียนรู้ข้อมูลเดียวกันได้ อย่างไรก็ตาม ใช้ตัวอย่างต่อไปนี้ โดยที่ต้นไม้พยายามเรียนรู้ฟังก์ชันต่อไปนี้:
if description contains “high” AND “speed” AND “gaming”:
return True
ในกรณีนี้ ตัวแยกชุดหมวดหมู่ดั้งเดิมจะเรียนรู้ 1 การแยก โดยที่ {“high”, “speed”, “gaming”} => True
การแสดงยอดนิยมหนึ่งครั้งจะต้องมีการแยก 3 ครั้งบน "สูง", "แยก" และ "เกม" และจะต้องค้นหาโหนดใบที่เหมาะสมสำหรับการแยกประเภทเหล่านั้นที่เป็นไปได้ทั้งหมด (เช่น "สูง" ไม่ใช่ "ความเร็ว") ในทางปฏิบัติ การเข้ารหัสแบบร้อนแรงเดียวนำไปสู่แผนผังที่ไม่สมดุลสูงซึ่งไม่สามารถเพิ่มประสิทธิภาพได้อย่างมีประสิทธิภาพด้วยอัลกอริธึมการเรียนรู้ฟอเรสต์การตัดสินใจที่มีประสิทธิภาพดีที่สุด
ข้อดี
- ดีที่สุดในการเรียนรู้ข้อมูลแบบ bag-of-words สำหรับฟอเรสต์การตัดสินใจ
- มีประสิทธิภาพสูงในการให้บริการ (สามารถให้บริการด้วย QuickScorer ซึ่งสามารถให้บริการต้นไม้ขนาดใหญ่ได้ในเวลาไม่เกินไมโครวินาทีต่อตัวอย่าง) ความซับซ้อนของเวลาในการเสิร์ฟเป็นเส้นตรงในจำนวนรายการในชุดหมวดหมู่ของแต่ละตัวอย่าง ซึ่งในทางปฏิบัติมีขนาดเล็กกว่าขนาดของคำศัพท์มาก
- ปรับคำศัพท์เดี่ยวให้เหมาะสมต่อฟีเจอร์ ดังนั้นจึงมีการแบ่งปันความหมาย
ข้อเสีย
- ค่าใช้จ่ายในการฝึกอบรมการแบ่งชุดตามหมวดหมู่จะปรับขนาดด้วยขนาดคำศัพท์ num_examples * ซึ่งคล้ายกับอัลกอริธึมแบบร้อนแรง ขนาดคำศัพท์ที่ฝึกได้อาจมีขนาดค่อนข้างเล็ก (N พัน) ในการใช้งานจริง โปรดทราบว่าความเร็วการฝึกนี้สามารถปรับปรุงได้โดยการปรับเศษส่วนการสุ่มตัวอย่างของอัลกอริธึมโลภ แต่อาจทำให้ได้คุณภาพที่ต่ำกว่ามาตรฐาน
การฝัง
โครงข่ายประสาทเทียมได้แสดงประสิทธิภาพที่ล้ำสมัยในงาน NLP ที่หลากหลาย และการฝังที่ได้รับการฝึกอบรมล่วงหน้าซึ่งใช้เป็นคุณสมบัติเชิงตัวเลขยังทำงานได้ดีกับอัลกอริธึมของฟอเรสต์การตัดสินใจ แม้ว่าคุณสมบัติจะถูกใช้ภายในแตกต่างกันมากก็ตาม โปรดทราบว่าที่นี่เราเรียก "การฝัง" ว่าเป็นการเข้ารหัสโครงข่ายประสาทเทียม เช่น เอาต์พุตของเลเยอร์ Transformer / Convolutional / Recurrent
การใช้การฝังที่ได้รับการฝึกอบรมล่วงหน้าทำงานได้ดีกับโครงข่ายประสาทเทียม ส่วนหนึ่งเป็นเพราะการเริ่มต้นของสเปซเวกเตอร์ที่โทเค็นหรือประโยคที่คล้ายกันอยู่ใกล้ในสเปซยุคลิด แสดงให้เห็นว่าสามารถถ่ายโอนข้ามงาน NLP ได้ดี และการไล่ระดับสีจากการเริ่มต้นนั้นมีขนาดเล็กลงและเร็วกว่าในการมาบรรจบกัน กว่าการเริ่มต้นแบบสุ่มอย่างสมบูรณ์ อย่างไรก็ตาม แผนผังการตัดสินใจใช้การฝังเป็นคุณลักษณะตัวเลขแต่ละรายการ และเรียนรู้เกี่ยวกับพาร์ติชันที่จัดแนวแกนของคุณลักษณะแต่ละรายการเหล่านั้น 1 ซึ่งหมายความว่าแทบจะเป็นไปไม่ได้เลยที่จะใช้ข้อมูลความหมายเดียวกัน เช่น ดอทโปรดัคหรือการคูณเมทริกซ์ ไม่สามารถแสดงด้วยชุดการแยกที่จัดแนวแกนได้ นอกจากนี้ ไม่เหมือนกับโครงข่ายประสาทเทียมซึ่งสามารถอัปเดตการฝังผ่านการไล่ระดับลงระหว่างการฝึกอบรม อัลกอริธึมการเรียนรู้ฟอเรสต์การตัดสินใจเริ่มต้นนั้นไม่สามารถแยกความแตกต่างได้ ซึ่งหมายความว่าการฝังจะต้องถูกแช่แข็งไว้ โปรดทราบว่ามีงาน ( https://arxiv.org/pdf/2007.14761.pdf เป็นต้น) เกี่ยวกับฟอเรสต์การตัดสินใจเชิงอนุพันธ์ อย่างไรก็ตาม ส่วนหนึ่งอาจเป็นเพราะในทางปฏิบัติ ไม่ใช่ว่าบิตของข้อมูลทั้งหมดในการฝังจะถูกนำไปใช้จริง แม้แต่โดยโครงข่ายประสาทเทียม กลยุทธ์นี้ยังคงทำงานได้ดีกับฟอเรสต์การตัดสินใจ
ข้อดี:
- สามารถจัดการกับขนาดคำศัพท์ที่ใหญ่กว่ามาก เนื่องจากการฝังเป็นการเพิ่มความหนาแน่นของมิติการฝังจำนวนเล็กน้อยอย่างมีประสิทธิภาพ จึงไม่น่าเป็นไปได้ที่จำนวนคุณลักษณะอินพุตในฟอเรสต์การตัดสินใจจะเพิ่มขึ้นอย่างมาก
- ตามทฤษฎีแล้วสามารถสรุปได้ดีขึ้น เนื่องจากการฝังที่คล้ายกันสามารถใช้ชุดพาร์ติชันร่วมกันได้ โปรดทราบว่าข้อแม้ใหญ่ในที่นี้คือ ดังที่กล่าวไว้ข้างต้น การแปลงพื้นฐานหรือการหมุนในปริภูมิเวกเตอร์สามารถมีการฝังที่คล้ายกันสองรายการที่แตกต่างกันอย่างสิ้นเชิงในพื้นที่แบ่งพาร์ติชันที่จัดแนวแกนสำหรับฟอเรสต์การตัดสินใจ
- สามารถสรุปการเกิดซ้ำ/ลำดับคำได้ตามธรรมชาติ เช่น หากโปรแกรมเปลี่ยนไฟล์มีการโน้มน้าวใจ ความสนใจ หรือ RNN
- สามารถใช้ประโยชน์จากข้อมูลจากชุดข้อมูลอื่นได้ (การฝึกอบรมล่วงหน้าเพื่อการถ่ายโอนการเรียนรู้)
ข้อเสีย
- จำข้อมูลได้ไม่ดี - การแยกอาจทำให้เกิดการจำแนกประเภทที่ไม่ชัดเจนหรือมีความไวต่อการใช้ถ้อยคำสูง (เช่น "เราเตอร์เยี่ยมมาก" และ "เราเตอร์ที่ยอดเยี่ยม") จะทำให้เกิดการฝังที่แตกต่างกัน ซึ่งอาจอยู่ใกล้กันในพื้นที่ยุคลิด แต่ไม่จำเป็นต้องมีความคล้ายคลึงกัน คุณสมบัติเชิงตัวเลข
- แสดงผลได้ช้าที่สุด เนื่องจากต้องทำการส่งต่อตัวเข้ารหัสแบบเต็มในเวลาอนุมาน เวลาแฝงที่แท้จริงนั้นขึ้นอยู่กับสถาปัตยกรรมที่ทำให้เกิดการฝังเป็นอย่างมาก กล่าวคือโดยทั่วไปแล้วตัวเข้ารหัสของหม้อแปลงจะช้ากว่าการค้นหาตารางการฝังแบบดิบที่มีการรวมค่าเฉลี่ย