Як тренувати LSTM шар глибокої мережі


13

Для класифікації тексту я використовую lstm та мережу перекладу каналів.

Я перетворюю текст в гарячі вектори і подаю кожен в lstm, щоб я міг його узагальнити як єдине подання. Потім я подаю його в іншу мережу.

Але як я треную lstm? Я просто хочу, щоб текст класифікував послідовність - чи слід подавати його без тренувань? Я просто хочу представити уривок як окремий елемент, який я можу подати у вхідний шар класифікатора.

Я дуже вдячний за будь-яку пораду з цього приводу!

Оновлення:

Тож у мене є lstm і класифікатор. Я беру всі результати lstm та середнього об'єднання їх, а потім подаю цей середній показник у класифікатор.

Моє питання полягає в тому, що я не знаю, як тренувати lstm або класифікатор. Я знаю, яким повинен бути вхід для lstm та яким повинен бути вихід класифікатора для цього вводу. Оскільки це дві окремі мережі, які просто активізуються послідовно, мені потрібно знати і не знати, яким повинен бути ідеальний вихід для lstm, який би також був входом для класифікатора. Чи є спосіб це зробити?

Відповіді:


10

Найкраще місце для початку з LSTM - це повідомлення в блозі А. Карпатії 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 .
Янніс Ассаель

Я буду тренувати lstm на основі набору даних про минулі уривки тексту та їх класи. Я не збираюся використовувати навчання без нагляду. Я хочу вручну це тренувати, але не знаю як. Ось моя реалізація lstm та класифікатора без бібліотеки машинного навчання, яка, як я знаю, працює: pastebin.com/63Cqrnef lstm має функцію deepActivate, яка активує lstm, а потім класифікатор, як я вже згадував у своєму питанні. Ось щось на кшталт того, що я намагаюся здійснити: deeplearning.net/tutorial/lstm.html
wordSmith

але коли я спробував активувати їх як одну мережу, я не визначив кожного з вихідних шарів. Більше про це тут: stats.stackexchange.com/q/159922/81435
wordSmith

1
Велике спасибі! Ви надали набагато більше допомоги, ніж вимагали. Дякуємо, що перейшли вище та далі.
wordSmith
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.