TL;DR: 双方向 RNN は単純なテキスト分類に役立ちますか? パディングは悪ですか?
最近の仕事では、同じタスク、つまりテキスト分類のために LSTM モデルと BLSTM モデルを作成しました。LSTM モデルはかなり良い仕事をしましたが、BLSTM を試してみて、精度をさらに押し上げることができるかどうかを確認することにしました。最終的に、BLSTM は収束が非常に遅く、驚くべきことに、50% の確率でドロップアウトを適用したにもかかわらず、過適合であることがわかりました。
実装では、より高速なトレーニングを期待して、LSTM と BLSTM の両方に unrolled RNN を使用しました。要件を満たすために、入力テキストを手動で固定長にパディングしました。
「私は朝遅く寝て、Nebuchadnezzar とのインタビューを逃した」という文があるとします。この文は、事前にトレーニングされた単語埋め込みのインデックスの配列に変換されるときに、末尾に 0 が埋め込まれます。[21, 43, 25, 64, 43, 25, 6, 234, 23, 0, 0, 29, 0, 0, 0, ..., 0] のようになります。「th」(「the」である必要があります) はタイプミスであり、「Nebuchadnezzar」という名前はあまりにもまれであるため、両方とも語彙に存在しないため、特別な完全に対応する 0 に置き換えます。ゼロ ワード ベクトル。
ここに私の反省があります:
一部の人々は、コーパスをGloVeまたはWord2Vecモデルに供給する前に、未知の単語を「< unk >」のような特別な単語に変更することを好みます。トレーニングの前に、最初に語彙を構築し、(最小カウント設定に従って) 低頻度の単語を「< unk >」に変更する必要があるということですか? RNN をトレーニングするときに、不明な単語を 0 に変更したり、単に削除したりするよりも優れていますか?
私の知る限り、LSTM または BLSTM ネットワークに供給される末尾の 0 は、出力を混乱させます。外部からの新しい情報はありませんが、セルの状態は後続のタイム ステップごとに更新されるため、最終的なセルの出力は、後続の長い 0 によって大きな影響を受けます。そして、私の考えでは、BLSTM は逆の順序でテキストを処理するため、さらに影響を受けるでしょう。つまり、[0, 0, 0, ..., 0, 321, 231] のようなものです。ゲートを 1.0 に忘れて、最初にメモリを育成します。多くの人がパディングを使用しているのを見ますが、BLSTM の場合、テキストが非常に長くパディングされると災害が発生しませんか?
これらの問題について何か考えはありますか?:-o