menerapkan word2vec pada file teks kecil

11

Saya benar-benar baru di word2vec jadi tolong bawa. Saya memiliki satu set file teks yang masing-masing berisi satu set tweet, antara 1000-3000. Saya telah memilih kata kunci yang umum ("kw1") dan ingin mencari istilah yang relevan secara semantik untuk "kw1" menggunakan word2vec. Misalnya jika kata kuncinya adalah "apel", saya akan berharap untuk melihat istilah terkait seperti "ipad" "os" "mac" ... berdasarkan pada file input. Jadi sekumpulan istilah terkait untuk "kw1" ini akan berbeda untuk setiap file input karena word2vec akan dilatih pada file individual (mis., 5 file input, jalankan word2vec 5 kali pada setiap file).

Tujuan saya adalah untuk menemukan serangkaian istilah terkait untuk setiap file input yang diberikan kata kunci umum ("kw1"), yang akan digunakan untuk beberapa tujuan lain.

Pertanyaan / keraguan saya adalah:

  • Apakah masuk akal menggunakan word2vec untuk tugas seperti ini? apakah secara teknis benar untuk digunakan mengingat kecilnya ukuran file input?

Saya telah mengunduh kode dari code.google.com: https://code.google.com/p/word2vec/ dan baru saja menjalankannya sebagai berikut:

 time ./word2vec -train $file -output vectors.bin -cbow 1 -size 200 -window 10 -negative 25 -hs 1 -sample 1e-3 -threads 12 -binary 1 -iter 50

./distance vectors.bin 
  • Dari hasil saya, saya melihat saya mendapatkan banyak istilah bising (stopwords) ketika saya menggunakan alat 'jarak' untuk mendapatkan istilah terkait dengan "kw1". Jadi saya memang menghapus stopwords dan istilah berisik lainnya seperti pengguna menyebutkan. Tapi saya belum melihat di mana pun bahwa word2vec membutuhkan data input yang dibersihkan ...?

  • Bagaimana Anda memilih parameter yang tepat? Saya melihat hasilnya (dari menjalankan alat jarak) sangat bervariasi ketika saya mengubah parameter seperti '-window', '-iter'. Teknik mana yang harus saya gunakan untuk menemukan nilai yang benar untuk parameter. (percobaan dan kesalahan manual tidak mungkin bagi saya karena saya akan meningkatkan dataset).

samsamara
sumber

Jawaban:

9

Word2Vec bukan pilihan yang baik untuk dataset dengan ukuran seperti itu. Dari penelitian yang saya lihat, itu akan melepaskan kekuatannya jika Anda memberi makan setidaknya beberapa juta kata, tweet 3k tidak akan cukup untuk kesamaan kata yang singkat.

chewpakabra
sumber
apakah kita perlu menghapus stopwords sebagai langkah pra-pemrosesan data?
samsamara
2
Tidak, dalam pendekatan word2vec Anda tidak perlu melakukan itu, karena algoritma itu sendiri bergantung pada konteks yang luas untuk menemukan kesamaan dalam kata-kata, jadi hentikan kata-kata (sebagian besar adalah preposisi, kata ganti dan semacamnya) adalah penilaian penting untuk algoritma .
chewpakabra
tetapi ketika saya menggunakan alat jarak untuk menemukan kata-kata yang paling mirip dengan kata yang diberikan, versi dengan stopwords dihapus memberi saya kata-kata yang masuk akal daripada versi tanpa. dapatkah Anda menebak apa artinya ini?
samsamara
Mungkin, Anda menggunakan konteks yang terlalu sempit: jika model Anda melihat ke dalam, katakanlah, dua kata maju dan mundur, Anda akan memiliki hingga 2 stopword dalam konteks dan itu dapat memberikan hasil yang lebih buruk. Jika Anda akan memperluas konteks (yang akan membuat model lebih besar dan waktu pelatihan lebih lama), model dengan-stopwords akan memberi Anda hasil yang lebih baik, saya berasumsi.
chewpakabra
terima kasih atas masukannya, lebih masuk akal sekarang. Juga karena word2vec memproses input kalimat demi kalimat, apa yang akan terjadi jika saya mencampur kalimat dalam dokumen input? yang benar-benar harus mengubah vektor keluaran, kan? Juga lagi, mengingat pemrosesan itu dikirim oleh terkirim, bagaimana perbedaan word2vec dari doc2vec? Terima kasih lagi.
samsamara