Bagaimana Anda menerapkan SMOTE pada klasifikasi teks?


13

Teknik Minorive Oversampling (SMOTE) adalah teknik oversampling yang digunakan dalam masalah dataset yang tidak seimbang. Sejauh ini saya punya ide bagaimana menerapkannya pada data umum, terstruktur. Tetapi apakah mungkin untuk menerapkannya pada masalah klasifikasi teks? Bagian mana dari data yang perlu Anda sampel berlebihan? Sudah ada pertanyaan lain tentang itu, tetapi tidak memiliki jawaban. Di mana saya bisa belajar memulai ini?

Jawaban:


11

Sebenarnya NLP adalah salah satu area yang paling umum di mana resampling data diperlukan karena ada banyak tugas klasifikasi teks yang berurusan dengan masalah yang tidak seimbang (pikirkan tentang penyaringan spam, penghinaan komentar deteksi, klasifikasi artikel, dll). Tetapi SMOTE tampaknya bermasalah di sini karena beberapa alasan:

  • SMOTE bekerja di ruang fitur. Ini berarti bahwa output SMOTE bukan data sintetis yang merupakan perwakilan nyata dari teks di dalam ruang fitur.
  • Di satu sisi SMOTE bekerja dengan KNN dan di sisi lain, ruang fitur untuk masalah NLP sangat besar. KNN akan dengan mudah gagal dalam dimensi besar itu.

Jadi saya bisa mengusulkan dua pendekatan:

  1. Jangan pedulikan representasi teks asli sampel sintetis baru yang saya anggap baik-baik saja. Anda perlu menyeimbangkan distribusi untuk classifier Anda bukan untuk pembaca data teks. Jadi terapkan SMOTE sebagai tradisional (namun saya biasanya menggunakan solusi 2 di bawah jadi saya tidak menjamin hasilnya!) Dengan beberapa langkah Pengurangan Dimensi.

1) Mari kita asumsikan Anda ingin membuat sampel data Anda dari double kelas ganda menggunakan 3-NN. Abaikan kelas utama dan simpan hanya sampel kelas kecil.

2) Untuk setiap titik sampel dalam ruang fitur pilih 5 tetangga terdekat. Kemudian pilih 3 dari mereka secara acak (bukankah itu tidak perlu rumit? Jika saya tidak ingin menjelaskan algoritma asli saya akan mengatakan hanya memilih 3 tetangga!)

3) Untuk setiap dimensi, hitung jarak antara sampel dan tetangga dan kalikan dengan angka acak antara 0-1 dan tambahkan ke nilai asli sampel dalam dimensi tersebut. (Paragraf yang rumit ini hanya berarti untuk setiap dimensi memilih nilai acak antara sampel asli dan tetangga itu!)

  1. Tapi saya biasanya melakukan oversampling lain yang ada di teks (jadi lebih intuitif) dan agak SMOTE.

1) Abaikan kelas utama. Dapatkan distribusi panjang semua dokumen di kelas minor sehingga kami menghasilkan sampel baru sesuai dengan panjang dokumen yang sebenarnya (jumlah kata / frasa). Kami berasumsi kami ingin membuat ukuran kelas rangkap tiga (sehingga menghasilkan dokumen sintetik per dokumen asli)k=2

2) Menghasilkan urutan bilangan bulat acak sesuai dengan distribusi itu. Ini digunakan untuk menentukan panjang dokumen sintetis baru.n

mmnkk


Terima kasih atas jawabannya, tetapi bisakah SMOTE diterapkan untuk sampel jika mereka direpresentasikan menggunakan pengodean satu-panas? atau mereka harus diwakili dengan cara lain?
adnanmuttaleb

Halo Kasra, dapatkah Anda membagikan beberapa implementasi terkait dengan langkah-langkah yang Anda sebutkan
Payal Bhatia

2

Jika Anda ingin menambahkan lebih banyak data / kalimat kalimat traning, Anda dapat menggunakan embeddings kata pra-terlatih. Model pretrained seperti menyediakan representasi vektor kata dari setiap kata kamus. Itu juga menyediakan kata-kata 'most_smiliar'.

Anda cukup menggunakan kalimat sampel dan menghasilkan sampel baru dengan melakukan permutasi dari setiap kata dengan kata-kata yang mirip dengan TOP_N.

mis. jika kalimat Anda memiliki 3 kata, dan jika Anda memilih 3 yang paling mirip untuk setiap kata, Anda dapat menambahkan sebanyak 27 kali.


Hai Yashodhan, bagaimana kita bisa menggunakan proses ini jika itu spesifik domain? Terima kasih
Payal Bhatia
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.