Doc2Vec - Cara memberi label pada paragraf (gensim)

17

Saya bertanya-tanya bagaimana cara memberi label (tag) kalimat / paragraf / dokumen dengan doc2vec di gensim - dari sudut pandang praktis.

Apakah Anda perlu memiliki setiap kalimat / paragraf / dokumen dengan label uniknya sendiri (mis. "Sent_123")? Ini sepertinya berguna jika Anda ingin mengatakan "kata atau kalimat apa yang paling mirip dengan satu kalimat spesifik berlabel" Sent_123 ".

Bisakah Anda membuat label diulangi berdasarkan konten? Misalnya jika setiap kalimat / paragraf / dokumen adalah tentang item produk tertentu (dan ada beberapa kalimat / paragraf / dokumen untuk item produk tertentu) dapatkah Anda memberi label pada kalimat berdasarkan item tersebut dan kemudian menghitung kesamaan antara kata atau kalimat dan label ini (yang saya kira akan seperti rata-rata semua kalimat yang ada hubungannya dengan item produk)?

B_Miner
sumber

Jawaban:

10

Keduanya mungkin. Anda dapat memberikan setiap dokumen ID unik (seperti nomor seri berurutan) sebagai doctag, atau doctag string bersama yang mewakili sesuatu yang lain tentang hal itu, atau keduanya pada saat bersamaan.

Konstruktor TaggedDocument mengambil daftar tag. (Jika Anda membatasi diri pada int sederhana naik dari 0, model Doc2Vec akan menggunakannya sebagai indeks langsung ke dalam susunan dukungannya, dan Anda akan menghemat banyak memori yang jika tidak akan dikhususkan untuk string -> pencarian indeks , yang mungkin penting untuk kumpulan data besar. Tetapi Anda dapat menggunakan string doctags atau bahkan campuran int dan string doctags.)

Anda harus bereksperimen dengan yang terbaik untuk kebutuhan Anda.

Untuk beberapa tugas klasifikasi, pendekatan yang kadang-kadang bekerja lebih baik daripada yang saya harapkan adalah melewatkan ID per-teks sepenuhnya, dan hanya melatih model Doc2Vec dengan contoh-contoh kelas yang dikenal, dengan kelas yang diinginkan sebagai doctag. Anda kemudian mendapatkan 'vektor dokumen' hanya untuk dokumen kelas - tidak setiap dokumen - model yang berpotensi jauh lebih kecil. Kemudian menyimpulkan vektor untuk teks baru menghasilkan vektor bermakna dekat dengan vektor dokumen kelas terkait.

gojomo
sumber
Itu bagus, terima kasih banyak! Di samping saya mulai bermain-main dengan genim - Saya ingin tahu apakah mungkin untuk menghitung kesamaan antara dokumen (terlepas apakah tag unik atau bersama digunakan) dan sebuah kata - dapatkah itu dilakukan dalam pengalaman Anda?
B_Miner
1
Beberapa mode pelatihan membuat vektor kata dan dokumen di dalam 'ruang yang sama' dan kesamaan mungkin bermakna. Lihat misalnya makalah ini - arxiv.org/abs/1507.07998 - yang bahkan melakukan semacam 'aritmatika analogi' yang melibatkan vektor-dokumen (artikel Wikipedia) dan vektor kata. Pelatihan di kertas yang seperti modus DBOW gensim dengan skip-gram kata-pelatihan bersamaan: dm=0, dbow_words=1.
gojomo
Terima kasih @gojomo! Saya menambahkan pertanyaan tentang bagaimana melakukan ini di daftar gensim: groups.google.com/forum/#!topic/gensim/RLRfY6k3ulw
B_Miner
Tolong koreksi saya jika saya salah. Dalam paragraf terakhir Anda, Anda menyarankan agar setiap dokumen harus ditandai seperti kami memberi tag pada pertanyaan di situs ini. Dan setelah pelatihan, kita akan mendapatkan representasi vektor dari setiap tag. Ketika dokumen baru tiba, kita bisa menggunakan metrik kesamaan untuk menyarankan tag untuk dokumen baru.
pengguna
@ pengguna - ya, itu mungkin dan terkadang bermanfaat untuk melakukan itu, meskipun itu tidak perlu.
gojomo
9

doc2vecModel mendapatkan algoritma dari word2vec.

Di word2vecsini tidak perlu melabeli kata-kata, karena setiap kata memiliki makna semantik mereka sendiri dalam kosa kata. Tetapi dalam kasus doc2vec, ada kebutuhan untuk menentukan bahwa berapa banyak jumlah kata atau kalimat menyampaikan makna semantik, sehingga algoritma dapat mengidentifikasinya sebagai entitas tunggal. Untuk alasan ini, kami menentukan labelsatau tagsuntuk kalimat atau paragraf tergantung pada tingkat makna semantik yang disampaikan.

Jika kami menentukan satu label untuk beberapa kalimat dalam satu paragraf, itu berarti bahwa semua kalimat dalam paragraf diperlukan untuk menyampaikan artinya. Di sisi lain, jika kita menentukan label variabel untuk semua kalimat dalam paragraf, itu berarti bahwa masing-masing menyampaikan makna semantik dan mereka mungkin atau mungkin tidak memiliki kesamaan di antara mereka.

Secara sederhana, labelmakna semantik berarti sesuatu.

yazhi
sumber
If we specify a single label to multiple sentences in a paragraph, it means that all the sentences in the paragraph are required to convey the meaning.Saya tidak yakin saya memahami ini dengan benar. Dari algoritma POV, apakah semua kalimat dengan tag yang sama diperlukan untuk definisi semantik atau semua kalimat dengan tag yang sama menggambarkan hal yang sama? Dalam kasus pertama, tidak ada kalimat tunggal yang mencukupi dirinya sendiri, dalam kasus kedua, satu kalimat mandiri.
pengguna
@user: Ini adalah kasus kedua, dari algoritma POV, sebuah tag didefinisikan sebagai entitas yang ketika digunakan dalam satu kalimat, ia menangkap arti dari semua kata. Dengan cara yang sama ketika digunakan dalam banyak kalimat, kata ini juga menangkap kata-kata dalam semua kalimat lainnya.
yazhi