Correct your data labels automatically and quickly – Towards AI

Correct your data labels automatically and quickly – Towards AI

Author(s): Travis Tang

Awalnya diterbitkan di Menuju AI.

AI yang berpusat pada data tanpa memberi label ulang secara manual pada data Anda

Saya menggunakan pustaka sumber terbuka, cleanlab, untuk menghapus label berkualitas rendah pada kumpulan data gambar. Model yang dilatih pada kumpulan data tanpa data berkualitas rendah memperoleh akurasi 4 poin persentase dibandingkan dengan model dasar (dilatih pada semua data).

Dapatkan robot untuk membersihkan data Anda untuk Anda. Gambar oleh Midjourney.

Meningkatkan kualitas data terdengar cukup mudah. Ini pada dasarnya mengidentifikasi dan memperbaiki label yang salah. Tetapi beban kerja untuk memeriksa kualitas data secara manual dapat dengan cepat menjadi tidak dapat diatasi saat dataset diskalakan.

Bagaimana jika kita dapat mengotomatiskan proses itu? Saya tidak tahu bahwa ini mungkin sampai saya menemukan Cleanlab. Ini adalah pustaka yang mengidentifikasi kesalahan pelabelan dalam kumpulan data gambar besar seperti ImageNet.

Contoh pemberian label yang salah di berbagai kumpulan data gambar ditemukan dan diperbaiki menggunakan cleanlab. (Sumber)

Apa itu cleanlab?

cleanlab adalah pustaka sumber terbuka yang menemukan dan memperbaiki kesalahan dalam set data ML apa pun. Paket AI yang berpusat pada data ini memfasilitasi pembelajaran mesin dengan data dunia nyata yang berantakan dengan memberikan label bersih selama pelatihan.

Dalam posting ini, saya akan membahas contoh bagaimana saya menggunakan cleanlab untuk meningkatkan kinerja model dalam kompetisi AI data-centric yang diadakan oleh Andrew Ng. Saya akan melalui yang berikut ini:

Mengunduh set data Pelatihan model dasar (Resnet50 terlatih) Menginstal cleanlab Mengidentifikasi masalah kualitas data dengan cleanlab Menyelesaikan masalah kualitas data Menyempurnakan model Resnet50 terlatih yang sama dengan data yang dibersihkan Bandingkan kinerja model dasar dan model baru yang dilatih pada data yang dibersihkan

Semua kode di postingan ini ada di Notebook ini. Ikuti!

(Catatan: Saya hanya akan memposting cuplikan kode yang tidak berjalan sendiri. Harap gunakan buku catatan jika Anda ingin meniru hasilnya.)

Mari kita mulai.

Mengunduh kumpulan data

Kumpulan data kompetisi AI yang berpusat pada data terdiri dari gambar tulisan tangan angka Romawi dari “I” hingga “X”. Ini memiliki 2880 gambar dari 10 kategori, yang dibagi menjadi kumpulan data pelatihan dan validasi.

Berikut adalah subset acak dari gambar. Langsung saja, kita dapat melihat bahwa satu label salah. Secara khusus, gambar di kolom paling kanan di baris kedua memiliki label IX yang salah padahal itu adalah IV.

Pelatihan model dasar (Resnet50)

Dengan kumpulan data asli, kami akan melatih model dasar Resnet50. Dalam semangat kompetisi yang berpusat pada data, semua peserta kompetisi memiliki model yang sama. Oleh karena itu, kami akan menggunakan model ini untuk pelatihan dasar.

def get_net():

base_model = tf.keras.applications.ResNet50(
bentuk_masukan=(32, 32, 3),
include_top=Salah,
bobot = Tidak ada,
)
base_model = tf.keras.Model(
base_model.inputs, outputs=[base_model.get_layer(“conv2_block3_out”).output]
)

masukan = tf.keras.Input(bentuk=(32, 32, 3))
x = tf.keras.applications.resnet.preprocess_input(input)
x = model_basis(x)
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = tf.keras.layers.Dense(10)(x)
model = tf.keras.Model(input, x)

model.kompilasi(
pengoptimal=tf.keras.optimizers.Adam(lr=0,0001),
loss=tf.keras.losses.CategoricalCrossentropy(from_logits=True),
metrik=[“accuracy”],
)

Setelah pelatihan selama 100 zaman, akurasi set pelatihan meroket hingga 100%, dan kerugian pelatihan turun hingga mendekati 0. Namun, kerugian validasi berfluktuasi dengan liar. Ini adalah kasus underfitting, karena tidak ada cukup data untuk model untuk digeneralisasikan ke set validasi.

