私は単語表現の埋め込みを研究しています。多くのdnnライブラリでは、埋め込みレイヤーをサポートしています。これは本当に素敵なチュートリアルです。埋め込みレイヤの初期値は何ですか?
Word Embeddings: Encoding Lexical Semantics
しかし、私はまだ埋め込み値を計算する方法がわからないです。以下の例では、訓練の前にも何らかの値を出力します。それはいくつかのランダムな重みを使用していますか? Embedding(2, 5)
の目的を実現していますが、最初の計算が不明です。そして、埋め込みの重みをどのように学ぶかについてはわかりません。
word_to_ix = {"hello": 0, "world": 1}
embeds = nn.Embedding(2, 5) # 2 words in vocab, 5 dimensional embeddings
lookup_tensor = torch.LongTensor([word_to_ix["hello"]])
hello_embed = embeds(autograd.Variable(lookup_tensor))
print(hello_embed)
--------
Variable containing:
-2.9718 1.7070 -0.4305 -2.2820 0.5237
[torch.FloatTensor of size 1x5]
私は確信しています。まず、上のEmbedding(2, 5)
は、形状が(2, 5)
の行列です。
Embedding(2, 5) =
[[0.1,-0.2,0.3,0.4,0.1],
[-0.2,0.1,0.8,0.2,0.3]] # initiated by some function, like random normal distribution
その後、hello
は[1, 0]
です。次にhello
表現は[1, 0].dot(Embedding(2, 5)) = [0.1,-0.2,0.3,0.4,0.1]
によって計算されます。これは実際に埋め込みの最初の行です。私は理解していますか?
更新
私は正確にその値を正規分布を使用している埋め込みコードを発見しました。はい、それは単なるデフォルト値であり、埋め込みレイヤーに任意のウェイトを設定することができます。 https://github.com/chainer/chainer/blob/adba7b846d018b9dc7d19d52147ef53f5e555dc8/chainer/links/connection/embed_id.py#L58
また、一様分布も同じです。 – Mehdi