2017-09-10 11 views
0

自然言語処理(NLP)タスクでは、単語の埋め込みとしてword2vecベクトルを使用することがよくあります。私はまだword2vecモデルとlstmモデルの統合方法を理解していませんか?word2vecモデルとlstmモデルの統合方法は?

長い短期(LSTM)ネットワークを使用した感情予測など、NLPタスクをモデリングするときに、このような未知語をどのように扱うべきですか?

答えて

1

ニューラルネットワークの入力としてテキストデータを使用するには、数字に変換する必要があります。word2vecは、ワンホットエンコードの大きいベクターを使用する代わりに、簡単に言います。

しかし、それを使用できるようにするには、あなたの埋め込み行列(生成されたword2vec)にマップされる既知の単語のセットである辞書も必要です。その行列は、辞書のサイズと埋め込みのサイズ(あなたの特徴ベクトルのサイズ)を持っています。

この辞書は、埋め込みマトリックスにもエントリがある特別なトークン(例:<UNK>)で未知語を処理します。

編集:追加例

これはあなたの入力テキストであると言うことができます:The quick brown fox jumps over the lazy dog

そして、これはあなたの辞書(サイズ8)である:

<EOF> 0 
<UNK> 1 
the 2 
fox 3 
jumps 4 
over 5 
lazy 6 
dog 7 

埋め込みと埋め込み行列サイズ2:

0 | -0.88930951349 -1.62185932033 
1 | -0.11004085279 0.552127884563 
2 | 0.689740990506 0.834548005211 
3 | -0.7228834693 0.633890390277 
4 | -1.47636106953 -0.20830548073 
5 | 1.08289425079 0.211504860598 
6 | -0.626065160814 0.505306007423 
7 | 1.91239085331 -0.102223754095 
brownが辞書にないとして、それらがあることを

[2, 1, 1, 3, 4, 5, 2, 6, 7]

は予告:10

次に、あなたが辞書にインデックスを持つすべての単語を置き換え、前処理への入力が必要になります、結果はこのようになります。知らない言葉。

最後にネットワークで使用するには、インデックスを埋め込みに置き換える必要があります。

[[0.689740990506, 0.834548005211], [-0.11004085279, 0.552127884563], 
[-0.11004085279, 0.552127884563], [-0.7228834693, 0.633890390277], 
[-1.47636106953, -0.20830548073], [1.08289425079, 0.211504860598], 
[0.689740990506, 0.834548005211], [-0.626065160814, 0.505306007423], 
[1.91239085331, -0.102223754095]] 
+0

しかし、lstmと彼のゲートとアクティベーション機能がどのように考慮されていますか?あなたが言ったすべてのものは、最初の層で起こった?? – dan

+0

私はChristoper Olahのブログを読むことをお勧めします。彼はlstms http://colah.github.io/posts/2015-08-Understanding-LSTMs/を含むニューラルネットワークの深い説明を本当によくしています。 –

+0

あなたは、ニューラルネットワーク層を、目的関数にもっと適した、別の表現へのベクトルの変換と考えることができます。ネットワークが非常に深い場合は、ネットワークの大部分が特徴抽出を行い、最後の部分だけが実際の目的(分類、回帰など)を行います。 'word2vec'は、ネットワークが同じ効果を達成するために必要なトレーニング/容量の量を減らすために、フィーチャーエンジニアリングの一部をあらかじめ行うだけです。 –

関連する問題