Model juga tidak melakukannya dengan baik pada set pengujian. Secara keseluruhan, ini memiliki akurasi 59%.

Secara khusus, kami melihatnya berkinerja buruk pada label “II”, sering membingungkannya dengan “I” dan “III”. Kita dapat mengatakan hal yang sama untuk “VIII”, yang sering salah diklasifikasikan sebagai “VII”.

Mengingat kinerjanya yang buruk, apa yang dapat kami lakukan dengan model tersebut?

Saran umum akan mencakup “mengubah arsitektur” atau “penyetelan hyperparameter”. Meskipun valid, saran ini mengabaikan fakta bahwa kami hanya memiliki sedikit data bagus untuk dikerjakan. Peningkatan apa pun pada model memiliki sedikit atau tidak berdampak sama sekali pada kinerja keseluruhan.

Alih-alih mengulangi model, mari tingkatkan kumpulan data.

Ini biasanya proses yang panjang. Praktisi perlu menjelajahi kumpulan data dan mengidentifikasi label buruk secara manual. Ini tidak hanya lambat tetapi juga proses yang rawan kesalahan.

Nah, itu jika Anda tidak memiliki Cleanlab. Cleanlab secara otomatis menemukan dan memperbaiki masalah label di kumpulan data ML Anda.

Mari kita coba pada kumpulan data ini dan lihat bagaimana ini meningkatkan model kita.

Menginstal Cleanlab

pip install cleanlab scikeras

Persiapan

Karena fitur cleanlab memerlukan kompatibilitas scikit-learn, kita perlu mengadaptasi jaringan saraf Keras kita. Untungnya, scikeras dapat mengatasinya dengan mudah.

dari scikeras.wrappers mengimpor KerasClassifier
mdl = KerasClassifier(model=get_net, epochs=num_Epochs, batch_size=8, verbose=0)

Selanjutnya, kami menggunakan fungsi cross_val_predict untuk melakukan validasi silang 5 kali lipat. Ini menghasilkan probabilitas prediksi out-of-sample untuk setiap titik data dalam kumpulan data.

dari sklearn.model_selection impor cross_val_predict
num_crossval_folds = 5 # untuk efisiensi; nilai seperti 5 atau 10 umumnya akan bekerja lebih baik
pred_probs = cross_val_predict(
mdl,
gambar-gambar,
label,
cv=num_crossval_folds,
method=”predict_proba”,
)

Mengidentifikasi masalah kualitas data dengan cleanlab

Sekarang sampai pada bagian yang menarik. Kami dapat mengidentifikasi sampel berlabel buruk dengan cleanlab.

dari cleanlab.filter impor find_label_issues

peringkat_label_masalah = temukan_label_masalah(
labels=full_labels, pred_probs=pred_prob, return_indices_ranked_by=”kepercayaan diri”
)
print(f”Cleanlab menemukan {len(ranked_label_issues)} masalah label.”)
>>>Cleanlab menemukan 1282 masalah label.

Cleanlab mengidentifikasi lebih dari 1.000 masalah label dalam kumpulan data (pelatihan dan validasi) kami yang kurang dari 3.000 titik data. Itu angka yang signifikan. Mari kita lihat apakah Cleanlab benar.

Poin data yang diidentifikasi oleh cleanlab sebagai salah. Persegi panjang adalah anotasi oleh penulis.

Kami sudah dapat melihat beberapa data buruk di sini, terutama yang telah saya soroti di atas. Poin data ini dapat mencemari kumpulan data kami secara signifikan.

Hasilkan Laporan Kesehatan Data Keseluruhan

Kita juga bisa mendapatkan ringkasan kesehatan dari Cleanlab.

dari cleanlab.dataset impor health_summary
ringkasan_kesehatan(label_lengkap, pred_prob)

Mari kita lihat apa saja yang termasuk dalam laporan kesehatan.

Kualitas Kelas Keseluruhan

Laporan kesehatan ini mengelompokkan kualitas label berdasarkan kelas, memberikan gambaran kepada praktisi tentang tautan terlemah dalam kumpulan data.

Dalam kasus kami, kami melihat bahwa kelas dengan kebisingan label tertinggi adalah kelas 3, 7 dan 5. Ini adalah “IV”, “VIII” dan “VI” (Kelas 0 sesuai dengan “I”).

Ingatlah bahwa model kami memiliki kinerja terburuk di kelas-kelas ini. temuan cleanlab memberikan penjelasan — model tidak dapat belajar mengklasifikasikan kelas-kelas ini secara efektif karena data untuk kelas-kelas ini berisik.

