Ini adalah halaman dokumentasi Penurunan harga. Untuk informasi selengkapnya, lihat Referensi Penurunan Harga (go/documentation-reference) dan Panduan Gaya dokumentasi (go/documentation-style).
Latar belakang
Algoritme pembelajaran hutan keputusan bekerja secara berbeda dari model berbasis penurunan gradien seperti jaringan saraf atau prediktor linier. Perbedaan ini terlihat pada berbagai keputusan pemodelan, namun terutama terlihat ketika kumpulan data berisi fitur kategorikal dengan panjang variabel, seperti fitur teks yang diberi token, yang cenderung memerlukan rekayasa fitur khusus arsitektur. Panduan ini menguraikan trade-off antara berbagai strategi rekayasa fitur untuk fitur teks dalam model hutan keputusan.
Di bagian berikut, kami akan mengacu pada kumpulan data dengan fitur berikut, dan berasumsi bahwa kami memperkirakan apakah pengguna akan membeli produk tertentu:
Fitur | ID Pengguna | Pembelian Sebelumnya | Judul Produk | Deskripsi Produk |
Contoh datanya | 1234 | ["TV", "Vakum"] | “Router Wi-Fi” | “Router ini adalah…” |
Dalam contoh ini, “Pembelian Sebelumnya” adalah fitur teks renggang (atau sekumpulan item kategorikal). “Judul Produk” juga demikian, tetapi tidak diberi token dalam contoh ini. “Deskripsi Produk” adalah fitur bahasa alami, yang memiliki sifat berbeda dibandingkan fitur lainnya, karena kami memperkirakan kosakatanya banyak (atau tidak terbatas), agar urutan kata menjadi penting, dan memiliki sifat semantik dan leksikal lain yang melekat pada fitur tersebut. bahasa. Strategi yang kami uraikan di bawah ini sesuai untuk semua fitur ini, namun akan memiliki dampak yang berbeda untuk masing-masing fitur.
Referensi Cepat
Solusi terbaik, jika biaya pelatihan dan inferensi tidak menjadi masalah, adalah dengan menggunakan kumpulan kategori dan penyematan yang telah dilatih sebelumnya untuk setiap fitur teks, karena keduanya memiliki kekuatan dan kelemahan yang saling melengkapi. Kami merekomendasikan hal ini kecuali ada salah satu kendala yang disebutkan di bawah ini.
Kecepatan Inferensi | Kecepatan Pelatihan | Kemampuan untuk menghafal hubungan token <> label | Generalisasi | |
Beberapa Kategorikal | Tercepat (+) | Tercepat (+) | Terbatas | Terbatas (+) |
multi-panas | Cepat (+) | Cepat (dengan asumsi ukuran vocab relatif kecil) (++) | Bagus | Terbatas (+) |
Kumpulan kategorikal | Tercepat (+++) | Lebih lambat (+) | Terbaik | Terbatas (+) |
penyematan | Paling lambat (dengan asumsi operasi encoder non-sepele, seperti perkalian matriks) (+ ke +++) | Tercepat (dengan asumsi ukuran vocab >> dimensi penyematan) (+++) | Buruk | Bagus (+++ hingga +++) |
N-Gram
N-gram (misalnya {"the", "cat", "is", "blue"} -> {"<start> the", "the cat", "cat is", "is blue", "blue < end>"}) dapat bermanfaat dalam banyak kasus, dan menangkap informasi leksikal lokal. Metode-metode tersebut didukung dalam semua metode di bawah ini, namun memerlukan ukuran kosa kata yang jauh lebih besar, sehingga membuatnya tidak praktis karena biaya pelatihan.
Strategi yang Tidak Diinginkan
Pengkodean satu-panas / Multi-panas / Kumpulan Kata-kata
Enkode one-hot adalah strategi klasik untuk memadatkan teks yang jarang. Di sini kita mengasumsikan ekstensi di mana fitur teks jarang diwakili oleh multi-hot (1 untuk semua token yang ada) atau vektorisasi berbasis hitungan (hitungan untuk setiap token dalam kosakata).
Misalnya, jika kosakatanya berjumlah 4 item, dan diindeks seperti [“TV”, “Vacuum”, “Wifi”, “Router”], fitur “Pembelian Sebelumnya” akan menjadi vektor padat <1, 1, 0, 0 >. Jika penghitungan diperhitungkan dan fiturnya adalah ["TV", "TV", "Vakum"], maka akan menjadi <2, 1, 0, 0>.
Kelebihan
- Karena pemisahan hutan keputusan dipelajari berdasarkan fitur individual, hal ini lebih murah pada waktu pelatihan dibandingkan kumpulan kategori.
- Berbeda dengan yang pertama, token tidak memerlukan kliping atau padding apa pun, dan token memiliki semantik yang sama di seluruh contoh (yaitu “TV” akan konstan di seluruh pemisahan, apa pun posisinya).
Kontra
- Strategi ini sering kali menghasilkan pemisahan yang sangat tidak seimbang dan jarang, yang dapat membuat algoritme pembelajaran DF lebih lambat dalam konvergen atau di bawah standar. Hal ini dikarenakan:
- Diperlukan lebih banyak pemisahan untuk mempelajari informasi yang sama
- Pohon yang sangat jarang mempunyai generalisasi yang lebih buruk dibandingkan pohon yang seimbang, sehingga biasanya menghasilkan model yang kurang akurat.
- Tidak memperhitungkan informasi posisi. Hal ini dapat mengganggu performa fitur bahasa alami.
- Mempelajari pembagian numerik pada data kategorikal kurang optimal; ada pengoptimalan untuk menemukan pemisahan kategoris yang tidak dimanfaatkan di sini.
- Kompleksitas komputasi pelatihan berskala linier dengan jumlah item kosakata (yang masing-masing akan digunakan sebagai fitur numerik). Dalam praktiknya, kecuali kumpulan datanya sangat kecil (dalam hal ini kosakata yang besar dapat menyebabkan overfitting), hal ini membuat kosakata yang berisi > 5 ribu item menjadi sangat lambat untuk dilatih.
- Konsumsi memori pelatihan akan menjadi 1 byte (untuk one-hot) atau 4 byte (untuk hitungan) per item kosakata per contoh, karena pada waktu pengindeksan, data akan disimpan sebagai versi padat dari data renggang. Hal ini dapat berkembang menjadi sangat besar untuk kosakata dan kumpulan data yang lebih besar.
Beberapa Fitur Kategoris dengan panjang tetap
Karena fitur kategoris dapat dipelajari secara efisien dengan algoritme hutan keputusan, salah satu cara alami untuk menggunakan token renggang adalah dengan melakukan pad/klip sedemikian rupa sehingga ada sejumlah token masukan per contoh, dan setiap posisi token adalah fitur yang terpisah dan independen. Pada contoh di atas, jika “Pembelian Sebelumnya” memiliki paling banyak 5 token, kita dapat membuat fitur f1...f5 yang mewakili token 1-5, dan membuang token apa pun > 5, dan menambahkan nilai yang hilang untuk contoh yang ada < 5.
Kelebihan
- Ini efisien untuk dilatih.
- Hal ini mungkin tidak mengganggu kualitas model jika terdapat variansi yang rendah dalam jumlah token per contoh, dan token tersebut bersifat independen.
- Ini mungkin menangkap semantik tambahan (seperti pesanan pembelian dalam contoh) secara lebih alami dibandingkan metode lainnya.
Kontra
- Menambahkan semantik ke token empuk yang “hilang” yang akan berfungsi sebagai gangguan pada model. Hal ini terutama akan terlihat jika terdapat perbedaan besar dalam jumlah token per contoh, yang mungkin terjadi misalnya pada fitur “Deskripsi Produk”.
- Pohon yang dipelajari akan sangat sensitif terhadap pengurutan, yaitu jika fiturnya adalah ["A", "B"] maka prediksinya akan berbeda dengan prediksi untuk ["B", "A"], dan jika yang terakhir tidak pernah terlihat dalam data, model tidak akan dapat menggeneralisasi data sebelumnya. Secara umum, hal ini memerlukan lebih banyak data untuk mempelajari invarian posisi.
- Secara default, setiap token akan diwakili oleh fitur dengan kosakata berbeda. Bahkan jika Anda memaksa implementasi untuk mempertimbangkan kumpulan item kosakata yang sama per fitur, f1=”TV” akan menjadi item kosakata yang berbeda dari f2=”TV.” Artinya, algoritme akan menjadi kurang efisien dalam mempelajari hubungan antara token “TV” dan label -- algoritme harus mempelajarinya secara terpisah untuk setiap posisi token.
Strategi yang Lebih Baik
Himpunan Kategoris
Kumpulan Kategorikal ( https://arxiv.org/pdf/2009.09991.pdf ) adalah representasi fitur default TF-DF untuk teks jarang. Kumpulan kata-kata secara efektif adalah sekumpulan kata-kata, mengabaikan duplikat dan keteraturan. Misalnya, fitur “TV adalah yang terbaik” akan diwakili oleh kumpulan kategorikal {“terbaik”, “adalah”, “yang”, “TV}.
Pemisah kumpulan kategoris asli, menurut tolok ukur pada berbagai tugas (lihat makalah), biasanya mengungguli fitur kategoris multi-panas dan panjang tetap. Secara teori, pemisahan himpunan kategoris dan pemisahan boolean pada fitur yang dikodekan one-hot dapat mempelajari informasi yang sama. Namun, ambil contoh berikut, saat pohon mencoba mempelajari fungsi berikut:
if description contains “high” AND “speed” AND “gaming”:
return True
Dalam hal ini, pembagi himpunan kategoris asli akan mempelajari 1 pemisahan, dengan {“high”, “speed”, “gaming”} => True.
Representasi one hot memerlukan 3 pemisahan, pada “tinggi”, “split”, dan “permainan”, dan perlu menemukan node daun yang masuk akal untuk semua kemungkinan disjungsi kategori tersebut (yaitu “tinggi” dan bukan “kecepatan”). Dalam praktiknya, pengkodean one-hot menyebabkan pohon yang sangat tidak seimbang yang tidak dapat dioptimalkan secara efisien oleh algoritma pembelajaran hutan keputusan yang berkinerja terbaik.
Kelebihan
- Paling baik dalam mempelajari informasi sekantong kata untuk hutan keputusan.
- Sangat efisien untuk disajikan (dapat disajikan dengan QuickScorer, yang dapat melayani pohon besar dalam waktu sub-mikrodetik per contoh). Kompleksitas waktu penyajian bersifat linier dalam jumlah item di setiap kumpulan kategori contoh, yang dalam praktiknya jauh lebih kecil daripada ukuran kosakata.
- Mengoptimalkan satu kosakata per fitur, sehingga semantik dibagikan.
Kontra
- Biaya pelatihan satu set skala terpisah kategorikal dengan num_examples * ukuran vocab, sehingga mirip dengan algoritme one-hot, ukuran kosakata yang dapat dilatih bisa jadi cukup kecil (N ribu) dalam pengaturan praktis. Perhatikan bahwa kecepatan pelatihan ini dapat ditingkatkan dengan menyesuaikan fraksi pengambilan sampel dari algoritme serakah, namun kualitasnya mungkin kurang optimal.
Penyematan
Jaringan Neural telah menampilkan performa canggih pada berbagai tugas NLP, dan penyematan terlatih yang digunakan sebagai fitur numerik secara empiris juga berfungsi baik dengan algoritme hutan keputusan, meskipun fitur yang digunakan secara internal sangat berbeda. Perhatikan bahwa di sini kita mengacu pada “penyematan” sebagai pengkodean jaringan saraf apa pun, misalnya keluaran lapisan transformator/konvolusional/berulang.
Penggunaan penyematan terlatih berfungsi baik dengan jaringan saraf sebagian karena inisialisasi ruang vektor di mana token atau kalimat serupa berdekatan dalam ruang euclidean telah terbukti dapat ditransfer dengan baik di seluruh tugas NLP, dan gradien dari inisialisasi tersebut lebih kecil dan lebih cepat untuk menyatu daripada inisialisasi yang sepenuhnya acak. Namun, pohon keputusan menggunakan penyematan sebagai fitur numerik individual, dan mempelajari partisi selaras sumbu dari masing-masing fitur tersebut 1 . Artinya, hampir mustahil untuk memanfaatkan informasi semantik yang sama -- perkalian titik atau perkalian matriks, misalnya, tidak dapat direpresentasikan dengan serangkaian pembagian yang selaras dengan sumbu. Selain itu, tidak seperti jaringan neural, yang dapat memperbarui penyematan melalui penurunan gradien selama pelatihan, algoritme pembelajaran hutan keputusan default tidak dapat dibedakan, artinya penyematan harus tetap dibekukan. Perhatikan bahwa terdapat penelitian ( https://arxiv.org/pdf/2007.14761.pdf, misalnya) mengenai hutan keputusan yang dapat dibedakan. Namun, mungkin karena dalam praktiknya tidak semua bit informasi dalam penyematan benar-benar digunakan, bahkan oleh jaringan saraf, strategi ini masih berfungsi dengan baik pada hutan keputusan.
Kelebihan:
- Dapat menangani ukuran kosakata yang jauh lebih besar -- karena penyematan secara efektif merupakan pemadatan ke dalam sejumlah kecil dimensi penyematan, kecil kemungkinannya jumlah fitur masukan ke hutan keputusan akan meningkat secara dramatis.
- Secara teori, dapat menggeneralisasi dengan lebih baik karena penyematan serupa dapat berbagi kumpulan partisi. Perhatikan bahwa peringatan besar di sini adalah, seperti disebutkan di atas, transformasi basis atau rotasi dalam ruang vektor dapat menyebabkan dua penyematan serupa menjadi sangat berbeda dalam ruang partisi yang sejajar sumbu untuk hutan keputusan.
- Secara alami dapat merangkum pengulangan/urutan kata, misalnya jika pembuat enkode berisi konvolusi, perhatian, atau RNN.
- Dapat memanfaatkan informasi dari kumpulan data lain (pra-pelatihan untuk pembelajaran transfer).
Kontra
- Tidak pandai dalam mengingat informasi -- pemisahan dapat menyebabkan klasifikasi yang tidak jelas atau sensitivitas yang tinggi terhadap penyusunan kata (yaitu “routernya bagus” vs “router yang bagus”) akan menghasilkan embeddings yang berbeda, yang mungkin mirip dalam ruang euclidean tetapi belum tentu memiliki kesamaan fitur numerik.
- Paling lambat untuk melakukan servis, karena penerusan encoder penuh perlu dilakukan pada waktu inferensi. Latensi sebenarnya sangat bergantung pada arsitektur yang menghasilkan penyematan; yaitu, pembuat enkode transformator biasanya akan jauh lebih lambat daripada pencarian tabel penyematan mentah dengan pengumpulan rata-rata.
Catatan
Mengaktifkan pemisahan miring dapat memungkinkan pembelajaran informasi yang tidak selaras dengan sumbu, namun tetap berdasarkan dimensi demi dimensi. ↩