อันที่จริง NLP เป็นหนึ่งในพื้นที่ที่พบมากที่สุดที่จำเป็นต้องมีการ resampling ข้อมูลเนื่องจากมีงานการจำแนกข้อความจำนวนมากที่จัดการกับปัญหาที่ไม่สมดุล (คิดว่าเป็นตัวกรองสแปม แต่ SMOTE ดูเหมือนจะมีปัญหาที่นี่ด้วยเหตุผลบางประการ:
- SMOTE ทำงานในพื้นที่คุณลักษณะ หมายความว่าเอาต์พุตของ SMOTE ไม่ใช่ข้อมูลสังเคราะห์ซึ่งเป็นตัวแทนที่แท้จริงของข้อความในพื้นที่คุณลักษณะ
- ในด้านหนึ่ง SMOTE ทำงานร่วมกับ KNN และในอีกทางหนึ่งพื้นที่ของฟีเจอร์สำหรับปัญหา NLP นั้นมีขนาดใหญ่มาก KNN จะล้มเหลวอย่างง่ายดายในมิติขนาดใหญ่เหล่านั้น
ดังนั้นฉันสามารถเสนอคุณสองวิธี:
- ไม่สนใจเกี่ยวกับการแสดงข้อความจริงของตัวอย่างสังเคราะห์ใหม่ซึ่งฉันคิดว่าควรจะดี คุณต้องสมดุลการกระจายสำหรับลักษณนามของคุณไม่ได้สำหรับผู้อ่านข้อมูลข้อความ ดังนั้นใช้ SMOTE เป็นแบบดั้งเดิม (แต่ฉันมักจะใช้วิธีแก้ปัญหา 2 ร้องดังนั้นฉันไม่รับประกันผล!) กับขั้นตอนการลดขนาด
1) ให้สมมติว่าคุณต้องการสร้างตัวอย่างข้อมูลจากคลาสรองโดยใช้ 3-NN ละเว้นคลาสหลัก (es) และเก็บเฉพาะตัวอย่างคลาสย่อยเท่านั้น
2) สำหรับแต่ละจุดตัวอย่างในพื้นที่คุณลักษณะให้เลือก 5 เพื่อนบ้านที่ใกล้ที่สุด จากนั้นเลือกแบบสุ่ม 3 อัน (มันไม่จำเป็นไม่ซับซ้อนใช่ไหมถ้าฉันไม่ต้องการอธิบายอัลกอริทึมดั้งเดิมที่ฉันจะบอกก็แค่เลือก 3 ประเทศ!)
3) สำหรับแต่ละมิติคำนวณระยะห่างระหว่างตัวอย่างและเพื่อนบ้านและคูณด้วยตัวเลขสุ่มระหว่าง 0-1 และเพิ่มไปยังค่าดั้งเดิมของตัวอย่างในมิตินั้น (ย่อหน้าที่ซับซ้อนนี้หมายถึงแต่ละมิติเลือกค่าสุ่มระหว่างตัวอย่างดั้งเดิมกับเพื่อนบ้านนั้น!)
- แต่ฉันมักจะทำการสุ่มตัวอย่างอีกครั้งซึ่งอยู่ในข้อความ (ง่ายกว่านี้มาก) และเป็น SMOTE
1) ละเว้นคลาสที่สำคัญ รับการแจกแจงความยาวของเอกสารทั้งหมดในระดับรองเพื่อให้เราสร้างตัวอย่างใหม่ตามความยาวเอกสารจริง (จำนวนคำ / วลี) เราคิดว่าเราต้องการสร้างขนาดของคลาสทริปเปิลk = 2 เอกสารสังเคราะห์ต่อเอกสารต้นฉบับ)
2) สร้างลำดับของ nจำนวนเต็มแบบสุ่มตามการแจกแจงนั้น ใช้สำหรับกำหนดความยาวของเอกสารสังเคราะห์ใหม่
3) สำหรับแต่ละเอกสาร: เลือกหนึ่งจำนวนเต็มจากลำดับความยาวแบบสุ่มและ ม.เอกสารสุ่มที่มีความยาวใกล้เคียงกับจำนวนเต็ม ใส่โทเค็นของทั้งหมดม. เอกสารในชุดและเลือกแบบสุ่ม n ราชสกุล kครั้ง นี่คือของคุณk เอกสารใหม่