Bagaimana cara menggunakan word2vec dengan keras CNN (2D) untuk melakukan klasifikasi teks?

Ada contoh Convolution1D https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py tanpa word2vec.

Saat ini saya menggunakan gensim untuk melatih model word2vec.

Saya ingin menggunakan Word2vec dan keras cnn(2D bukan 1D) untuk melakukan klasifikasi dokumen (Teks Cina). Saya mempelajari aliran dasar klasifikasi teks di cnn dan ingin melakukan tes.

Misalnya (langkah-langkah yang saya bayangkan):

  1. Gunakan Kumpulan Teks Tokenisasi Cinese yang bagus untuk melatih model word2vec

    model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2)
    
  2. Tokenisasi kumpulan data kalimat saya ke kumpulan data daftar kata (kalimat terpanjang memiliki lebih dari 8000 kata, kalimat terpendek kurang dari 50)

    1     ['你们', '好', '今天', '天气', '真', '好']
    2     ['嗯', '对的']
    ...
    9999  ['好', '就', '这样']
    
  3. Gunakan metode untuk mengubah kumpulan data daftar kata menjadi kumpulan data word2vec

    ubah setiap kata dalam setiap kalimat menjadi vec dengan model terlatih.

    1     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    2     [[word2vec size=200], [word2vec size=200]]
    ...
    9999  [[word2vec size=200], [word2vec size=200], [word2vec size=200]]
    
  4. Kumpulan data pad word2vec (dengan ukuran=200 array nol)

    1     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    2     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    ....
    9999  [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
    
  5. buka CNN (menggunakan Convolution2D)


Saya mencari untuk waktu yang lama, tetapi tidak dapat menemukan cara untuk melakukan langkah 3 (setelah langkah 3, pengaturan parameter dan lapisan pada langkah 5 juga sulit untuk dipahami).


person Mithril    schedule 17.01.2017    source sumber


Jawaban (1)


Mengubah satu kalimat menjadi vektor 2D

Dengan asumsi Anda memiliki daftar kata dan model yang dapat Anda lakukan:

import numpy as np
sentence_vec = None
for word in sentence:
    word_vec = np.expand_dims(model[word], axis=0)
    if sentence_vec is None:
        sentence_vec = word_vec
    else:
        sentence_vec = np.concatenate((sentence_vec, word_vec), axis=0)

Sedangkan untuk langkah 5 - akan sangat membantu jika Anda mencantumkan masalah apa yang Anda hadapi. Pada dasarnya yang perlu Anda lakukan hanyalah mengubah kedua operasi 1D (Convolution1D, GlobalMaxPooling1D) menjadi counter-parts 2D-nya.

person ginge    schedule 17.01.2017
comment
Terima kasih, saya tidak menyangka sesederhana itu hanya model[word] ! Saya telah mencari semua metode gensim.models.Word2Vec dan tidak menemukan sesuatu yang bernama seperti transform, yang bahkan membuat saya berpikir jika saya memilih lib yang salah... Tentang step 5, saya hanya tidak tahu berapa banyak lapisan yang dibutuhkan, setiap lapisan pakai dropout yang mana atau tidak? fungsi aktivasi apa? dll.. langkah ini sangat sulit dimengerti.. - person Mithril; 17.01.2017
comment
Tanpa pengalaman sebelumnya dengan masalah tertentu, sulit menebak arsitektur mana yang paling berhasil. Saya sarankan mencari artikel yang melakukan hal serupa dan mencoba hal yang mereka lakukan. Ini termasuk contoh 1D yang Anda tautkan tetapi diperbarui untuk 2D, karya lain yang melakukan CNN pada teks (CharCNN dan lainnya). Ini sebagian besar merupakan masalah trial and error. - person ginge; 17.01.2017
comment
Saya telah memposting pertanyaan tentang cara menggunakan Convolution2D , maukah Anda melihatnya: stackoverflow.com/questions/41798359/ - person Mithril; 23.01.2017