Klasifikasi teks tidak terstruktur

12

Saya akan mengklasifikasikan dokumen teks tidak terstruktur, yaitu situs web dengan struktur yang tidak diketahui. Jumlah kelas yang saya klasifikasikan terbatas (pada titik ini, saya yakin tidak ada lebih dari tiga). Adakah yang menyarankan agar saya bisa mulai?

Apakah pendekatan "kantong kata" layak dilakukan di sini? Kemudian, saya bisa menambahkan tahap klasifikasi lain berdasarkan pada struktur dokumen (mungkin pohon keputusan).

Saya agak akrab dengan Mahout dan Hadoop, jadi saya lebih suka solusi berbasis Java. Jika perlu, saya bisa beralih ke Scala dan / atau mesin Spark (perpustakaan ML).

Grzegorz E.
sumber

Jawaban:

14

Mari kita selesaikan dari bawah ke atas. Klasifikasi (juga dikenal sebagai kategorisasi) adalah contoh pembelajaran terawasi . Dalam pembelajaran yang diawasi, Anda memiliki:

  • model - sesuatu yang mendekati struktur internal dalam data Anda, memungkinkan Anda untuk memikirkannya dan membuat prediksi yang berguna (misalnya memprediksi kelas suatu objek); biasanya model memiliki parameter yang ingin Anda "pelajari"
  • melatih dan menguji dataset - set objek yang Anda gunakan untuk melatih model Anda (menemukan nilai bagus untuk parameter) dan mengevaluasi lebih lanjut
  • algoritma pelatihan dan klasifikasi - pertama menjelaskan cara belajar model dari set data pelatihan, kedua menunjukkan cara mendapatkan kelas objek baru yang diberikan model terlatih

Sekarang mari kita ambil contoh sederhana klasifikasi spam. Kumpulan data pelatihan Anda adalah kumpulan email + label yang sesuai - "spam" atau "bukan spam". Dataset Pengujian memiliki struktur yang sama, tetapi dibuat dari beberapa email independen (biasanya satu hanya membagi dataset-nya dan membuat, katakanlah, 9/10 darinya untuk digunakan untuk pelatihan dan 1/10 - untuk pengujian). Salah satu cara untuk memodelkan email adalah dengan merepresentasikan masing-masingnya sebagai kumpulan kata. Jika kita mengasumsikan bahwa kata-kata tidak saling tergantung satu sama lain, kita dapat menggunakan pengklasifikasi Naif Bayes , yaitu, menghitung probabilitas sebelumnya untuk setiap kata dan setiap kelas (algoritma pelatihan) dan kemudian menerapkan teorema Bayes untuk menemukan probabilitas posterior dari dokumen baru yang akan dimiliki. kelas tertentu.

Jadi, pada dasarnya kita memiliki:

raw model + training set + training algorithm -> trained model
trained model + classification algorithm + new object -> object label

Sekarang perhatikan bahwa kami mewakili objek kami (dokumen) sebagai kantong kata-kata. Tetapi apakah satu-satunya jalan? Bahkan, kita dapat mengekstraksi lebih banyak dari teks mentah. Sebagai contoh, alih-alih kata-kata seperti ini, kita dapat menggunakan batang atau lemmasanya , membuang kata-kata berhenti yang berisik , menambahkan tag POS kata-kata, mengekstrak entitas bernama atau bahkan menjelajahi struktur HTML dokumen. Bahkan, representasi yang lebih umum dari suatu dokumen (dan, secara umum, objek apa pun) adalah vektor fitur . Misalnya untuk teks:

actor, analogue, bad, burn, ..., NOUN, VERB, ADJ, ..., in_bold, ... | label
    0,        0,   1,    1, ...,    5,    7,   2, ...,       2, ... | not spam
    0,        1,   0,    0, ...,    3,   12,  10, ...,       0, ... | spam

Di sini baris pertama adalah daftar fitur yang mungkin dan baris berikutnya menunjukkan berapa kali fitur itu terjadi dalam dokumen. Misalnya dalam dokumen pertama tidak ada kemunculan kata "aktor", 1 kemunculan kata "burn", 5 kata benda, 2 kata sifat dan 2 buah teks dalam huruf tebal. Kolom terakhir sesuai dengan label kelas yang dihasilkan.

Menggunakan vektor fitur, Anda dapat memasukkan properti apa pun dari teks Anda. Meskipun menemukan serangkaian fitur yang baik mungkin membutuhkan waktu.

Dan bagaimana dengan model dan algoritma? Apakah kita terikat ke Naif Bayes. Tidak semuanya. regresi logistik , SVM , pohon keputusan - hanya untuk menyebutkan beberapa pengklasifikasi populer. (Catatan, yang kami katakan "classifier" dalam kebanyakan kasus kami maksudkan model + algoritma yang sesuai untuk pelatihan dan klasifikasi).

Sedangkan untuk implementasi, Anda dapat membagi tugas menjadi 2 bagian:

  1. Ekstraksi fitur - mengubah teks mentah menjadi vektor fitur.
  2. Klasifikasi objek - membangun dan menerapkan model.

Poin pertama berhasil di banyak perpustakaan NLP . Kedua adalah tentang pembelajaran mesin, jadi, tergantung pada dataset Anda, Anda bisa menggunakan Weka , atau MLlib .

teman
sumber
Poster Asli menggunakan kata "mengklasifikasikan" tetapi "klaster" adalah deskripsi yang lebih akurat tentang masalahnya karena ia tidak memiliki definisi kategori kategori a priori. Karena itu, ini belum tentu merupakan masalah pembelajaran yang diawasi.
MrMeritology
@MrMeritology: hmm, dari konteks saya akan mengatakan bahwa penulis tidak yakin tentang kelas konkret yang akan dia gunakan, tetapi masih menginginkan klasifikasi, bukan pengelompokan. Ngomong-ngomong, dia satu-satunya orang yang tahu yang sebenarnya :)
berteman
Mungkin saya tidak jelas pada saat itu. Kategori-kategori akan dipilih dalam saran, jadi ini lebih merupakan klasifikasi daripada masalah pengelompokan. Gagasan untuk membuat vektor fitur yang kompleks tampaknya cukup masuk akal - terutama, bahwa ada beberapa tag tertentu, yang kemungkinan besar mungkin dengan cepat mengklasifikasikan beberapa sampel. Saya tidak yakin apakah SVM akan sesuai dengan masalah, karena saya memprediksi nonlinier tinggi, tetapi pohon keputusan dan Bayes tampaknya berlaku. Saya juga mulai memikirkan aplikasi algoritma hybrid (pohon keputusan berbasis SVM).
Grzegorz E.
@GrzegorzE. - Jika kategori Anda sudah ditentukan sebelumnya, maka harap sebutkan tiga kategori ini dalam pertanyaan Anda. Menurut pendapat saya, Anda terlalu fokus pada algoritma ML dan tidak cukup pada sifat masalah Anda dan sifat data Anda. Misalnya, Anda memperkirakan "nonline" dalam fitur untuk situs web dengan struktur yang tidak diketahui. Mengapa? Juga, Anda mencampur tag dengan teks halaman web dengan siapa yang tahu apa yang lain, dan mereka memiliki makna semantik yang berbeda.
MrMeritology
@GrzegorzE. - Saya sangat menyarankan agar metode klasifikasi Anda terutama didorong oleh sifat kategori a priori Anda dan sifat data. Ada banyak cara untuk mengkategorikan situs web sewenang-wenang menjadi 3 kategori. Setiap cara kategorisasi akan menyarankan fitur yang menonjol dalam data atau pola yang menonjol. Tidak ada pengganti untuk analisis manual elemen data individual (halaman web) dan konteksnya.
MrMeritology
5

Pemodelan Topik akan menjadi metode yang sangat tepat untuk masalah Anda. Model Topik adalah bentuk pembelajaran / penemuan tanpa pengawasan, di mana sejumlah topik tertentu (atau yang ditemukan) ditentukan oleh daftar kata yang memiliki kemungkinan besar muncul bersama. Dalam langkah terpisah, Anda dapat memberi label setiap topik menggunakan pakar materi pelajaran, tetapi untuk tujuan Anda ini tidak perlu karena Anda hanya tertarik untuk mendapatkan tiga kelompok.

Anda memperlakukan setiap dokumen sebagai kantong kata, dan pra-proses untuk menghapus kata berhenti, dll. Dengan metode paling sederhana, Anda menentukan sebelumnya jumlah topik. Dalam kasus Anda, Anda dapat menentukan "3", yang merupakan batas tetap Anda pada kategori, atau memilih topik dengan jumlah yang lebih besar (antara 10 dan 100), dan kemudian dalam langkah terpisah, bentuk tiga kluster untuk dokumen dengan penekanan umum pada topik. K-means atau metode pengelompokan lainnya dapat digunakan. (Saya akan merekomendasikan pendekatan yang terakhir)

Anda tidak perlu membuat kode perangkat lunak pemodelan topik dari awal. Berikut adalah halaman web dengan banyak sumber, termasuk pustaka / paket perangkat lunak .

Tidak ada di Jawa, tetapi ada cara untuk menjalankan C ++ dan Python di bawah Java.

MrMeritology
sumber
4

Berikut adalah beberapa paket perangkat lunak sumber terbuka yang sangat bagus untuk klasifikasi teks yang dapat membantu Anda memulai:

  • MALLET adalah toolkit pembelajaran mesin berbasis Java dengan lisensi CPL yang dibuat oleh UMass untuk bekerja dengan data teks. Ini mencakup implementasi dari beberapa algoritma klasifikasi (misalnya, Bayes naif, entropi maksimum, pohon keputusan).
  • The Stanford Classifier dari Stanford NLP Group adalah implementasi Java GPL-lisensi dari classifier maksimum entropi dirancang untuk bekerja dengan data teks.
Charlie Greenbacker
sumber