Kerasの埋め込みレイヤーを適切に使用するには?


7

seq2seqの目的でKerasの埋め込み層の適切な使用法を少し混乱しています(KerasでTensorFlow se2seq機械翻訳チュートリアルを再構築したいと思います)。私の質問は次のとおりです。

埋め込みレイヤーが文の単語値を固定次元長表現に変換することを理解しています。しかし、埋め込みレイヤーの2つの異なる使用法を観察します。1つは(Keras ブログのこのチュートリアルのように)、weightsパラメーターを介して外部の事前トレーニング済みのword2vecベクトルを利用します。

from keras.layers import Embedding

embedding_layer = Embedding(len(word_index) + 1,
  EMBEDDING_DIM,
  weights=[embedding_matrix],
  input_length=MAX_SEQUENCE_LENGTH,
  trainable=False)`

他のケースでは、そのような外部出力はありませんが、ユーザーは、埋め込みベクトルに進んで表現ベクトルを決定します。望ましい結果に関するこれらのアプローチの実際の違いは何ですか?たぶん内部のみのソリューションは意味論的表現ではありませんか?行がすでに固定長である外部マトリックスに埋め込み層を適用するポイントは何ですか?

さらに、trainable埋め込みレイヤーのパラメーターの目的/効果は何ですか?これをTrueに設定すると、Embeddingレイヤーがインポートされたword2vecの重みを実際のトレーニング例を考慮に入れるように微調整できると思いますか?

さらに、「メタ文字」を適切にエンコードするように埋め込みレイヤーに指示するにはどうすればよいですか?mask_zeroパラメータをTrueに設定すると、パディングゼロを組み込むことができますが、UNK(不明)、EOS(文の終わり)はどうなりますか?(ちなみに、文ベースの入力で文の終わりに明示的に署名するポイントが何であるか理解できません...)

そして最後に、トレーニングセットで表されていない単語の翻訳をモデルがどのように予測できるでしょうか。語彙で「最も近い」ものと近似しようとしていますか?

回答:


4

あなたはいくつかの非常に良い点を持ち出しました。このすべてを見ていきましょう。

単語の埋め込みは、単語の数学的表現です。 プレーンな入力としてテキストを扱うことができないので、これは必要です。

これらの単語の埋め込みを取得するには、それらを計算する方法にさまざまな方法、方法、設定があります。cbow、スキップグラムなど。

そこには、さまざまな事前学習済みの単語埋め込みがあります。

これは最もよく知られているものの抜粋です。ご覧のように、彼らは異なるデータセットを使用しました-したがって、それぞれ異なる単語語彙と単語埋め込みです。

望ましい結果に関するこれらのアプローチの実際の違いは何ですか?たぶん内部のみのソリューションは意味論的表現ではありませんか?行がすでに固定長である外部マトリックスに埋め込み層を適用するポイントは何ですか?

Kerasは素晴らしいツールボックスであり、埋め込みレイヤーは、物事をかなり高速に稼働させるための非常に優れた可能性です。テキストをワンホット/カウントマトリックスに変換し、それを単語埋め込みレイヤーへの入力として使用すれば、設定は完了です。

一方、事前トレーニング済みの単語ベクトルを使用する場合は、各単語をベクトルに変換し、それをニューラルネットワークの入力として使用します。このアプローチは、機能エンジニアリングに関して、より柔軟になります。

上記のように、事前訓練された単語ベクトルには、ほとんどの場合、一般的なテキストデータセットが与えられました。あなたは、人々が異なる書き方や振る舞いをするある種の特別な種類のデータ(例えばツイート)を持っている点にぶつかることがあります。したがって、自分の埋め込みを自分のデータセットでトレーニングすることを検討するかもしれません-結局のところ、それはタスク/問題と、調整しているメトリックに依存します。

さらに、埋め込みレイヤーのトレーニング可能なパラメーターの目的/効果は何ですか?

正しく言ったように、使用するデータセットで埋め込みの重みを再トレーニングすることです。

文ベースの入力で文の終わりに明示的に署名するポイントが何であるか理解できません

NLPで最も重要なことの1つは、機能エンジニアリングです。それはあなたが学校に座って言語を学ぶのと同じです、考慮すべきこと、語彙、それは文法とルールです。人間としての言語の理解を容易にするもの。ここでも同じことが当てはまります。あなたはそれを機能エンジニアリングの一部として見ることができます、それはすべてより大きな絵に要約されます。

そして最後に、トレーニングセットで表されていない単語の翻訳をモデルがどのように予測できるでしょうか。

見つからなかった単語を<UNK>トークン(未知の単語)に変換して、そのグループを表します。ただし<UNK>、トレーニングされた単語の埋め込みにトークンを含める必要があります。または、未知の単語についてその場で単語ベクトルを計算するfasttextバイナリファイルを使用することもできます。


1
あなたの最後の提案に関して、別のオプションは、入力として一連のn-gramを取るRNNを使用して単語の埋め込みを学習することです。このタイプのモデルは、語源の表現(語根、接辞)を効果的に学習し、語彙外の単語を許容します。この論文をチェックアウト:cc.gatech.edu/~ypinter3/papers/...
デヴィッド・マルクス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.