Tumpang Tindih Kelas

ceanlab juga menebak jika ada tumpang tindih di kelas kita. Tumpang tindih dapat terjadi ketika definisi label tidak eksklusif satu sama lain. Itu juga dapat terjadi ketika dua kelas salah diberi label satu sama lain.

Dalam kasus kami, kami melihat bahwa cleanlab memberi tahu kami bahwa ada 125 contoh yang tumpang tindih di kelas “VII” dan “VIII” (dari baris 0). Dengan temuan ini, kita dapat menjelajahi label untuk kelas “VII” dan “VIII” dan mengidentifikasi kesalahan label.

Hitung Skor Kualitas Label

Kita juga bisa mendapatkan skor kualitas dari setiap label. Titik data dengan skor kualitas lebih rendah memiliki peluang lebih tinggi untuk diberi label yang salah. Dengan demikian, kami dapat menghapus poin data dengan skor berkualitas rendah dengan lebih percaya diri dari kumpulan data kami.

# Dapatkan skor kualitas
dari cleanlab.rank impor get_label_quality_scores
quality_scores = get_label_quality_scores(full_labels,pred_prob)

Memperbaiki data yang bermasalah

Kami sekarang memiliki gagasan yang lebih baik tentang mengapa model kami berperforma buruk.

Ada beberapa cara yang bisa kita lanjutkan dari sini:

Hapus semua data yang dianggap cleanlab bermasalah. Hapus data dengan skor kualitas di bawah ambang batas. Kami mendefinisikan atau menghapus sejumlah titik data. Tandai data secara manual untuk dihapus mulai dari skor kualitas terendah.

Pendekatan 3 adalah yang terbaik. Positif palsu tidak dapat dihindari, jadi sebaiknya pertahankan positif palsu (sebenarnya data bagus ditandai sebagai kualitas rendah) di set pelatihan.

Di sini, kami menggunakan pendekatan 2. Secara khusus, kami menghapus 10% poin data yang dianggap bermasalah oleh Cleanlab dari set pelatihan. Itu ternyata 142 sampel.

Model pelatihan ulang

Sekarang, mari latih ulang model dengan arsitektur model yang sama, kecuali dengan set pelatihan dan validasi yang berbeda. Kami akan mengevaluasi model pada set pengujian yang tidak dimodifikasi yang sama.

Performa model baru

Saat dilatih pada data yang dibersihkan, akurasi model pada set pengujian adalah 67%. Ini merupakan peningkatan yang signifikan dari sebelumnya 59% saat model dilatih dengan data kotor dan dievaluasi pada set pengujian yang sama.

Penghapusan poin data telah membantu model menjadi lebih akurat di semua kecuali dua kategori. Kami melihat gambar serupa saat membandingkan matriks kebingungan.

Matriks kebingungan model dilatih pada data bersih (kiri) dan dilatih pada semua data (kanan)

Penutupan

“Di banyak industri di mana kumpulan data raksasa tidak ada, fokusnya harus beralih dari data besar ke data bagus.” —Andrew Ng

Beberapa tahun terakhir melihat gerakan AI yang berpusat pada data mengumpulkan tenaga. Keberangkatan yang nyata dari pendekatan model-sentris, data-sentris AI berupaya meningkatkan kualitas data sekaligus menjaga model tetap konstan.

Pengalaman saya sebagai ilmuwan data menguatkan pengamatannya. Tentu, pemilihan model atau algoritme yang tepat sangat penting di awal siklus ilmu data. Namun, keuntungan marjinal dari pengoptimalan hyperparameter model berkurang dengan cepat menjelang akhir. Saat itulah peningkatan kualitas kumpulan data sangat membantu.

Itu sebabnya cleanlab sangat berharga. Percaya padaku. Saya menghabiskan minggu yang menyakitkan dengan cermat memeriksa label mencoba untuk tetap terjaga. Anda tidak ingin melakukan itu.

Lihat dokumentasi cleanlab di sini.

Asisten robot penggosok data Anda. Gambar oleh Midjourney.

Saya Travis Tang. Saya membagikan tips dan konten ilmu data di perpustakaan sumber terbuka seperti ini. Ikuti saya di sini di Medium dan di LinkedIn untuk informasi lebih lanjut.

Cleanlab: Perbaiki label data Anda secara otomatis dan cepat awalnya diterbitkan di Towards AI on Medium, di mana orang melanjutkan percakapan dengan menyorot dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly