Cara membuat daftar stopword yang bagus

9

Saya mencari beberapa petunjuk tentang cara membuat daftar stopwords. Adakah yang tahu / bisakah seseorang merekomendasikan metode yang bagus untuk mengekstrak daftar stopword dari dataset itu sendiri untuk preprocessing dan filtering?

Data:

sejumlah besar input teks manusia dengan panjang variabel (pencarian dan seluruh kalimat (hingga 200 karakter)) selama beberapa tahun. Teks tersebut mengandung banyak spam (seperti input mesin dari bot, kata tunggal, pencarian bodoh, pencarian produk ...) dan hanya beberapa% yang tampaknya berguna. Saya menyadari bahwa kadang-kadang (sangat jarang) orang mencari di sisi saya dengan mengajukan pertanyaan yang sangat keren. Pertanyaan-pertanyaan ini sangat keren, sehingga saya pikir perlu untuk melihat lebih dalam pada mereka untuk melihat bagaimana orang mencari dari waktu ke waktu dan topik apa yang orang tertarik menggunakan situs web saya.

Masalahku:

adalah bahwa saya benar-benar berjuang dengan preprocessing (yaitu menjatuhkan spam). Saya sudah mencoba beberapa daftar stopword dari web (NLTK dll.), Tetapi ini tidak terlalu membantu kebutuhan saya mengenai dataset ini.

Terima kasih atas ide dan diskusi kalian!

PlagTag
sumber
1
Modul Python NLTK menyediakan data stopwords dan jika tidak membantu Anda lebih baik memberikan lebih banyak info tentang dataset Anda. Mengapa itu tidak membantu dalam kasus Anda?
Kasra Manshaei
@kasramsh: Ketika saya memfilter untuk SW ini, saya mendapat kesan bahwa ini tidak menyaring spam secara signifikan. Saya pikir alasannya adalah, bahwa daftar ini dihasilkan pada teks alami (tidak pasti) dan karena itu tidak dapat digunakan untuk kata kunci pencarian dan situs. Seperti ketika Anda mengelompokkan (berdasarkan kesamaan string pencarian) saya mendapat kesan bahwa spam memiliki efek yang kuat pada tingkat entropi dan karenanya mencampurkan hasil akhirnya: - /.
PlagTag
1
Saya pikir @ PlagTag tidak mengerti apa itu stop words. Stop-wrods adalah daftar yang paling kata-kata umum dalam beberapa bahasa, misalnya I, the, adan sebagainya. Anda hanya akan menghapus kata-kata ini dari teks Anda sebelum mulai melatih algoritma Anda yang mencoba mengidentifikasi teks mana yang merupakan spam atau bukan. Itu tidak membantu Anda mengidentifikasi teks mana yang merupakan spam atau bukan, itu dapat meningkatkan algoritma pembelajaran Anda.
itdxer
@ itdxer, terima kasih atas komentar Anda. Saya menggunakan istilah stopwords di sini dalam rentang yang lebih luas (karena saya pikir mungkin ok untuk tujuan itu). Terima kasih telah membereskan masalah ;-)
PlagTag

Jawaban:

5

Salah satu pendekatan adalah menggunakan skor tf-idf . Kata-kata yang muncul di sebagian besar kueri akan sangat membantu dalam membedakan kueri penelusuran yang baik dengan yang buruk. Tetapi yang terjadi sangat sering (frekuensi tinggi atau frekwensi tinggi) hanya dalam beberapa pertanyaan (idf tinggi atau frekuensi dokumen terbalik) cenderung lebih penting dalam membedakan pertanyaan yang baik dari yang buruk.

Shagun Sodhani
sumber
Terima kasih banyak, saya akan coba yang ini dan laporkan di sini!
PlagTag
sebenarnya skor IDF tinggi saja akan melakukan trik
CpILL
2

Itu tergantung pada aplikasi Anda.

Saat Anda melakukan pemodelan topik, cobalah stopwords default terlebih dahulu. Ketika ada beberapa kata yang muncul secara mencolok dalam banyak topik (perhatikan formulasi saya yang agak kabur) mereka adalah kandidat yang baik untuk kata kunci tambahan.

Misalnya, dalam korpus dengan teks yang berisi gambar dan bahan tabular, kata-kata "fig", "figure", "tab", atau "table" adalah kata kunci tambahan yang bagus. Hasilnya, topik Anda menjadi lebih jelas.


sumber
1

Menggunakan TFIDF (istilah frekuensi dokumen terbalik frekuensi) akan menyelesaikan tujuan Anda. Dapatkan skor TFIDF untuk setiap kata dalam dokumen Anda dan urutkan kata berdasarkan skor mereka di mana Anda dapat memilih kata-kata penting dalam data Anda.

Thilak Adiboina
sumber
1

Suatu pendekatan yang saya gunakan untuk membangun daftar kata kunci adalah dengan membangun dan melatih model regresi logistik (karena interpretabilitasnya) pada data teks Anda. Ambil nilai absolut dari koefisien untuk setiap token. Kemudian, urutkan turun nilai absolut dari koefisien token. Kemudian, buat daftar semua token dengan nilai absolut koefisien tinggi yang dapat menyebabkan overfitting atau yang mungkin memenuhi beberapa kriteria lain sebagai stopword. Daftar itu adalah daftar stopwords Anda. Anda kemudian dapat menerapkan daftar kata kunci itu ke kumpulan dokumen jenis lain ini (seperti kumpulan uji), untuk melihat apakah menghapusnya meningkatkan akurasi, presisi, atau penarikan kembali model rangkaian uji.

Strategi ini efektif karena memperhitungkan dampak token ketika membangun daftar kata penutup.

dshefman
sumber
0

Stopwords mungkin menjadi bagian dari solusi di beberapa titik, tetapi bukan kuncinya. Dalam kasus apa pun untuk bahasa utama apa pun, ada daftar kata-kata berhenti yang baik, itu tidak boleh spesifik domain.

Saya juga tidak berpikir bahwa menggunakan TD-IDF saja benar-benar benar. Mungkin ada kata-kata yang sangat jarang (berpotensi sampah) dalam kualitas string yang buruk.

Alih-alih mencoba menebak fitur persis mana yang berguna: Saya akan mulai dengan membuat kumpulan data dengan memilih secara acak beberapa data dan memberi labelnya dengan tangan (seperti goodatau bad, pada skala dari 0,0 hingga 1,0). Kemudian kode sesuatu yang menarik banyak fitur (panjang, jumlah kata (token), skor spam, apakah itu berisi URL atau karakter botish, bahasa yang terdeteksi, apakah itu memiliki tanda tanya, apakah memiliki huruf besar yang sesuai). Juga jangan lupa menyertakan fitur non-linguistik yang mungkin Anda miliki, seperti negara geoIP pengguna yang membuat kueri, apakah pengguna masuk, berapa usia akun pengguna. Jadi pada titik ini Anda akan memiliki tabel besar / CSV, dan yang lebih kecil dengan satu kolom tambahan untuk label yang telah Anda tambahkan.

Kemudian latih beberapa paket pembelajaran mesin dengan contoh-contoh berlabel untuk membangun model yang cukup akurat untuk Anda. Kemudian biarkan model itu berjalan di sisa data.

Jika Anda tidak ingin membuat kode terlalu banyak, Anda bahkan bisa memasukkan fitur-fitur itu ke dalam bentuk CSV, dan memberikannya ke antarmuka spreadsheet Google Prediction API .

Adam Bittlingmayer
sumber