วิธีฝึกเลเยอร์ LSTM ของเครือข่ายลึก


13

ฉันใช้เครือข่าย lstm และ feed-forward เพื่อจำแนกข้อความ

ฉันแปลงข้อความเป็นเวกเตอร์ที่ร้อนแรงหนึ่งรายการและป้อนให้แต่ละรายการเป็น lstm เพื่อที่ฉันจะสามารถสรุปได้ว่าเป็นการแทนเพียงครั้งเดียว จากนั้นฉันก็ป้อนไปยังเครือข่ายอื่น

แต่ฉันจะฝึก lstm ได้อย่างไร ฉันต้องการจัดลำดับข้อความ - ฉันควรป้อนโดยไม่ต้องฝึกอบรมหรือไม่? ฉันแค่ต้องการแสดงข้อความเป็นรายการเดียวที่ฉันสามารถป้อนลงในเลเยอร์อินพุตของตัวแยกประเภท

ฉันขอขอบคุณคำแนะนำใด ๆ อย่างมาก!

ปรับปรุง:

ดังนั้นฉันมี lstm และลักษณนาม ฉันเอาเอาท์พุตทั้งหมดของ lstm และ mean-pool พวกมันจากนั้นฉันป้อนค่าเฉลี่ยนั้นลงในลักษณ

ปัญหาของฉันคือฉันไม่รู้วิธีฝึก lstm หรือตัวจําแนก ฉันรู้ว่าอินพุตควรเป็นอะไรสำหรับ lstm และเอาต์พุตของตัวแยกประเภทที่ควรใช้สำหรับอินพุตนั้น เนื่องจากเป็นเครือข่ายสองเครือข่ายที่เพิ่งเปิดใช้งานตามลำดับฉันจำเป็นต้องทราบและไม่ทราบว่าอุดมคติของเอาต์พุตควรเป็น lstm ซึ่งจะเป็นอินพุตสำหรับตัวแยกประเภท มีวิธีทำเช่นนี้หรือไม่?

คำตอบ:


10

สถานที่ที่ดีที่สุดที่จะเริ่มต้นด้วย LSTMs เป็นบล็อกโพสต์ของเอ Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/ หากคุณกำลังใช้ Torch7 (ซึ่งผมจะขอแนะนำ) รหัสที่มาสามารถใช้ได้ที่ GitHub https://github.com/karpathy/char-rnn

ฉันจะลองเปลี่ยนแบบจำลองของคุณสักเล็กน้อย ฉันจะใช้วิธีการแบบตัวต่อตัวเพื่อให้คุณป้อนคำผ่านตารางการค้นหาและเพิ่มคำพิเศษในตอนท้ายของแต่ละลำดับดังนั้นเมื่อคุณป้อนสัญลักษณ์ "สิ้นสุดลำดับ" คุณจะอ่านการจำแนก เอาท์พุทและคำนวณข้อผิดพลาดตามเกณฑ์การฝึกอบรมของคุณ วิธีนี้คุณจะฝึกอบรมโดยตรงภายใต้บริบทภายใต้การดูแล

ในทางตรงกันข้ามวิธีที่ง่ายกว่าคือการใช้ย่อหน้า 2vec ( https://radimrehurek.com/gensim/models/doc2vec.html ) เพื่อแยกฟีเจอร์สำหรับข้อความที่คุณป้อนแล้วเรียกใช้ตัวจําแนกด้านบนของคุณสมบัติของคุณ การแยกคุณลักษณะเวกเตอร์ย่อหน้านั้นง่ายมากและใน python มันจะเป็น:

class LabeledLineSentence(object):
    def __init__(self, filename):
        self.filename = filename

    def __iter__(self):
        for uid, line in enumerate(open(self.filename)):
            yield LabeledSentence(words=line.split(), labels=['TXT_%s' % uid])

sentences = LabeledLineSentence('your_text.txt')

model = Doc2Vec(alpha=0.025, min_alpha=0.025, size=50, window=5, min_count=5, dm=1, workers=8, sample=1e-5)
model.build_vocab(sentences)

for epoch in range(epochs):
    try:
        model.train(sentences)
    except (KeyboardInterrupt, SystemExit):
        break

ขอบคุณสำหรับการตอบกลับ ฉันจะพิจารณาสิ่งเหล่านั้น คุณมีคำแนะนำเกี่ยวกับปัญหาเฉพาะในคำถามของฉันหรือไม่ - ฉันได้ทำการปรับปรุงแล้ว
wordSmith

ฉันไม่คิดว่ากระบวนการที่คุณอธิบายไว้จะให้ผลลัพธ์ใด ๆ คุณจะฝึก LSTM กับอะไร? ฉันไม่แน่ใจว่าฉันเข้าใจว่าเหตุใดจึงต้องใช้ LSTM ในกรณีนี้เพื่อเรียนรู้คุณลักษณะที่ไม่มีผู้ดูแลสำหรับประโยคทั้งหมด คุณมีวรรณกรรมที่เกี่ยวข้องกับวิธีการของคุณฉันสามารถช่วยคุณได้อย่างไร นี้อาจจะเป็นที่สนใจของคุณเช่นกันarxiv.org/abs/1306.3584
Yannis Assael

ฉันจะฝึกอบรม lstm โดยใช้ชุดข้อมูลของข้อความที่ผ่านมาและคลาสของพวกเขา ฉันไม่ได้ตั้งใจที่จะใช้การเรียนรู้แบบไม่มีผู้ดูแล ฉันต้องการฝึกด้วยตัวเอง แต่ไม่รู้วิธีการ นี่คือการใช้งาน lstm และตัวจําแนกโดยไม่มีห้องสมุดการเรียนรู้เครื่องซึ่งฉันรู้ว่าการทำงาน: pastebin.com/63Cqrnef the lstm มีฟังก์ชั่นของ deepActivate ที่เปิดใช้งาน lstm แล้วตัวจําแนกตามที่ฉันกล่าวไว้ใน quesiton นี่คือสิ่งที่ฉันพยายามนำมาใช้: deeplearning.net/tutorial/lstm.html
wordSmith

แต่เมื่อฉันพยายามเปิดใช้งานพวกเขาทั้งสองเป็นเครือข่ายเดียวฉันไม่ได้กำหนดจากเลเยอร์เอาต์พุตแต่ละอัน เพิ่มเติมเกี่ยวกับที่นี่: stats.stackexchange.com/q/159922/81435
wordSmith

1
ขอบคุณมาก! คุณให้ความช่วยเหลือมากกว่าที่จำเป็น ขอบคุณสำหรับการก้าวไปข้างหน้า
wordSmith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.