วิธีใช้ข้อความด้วยโมเดล Tensorflow Decision Forest

นี่คือหน้าเอกสาร 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 การแยก โดยที่ {“สูง”, “ความเร็ว”, “เกม”} => จริง

การแสดงยอดนิยมหนึ่งครั้งจะต้องมีการแยก 3 ครั้งบน "สูง", "แยก" และ "เกม" และจะต้องค้นหาโหนดใบที่เหมาะสมสำหรับการแยกประเภทเหล่านั้นที่เป็นไปได้ทั้งหมด (เช่น "สูง" ไม่ใช่ "ความเร็ว") ในทางปฏิบัติ การเข้ารหัสแบบร้อนแรงเดียวนำไปสู่แผนผังที่ไม่สมดุลสูงซึ่งไม่สามารถเพิ่มประสิทธิภาพได้อย่างมีประสิทธิภาพด้วยอัลกอริธึมการเรียนรู้ฟอเรสต์การตัดสินใจที่มีประสิทธิภาพดีที่สุด

ข้อดี

  • ดีที่สุดในการเรียนรู้ข้อมูลแบบ bag-of-words สำหรับฟอเรสต์การตัดสินใจ
  • มีประสิทธิภาพสูงในการให้บริการ (สามารถให้บริการด้วย QuickScorer ซึ่งสามารถให้บริการต้นไม้ขนาดใหญ่ได้ในเวลาไม่เกินไมโครวินาทีต่อตัวอย่าง) ความซับซ้อนของเวลาในการเสิร์ฟเป็นเส้นตรงในจำนวนรายการในชุดหมวดหมู่ของแต่ละตัวอย่าง ซึ่งในทางปฏิบัติมีขนาดเล็กกว่าขนาดของคำศัพท์มาก
  • ปรับคำศัพท์เดี่ยวให้เหมาะสมต่อฟีเจอร์ ดังนั้นจึงมีการแบ่งปันความหมาย

ข้อเสีย

  • ค่าใช้จ่ายในการฝึกอบรมการแบ่งชุดตามหมวดหมู่จะปรับขนาดด้วยขนาดคำศัพท์ num_examples * ซึ่งคล้ายกับอัลกอริธึมแบบร้อนแรง ขนาดคำศัพท์ที่ฝึกได้อาจมีขนาดค่อนข้างเล็ก (N พัน) ในการใช้งานจริง โปรดทราบว่าความเร็วการฝึกนี้สามารถปรับปรุงได้โดยการปรับเศษส่วนการสุ่มตัวอย่างของอัลกอริธึมโลภ แต่อาจทำให้ได้คุณภาพที่ต่ำกว่ามาตรฐาน

การฝัง

โครงข่ายประสาทเทียมได้แสดงประสิทธิภาพที่ล้ำสมัยในงาน NLP ที่หลากหลาย และการฝังที่ได้รับการฝึกอบรมล่วงหน้าซึ่งใช้เป็นคุณสมบัติเชิงตัวเลขยังทำงานได้ดีกับอัลกอริธึมของฟอเรสต์การตัดสินใจ แม้ว่าคุณสมบัติจะถูกใช้ภายในแตกต่างกันมากก็ตาม โปรดทราบว่าที่นี่เราเรียก "การฝัง" ว่าเป็นการเข้ารหัสโครงข่ายประสาทเทียม เช่น เอาต์พุตของเลเยอร์ Transformer / Convolutional / Recurrent

การใช้การฝังที่ได้รับการฝึกอบรมล่วงหน้าทำงานได้ดีกับโครงข่ายประสาทเทียม ส่วนหนึ่งเป็นเพราะการเริ่มต้นของสเปซเวกเตอร์ที่โทเค็นหรือประโยคที่คล้ายกันอยู่ใกล้ในสเปซยุคลิด แสดงให้เห็นว่าสามารถถ่ายโอนข้ามงาน NLP ได้ดี และการไล่ระดับสีจากการเริ่มต้นนั้นมีขนาดเล็กลงและเร็วกว่าในการมาบรรจบกัน กว่าการเริ่มต้นแบบสุ่มอย่างสมบูรณ์ อย่างไรก็ตาม แผนผังการตัดสินใจใช้การฝังเป็นคุณลักษณะตัวเลขแต่ละรายการ และเรียนรู้เกี่ยวกับพาร์ติชันที่จัดแนวแกนของคุณลักษณะแต่ละรายการเหล่านั้น 1 ซึ่งหมายความว่าแทบจะเป็นไปไม่ได้เลยที่จะใช้ข้อมูลความหมายเดียวกัน เช่น ดอทโปรดัคหรือการคูณเมทริกซ์ ไม่สามารถแสดงด้วยชุดการแยกที่จัดแนวแกนได้ นอกจากนี้ ไม่เหมือนกับโครงข่ายประสาทเทียมซึ่งสามารถอัปเดตการฝังผ่านการไล่ระดับลงระหว่างการฝึกอบรม อัลกอริธึมการเรียนรู้ฟอเรสต์การตัดสินใจเริ่มต้นนั้นไม่สามารถแยกความแตกต่างได้ ซึ่งหมายความว่าการฝังจะต้องถูกแช่แข็งไว้ โปรดทราบว่ามีงาน ( https://arxiv.org/pdf/2007.14761.pdf เป็นต้น) ในฟอเรสต์การตัดสินใจเชิงอนุพันธ์ อย่างไรก็ตาม ส่วนหนึ่งอาจเป็นเพราะในทางปฏิบัติ ไม่ใช่ว่าบิตของข้อมูลทั้งหมดในการฝังจะถูกนำไปใช้จริง แม้แต่โดยโครงข่ายประสาทเทียม กลยุทธ์นี้ยังคงทำงานได้ดีกับฟอเรสต์การตัดสินใจ

ข้อดี:

  • สามารถจัดการกับขนาดคำศัพท์ที่ใหญ่กว่ามาก เนื่องจากการฝังเป็นการเพิ่มความหนาแน่นของมิติการฝังจำนวนเล็กน้อยอย่างมีประสิทธิภาพ จึงไม่น่าเป็นไปได้ที่จำนวนคุณลักษณะอินพุตในฟอเรสต์การตัดสินใจจะเพิ่มขึ้นอย่างมาก
  • ตามทฤษฎีแล้วสามารถสรุปได้ดีขึ้น เนื่องจากการฝังที่คล้ายกันสามารถใช้ชุดพาร์ติชันร่วมกันได้ โปรดทราบว่าข้อแม้ใหญ่ในที่นี้คือ ดังที่กล่าวไว้ข้างต้น การแปลงพื้นฐานหรือการหมุนในปริภูมิเวกเตอร์สามารถมีการฝังที่คล้ายกันสองรายการที่แตกต่างกันอย่างสิ้นเชิงในพื้นที่แบ่งพาร์ติชันที่จัดแนวแกนสำหรับฟอเรสต์การตัดสินใจ
  • สามารถสรุปการเกิดซ้ำ/ลำดับคำได้ตามธรรมชาติ เช่น หากโปรแกรมเปลี่ยนไฟล์มีการโน้มน้าวใจ ความสนใจ หรือ RNN
  • สามารถใช้ประโยชน์จากข้อมูลจากชุดข้อมูลอื่นได้ (การฝึกอบรมล่วงหน้าเพื่อการถ่ายโอนการเรียนรู้)

ข้อเสีย

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

หมายเหตุ


  1. การเปิดใช้งานการแยกแบบเฉียงช่วยให้เรียนรู้ข้อมูลที่ไม่จัดแนวแกนได้ แต่จะยังคงเป็นแบบมิติต่อมิติ