ide tentang algoritma pembelajaran mesin untuk mengklasifikasikan produk

7

Saya memiliki daftar produk, termasuk variabel seperti nama produk (seperti yang tertera pada tanda terima) dan pedagang tempat produk itu dibeli.

Saya memiliki banyak dari mereka secara manual diklasifikasikan ke dalam kelompok kategori tetap (misalnya minuman beralkohol, sayuran, daging, dll.).

Data, seperti biasa, berisik. Dalam hal ini, terutama berisik karena berasal dari tanda terima yang dipindai dan OCR pada pemindaian yang tidak begitu baik biasanya sangat bising.

Saya ingin bermain-main dengan algoritma untuk mengklasifikasikan data baru, menggunakan dua variabel di atas.

Ada beberapa sumber variasi utama di sini:

  • OCR, yang berarti suatu produk (misalnya ayam) dapat ditemukan dengan banyak ejaan yang berbeda tetapi relatif serupa (misalnya chiken, hicken, chicen, ...).
  • Produk yang sama dapat memiliki nama yang berbeda, menurut pedagang yang menjual produk tersebut. Dalam hal ini, nama-nama tersebut dapat mirip atau sama sekali berbeda di seluruh pedagang, tetapi agak mirip di setiap pedagang.
  • Produk yang sama dapat memiliki nama yang sangat berbeda di dalam pedagang yang sama (misalnya produk bermerek yang namanya pada tanda terima adalah nama merek, vs nama generik; minuman ringan vs coca cola).

Saya sudah mencoba beberapa (semacam naif) classifier, menggunakan misalnya jarak antara string (yang menangani sebagian besar sumber variasi pertama yang disebutkan di atas), tetapi saya tidak terlalu senang dengan hasilnya.

Jadi saya ingin menjangkau di sini untuk meminta ide tentang cara mengatasi masalah ini. Saya kira banyak orang telah "memecahkan" atau setidaknya bekerja lebih lama dalam masalah seperti ini daripada yang saya lakukan (beberapa jam) jadi saya akan sangat menghargai bimbingan apa pun di sini.

By the way, saya menggunakan sebagian besar R, jadi solusi berbasis R akan sangat dihargai.

pemrograman elikes
sumber
Ini mungkin tidak akurat, tetapi frasa yang muncul di benak saya ketika saya membaca ini adalah "model topik terstruktur." Jika metode ini sama sekali relevan, ada paket R untuknya yang disebut stm.
lmo

Jawaban:

2

Mengatasi masalah Anda satu per satu:

1) OCR: Ini mungkin yang paling mudah dari masalah Anda karena ada banyak algoritma yang bekerja dengan baik dalam tugas ini. Sebagai referensi, dalam dataset digit tulisan tangan yang paling dikenal, MNIST , beberapa algoritma telah mencapai akurasi lebih dari 99,5% (state-of-the-art adalah Convolutional Neural Networks). Anda juga dapat menemukan banyak solusi out-of-the-box untuk masalah Anda; ini sangat membantu jika data Anda dalam bahasa Inggris, karena alat-alatnya lebih canggih. Jika pindaian Anda berisik, Anda dapat mencoba mencantumkannya terlebih dahulu.

2) Anda perlu melakukan beberapa preprocessing untuk masalah ini. Pertama-tama saya sarankan, jika mungkin, membuat sekumpulan kata , yaitu daftar semua kata unik di "corpus" Anda. Verifikasi bahwa semua kata ini benar dan lakukan perbandingan jarak string (mis. Jarak tempuh) untuk mengoreksi kesalahan ketik 1-2 huruf. Hal lain yang akan saya lakukan adalah menghitung kemunculan setiap istilah dalam tas Anda dan menghapus yang paling sering (mis. Istilah yang muncul kurang dari N kali dalam korpus Anda mungkin salah cetak, atau menghapus paling sedikit M% dari persyaratan Anda). Itu harus secara signifikan mengurangi kebisingan dalam dataset Anda.

3) Untuk mengatasi masalah ini, Anda perlu melakukan semacam pelabelan semantik. Jika Anda terbiasa dengan ontologi, struktur hierarkisnya dapat banyak membantu di sini. Anda dapat membuat aturan seperti "coca-cola" adalah "minuman ringan" yang merupakan jenis minuman, dll.

Saya tidak memiliki pengalaman dalam R, tetapi saya yakin Anda dapat menemukan alat untuk melakukan semua hal di atas dengan mudah.

Djib2011
sumber
0

Tampaknya Anda harus mendefinisikan kesamaan di antara entitas.

Anda memiliki banyak sumber kesamaan. Anda menyebutkan jarak pada nama (edit jarak) dan keanggotaan dalam grup. Perhatikan bahwa Anda dapat memperluas kesamaan berdasarkan grup ke banyak grup dan banyak tipe kesamaan. Grup dapat berasal dari resep yang sama, dijual oleh pedagang yang sama, milik kategori yang sama, dll. Jenis kesamaan mungkin pesawat milik kelompok yang sama, berat dengan rasio terbalik dengan ukuran grup, dll. Pada semua penggunaan dapat menggunakan transitivitas. Sebagai contoh, Anda dapat menemukan produk serupa dari nama yang berbeda dengan menggunakan fakta bahwa mereka akan digunakan dengan produk yang sama (misalnya, rempah-rempah X` dan rempah-rempah X`` keduanya akan digunakan dengan ayam).

Segera Anda akan memiliki banyak hubungan kesamaan dan Anda akan bertanya-tanya bagaimana menggabungkannya. Ini dia untuk membantu pelabelan yang sudah Anda lakukan. Ambil ini sebagai pasangan positif dari produk terkait. Hasilkan set produk berbeda (bukan pada pasangan positif) sebagai pasangan negatif. Bangun dataset di mana kepositifan adalah konsep dan persamaannya adalah pasangan. Sekarang Anda dapat menggunakan algoritma pembelajaran terawasi untuk mendapatkan model yang menggabungkan kesamaan menjadi satu prediksi. Anda dapat menggunakan model ini untuk memprediksi hubungan antara pasangan baru. Sebagai bonus Anda akan dapat mengevaluasi kinerja model pada dataset (misalnya, akurasi, presisi, ...) dan memiliki lebih banyak kepastian di dalamnya.

Dl
sumber