จะใช้ word2vec กับ keras CNN (2D) เพื่อจัดประเภทข้อความได้อย่างไร

มีตัวอย่าง Convolution1D https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py โดยไม่มี word2vec

ขณะนี้ฉันกำลังใช้ gensim เพื่อฝึกโมเดล word2vec

ฉันต้องการใช้ word2vec และ keras cnn (2D ไม่ใช่ 1D) เพื่อทำการจำแนกเอกสาร (ข้อความภาษาจีน) ฉันเรียนรู้ขั้นตอนพื้นฐานของการจัดหมวดหมู่ข้อความใน CNN และต้องการทดสอบ

ตัวอย่างเช่น (ขั้นตอนที่ฉันจินตนาการ):

  1. ใช้ชุดข้อความ Tokenized แบบ Cinese ที่ดีในการฝึกโมเดล word2vec

    model = gensim.models.Word2Vec(new_sentences, workers=10, size=200, min_count=2)
    
  2. โทเค็นชุดข้อมูลประโยคของฉันเป็นชุดข้อมูลรายการคำ (ประโยคที่ยาวที่สุดมีมากกว่า 8,000 คำ สั้นที่สุดคือน้อยกว่า 50)

    1     ['你们', '好', '今天', '天气', '真', '好']
    2     ['嗯', '对的']
    ...
    9999  ['好', '就', '这样']
    
  3. ใช้วิธีการแปลงชุดข้อมูลรายการคำเป็นชุดข้อมูล word2vec

    แปลงทุกคำในทุกประโยคให้เป็น vec โดยโมเดลที่ผ่านการฝึกอบรม

    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. แผ่นชุดข้อมูล word2vec (ขนาด = 200 อาร์เรย์ศูนย์)

    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. ไปที่ CNN (โดยใช้ Convolution2D)


ฉันค้นหามานาน แต่ไม่พบวิธีทำขั้นตอนที่ 3 (หลังจากขั้นตอนที่ 3 การตั้งค่าพารามิเตอร์และเลเยอร์ในขั้นตอนที่ 5 ก็ยากที่จะเข้าใจเช่นกัน)


person Mithril    schedule 17.01.2017    source แหล่งที่มา


คำตอบ (1)


การแปลงประโยคเดียวให้เป็นเวกเตอร์ 2 มิติ

สมมติว่าคุณมีรายการคำและแบบจำลองที่คุณสามารถทำได้:

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)

สำหรับขั้นตอนที่ 5 จะมีประโยชน์หากคุณระบุสิ่งที่คุณประสบปัญหา โดยพื้นฐานแล้วคุณเพียงแค่ต้องทำคือเปลี่ยนทั้งการดำเนินการ 1D (Convolution1D, GlobalMaxPooling1D) เป็น 2D counter-parts

person ginge    schedule 17.01.2017
comment
ขอบคุณ ไม่คิดว่าจะง่ายขนาดนี้ model[word] ! ฉันได้ดูวิธีการทั้งหมดของ gensim.models.Word2Vec แล้วและไม่พบสิ่งที่ชื่อเช่น transform ซึ่งทำให้ฉันคิดว่าถ้าฉันเลือก lib ผิด... เกี่ยวกับ step 5 ฉันไม่รู้ว่าต้องใช้กี่ชั้น แต่ละชั้น ใช้ dropout อันไหนหรือไม่? ฟังก์ชั่นการเปิดใช้งานอะไร? ฯลฯ..ขั้นตอนนี้เข้าใจยากมาก.. - person Mithril; 17.01.2017
comment
หากไม่มีประสบการณ์เกี่ยวกับปัญหาเฉพาะใดๆ มาก่อน ก็ค่อนข้างยากที่จะคาดเดาว่าสถาปัตยกรรมแบบใดจะทำงานได้ดีที่สุด ฉันขอแนะนำให้ค้นหาบทความที่ทำสิ่งที่คล้ายกันและลองทำสิ่งที่พวกเขาทำอยู่ ซึ่งจะรวมถึงตัวอย่าง 1D ที่คุณเชื่อมโยง แต่อัปเดตเป็น 2D งานอื่นๆ ที่ทำ CNN บนข้อความ (CharCNN และอื่นๆ) มันเป็นเรื่องของการลองผิดลองถูกเป็นส่วนใหญ่ - person ginge; 17.01.2017
comment
ฉันได้โพสต์คำถามเกี่ยวกับวิธีใช้ Convolution2D คุณช่วยดูได้ไหม: stackoverflow.com/questions/41798359/ - person Mithril; 23.01.2017