ディープネットワークのLSTMレイヤーをトレーニングする方法


13

テキストを分類するために、lstmおよびフィードフォワードネットワークを使用しています。

テキストをワンホットベクトルに変換し、それぞれをlstmにフィードして、単一の表現として要約できるようにします。次に、他のネットワークにフィードします。

しかし、LSTMをトレーニングするにはどうすればよいですか?テキストを順番に分類したいだけです。トレーニングせずにフィードする必要がありますか?分類子の入力レイヤーにフィードできる単一のアイテムとしてパッセージを表したいだけです。

これに関するアドバイスをいただければ幸いです!

更新:

lstmと分類子があります。lstmのすべての出力を取得し、それらを平均プールしてから、その平均値を分類器に送ります。

私の問題は、lstmまたは分類子をトレーニングする方法がわからないことです。入力がlstmに対して何であり、分類器の出力がその入力に対して何であるかを知っています。これらは順番にアクティブ化される2つの独立したネットワークであるため、lstmの理想的な出力が何であるかを知る必要があります。これは分類子の入力にもなります。これを行う方法はありますか?

回答:


9

LSTMから始めるのに最適な場所は、A。Karpathy http://karpathy.github.io/2015/05/21/rnn-effectiveness/のブログ投稿です。Torch7を使用している場合(強くお勧めします)、ソースコードはgithub https://github.com/karpathy/char-rnnで入手できます

また、モデルを少し変更してみます。多対1のアプローチを使用して、ルックアップテーブルから単語を入力し、各シーケンスの最後に特別な単語を追加します。これにより、「シーケンスの終わり」記号を入力したときにのみ分類が読み取られます。出力し、トレーニング基準に基づいてエラーを計算します。この方法では、教師付きのコンテキストで直接トレーニングします。

一方、より簡単なアプローチは、paragraph2vec(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は、私は私のquesitonで述べたようにLSTMして、分類器を活性化させるdeepActivateする機能を有しています。私が実装しようとしているもののようにここでの何か:deeplearning.net/tutorial/lstm.html
言葉を巧みに操る

しかし、両方を1つのネットワークとしてアクティブにしようとすると、各出力レイヤーから未定義になりました。詳細はこちら:stats.stackexchange.com/q/159922/81435
wordSmith

1
どうもありがとうございました!必要以上に多くのヘルプを提供しました。以上に行ってくれてありがとう。
wordSmith
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.